summaryrefslogtreecommitdiff
path: root/chromium/content/browser/eye_dropper_chooser_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/eye_dropper_chooser_impl.cc')
-rw-r--r--chromium/content/browser/eye_dropper_chooser_impl.cc37
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