OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/extension_web_contents_observer.h" | 5 #include "extensions/browser/extension_web_contents_observer.h" |
6 | 6 |
7 #include "content/public/browser/child_process_security_policy.h" | 7 #include "content/public/browser/child_process_security_policy.h" |
8 #include "content/public/browser/render_frame_host.h" | 8 #include "content/public/browser/render_frame_host.h" |
9 #include "content/public/browser/render_process_host.h" | 9 #include "content/public/browser/render_process_host.h" |
10 #include "content/public/browser/render_view_host.h" | 10 #include "content/public/browser/render_view_host.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 if (!url.SchemeIs(kExtensionScheme)) | 38 if (!url.SchemeIs(kExtensionScheme)) |
39 return nullptr; | 39 return nullptr; |
40 | 40 |
41 return ExtensionRegistry::Get(browser_context) | 41 return ExtensionRegistry::Get(browser_context) |
42 ->enabled_extensions() | 42 ->enabled_extensions() |
43 .GetExtensionOrAppByURL(url); | 43 .GetExtensionOrAppByURL(url); |
44 } | 44 } |
45 | 45 |
46 } // namespace | 46 } // namespace |
47 | 47 |
| 48 // static |
| 49 ExtensionWebContentsObserver* ExtensionWebContentsObserver::GetForWebContents( |
| 50 content::WebContents* web_contents) { |
| 51 return ExtensionsBrowserClient::Get()->GetExtensionWebContentsObserver( |
| 52 web_contents); |
| 53 } |
| 54 |
48 ExtensionWebContentsObserver::ExtensionWebContentsObserver( | 55 ExtensionWebContentsObserver::ExtensionWebContentsObserver( |
49 content::WebContents* web_contents) | 56 content::WebContents* web_contents) |
50 : content::WebContentsObserver(web_contents), | 57 : content::WebContentsObserver(web_contents), |
51 browser_context_(web_contents->GetBrowserContext()) { | 58 browser_context_(web_contents->GetBrowserContext()), |
| 59 dispatcher_(browser_context_) { |
52 NotifyRenderViewType(web_contents->GetRenderViewHost()); | 60 NotifyRenderViewType(web_contents->GetRenderViewHost()); |
53 content::RenderFrameHost* host = web_contents->GetMainFrame(); | 61 content::RenderFrameHost* host = web_contents->GetMainFrame(); |
54 if (host) | 62 if (host) |
55 RenderFrameHostChanged(nullptr, host); | 63 RenderFrameHostChanged(nullptr, host); |
| 64 dispatcher_.set_delegate(this); |
56 } | 65 } |
57 | 66 |
58 ExtensionWebContentsObserver::~ExtensionWebContentsObserver() { | 67 ExtensionWebContentsObserver::~ExtensionWebContentsObserver() { |
59 } | 68 } |
60 | 69 |
| 70 content::WebContents* ExtensionWebContentsObserver::GetAssociatedWebContents() |
| 71 const { |
| 72 return web_contents(); |
| 73 } |
| 74 |
61 void ExtensionWebContentsObserver::RenderViewCreated( | 75 void ExtensionWebContentsObserver::RenderViewCreated( |
62 content::RenderViewHost* render_view_host) { | 76 content::RenderViewHost* render_view_host) { |
63 NotifyRenderViewType(render_view_host); | 77 NotifyRenderViewType(render_view_host); |
64 | 78 |
65 const Extension* extension = GetExtension(render_view_host); | 79 const Extension* extension = GetExtension(render_view_host); |
66 if (!extension) | 80 if (!extension) |
67 return; | 81 return; |
68 | 82 |
69 content::RenderProcessHost* process = render_view_host->GetProcess(); | 83 content::RenderProcessHost* process = render_view_host->GetProcess(); |
70 | 84 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 117 |
104 void ExtensionWebContentsObserver::RenderFrameCreated( | 118 void ExtensionWebContentsObserver::RenderFrameCreated( |
105 content::RenderFrameHost* render_frame_host) { | 119 content::RenderFrameHost* render_frame_host) { |
106 const Extension* extension = GetExtensionForRenderFrame(render_frame_host); | 120 const Extension* extension = GetExtensionForRenderFrame(render_frame_host); |
107 if (extension) { | 121 if (extension) { |
108 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, | 122 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, |
109 extension); | 123 extension); |
110 } | 124 } |
111 } | 125 } |
112 | 126 |
| 127 bool ExtensionWebContentsObserver::OnMessageReceived( |
| 128 const IPC::Message& message) { |
| 129 bool handled = true; |
| 130 IPC_BEGIN_MESSAGE_MAP(ExtensionWebContentsObserver, message) |
| 131 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) |
| 132 IPC_MESSAGE_UNHANDLED(handled = false) |
| 133 IPC_END_MESSAGE_MAP() |
| 134 return handled; |
| 135 } |
| 136 |
113 void ExtensionWebContentsObserver::FrameDeleted( | 137 void ExtensionWebContentsObserver::FrameDeleted( |
114 content::RenderFrameHost* render_frame_host) { | 138 content::RenderFrameHost* render_frame_host) { |
115 ProcessManager::Get(browser_context_)->UnregisterRenderFrameHost( | 139 ProcessManager::Get(browser_context_)->UnregisterRenderFrameHost( |
116 render_frame_host); | 140 render_frame_host); |
117 } | 141 } |
118 | 142 |
119 void ExtensionWebContentsObserver::RenderFrameHostChanged( | 143 void ExtensionWebContentsObserver::RenderFrameHostChanged( |
120 content::RenderFrameHost* old_host, | 144 content::RenderFrameHost* old_host, |
121 content::RenderFrameHost* new_host) { | 145 content::RenderFrameHost* new_host) { |
122 ProcessManager* process_manager = ProcessManager::Get(browser_context_); | 146 ProcessManager* process_manager = ProcessManager::Get(browser_context_); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 // (excluding bookmark apps) will have a chrome-extension:// URL for their | 206 // (excluding bookmark apps) will have a chrome-extension:// URL for their |
183 // site, so we can ignore that wrinkle here. | 207 // site, so we can ignore that wrinkle here. |
184 const GURL& site = render_view_host->GetSiteInstance()->GetSiteURL(); | 208 const GURL& site = render_view_host->GetSiteInstance()->GetSiteURL(); |
185 | 209 |
186 if (!site.SchemeIs(kExtensionScheme)) | 210 if (!site.SchemeIs(kExtensionScheme)) |
187 return std::string(); | 211 return std::string(); |
188 | 212 |
189 return site.host(); | 213 return site.host(); |
190 } | 214 } |
191 | 215 |
| 216 void ExtensionWebContentsObserver::OnRequest( |
| 217 const ExtensionHostMsg_Request_Params& params) { |
| 218 dispatcher_.Dispatch(params, web_contents()->GetRenderViewHost()); |
| 219 } |
| 220 |
192 } // namespace extensions | 221 } // namespace extensions |
OLD | NEW |