diff --git chrome/browser/download/download_target_determiner.cc chrome/browser/download/download_target_determiner.cc
index 1b5b71193d02..05dad7a969d5 100644
--- chrome/browser/download/download_target_determiner.cc
+++ chrome/browser/download/download_target_determiner.cc
@@ -657,7 +657,7 @@ void IsHandledBySafePlugin(int render_process_id,
   content::PluginService* plugin_service =
       content::PluginService::GetInstance();
   bool plugin_found = plugin_service->GetPluginInfo(
-      render_process_id, routing_id, url, url::Origin(), mime_type, false,
+      render_process_id, routing_id, url, true, url::Origin(), mime_type, false,
       &is_stale, &plugin_info, &actual_mime_type);
   if (is_stale && stale_plugin_action == RETRY_IF_STALE_PLUGIN_LIST) {
     // The GetPlugins call causes the plugin list to be refreshed. Once that's
diff --git chrome/browser/plugins/chrome_plugin_service_filter.cc chrome/browser/plugins/chrome_plugin_service_filter.cc
index e46003ea5e4a..503876cf7725 100644
--- chrome/browser/plugins/chrome_plugin_service_filter.cc
+++ chrome/browser/plugins/chrome_plugin_service_filter.cc
@@ -163,6 +163,7 @@ bool ChromePluginServiceFilter::IsPluginAvailable(
     int render_process_id,
     int render_frame_id,
     const GURL& plugin_content_url,
+    bool is_main_frame,
     const url::Origin& main_frame_origin,
     content::WebPluginInfo* plugin) {
   base::AutoLock auto_lock(lock_);
diff --git chrome/browser/plugins/chrome_plugin_service_filter.h chrome/browser/plugins/chrome_plugin_service_filter.h
index 937d3d5bc84f..ac327392dcf3 100644
--- chrome/browser/plugins/chrome_plugin_service_filter.h
+++ chrome/browser/plugins/chrome_plugin_service_filter.h
@@ -64,6 +64,7 @@ class ChromePluginServiceFilter : public content::PluginServiceFilter,
   bool IsPluginAvailable(int render_process_id,
                          int render_frame_id,
                          const GURL& plugin_content_url,
+                         bool is_main_frame,
                          const url::Origin& main_frame_origin,
                          content::WebPluginInfo* plugin) override;
 
diff --git chrome/browser/plugins/pdf_iframe_navigation_throttle.cc chrome/browser/plugins/pdf_iframe_navigation_throttle.cc
index 5b780f8bf34c..a75d0da983b4 100644
--- chrome/browser/plugins/pdf_iframe_navigation_throttle.cc
+++ chrome/browser/plugins/pdf_iframe_navigation_throttle.cc
@@ -65,7 +65,7 @@ bool IsPDFPluginEnabled(content::NavigationHandle* navigation_handle,
 
   content::WebPluginInfo plugin_info;
   return content::PluginService::GetInstance()->GetPluginInfo(
-      process_id, routing_id, navigation_handle->GetURL(),
+      process_id, routing_id, navigation_handle->GetURL(), false,
       web_contents->GetMainFrame()->GetLastCommittedOrigin(), kPDFMimeType,
       false /* allow_wildcard */, is_stale, &plugin_info,
       nullptr /* actual_mime_type */);
diff --git chrome/browser/ui/views/frame/browser_root_view.cc chrome/browser/ui/views/frame/browser_root_view.cc
index 2277ac1008af..db0c90677538 100644
--- chrome/browser/ui/views/frame/browser_root_view.cc
+++ chrome/browser/ui/views/frame/browser_root_view.cc
@@ -76,7 +76,7 @@ void OnFindURLMimeType(const GURL& url,
 #if BUILDFLAG(ENABLE_PLUGINS)
   content::WebPluginInfo plugin;
   result = result || content::PluginService::GetInstance()->GetPluginInfo(
-                         process_id, routing_id, url, url::Origin(), mime_type,
+                         process_id, routing_id, url, true, url::Origin(), mime_type,
                          false, nullptr, &plugin, nullptr);
 #endif
 
diff --git content/browser/devtools/devtools_http_handler.cc content/browser/devtools/devtools_http_handler.cc
index 4956b35c1278..2f9c0621f53e 100644
--- content/browser/devtools/devtools_http_handler.cc
+++ content/browser/devtools/devtools_http_handler.cc
@@ -571,7 +571,7 @@ void DevToolsHttpHandler::OnJsonRequest(
     version.SetString("Protocol-Version",
                       DevToolsAgentHost::GetProtocolVersion());
     version.SetString("WebKit-Version", GetWebKitVersion());
-    version.SetString("Browser", GetContentClient()->browser()->GetProduct());
+    version.SetString("Browser", GetContentClient()->browser()->GetChromeProduct());
     version.SetString("User-Agent",
                       GetContentClient()->browser()->GetUserAgent());
     version.SetString("V8-Version", V8_VERSION_STRING);
diff --git content/browser/frame_host/render_frame_message_filter.cc content/browser/frame_host/render_frame_message_filter.cc
index f6511e22ab05..0ccf811d7b22 100644
--- content/browser/frame_host/render_frame_message_filter.cc
+++ content/browser/frame_host/render_frame_message_filter.cc
@@ -298,6 +298,7 @@ void RenderFrameMessageFilter::OnCreateChildFrame(
 void RenderFrameMessageFilter::OnGetPluginInfo(
     int render_frame_id,
     const GURL& url,
+    bool is_main_frame,
     const url::Origin& main_frame_origin,
     const std::string& mime_type,
     bool* found,
@@ -305,8 +306,9 @@ void RenderFrameMessageFilter::OnGetPluginInfo(
     std::string* actual_mime_type) {
   bool allow_wildcard = true;
   *found = plugin_service_->GetPluginInfo(
-      render_process_id_, render_frame_id, url, main_frame_origin, mime_type,
-      allow_wildcard, nullptr, info, actual_mime_type);
+      render_process_id_, render_frame_id, url, is_main_frame,
+      main_frame_origin, mime_type, allow_wildcard, nullptr, info,
+      actual_mime_type);
 }
 
 void RenderFrameMessageFilter::OnOpenChannelToPepperPlugin(
diff --git content/browser/frame_host/render_frame_message_filter.h content/browser/frame_host/render_frame_message_filter.h
index 451bfecfa4b1..b7cddcbaca66 100644
--- content/browser/frame_host/render_frame_message_filter.h
+++ content/browser/frame_host/render_frame_message_filter.h
@@ -83,6 +83,7 @@ class CONTENT_EXPORT RenderFrameMessageFilter : public BrowserMessageFilter {
 #if BUILDFLAG(ENABLE_PLUGINS)
   void OnGetPluginInfo(int render_frame_id,
                        const GURL& url,
+                       bool is_main_frame,
                        const url::Origin& main_frame_origin,
                        const std::string& mime_type,
                        bool* found,
diff --git content/browser/loader/navigation_url_loader_impl.cc content/browser/loader/navigation_url_loader_impl.cc
index 2be5d4400de9..14ece86df0e3 100644
--- content/browser/loader/navigation_url_loader_impl.cc
+++ content/browser/loader/navigation_url_loader_impl.cc
@@ -722,6 +722,13 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
             resource_request_->has_user_gesture,
             resource_request_->request_initiator, &loader_factory);
 
+        if (!handled) {
+          handled = GetContentClient()->browser()->HandleExternalProtocol(
+              web_contents_getter_, frame_tree_node_id_,
+              navigation_ui_data_.get(), *resource_request_,
+              &loader_factory);
+        }
+
         if (loader_factory) {
           factory =
               base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
@@ -932,7 +939,7 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
         frame_tree_node->current_frame_host()->GetProcess()->GetID();
     int routing_id = frame_tree_node->current_frame_host()->GetRoutingID();
     bool has_plugin = PluginService::GetInstance()->GetPluginInfo(
-        render_process_id, routing_id, resource_request_->url, url::Origin(),
+        render_process_id, routing_id, resource_request_->url, true, url::Origin(),
         head->mime_type, false /* allow_wildcard */, &stale, &plugin, nullptr);
 
     if (stale) {
diff --git content/browser/plugin_service_impl.cc content/browser/plugin_service_impl.cc
index 8f0f145f9760..49f0698c89f5 100644
--- content/browser/plugin_service_impl.cc
+++ content/browser/plugin_service_impl.cc
@@ -340,6 +340,7 @@ bool PluginServiceImpl::GetPluginInfoArray(
 bool PluginServiceImpl::GetPluginInfo(int render_process_id,
                                       int render_frame_id,
                                       const GURL& url,
+                                      bool is_main_frame,
                                       const url::Origin& main_frame_origin,
                                       const std::string& mime_type,
                                       bool allow_wildcard,
@@ -357,7 +358,8 @@ bool PluginServiceImpl::GetPluginInfo(int render_process_id,
   for (size_t i = 0; i < plugins.size(); ++i) {
     if (!filter_ ||
         filter_->IsPluginAvailable(render_process_id, render_frame_id, url,
-                                   main_frame_origin, &plugins[i])) {
+                                   is_main_frame, main_frame_origin,
+                                   &plugins[i])) {
       *info = plugins[i];
       if (actual_mime_type)
         *actual_mime_type = mime_types[i];
diff --git content/browser/plugin_service_impl.h content/browser/plugin_service_impl.h
index 79ac3b705511..71d73d3da158 100644
--- content/browser/plugin_service_impl.h
+++ content/browser/plugin_service_impl.h
@@ -54,6 +54,7 @@ class CONTENT_EXPORT PluginServiceImpl : public PluginService {
   bool GetPluginInfo(int render_process_id,
                      int render_frame_id,
                      const GURL& url,
+                     bool is_main_frame,
                      const url::Origin& main_frame_origin,
                      const std::string& mime_type,
                      bool allow_wildcard,
diff --git content/browser/renderer_host/plugin_registry_impl.cc content/browser/renderer_host/plugin_registry_impl.cc
index a6d6188fb139..7ac57de6fd55 100644
--- content/browser/renderer_host/plugin_registry_impl.cc
+++ content/browser/renderer_host/plugin_registry_impl.cc
@@ -29,6 +29,7 @@ void PluginRegistryImpl::Bind(
 }
 
 void PluginRegistryImpl::GetPlugins(bool refresh,
+                                    bool is_main_frame,
                                     const url::Origin& main_frame_origin,
                                     GetPluginsCallback callback) {
   auto* plugin_service = PluginServiceImpl::GetInstance();
@@ -50,10 +51,11 @@ void PluginRegistryImpl::GetPlugins(bool refresh,
 
   plugin_service->GetPlugins(base::BindOnce(
       &PluginRegistryImpl::GetPluginsComplete, weak_factory_.GetWeakPtr(),
-      main_frame_origin, std::move(callback)));
+      is_main_frame, main_frame_origin, std::move(callback)));
 }
 
 void PluginRegistryImpl::GetPluginsComplete(
+    bool is_main_frame,
     const url::Origin& main_frame_origin,
     GetPluginsCallback callback,
     const std::vector<WebPluginInfo>& all_plugins) {
@@ -76,6 +78,7 @@ void PluginRegistryImpl::GetPluginsComplete(
     // TODO(crbug.com/621724): Pass an url::Origin instead of a GURL.
     if (!filter || filter->IsPluginAvailable(render_process_id_, routing_id,
                                              main_frame_origin.GetURL(),
+                                             is_main_frame,
                                              main_frame_origin, &plugin)) {
       auto plugin_blink = blink::mojom::PluginInfo::New();
       plugin_blink->name = plugin.name;
diff --git content/browser/renderer_host/plugin_registry_impl.h content/browser/renderer_host/plugin_registry_impl.h
index 632ae86c6fd6..55b749ec1242 100644
--- content/browser/renderer_host/plugin_registry_impl.h
+++ content/browser/renderer_host/plugin_registry_impl.h
@@ -24,11 +24,13 @@ class PluginRegistryImpl : public blink::mojom::PluginRegistry {
 
   // blink::mojom::PluginRegistry
   void GetPlugins(bool refresh,
+                  bool is_main_frame,
                   const url::Origin& main_frame_origin,
                   GetPluginsCallback callback) override;
 
  private:
-  void GetPluginsComplete(const url::Origin& main_frame_origin,
+  void GetPluginsComplete(bool is_main_frame,
+                          const url::Origin& main_frame_origin,
                           GetPluginsCallback callback,
                           const std::vector<WebPluginInfo>& all_plugins);
 
diff --git content/common/frame_messages.h content/common/frame_messages.h
index 118765f9323f..614830e4f406 100644
--- content/common/frame_messages.h
+++ content/common/frame_messages.h
@@ -687,9 +687,10 @@ IPC_MESSAGE_ROUTED1(FrameHostMsg_PepperStopsPlayback,
 // type. If there is no matching plugin, |found| is false.
 // |actual_mime_type| is the actual mime type supported by the
 // found plugin.
-IPC_SYNC_MESSAGE_CONTROL4_3(FrameHostMsg_GetPluginInfo,
+IPC_SYNC_MESSAGE_CONTROL5_3(FrameHostMsg_GetPluginInfo,
                             int /* render_frame_id */,
                             GURL /* url */,
+                            bool /* is_main_frame */,
                             url::Origin /* main_frame_origin */,
                             std::string /* mime_type */,
                             bool /* found */,
diff --git content/public/browser/content_browser_client.cc content/public/browser/content_browser_client.cc
index 89f33b33f8c8..30512bab9b12 100644
--- content/public/browser/content_browser_client.cc
+++ content/public/browser/content_browser_client.cc
@@ -9,7 +9,7 @@
 // declarations instead of including more headers. If that is infeasible, adjust
 // the limit. For more info, see
 // https://chromium.googlesource.com/chromium/src/+/HEAD/docs/wmax_tokens.md
-#pragma clang max_tokens_here 820000
+// #pragma clang max_tokens_here 820000
 
 #include <utility>
 
diff --git content/public/browser/content_browser_client.h content/public/browser/content_browser_client.h
index 26cd6d1afcb8..5ac45c794daf 100644
--- content/public/browser/content_browser_client.h
+++ content/public/browser/content_browser_client.h
@@ -26,6 +26,7 @@
 #include "content/common/content_export.h"
 #include "content/public/browser/certificate_request_result_type.h"
 #include "content/public/browser/generated_code_cache_settings.h"
+#include "content/public/browser/web_contents.h"
 #include "content/public/common/page_visibility_state.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/common/window_container_type.mojom-forward.h"
@@ -1631,6 +1632,14 @@ class CONTENT_EXPORT ContentBrowserClient {
       const base::Optional<url::Origin>& initiating_origin,
       mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory);
 
+  // Same as above, but exposing the whole ResourceRequest object.
+  virtual bool HandleExternalProtocol(
+      WebContents::Getter web_contents_getter,
+      int frame_tree_node_id,
+      NavigationUIData* navigation_data,
+      const network::ResourceRequest& request,
+      mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) { return false; }
+
   // Creates an OverlayWindow to be used for Picture-in-Picture. This window
   // will house the content shown when in Picture-in-Picture mode. This will
   // return a new OverlayWindow.
@@ -1699,6 +1708,10 @@ class CONTENT_EXPORT ContentBrowserClient {
   // Used as part of the user agent string.
   virtual std::string GetProduct();
 
+  // Returns the Chrome-specific product string. This is used for compatibility
+  // purposes with external tools like Selenium.
+  virtual std::string GetChromeProduct() { return GetProduct(); }
+
   // Returns the user agent.  Content may cache this value.
   virtual std::string GetUserAgent();
 
diff --git content/public/browser/plugin_service.h content/public/browser/plugin_service.h
index dcfd3ff37186..4e822ee5f750 100644
--- content/public/browser/plugin_service.h
+++ content/public/browser/plugin_service.h
@@ -74,6 +74,7 @@ class CONTENT_EXPORT PluginService {
   virtual bool GetPluginInfo(int render_process_id,
                              int render_frame_id,
                              const GURL& url,
+                             bool is_main_frame,
                              const url::Origin& main_frame_origin,
                              const std::string& mime_type,
                              bool allow_wildcard,
diff --git content/public/browser/plugin_service_filter.h content/public/browser/plugin_service_filter.h
index 98c59005599e..69752184745d 100644
--- content/public/browser/plugin_service_filter.h
+++ content/public/browser/plugin_service_filter.h
@@ -32,6 +32,7 @@ class PluginServiceFilter {
   virtual bool IsPluginAvailable(int render_process_id,
                                  int render_frame_id,
                                  const GURL& url,
+                                 bool is_main_frame,
                                  const url::Origin& main_frame_origin,
                                  WebPluginInfo* plugin) = 0;
 
diff --git content/public/renderer/content_renderer_client.h content/public/renderer/content_renderer_client.h
index 764556d80f1b..7267aa6c26f6 100644
--- content/public/renderer/content_renderer_client.h
+++ content/public/renderer/content_renderer_client.h
@@ -81,6 +81,9 @@ class CONTENT_EXPORT ContentRendererClient {
   // binding requests from RenderProcessHost::BindReceiver().
   virtual void ExposeInterfacesToBrowser(mojo::BinderMap* binders) {}
 
+  // Notifies that the RenderThread can now send sync IPC messages.
+  virtual void RenderThreadConnected() {}
+
   // Notifies that a new RenderFrame has been created.
   virtual void RenderFrameCreated(RenderFrame* render_frame) {}
 
@@ -310,6 +313,10 @@ class CONTENT_EXPORT ContentRendererClient {
   // This method may invalidate the frame.
   virtual void RunScriptsAtDocumentIdle(RenderFrame* render_frame) {}
 
+  // Notifies that a DevTools agent has attached or detached.
+  virtual void DevToolsAgentAttached() {}
+  virtual void DevToolsAgentDetached() {}
+
   // Allows subclasses to enable some runtime features before Blink has
   // started.
   virtual void SetRuntimeFeaturesDefaultsBeforeBlinkInitialization() {}
diff --git content/renderer/render_frame_impl.cc content/renderer/render_frame_impl.cc
index 2ab5e79b71cc..51cd9556a884 100644
--- content/renderer/render_frame_impl.cc
+++ content/renderer/render_frame_impl.cc
@@ -3742,7 +3742,8 @@ blink::WebPlugin* RenderFrameImpl::CreatePlugin(
   std::string mime_type;
   bool found = false;
   Send(new FrameHostMsg_GetPluginInfo(
-      routing_id_, params.url, frame_->Top()->GetSecurityOrigin(),
+      routing_id_, params.url, frame_->Parent() == nullptr,
+      frame_->Top()->GetSecurityOrigin(),
       params.mime_type.Utf8(), &found, &info, &mime_type));
   if (!found)
     return nullptr;
diff --git content/renderer/render_thread_impl.cc content/renderer/render_thread_impl.cc
index 76176518dfe4..b7d8dc75a23a 100644
--- content/renderer/render_thread_impl.cc
+++ content/renderer/render_thread_impl.cc
@@ -630,6 +630,8 @@ void RenderThreadImpl::Init() {
       GetContentClient()->renderer()->CreateURLLoaderThrottleProvider(
           URLLoaderThrottleProviderType::kFrame);
 
+  GetContentClient()->renderer()->RenderThreadConnected();
+
   GetAssociatedInterfaceRegistry()->AddInterface(base::BindRepeating(
       &RenderThreadImpl::OnRendererInterfaceReceiver, base::Unretained(this)));
 
diff --git content/renderer/renderer_blink_platform_impl.cc content/renderer/renderer_blink_platform_impl.cc
index 8c641e6e3a6f..d2d1a7c2b6de 100644
--- content/renderer/renderer_blink_platform_impl.cc
+++ content/renderer/renderer_blink_platform_impl.cc
@@ -899,6 +899,15 @@ RendererBlinkPlatformImpl::GetGpuFactories() {
 
 //------------------------------------------------------------------------------
 
+void RendererBlinkPlatformImpl::DevToolsAgentAttached() {
+  GetContentClient()->renderer()->DevToolsAgentAttached();
+}
+void RendererBlinkPlatformImpl::DevToolsAgentDetached() {
+  GetContentClient()->renderer()->DevToolsAgentDetached();
+}
+
+//------------------------------------------------------------------------------
+
 blink::mojom::CodeCacheHost& RendererBlinkPlatformImpl::GetCodeCacheHost() {
   if (!code_cache_host_) {
     code_cache_host_ = mojo::SharedRemote<blink::mojom::CodeCacheHost>(
diff --git content/renderer/renderer_blink_platform_impl.h content/renderer/renderer_blink_platform_impl.h
index 80490f5b8d52..8c07dc87edbb 100644
--- content/renderer/renderer_blink_platform_impl.h
+++ content/renderer/renderer_blink_platform_impl.h
@@ -198,6 +198,9 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
 
   media::GpuVideoAcceleratorFactories* GetGpuFactories() override;
 
+  void DevToolsAgentAttached() override;
+  void DevToolsAgentDetached() override;
+
   // Returns non-null.
   // It is invalid to call this in an incomplete env where
   // RenderThreadImpl::current() returns nullptr (e.g. in some tests).
diff --git content/shell/browser/shell_plugin_service_filter.cc content/shell/browser/shell_plugin_service_filter.cc
index 427132c6920e..4809ddaf21e1 100644
--- content/shell/browser/shell_plugin_service_filter.cc
+++ content/shell/browser/shell_plugin_service_filter.cc
@@ -17,6 +17,7 @@ bool ShellPluginServiceFilter::IsPluginAvailable(
     int render_process_id,
     int render_frame_id,
     const GURL& url,
+    bool is_main_frame,
     const url::Origin& main_frame_origin,
     WebPluginInfo* plugin) {
   return plugin->name == base::ASCIIToUTF16("Blink Test Plugin") ||
diff --git content/shell/browser/shell_plugin_service_filter.h content/shell/browser/shell_plugin_service_filter.h
index 337b4b0653fe..107ab4c9d8a8 100644
--- content/shell/browser/shell_plugin_service_filter.h
+++ content/shell/browser/shell_plugin_service_filter.h
@@ -20,6 +20,7 @@ class ShellPluginServiceFilter : public PluginServiceFilter {
   bool IsPluginAvailable(int render_process_id,
                          int render_frame_id,
                          const GURL& url,
+                         bool is_main_frame,
                          const url::Origin& main_frame_origin,
                          WebPluginInfo* plugin) override;
 
diff --git content/test/fake_plugin_service.cc content/test/fake_plugin_service.cc
index eb280cd21c6d..b499b2536b2d 100644
--- content/test/fake_plugin_service.cc
+++ content/test/fake_plugin_service.cc
@@ -28,6 +28,7 @@ bool FakePluginService::GetPluginInfoArray(
 bool FakePluginService::GetPluginInfo(int render_process_id,
                                       int render_frame_id,
                                       const GURL& url,
+                                      bool is_main_frame,
                                       const url::Origin& main_frame_origin,
                                       const std::string& mime_type,
                                       bool allow_wildcard,
diff --git content/test/fake_plugin_service.h content/test/fake_plugin_service.h
index df49da7cbec0..edf526fff7f8 100644
--- content/test/fake_plugin_service.h
+++ content/test/fake_plugin_service.h
@@ -29,6 +29,7 @@ class FakePluginService : public PluginService {
   bool GetPluginInfo(int render_process_id,
                      int render_frame_id,
                      const GURL& url,
+                     bool is_main_frame,
                      const url::Origin& main_frame_origin,
                      const std::string& mime_type,
                      bool allow_wildcard,
