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

Unified 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 side-by-side diff with in-line comments
Download patch
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 665fc0809cca1b3ebcfa428ae79d762d9c8c5caa..452d9c7ff10e80e0ea9028b08744cfd9ce26fa33 100644
--- a/extensions/browser/extension_web_contents_observer.cc
+++ b/extensions/browser/extension_web_contents_observer.cc
@@ -4,6 +4,7 @@
#include "extensions/browser/extension_web_contents_observer.h"
+#include "components/guest_view/browser/guest_view_base.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
@@ -50,9 +51,17 @@ void ExtensionWebContentsObserver::InitializeRenderFrame(
DCHECK(render_frame_host);
DCHECK(render_frame_host->IsRenderFrameLive());
+ ViewType view_type = GetViewType(web_contents());
+ if (view_type == VIEW_TYPE_INVALID) {
+ // This is expected to happen only for non-extension pages (e.g. devtools)
+ // and GuestViews.
+ DCHECK(guest_view::GuestViewBase::FromWebContents(web_contents()) ||
+ GetExtensionIdFromFrame(render_frame_host).empty());
+ return;
+ }
// Notify the render frame of the view type.
render_frame_host->Send(new ExtensionMsg_NotifyRenderViewType(
- render_frame_host->GetRoutingID(), GetViewType(web_contents())));
+ render_frame_host->GetRoutingID(), view_type));
const Extension* frame_extension = GetExtensionFromFrame(render_frame_host);
if (frame_extension) {
@@ -110,6 +119,13 @@ void ExtensionWebContentsObserver::RenderFrameDeleted(
->UnregisterRenderFrameHost(render_frame_host);
}
+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
+ content::RenderFrameHost* old_host,
+ 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
+ if (new_host->IsRenderFrameLive())
+ 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
+}
+
bool ExtensionWebContentsObserver::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {

Powered by Google App Engine
This is Rietveld 408576698