Migrate ColorChooserPopupUIController to use GC mojo wrappers.

No behavior change. This CL reduces potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: I2aa3940ad452f340d6d50361fb742f9d653e5e84
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145374
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Kouhei Ueno <kouhei@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758310}
diff --git a/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.cc b/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.cc
index f61b77e1..978f551 100644
--- a/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.cc
+++ b/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.cc
@@ -29,6 +29,7 @@
 #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/strings/grit/blink_strings.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
 #include "third_party/blink/renderer/core/html/forms/chooser_resource_loader.h"
@@ -55,7 +56,8 @@
     : ColorChooserUIController(frame, client),
       chrome_client_(chrome_client),
       popup_(nullptr),
-      locale_(Locale::DefaultLocale()) {}
+      locale_(Locale::DefaultLocale()),
+      eye_dropper_chooser_(frame->DomWindow()) {}
 
 ColorChooserPopupUIController::~ColorChooserPopupUIController() {
   DCHECK(!popup_);
@@ -63,6 +65,7 @@
 
 void ColorChooserPopupUIController::Trace(Visitor* visitor) {
   visitor->Trace(chrome_client_);
+  visitor->Trace(eye_dropper_chooser_);
   ColorChooserUIController::Trace(visitor);
 }
 
@@ -236,7 +239,8 @@
 
 void ColorChooserPopupUIController::OpenEyeDropper() {
   frame_->GetBrowserInterfaceBroker().GetInterface(
-      eye_dropper_chooser_.BindNewPipeAndPassReceiver());
+      eye_dropper_chooser_.BindNewPipeAndPassReceiver(
+          frame_->GetTaskRunner(TaskType::kUserInteraction)));
   eye_dropper_chooser_.set_disconnect_handler(WTF::Bind(
       &ColorChooserPopupUIController::EndChooser, WrapWeakPersistent(this)));
   eye_dropper_chooser_->Choose(
diff --git a/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.h b/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.h
index fd20189..ef9365f 100644
--- a/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.h
+++ b/third_party/blink/renderer/core/html/forms/color_chooser_popup_ui_controller.h
@@ -29,6 +29,8 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/html/forms/color_chooser_ui_controller.h"
 #include "third_party/blink/renderer/core/page/page_popup_client.h"
+#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
+#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
 
 namespace blink {
 
@@ -78,7 +80,9 @@
   Member<ChromeClient> chrome_client_;
   PagePopup* popup_;
   Locale& locale_;
-  mojo::Remote<mojom::blink::EyeDropperChooser> eye_dropper_chooser_;
+  HeapMojoRemote<mojom::blink::EyeDropperChooser,
+                 HeapMojoWrapperMode::kWithoutContextObserver>
+      eye_dropper_chooser_;
 };
 
 }  // namespace blink