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 1b1cad86d7336f021af38eacc112b75338a19fd5..779f9a0bc41efd1da05dd7fd5d7ea7535f05caf6 100644 |
--- a/extensions/browser/extension_web_contents_observer.cc |
+++ b/extensions/browser/extension_web_contents_observer.cc |
@@ -45,19 +45,33 @@ const Extension* GetExtensionForRenderFrame( |
} // namespace |
+// static |
+ExtensionWebContentsObserver* ExtensionWebContentsObserver::GetForWebContents( |
+ content::WebContents* web_contents) { |
+ return ExtensionsBrowserClient::Get()->GetExtensionWebContentsObserver( |
+ web_contents); |
+} |
+ |
ExtensionWebContentsObserver::ExtensionWebContentsObserver( |
content::WebContents* web_contents) |
: content::WebContentsObserver(web_contents), |
- browser_context_(web_contents->GetBrowserContext()) { |
+ browser_context_(web_contents->GetBrowserContext()), |
+ dispatcher_(browser_context_) { |
NotifyRenderViewType(web_contents->GetRenderViewHost()); |
content::RenderFrameHost* host = web_contents->GetMainFrame(); |
if (host) |
RenderFrameHostChanged(nullptr, host); |
+ dispatcher_.set_delegate(this); |
} |
ExtensionWebContentsObserver::~ExtensionWebContentsObserver() { |
} |
+content::WebContents* ExtensionWebContentsObserver::GetAssociatedWebContents() |
+ const { |
+ return web_contents(); |
+} |
+ |
void ExtensionWebContentsObserver::RenderViewCreated( |
content::RenderViewHost* render_view_host) { |
NotifyRenderViewType(render_view_host); |
@@ -110,6 +124,16 @@ void ExtensionWebContentsObserver::RenderFrameCreated( |
} |
} |
+bool ExtensionWebContentsObserver::OnMessageReceived( |
+ const IPC::Message& message) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(ExtensionWebContentsObserver, message) |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
void ExtensionWebContentsObserver::FrameDeleted( |
content::RenderFrameHost* render_frame_host) { |
ProcessManager::Get(browser_context_)->UnregisterRenderFrameHost( |
@@ -189,4 +213,9 @@ std::string ExtensionWebContentsObserver::GetExtensionId( |
return site.host(); |
} |
+void ExtensionWebContentsObserver::OnRequest( |
+ const ExtensionHostMsg_Request_Params& params) { |
+ dispatcher_.Dispatch(params, web_contents()->GetRenderViewHost()); |
+} |
+ |
} // namespace extensions |