| 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/navigation_details.h" | |
| 9 #include "content/public/browser/navigation_handle.h" | 8 #include "content/public/browser/navigation_handle.h" |
| 10 #include "content/public/browser/render_frame_host.h" | 9 #include "content/public/browser/render_frame_host.h" |
| 11 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
| 12 #include "content/public/browser/render_view_host.h" | 11 #include "content/public/browser/render_view_host.h" |
| 13 #include "content/public/browser/site_instance.h" | 12 #include "content/public/browser/site_instance.h" |
| 14 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 15 #include "content/public/common/url_constants.h" | 14 #include "content/public/common/url_constants.h" |
| 16 #include "extensions/browser/extension_api_frame_id_map.h" | 15 #include "extensions/browser/extension_api_frame_id_map.h" |
| 17 #include "extensions/browser/extension_prefs.h" | 16 #include "extensions/browser/extension_prefs.h" |
| 18 #include "extensions/browser/extension_registry.h" | 17 #include "extensions/browser/extension_registry.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 | 137 |
| 139 void ExtensionWebContentsObserver::DidFinishNavigation( | 138 void ExtensionWebContentsObserver::DidFinishNavigation( |
| 140 content::NavigationHandle* navigation_handle) { | 139 content::NavigationHandle* navigation_handle) { |
| 141 if (!navigation_handle->HasCommitted()) | 140 if (!navigation_handle->HasCommitted()) |
| 142 return; | 141 return; |
| 143 | 142 |
| 144 ProcessManager* pm = ProcessManager::Get(browser_context_); | 143 ProcessManager* pm = ProcessManager::Get(browser_context_); |
| 145 | 144 |
| 146 content::RenderFrameHost* render_frame_host = | 145 content::RenderFrameHost* render_frame_host = |
| 147 navigation_handle->GetRenderFrameHost(); | 146 navigation_handle->GetRenderFrameHost(); |
| 148 if (pm->IsRenderFrameHostRegistered(render_frame_host)) { | |
| 149 const Extension* frame_extension = | |
| 150 GetExtensionFromFrame(render_frame_host, true); | |
| 151 | |
| 152 if (!frame_extension) | |
| 153 pm->UnregisterRenderFrameHost(render_frame_host); | |
| 154 } | |
| 155 } | |
| 156 | |
| 157 void ExtensionWebContentsObserver::DidNavigateAnyFrame( | |
| 158 content::RenderFrameHost* render_frame_host, | |
| 159 const content::LoadCommittedDetails& details, | |
| 160 const content::FrameNavigateParams& params) { | |
| 161 if (details.is_in_page) | |
| 162 return; | |
| 163 | |
| 164 const Extension* frame_extension = | 147 const Extension* frame_extension = |
| 165 GetExtensionFromFrame(render_frame_host, true); | 148 GetExtensionFromFrame(render_frame_host, true); |
| 166 ProcessManager* pm = ProcessManager::Get(browser_context_); | |
| 167 | |
| 168 if (!frame_extension) { | |
| 169 // Should have been unregistered by DidFinishNavigation. | |
| 170 DCHECK(!pm->IsRenderFrameHostRegistered(render_frame_host)); | |
| 171 return; | |
| 172 } | |
| 173 | |
| 174 if (pm->IsRenderFrameHostRegistered(render_frame_host)) { | 149 if (pm->IsRenderFrameHostRegistered(render_frame_host)) { |
| 175 // Notify ProcessManager, because some clients do not just want to know | 150 if (frame_extension && !navigation_handle->IsSamePage()) { |
| 176 // whether the frame is in an extension process, but also whether the frame | 151 // Notify ProcessManager, because some clients do not just want to know |
| 177 // was navigated. | 152 // whether the frame is in an extension process, but also whether the |
| 178 pm->DidNavigateRenderFrameHost(render_frame_host); | 153 // frame was navigated. |
| 179 } else { | 154 pm->DidNavigateRenderFrameHost(render_frame_host); |
| 155 } else if (!frame_extension) { |
| 156 pm->UnregisterRenderFrameHost(render_frame_host); |
| 157 } |
| 158 } else if (frame_extension) { |
| 180 pm->RegisterRenderFrameHost(web_contents(), render_frame_host, | 159 pm->RegisterRenderFrameHost(web_contents(), render_frame_host, |
| 181 frame_extension); | 160 frame_extension); |
| 182 } | 161 } |
| 183 } | 162 } |
| 184 | 163 |
| 185 bool ExtensionWebContentsObserver::OnMessageReceived( | 164 bool ExtensionWebContentsObserver::OnMessageReceived( |
| 186 const IPC::Message& message, | 165 const IPC::Message& message, |
| 187 content::RenderFrameHost* render_frame_host) { | 166 content::RenderFrameHost* render_frame_host) { |
| 188 bool handled = true; | 167 bool handled = true; |
| 189 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM( | 168 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM( |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 // Since this is called for all existing RenderFrameHosts during the | 273 // Since this is called for all existing RenderFrameHosts during the |
| 295 // ExtensionWebContentsObserver's creation, it's possible that not all hosts | 274 // ExtensionWebContentsObserver's creation, it's possible that not all hosts |
| 296 // are ready. | 275 // are ready. |
| 297 // We only initialize the frame if the renderer counterpart is live; otherwise | 276 // We only initialize the frame if the renderer counterpart is live; otherwise |
| 298 // we wait for the RenderFrameCreated notification. | 277 // we wait for the RenderFrameCreated notification. |
| 299 if (render_frame_host->IsRenderFrameLive()) | 278 if (render_frame_host->IsRenderFrameLive()) |
| 300 InitializeRenderFrame(render_frame_host); | 279 InitializeRenderFrame(render_frame_host); |
| 301 } | 280 } |
| 302 | 281 |
| 303 } // namespace extensions | 282 } // namespace extensions |
| OLD | NEW |