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