Index: extensions/browser/extension_web_contents_observer.cc |
diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc |
index 020cc3257be491916530d1676ae9d89e1b23fd30..30fa87347ac74c5ff580b7b1b7ef1604e578fdeb 100644 |
--- a/extensions/browser/extension_web_contents_observer.cc |
+++ b/extensions/browser/extension_web_contents_observer.cc |
@@ -5,6 +5,7 @@ |
#include "extensions/browser/extension_web_contents_observer.h" |
#include "content/public/browser/child_process_security_policy.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/site_instance.h" |
@@ -12,12 +13,35 @@ |
#include "content/public/common/url_constants.h" |
#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_registry.h" |
+#include "extensions/browser/extensions_browser_client.h" |
#include "extensions/browser/mojo/service_registration.h" |
#include "extensions/browser/view_type_utils.h" |
#include "extensions/common/constants.h" |
#include "extensions/common/extension_messages.h" |
namespace extensions { |
+namespace { |
+ |
+const Extension* GetExtensionForRenderFrame( |
+ content::RenderFrameHost* render_frame_host) { |
+ content::SiteInstance* site_instance = render_frame_host->GetSiteInstance(); |
+ GURL url = render_frame_host->GetLastCommittedURL(); |
+ if (!url.is_empty()) { |
+ if (site_instance->GetSiteURL().GetOrigin() != url.GetOrigin()) |
+ return nullptr; |
+ } else { |
+ url = site_instance->GetSiteURL(); |
+ } |
+ content::BrowserContext* browser_context = site_instance->GetBrowserContext(); |
+ if (!url.SchemeIs(kExtensionScheme)) |
+ return nullptr; |
+ |
+ return ExtensionRegistry::Get(browser_context) |
+ ->enabled_extensions() |
+ .GetExtensionOrAppByURL(url); |
+} |
+ |
+} // namespace |
ExtensionWebContentsObserver::ExtensionWebContentsObserver( |
content::WebContents* web_contents) |
@@ -92,7 +116,11 @@ void ExtensionWebContentsObserver::RenderViewCreated( |
void ExtensionWebContentsObserver::RenderFrameCreated( |
content::RenderFrameHost* render_frame_host) { |
- RegisterCoreExtensionServices(render_frame_host); |
+ const Extension* extension = GetExtensionForRenderFrame(render_frame_host); |
+ if (extension) { |
+ ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, |
+ extension); |
+ } |
} |
void ExtensionWebContentsObserver::NotifyRenderViewType( |