diff --git third_party/blink/public/web/web_view.h third_party/blink/public/web/web_view.h
index fcba33880932..ef0bf66f8a2b 100644
--- third_party/blink/public/web/web_view.h
+++ third_party/blink/public/web/web_view.h
@@ -354,6 +354,7 @@ class WebView : protected WebWidget {
 
   // Sets whether select popup menus should be rendered by the browser.
   BLINK_EXPORT static void SetUseExternalPopupMenus(bool);
+  virtual void SetUseExternalPopupMenusThisInstance(bool) = 0;
 
   // Hides any popup (suggestions, selects...) that might be showing.
   virtual void HidePopups() = 0;
@@ -384,6 +385,8 @@ class WebView : protected WebWidget {
                                   unsigned inactive_background_color,
                                   unsigned inactive_foreground_color) = 0;
 
+  virtual void SetBaseBackgroundColor(SkColor color) = 0;
+
   // Modal dialog support ------------------------------------------------
 
   // Call these methods before and after running a nested, modal event loop
diff --git third_party/blink/renderer/core/exported/web_view_impl.cc third_party/blink/renderer/core/exported/web_view_impl.cc
index 2acc5921abeb..3e0c07dd6aa3 100644
--- third_party/blink/renderer/core/exported/web_view_impl.cc
+++ third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -241,8 +241,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 {
@@ -337,6 +342,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client,
       enable_fake_page_scale_animation_for_testing_(false),
       fake_page_scale_animation_page_scale_factor_(0),
       fake_page_scale_animation_use_anchor_(false),
+      should_use_external_popup_menus_(g_should_use_external_popup_menus),
       compositor_device_scale_factor_override_(0),
       suppress_next_keypress_event_(false),
       ime_accept_events_(true),
diff --git third_party/blink/renderer/core/exported/web_view_impl.h third_party/blink/renderer/core/exported/web_view_impl.h
index 9055bbe708a8..dc51d1db9921 100644
--- third_party/blink/renderer/core/exported/web_view_impl.h
+++ third_party/blink/renderer/core/exported/web_view_impl.h
@@ -105,7 +105,8 @@ class CORE_EXPORT WebViewImpl final : public WebView,
   static HashSet<WebViewImpl*>& 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;
 
   // WebWidget methods:
   void Close() override;
@@ -247,7 +248,7 @@ class CORE_EXPORT WebViewImpl final : public WebView,
   HitTestResult CoreHitTestResultAt(const WebPoint&);
   void InvalidateRect(const IntRect&);
 
-  void SetBaseBackgroundColor(SkColor);
+  void SetBaseBackgroundColor(SkColor) override;
   void SetBaseBackgroundColorOverride(SkColor);
   void ClearBaseBackgroundColorOverride();
   void SetBackgroundColorOverride(SkColor);
@@ -608,6 +609,8 @@ class CORE_EXPORT WebViewImpl final : public WebView,
   float fake_page_scale_animation_page_scale_factor_;
   bool fake_page_scale_animation_use_anchor_;
 
+  bool should_use_external_popup_menus_;
+
   float compositor_device_scale_factor_override_;
   TransformationMatrix 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 5656f762955e..d3ce4ebaf088 100644
--- third_party/blink/renderer/core/page/chrome_client_impl.cc
+++ third_party/blink/renderer/core/page/chrome_client_impl.cc
@@ -809,7 +809,7 @@ bool ChromeClientImpl::HasOpenedPopup() const {
 PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame,
                                            HTMLSelectElement& select) {
   NotifyPopupOpeningObservers();
-  if (WebViewImpl::UseExternalPopupMenus())
+  if (web_view_->UseExternalPopupMenus())
     return new ExternalPopupMenu(frame, select, *web_view_);
 
   DCHECK(RuntimeEnabledFeatures::PagePopupEnabled());