Chromium Code Reviews| 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..04f96a4c991b994dd79d2e36c4ba06235f8fd18e 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" |
| @@ -18,6 +19,28 @@ |
| #include "extensions/common/extension_messages.h" |
| namespace extensions { |
| +namespace { |
| + |
| +const Extension* GetExtensionForRenderFrame( |
|
mark a. foltz
2015/03/27 20:24:11
Is there no other way to map the render_frame_host
Kevin M
2015/03/27 22:42:37
I don't think so... the creator of the observer do
Sam McNally
2015/03/31 23:38:51
I don't think there's a way to do this as a simple
|
| + 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 +115,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) { |
| + RegisterMojoServices(render_frame_host, |
| + GetExtensionForRenderFrame(render_frame_host)); |
| + } |
| } |
| void ExtensionWebContentsObserver::NotifyRenderViewType( |
| @@ -129,4 +156,13 @@ std::string ExtensionWebContentsObserver::GetExtensionId( |
| return site.host(); |
| } |
| +void ExtensionWebContentsObserver::RegisterMojoServices( |
| + content::RenderFrameHost* render_frame_host, |
| + const Extension* extension) { |
| + DCHECK(render_frame_host); |
| + DCHECK(extension); |
| + |
| + RegisterServicesForFrame(render_frame_host, extension); |
| +} |
| + |
| } // namespace extensions |