Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1268)

Side by Side Diff: extensions/browser/extension_web_contents_observer.cc

Issue 1413853005: Track all extension frames in ProcessManager, inspect extensionoptions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/msg/message/ Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "components/guest_view/browser/guest_view_base.h"
7 #include "content/public/browser/child_process_security_policy.h" 8 #include "content/public/browser/child_process_security_policy.h"
8 #include "content/public/browser/render_frame_host.h" 9 #include "content/public/browser/render_frame_host.h"
9 #include "content/public/browser/render_process_host.h" 10 #include "content/public/browser/render_process_host.h"
10 #include "content/public/browser/render_view_host.h" 11 #include "content/public/browser/render_view_host.h"
11 #include "content/public/browser/site_instance.h" 12 #include "content/public/browser/site_instance.h"
12 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
13 #include "content/public/common/url_constants.h" 14 #include "content/public/common/url_constants.h"
14 #include "extensions/browser/extension_prefs.h" 15 #include "extensions/browser/extension_prefs.h"
15 #include "extensions/browser/extension_registry.h" 16 #include "extensions/browser/extension_registry.h"
16 #include "extensions/browser/extensions_browser_client.h" 17 #include "extensions/browser/extensions_browser_client.h"
(...skipping 26 matching lines...) Expand all
43 } 44 }
44 45
45 ExtensionWebContentsObserver::~ExtensionWebContentsObserver() { 46 ExtensionWebContentsObserver::~ExtensionWebContentsObserver() {
46 } 47 }
47 48
48 void ExtensionWebContentsObserver::InitializeRenderFrame( 49 void ExtensionWebContentsObserver::InitializeRenderFrame(
49 content::RenderFrameHost* render_frame_host) { 50 content::RenderFrameHost* render_frame_host) {
50 DCHECK(render_frame_host); 51 DCHECK(render_frame_host);
51 DCHECK(render_frame_host->IsRenderFrameLive()); 52 DCHECK(render_frame_host->IsRenderFrameLive());
52 53
54 ViewType view_type = GetViewType(web_contents());
55 if (view_type == VIEW_TYPE_INVALID) {
56 // This is expected to happen only for non-extension pages (e.g. devtools)
57 // and GuestViews.
58 DCHECK(guest_view::GuestViewBase::FromWebContents(web_contents()) ||
59 GetExtensionIdFromFrame(render_frame_host).empty());
60 return;
61 }
53 // Notify the render frame of the view type. 62 // Notify the render frame of the view type.
54 render_frame_host->Send(new ExtensionMsg_NotifyRenderViewType( 63 render_frame_host->Send(new ExtensionMsg_NotifyRenderViewType(
55 render_frame_host->GetRoutingID(), GetViewType(web_contents()))); 64 render_frame_host->GetRoutingID(), view_type));
56 65
57 const Extension* frame_extension = GetExtensionFromFrame(render_frame_host); 66 const Extension* frame_extension = GetExtensionFromFrame(render_frame_host);
58 if (frame_extension) { 67 if (frame_extension) {
59 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host, 68 ExtensionsBrowserClient::Get()->RegisterMojoServices(render_frame_host,
60 frame_extension); 69 frame_extension);
61 ProcessManager::Get(browser_context_) 70 ProcessManager::Get(browser_context_)
62 ->RegisterRenderFrameHost(web_contents(), render_frame_host, 71 ->RegisterRenderFrameHost(web_contents(), render_frame_host,
63 frame_extension); 72 frame_extension);
64 } 73 }
65 } 74 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 content::RenderFrameHost* render_frame_host) { 112 content::RenderFrameHost* render_frame_host) {
104 InitializeRenderFrame(render_frame_host); 113 InitializeRenderFrame(render_frame_host);
105 } 114 }
106 115
107 void ExtensionWebContentsObserver::RenderFrameDeleted( 116 void ExtensionWebContentsObserver::RenderFrameDeleted(
108 content::RenderFrameHost* render_frame_host) { 117 content::RenderFrameHost* render_frame_host) {
109 ProcessManager::Get(browser_context_) 118 ProcessManager::Get(browser_context_)
110 ->UnregisterRenderFrameHost(render_frame_host); 119 ->UnregisterRenderFrameHost(render_frame_host);
111 } 120 }
112 121
122 void ExtensionWebContentsObserver::RenderFrameHostChanged(
ncarter (slow) 2015/11/02 17:36:20 If you are listening for changes to GetLastCommitt
robwu 2015/11/02 22:50:41 This class is only interested in whether a RFH is
ncarter (slow) 2015/11/03 23:32:02 I'm one of the site-isolation-dev folks, fyi. Are
robwu 2015/11/04 00:34:02 Extension frames in extension processes only. Exte
123 content::RenderFrameHost* old_host,
124 content::RenderFrameHost* new_host) {
ncarter (slow) 2015/11/03 23:32:02 Which test is it, that needs this logic? I patche
robwu 2015/11/04 00:34:02 I have a manual test: 1. Build Chrome with both p
robwu 2015/11/04 23:52:23 I have now added a browsertest that shows why Rend
125 if (new_host->IsRenderFrameLive())
126 InitializeRenderFrame(new_host);
ncarter (slow) 2015/11/03 23:32:02 I put the following line at the top of WebContents
robwu 2015/11/04 00:34:02 Yes, that's exactly what I'm relying on. This seem
127 }
128
113 bool ExtensionWebContentsObserver::OnMessageReceived( 129 bool ExtensionWebContentsObserver::OnMessageReceived(
114 const IPC::Message& message, 130 const IPC::Message& message,
115 content::RenderFrameHost* render_frame_host) { 131 content::RenderFrameHost* render_frame_host) {
116 bool handled = true; 132 bool handled = true;
117 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM( 133 IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(
118 ExtensionWebContentsObserver, message, render_frame_host) 134 ExtensionWebContentsObserver, message, render_frame_host)
119 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) 135 IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest)
120 IPC_MESSAGE_UNHANDLED(handled = false) 136 IPC_MESSAGE_UNHANDLED(handled = false)
121 IPC_END_MESSAGE_MAP() 137 IPC_END_MESSAGE_MAP()
122 return handled; 138 return handled;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 // Since this is called for all existing RenderFrameHosts during the 219 // Since this is called for all existing RenderFrameHosts during the
204 // ExtensionWebContentsObserver's creation, it's possible that not all hosts 220 // ExtensionWebContentsObserver's creation, it's possible that not all hosts
205 // are ready. 221 // are ready.
206 // We only initialize the frame if the renderer counterpart is live; otherwise 222 // We only initialize the frame if the renderer counterpart is live; otherwise
207 // we wait for the RenderFrameCreated notification. 223 // we wait for the RenderFrameCreated notification.
208 if (render_frame_host->IsRenderFrameLive()) 224 if (render_frame_host->IsRenderFrameLive())
209 InitializeRenderFrame(render_frame_host); 225 InitializeRenderFrame(render_frame_host);
210 } 226 }
211 227
212 } // namespace extensions 228 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698