diff options
author | rdevlin.cronin <rdevlin.cronin@chromium.org> | 2015-04-03 13:19:40 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-03 20:20:20 +0000 |
commit | 6ae04a013f6040f5d38e6cf04f6da224f21b77f9 (patch) | |
tree | 427696998b1fd65a9549ab695f30e58f9365c960 /extensions/browser/extension_web_contents_observer.cc | |
parent | 11d52caf494dea19e0feb6184858b9ec24bdb46c (diff) | |
download | chromium_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.cc | 28 |
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) { |