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

Unified Diff: chrome/browser/extensions/extension_renderer_state.cc

Issue 12226022: <webview>: Store <webview> embedder info in ExtensionRendererState (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated comment on instance ID Created 7 years, 10 months 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: chrome/browser/extensions/extension_renderer_state.cc
diff --git a/chrome/browser/extensions/extension_renderer_state.cc b/chrome/browser/extensions/extension_renderer_state.cc
index db1c4dffc3f60d8923fb4d7a1ff48ee1dc8b3d85..0c0de95141eba2456afea7599204606d8f910b61 100644
--- a/chrome/browser/extensions/extension_renderer_state.cc
+++ b/chrome/browser/extensions/extension_renderer_state.cc
@@ -51,21 +51,15 @@ ExtensionRendererState::TabObserver::TabObserver() {
registrar_.Add(this,
content::NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED,
content::NotificationService::AllBrowserContextsAndSources());
+ registrar_.Add(this,
+ content::NOTIFICATION_WEB_CONTENTS_CONNECTED,
+ content::NotificationService::AllBrowserContextsAndSources());
registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_DELETED,
content::NotificationService::AllBrowserContextsAndSources());
registrar_.Add(this, chrome::NOTIFICATION_TAB_PARENTED,
content::NotificationService::AllBrowserContextsAndSources());
registrar_.Add(this, chrome::NOTIFICATION_RETARGETING,
content::NotificationService::AllBrowserContextsAndSources());
- registrar_.Add(this,
- content::NOTIFICATION_RENDERER_PROCESS_CREATED,
- content::NotificationService::AllBrowserContextsAndSources());
- registrar_.Add(this,
- content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
- content::NotificationService::AllBrowserContextsAndSources());
- registrar_.Add(this,
- content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
- content::NotificationService::AllBrowserContextsAndSources());
}
ExtensionRendererState::TabObserver::~TabObserver() {
@@ -95,6 +89,31 @@ void ExtensionRendererState::TabObserver::Observe(
session_tab_helper->window_id().id()));
break;
}
+ case content::NOTIFICATION_WEB_CONTENTS_CONNECTED: {
+ WebContents* web_contents = content::Source<WebContents>(source).ptr();
+ if (!web_contents->GetRenderProcessHost()->IsGuest())
+ return;
+
+ WebContents* embedder_web_contents =
+ web_contents->GetEmbedderWebContents();
+ WebViewInfo web_view_info;
+ web_view_info.embedder_process_id =
+ embedder_web_contents->GetRenderProcessHost()->GetID();
+ web_view_info.embedder_routing_id =
+ embedder_web_contents->GetRoutingID();
+ web_view_info.web_view_instance_id =
+ web_contents->GetEmbeddedInstanceID();
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(
+ &ExtensionRendererState::AddWebView,
+ base::Unretained(ExtensionRendererState::GetInstance()),
+ web_contents->GetRenderProcessHost()->GetID(),
+ web_contents->GetRoutingID(),
+ web_view_info));
+ break;
+ }
case chrome::NOTIFICATION_TAB_PARENTED: {
WebContents* web_contents = content::Source<WebContents>(source).ptr();
SessionTabHelper* session_tab_helper =
@@ -133,6 +152,16 @@ void ExtensionRendererState::TabObserver::Observe(
}
case content::NOTIFICATION_RENDER_VIEW_HOST_DELETED: {
RenderViewHost* host = content::Source<RenderViewHost>(source).ptr();
+ if (host->GetProcess()->IsGuest()) {
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(
+ &ExtensionRendererState::RemoveWebView,
+ base::Unretained(ExtensionRendererState::GetInstance()),
+ host->GetProcess()->GetID(),
+ host->GetRoutingID()));
+ return;
+ }
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(
@@ -141,33 +170,6 @@ void ExtensionRendererState::TabObserver::Observe(
host->GetProcess()->GetID(), host->GetRoutingID()));
break;
}
- case content::NOTIFICATION_RENDERER_PROCESS_CREATED: {
- RenderProcessHost* render_process_host =
- content::Source<RenderProcessHost>(source).ptr();
- if (!render_process_host->IsGuest())
- return;
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &ExtensionRendererState::AddGuestProcess,
- base::Unretained(ExtensionRendererState::GetInstance()),
- render_process_host->GetID()));
- break;
- }
- case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED:
- case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
- RenderProcessHost* render_process_host =
- content::Source<RenderProcessHost>(source).ptr();
- if (!render_process_host->IsGuest())
- return;
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &ExtensionRendererState::RemoveGuestProcess,
- base::Unretained(ExtensionRendererState::GetInstance()),
- render_process_host->GetID()));
- break;
- }
default:
NOTREACHED();
return;
@@ -224,17 +226,30 @@ bool ExtensionRendererState::GetTabAndWindowId(
return false;
}
-void ExtensionRendererState::AddGuestProcess(int render_process_host_id) {
+void ExtensionRendererState::AddWebView(int guest_process_id,
+ int guest_routing_id,
+ const WebViewInfo& web_view_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- guest_set_.insert(render_process_host_id);
+ RenderId render_id(guest_process_id, guest_routing_id);
+ web_view_info_map_[render_id] = web_view_info;
}
-void ExtensionRendererState::RemoveGuestProcess(int render_process_host_id) {
+void ExtensionRendererState::RemoveWebView(int guest_process_id,
+ int guest_routing_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- guest_set_.erase(render_process_host_id);
+ RenderId render_id(guest_process_id, guest_routing_id);
+ web_view_info_map_.erase(render_id);
}
-bool ExtensionRendererState::IsGuestProcess(int render_process_host_id) {
+bool ExtensionRendererState::GetWebViewInfo(int guest_process_id,
+ int guest_routing_id,
+ WebViewInfo* web_view_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return guest_set_.count(render_process_host_id) > 0;
+ RenderId render_id(guest_process_id, guest_routing_id);
+ WebViewInfoMap::iterator iter = web_view_info_map_.find(render_id);
+ if (iter != web_view_info_map_.end()) {
+ *web_view_info = iter->second;
+ return true;
+ }
+ return false;
}
« no previous file with comments | « chrome/browser/extensions/extension_renderer_state.h ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698