diff options
Diffstat (limited to 'chromium/content/browser/eye_dropper_chooser_impl.cc')
-rw-r--r-- | chromium/content/browser/eye_dropper_chooser_impl.cc | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/chromium/content/browser/eye_dropper_chooser_impl.cc b/chromium/content/browser/eye_dropper_chooser_impl.cc index b521f8d232f..1fca17b5370 100644 --- a/chromium/content/browser/eye_dropper_chooser_impl.cc +++ b/chromium/content/browser/eye_dropper_chooser_impl.cc @@ -5,7 +5,10 @@ #include "content/browser/eye_dropper_chooser_impl.h" #include "base/callback.h" +#include "content/public/browser/eye_dropper.h" +#include "content/public/browser/eye_dropper_listener.h" #include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_delegate.h" #include "third_party/blink/public/mojom/choosers/color_chooser.mojom.h" namespace content { @@ -23,9 +26,37 @@ EyeDropperChooserImpl::EyeDropperChooserImpl( mojo::PendingReceiver<blink::mojom::EyeDropperChooser> receiver) : FrameServiceBase(render_frame_host, std::move(receiver)) {} +EyeDropperChooserImpl::~EyeDropperChooserImpl() { + if (callback_) + std::move(callback_).Run(/*success=*/false, /*color=*/0); +} + void EyeDropperChooserImpl::Choose(ChooseCallback callback) { - // TODO(crbug.com/992297): add browser side support for eye dropper. - std::move(callback).Run(false, 0); + if (!render_frame_host() || callback_ || eye_dropper_) { + std::move(callback).Run(/*success=*/false, /*color=*/0); + return; + } + + callback_ = std::move(callback); + WebContents* web_contents = + WebContents::FromRenderFrameHost(render_frame_host()); + if (WebContentsDelegate* delegate = web_contents->GetDelegate()) + eye_dropper_ = delegate->OpenEyeDropper(render_frame_host(), this); + + if (!eye_dropper_) { + // Color selection wasn't successful since the eye dropper can't be opened. + ColorSelectionCanceled(); + } +} + +void EyeDropperChooserImpl::ColorSelected(SkColor color) { + eye_dropper_.reset(); + std::move(callback_).Run(/*success=*/true, color); +} + +void EyeDropperChooserImpl::ColorSelectionCanceled() { + eye_dropper_.reset(); + std::move(callback_).Run(/*success=*/false, /*color=*/0); } -} // namespace content
\ No newline at end of file +} // namespace content |