diff --git third_party/blink/public/web/web_view.h third_party/blink/public/web/web_view.h index 6219eadefa976..ff0c649c46af1 100644 --- third_party/blink/public/web/web_view.h +++ third_party/blink/public/web/web_view.h @@ -345,6 +345,7 @@ class BLINK_EXPORT WebView { // Sets whether select popup menus should be rendered by the browser. static void SetUseExternalPopupMenus(bool); + virtual void SetUseExternalPopupMenusThisInstance(bool) = 0; // Cancels and hides the current popup (datetime, select...) if any. virtual void CancelPagePopup() = 0; diff --git third_party/blink/renderer/core/exported/web_view_impl.cc third_party/blink/renderer/core/exported/web_view_impl.cc index adb1c7ca2fcdf..4cc86141a88bf 100644 --- third_party/blink/renderer/core/exported/web_view_impl.cc +++ third_party/blink/renderer/core/exported/web_view_impl.cc @@ -251,8 +251,13 @@ void WebView::SetUseExternalPopupMenus(bool use_external_popup_menus) { g_should_use_external_popup_menus = use_external_popup_menus; } -bool WebViewImpl::UseExternalPopupMenus() { - return g_should_use_external_popup_menus; +void WebViewImpl::SetUseExternalPopupMenusThisInstance( + bool use_external_popup_menus) { + should_use_external_popup_menus_ = use_external_popup_menus; +} + +bool WebViewImpl::UseExternalPopupMenus() const { + return should_use_external_popup_menus_; } namespace { @@ -584,6 +589,7 @@ WebViewImpl::WebViewImpl( chrome_client_(MakeGarbageCollected(this)), minimum_zoom_level_(PageZoomFactorToZoomLevel(kMinimumPageZoomFactor)), maximum_zoom_level_(PageZoomFactorToZoomLevel(kMaximumPageZoomFactor)), + should_use_external_popup_menus_(g_should_use_external_popup_menus), does_composite_(does_composite), fullscreen_controller_(std::make_unique(this)), page_base_background_color_( diff --git third_party/blink/renderer/core/exported/web_view_impl.h third_party/blink/renderer/core/exported/web_view_impl.h index 5a9992141dbbf..ce030e2b02ff0 100644 --- third_party/blink/renderer/core/exported/web_view_impl.h +++ third_party/blink/renderer/core/exported/web_view_impl.h @@ -139,7 +139,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, static HashSet& AllInstances(); // Returns true if popup menus should be rendered by the browser, false if // they should be rendered by WebKit (which is the default). - static bool UseExternalPopupMenus(); + void SetUseExternalPopupMenusThisInstance(bool) override; + bool UseExternalPopupMenus() const; // Returns whether frames under this WebView are backed by a compositor. bool does_composite() const { return does_composite_; } @@ -861,6 +862,8 @@ class CORE_EXPORT WebViewImpl final : public WebView, float fake_page_scale_animation_page_scale_factor_ = 0.f; bool fake_page_scale_animation_use_anchor_ = false; + bool should_use_external_popup_menus_; + float compositor_device_scale_factor_override_ = 0.f; gfx::Transform device_emulation_transform_; diff --git third_party/blink/renderer/core/page/chrome_client_impl.cc third_party/blink/renderer/core/page/chrome_client_impl.cc index 4d1c8dcd1fca7..f8de0cf7498aa 100644 --- third_party/blink/renderer/core/page/chrome_client_impl.cc +++ third_party/blink/renderer/core/page/chrome_client_impl.cc @@ -928,7 +928,7 @@ PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame, HTMLSelectElement& select) { NotifyPopupOpeningObservers(); - bool use_external_popup_menus = WebViewImpl::UseExternalPopupMenus(); + bool use_external_popup_menus = web_view_->UseExternalPopupMenus(); #if BUILDFLAG(IS_MAC) // There is a bug that is causing popup menus in PWA windows on macOS to // sometimes not appear if using external popup menus. Until that bug is