summaryrefslogtreecommitdiffstats
path: root/extensions/browser/extension_web_contents_observer.cc
diff options
context:
space:
mode:
authorrdevlin.cronin <rdevlin.cronin@chromium.org>2015-04-03 13:19:40 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-03 20:20:20 +0000
commit6ae04a013f6040f5d38e6cf04f6da224f21b77f9 (patch)
tree427696998b1fd65a9549ab695f30e58f9365c960 /extensions/browser/extension_web_contents_observer.cc
parent11d52caf494dea19e0feb6184858b9ec24bdb46c (diff)
downloadchromium_src-6ae04a013f6040f5d38e6cf04f6da224f21b77f9.zip
chromium_src-6ae04a013f6040f5d38e6cf04f6da224f21b77f9.tar.gz
chromium_src-6ae04a013f6040f5d38e6cf04f6da224f21b77f9.tar.bz2
Reland: [Extensions] Change ProcessManager to use RenderFrameHosts
(Reland of https://codereview.chromium.org/1037263004) RenderViewHosts are going to go away, and things using them are blocking OOPIs. Make ProcessManager use RenderFrameHosts. Additionally, this takes out ~130 lines of code. BUG=466373 (TBRing other reviewers from original patch, since no code there changed) TBR=avi@chromium.org TBR=asargent@chromium.org TBR=atwilson@chromium.org TBR=jamescook@chromium.org TBR=dgozman@chromium.org TBR=nick@chromium.org Review URL: https://codereview.chromium.org/1056463005 Cr-Commit-Position: refs/heads/master@{#323803}
Diffstat (limited to 'extensions/browser/extension_web_contents_observer.cc')
-rw-r--r--extensions/browser/extension_web_contents_observer.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/extensions/browser/extension_web_contents_observer.cc b/extensions/browser/extension_web_contents_observer.cc
index 020cc32..dd0a628 100644
--- a/extensions/browser/extension_web_contents_observer.cc
+++ b/extensions/browser/extension_web_contents_observer.cc
@@ -5,6 +5,7 @@
#include "extensions/browser/extension_web_contents_observer.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"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/site_instance.h"
@@ -13,6 +14,7 @@
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/mojo/service_registration.h"
+#include "extensions/browser/process_manager.h"
#include "extensions/browser/view_type_utils.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension_messages.h"
@@ -24,9 +26,13 @@ ExtensionWebContentsObserver::ExtensionWebContentsObserver(
: content::WebContentsObserver(web_contents),
browser_context_(web_contents->GetBrowserContext()) {
NotifyRenderViewType(web_contents->GetRenderViewHost());
+ content::RenderFrameHost* host = web_contents->GetMainFrame();
+ if (host)
+ RenderFrameHostChanged(nullptr, host);
}
-ExtensionWebContentsObserver::~ExtensionWebContentsObserver() {}
+ExtensionWebContentsObserver::~ExtensionWebContentsObserver() {
+}
void ExtensionWebContentsObserver::RenderViewCreated(
content::RenderViewHost* render_view_host) {
@@ -95,6 +101,26 @@ void ExtensionWebContentsObserver::RenderFrameCreated(
RegisterCoreExtensionServices(render_frame_host);
}
+void ExtensionWebContentsObserver::FrameDeleted(
+ content::RenderFrameHost* render_frame_host) {
+ ProcessManager::Get(browser_context_)->UnregisterRenderFrameHost(
+ render_frame_host);
+}
+
+void ExtensionWebContentsObserver::RenderFrameHostChanged(
+ content::RenderFrameHost* old_host,
+ content::RenderFrameHost* new_host) {
+ ProcessManager* process_manager = ProcessManager::Get(browser_context_);
+ if (old_host)
+ process_manager->UnregisterRenderFrameHost(old_host);
+
+ const Extension* extension = GetExtension(new_host->GetRenderViewHost());
+ if (extension) {
+ process_manager->RegisterRenderFrameHost(
+ web_contents(), new_host, extension);
+ }
+}
+
void ExtensionWebContentsObserver::NotifyRenderViewType(
content::RenderViewHost* render_view_host) {
if (render_view_host) {