summaryrefslogtreecommitdiffstats
path: root/extensions/browser/extension_web_contents_observer.cc
diff options
context:
space:
mode:
authorkmarshall <kmarshall@chromium.org>2015-04-03 15:29:43 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-03 22:30:28 +0000
commit166e5b457da60fa11992b2e7efe3444f3875a465 (patch)
tree3ab1a5101b8d4ceaf2554c888c4a6fa3e1768eea /extensions/browser/extension_web_contents_observer.cc
parentd9c7f49d8d037e4a5df1793897b6274bb2cbfc90 (diff)
downloadchromium_src-166e5b457da60fa11992b2e7efe3444f3875a465.zip
chromium_src-166e5b457da60fa11992b2e7efe3444f3875a465.tar.gz
chromium_src-166e5b457da60fa11992b2e7efe3444f3875a465.tar.bz2
Add service registration for Mojo services defined under chrome/
to chrome_web_contents_observer. Add RegisterMojoServices virtual method to extension_web_contents_observer. BUG= Review URL: https://codereview.chromium.org/1035263002 Cr-Commit-Position: refs/heads/master@{#323836}
Diffstat (limited to 'extensions/browser/extension_web_contents_observer.cc')
-rw-r--r--extensions/browser/extension_web_contents_observer.cc29
1 files changed, 28 insertions, 1 deletions
diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc
index dd0a628..5ba2ebb 100644
--- a/extensions/browser/extension_web_contents_observer.cc
+++ b/extensions/browser/extension_web_contents_observer.cc
@@ -13,6 +13,7 @@
#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/process_manager.h"
#include "extensions/browser/view_type_utils.h"
@@ -20,6 +21,28 @@
#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)
@@ -98,7 +121,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::FrameDeleted(