diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-21 23:36:36 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-21 23:36:36 +0000 |
commit | db40ea35cb5164f68f3ed1ed49eb47c2ac287180 (patch) | |
tree | f7c3a40eebec0c62d36ee3a09418dfc97ccf8af7 | |
parent | 59e0cc94d4845991bc6fc42c19fc56523fdc9f8a (diff) | |
download | chromium_src-db40ea35cb5164f68f3ed1ed49eb47c2ac287180.zip chromium_src-db40ea35cb5164f68f3ed1ed49eb47c2ac287180.tar.gz chromium_src-db40ea35cb5164f68f3ed1ed49eb47c2ac287180.tar.bz2 |
Get rid of the extensions' MessageHandler RenderViewHostObserver. Move this code to ExtensionWebContentsObserver instead as part of removing RenderViewHostObserver.
I created ExtensionWebContentsObserver for a few more WebContents' that called extensions::SetViewType.
BUG=306569
R=benwells@chromium.org, mpcomplete@chromium.org
Review URL: https://codereview.chromium.org/31633006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229957 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | apps/DEPS | 1 | ||||
-rw-r--r-- | apps/shell_window.cc | 2 | ||||
-rw-r--r-- | chrome/browser/chrome_browser_main.cc | 11 | ||||
-rw-r--r-- | chrome/browser/chrome_browser_main.h | 3 | ||||
-rw-r--r-- | chrome/browser/devtools/devtools_window.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_web_contents_observer.cc | 24 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_web_contents_observer.h | 3 | ||||
-rw-r--r-- | chrome/browser/extensions/message_handler.cc | 55 | ||||
-rw-r--r-- | chrome/browser/extensions/message_handler.h | 43 | ||||
-rw-r--r-- | chrome/browser/notifications/balloon_host.cc | 3 | ||||
-rw-r--r-- | chrome/browser/tab_contents/background_contents.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_host.cc | 3 | ||||
-rw-r--r-- | chrome/chrome_browser_extensions.gypi | 2 |
13 files changed, 41 insertions, 114 deletions
@@ -40,6 +40,7 @@ include_rules = [ "+chrome/browser/extensions/extension_service.h", "+chrome/browser/extensions/extension_system.h", "+chrome/browser/extensions/extension_system_factory.h", + "+chrome/browser/extensions/extension_web_contents_observer.h", "+chrome/browser/extensions/lazy_background_task_queue.h", "+chrome/browser/extensions/suggest_permission_util.h", "+chrome/browser/extensions/unpacked_installer.h", diff --git a/apps/shell_window.cc b/apps/shell_window.cc index ce2efa0..2b169d0 100644 --- a/apps/shell_window.cc +++ b/apps/shell_window.cc @@ -13,6 +13,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_process_manager.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_web_contents_observer.h" #include "chrome/browser/extensions/suggest_permission_util.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile.h" @@ -154,6 +155,7 @@ void ShellWindow::Init(const GURL& url, WebContents* web_contents = shell_window_contents_->GetWebContents(); delegate_->InitWebContents(web_contents); WebContentsModalDialogManager::CreateForWebContents(web_contents); + extensions::ExtensionWebContentsObserver::CreateForWebContents(web_contents); web_contents->SetDelegate(this); WebContentsModalDialogManager::FromWebContents(web_contents)-> diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 1319412..0e14596 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc @@ -54,7 +54,6 @@ #include "chrome/browser/extensions/extension_protocols.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" -#include "chrome/browser/extensions/message_handler.h" #include "chrome/browser/extensions/startup_helper.h" #include "chrome/browser/first_run/first_run.h" #include "chrome/browser/first_run/upgrade_util.h" @@ -504,11 +503,6 @@ class LoadCompleteListener : public content::NotificationObserver { DISALLOW_COPY_AND_ASSIGN(LoadCompleteListener); }; -void RenderViewHostCreated(content::RenderViewHost* render_view_host) { - new extensions::MessageHandler(render_view_host); -} - - } // namespace namespace chrome_browser { @@ -534,7 +528,6 @@ ChromeBrowserMainParts::ChromeBrowserMainParts( shutdown_watcher_(new ShutdownWatcherHelper()), startup_timer_(new performance_monitor::StartupTimer()), browser_field_trials_(parameters.command_line), - rvh_callback_(base::Bind(&RenderViewHostCreated)), translate_manager_(NULL), profile_(NULL), run_message_loop_(true), @@ -550,13 +543,9 @@ ChromeBrowserMainParts::ChromeBrowserMainParts( // a ChromeNetworkDelegate attached that selectively allows cookies again. if (!disable_enforcing_cookie_policies_for_tests_) net::URLRequest::SetDefaultCookiePolicyToBlock(); - - content::RenderViewHost::AddCreatedCallback(rvh_callback_); } ChromeBrowserMainParts::~ChromeBrowserMainParts() { - content::RenderViewHost::RemoveCreatedCallback(rvh_callback_); - for (int i = static_cast<int>(chrome_extra_parts_.size())-1; i >= 0; --i) delete chrome_extra_parts_[i]; chrome_extra_parts_.clear(); diff --git a/chrome/browser/chrome_browser_main.h b/chrome/browser/chrome_browser_main.h index 22c4526..cf5cd7a 100644 --- a/chrome/browser/chrome_browser_main.h +++ b/chrome/browser/chrome_browser_main.h @@ -16,7 +16,6 @@ #include "chrome/browser/task_profiler/auto_tracking.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "content/public/browser/browser_main_parts.h" -#include "content/public/browser/render_view_host.h" #include "content/public/common/main_function_params.h" class ActiveTabTracker; @@ -154,8 +153,6 @@ class ChromeBrowserMainParts : public content::BrowserMainParts { ChromeBrowserFieldTrials browser_field_trials_; - content::RenderViewHost::CreatedCallback rvh_callback_; - // Vector of additional ChromeBrowserMainExtraParts. // Parts are deleted in the inverse order they are added. std::vector<ChromeBrowserMainExtraParts*> chrome_extra_parts_; diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 8cbc452..a3fa063 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc @@ -17,6 +17,7 @@ #include "chrome/browser/extensions/api/debugger/debugger_api.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_web_contents_observer.h" #include "chrome/browser/file_select_helper.h" #include "chrome/browser/infobars/confirm_infobar_delegate.h" #include "chrome/browser/prefs/pref_service_syncable.h" @@ -572,6 +573,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile, web_contents_, this)); file_helper_.reset(new DevToolsFileHelper(web_contents_, profile)); file_system_indexer_ = new DevToolsFileSystemIndexer(); + extensions::ExtensionWebContentsObserver::CreateForWebContents(web_contents_); g_instances.Get().push_back(this); diff --git a/chrome/browser/extensions/extension_web_contents_observer.cc b/chrome/browser/extensions/extension_web_contents_observer.cc index cfbb690..8f648b6 100644 --- a/chrome/browser/extensions/extension_web_contents_observer.cc +++ b/chrome/browser/extensions/extension_web_contents_observer.cc @@ -4,6 +4,7 @@ #include "chrome/browser/extensions/extension_web_contents_observer.h" +#include "chrome/browser/extensions/api/messaging/message_service.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/profiles/profile.h" @@ -14,6 +15,7 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" +#include "extensions/browser/view_type_utils.h" #include "extensions/common/constants.h" DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::ExtensionWebContentsObserver); @@ -31,6 +33,10 @@ ExtensionWebContentsObserver::~ExtensionWebContentsObserver() { void ExtensionWebContentsObserver::RenderViewCreated( content::RenderViewHost* render_view_host) { + render_view_host->Send(new ExtensionMsg_NotifyRenderViewType( + render_view_host->GetRoutingID(), + extensions::GetViewType(web_contents()))); + const Extension* extension = GetExtension(render_view_host); if (!extension) return; @@ -83,6 +89,24 @@ void ExtensionWebContentsObserver::RenderViewCreated( } } +bool ExtensionWebContentsObserver::OnMessageReceived( + const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(ExtensionWebContentsObserver, message) + IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void ExtensionWebContentsObserver::OnPostMessage(int port_id, + const std::string& message) { + MessageService* message_service = MessageService::Get(profile_); + if (message_service) { + message_service->PostMessage(port_id, message); + } +} + const Extension* ExtensionWebContentsObserver::GetExtension( content::RenderViewHost* render_view_host) { // Note that due to ChromeContentBrowserClient::GetEffectiveURL(), hosted apps diff --git a/chrome/browser/extensions/extension_web_contents_observer.h b/chrome/browser/extensions/extension_web_contents_observer.h index 0e491a6..dbac7f9 100644 --- a/chrome/browser/extensions/extension_web_contents_observer.h +++ b/chrome/browser/extensions/extension_web_contents_observer.h @@ -28,6 +28,9 @@ class ExtensionWebContentsObserver // content::WebContentsObserver overrides. virtual void RenderViewCreated( content::RenderViewHost* render_view_host) OVERRIDE; + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + + void OnPostMessage(int port_id, const std::string& message); // Gets the extension or app (if any) that is associated with a RVH. const Extension* GetExtension(content::RenderViewHost* render_view_host); diff --git a/chrome/browser/extensions/message_handler.cc b/chrome/browser/extensions/message_handler.cc deleted file mode 100644 index 8389b9a..0000000 --- a/chrome/browser/extensions/message_handler.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/extensions/message_handler.h" - -#include "chrome/browser/extensions/api/messaging/message_service.h" -#include "chrome/browser/extensions/extension_system.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/common/extensions/extension_messages.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/web_contents.h" -#include "extensions/browser/view_type_utils.h" - -using content::WebContents; - -namespace extensions { - -MessageHandler::MessageHandler( - content::RenderViewHost* render_view_host) - : content::RenderViewHostObserver(render_view_host) { -} - -MessageHandler::~MessageHandler() { -} - -bool MessageHandler::OnMessageReceived( - const IPC::Message& message) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(MessageHandler, message) - IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - return handled; -} - -void MessageHandler::RenderViewHostInitialized() { - WebContents* web_contents = - WebContents::FromRenderViewHost(render_view_host()); - Send(new ExtensionMsg_NotifyRenderViewType( - routing_id(), extensions::GetViewType(web_contents))); -} - -void MessageHandler::OnPostMessage(int port_id, - const std::string& message) { - Profile* profile = Profile::FromBrowserContext( - render_view_host()->GetProcess()->GetBrowserContext()); - MessageService* message_service = MessageService::Get(profile); - if (message_service) { - message_service->PostMessage(port_id, message); - } -} - -} // namespace extensions diff --git a/chrome/browser/extensions/message_handler.h b/chrome/browser/extensions/message_handler.h deleted file mode 100644 index 140105d..0000000 --- a/chrome/browser/extensions/message_handler.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_EXTENSIONS_MESSAGE_HANDLER_H_ -#define CHROME_BROWSER_EXTENSIONS_MESSAGE_HANDLER_H_ - -#include <string> - -#include "content/public/browser/render_view_host_observer.h" - -namespace extensions { - -// Filters and dispatches extension-related IPC messages that arrive from -// renderers. There is one of these objects for each RenderViewHost in Chrome. -// Contrast this with extensions::TabHelper, which is only created for -// WebContents. -// -// TODO(aa): Handling of content script messaging should be able to move to EFD -// once there is an EFD for every RVHD where extension code can run. Then we -// could eliminate this class. Right now, we don't end up with an EFD for tab -// contents unless that tab contents is hosting chrome-extension:// URLs. That -// still leaves content scripts. See also: crbug.com/80307. -class MessageHandler : public content::RenderViewHostObserver { - public: - // |sender| is guaranteed to outlive this object. - explicit MessageHandler(content::RenderViewHost* render_view_host); - virtual ~MessageHandler(); - - // RenderViewHostObserver overrides. - virtual void RenderViewHostInitialized() OVERRIDE; - virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; - - private: - // Message handlers. - void OnPostMessage(int port_id, const std::string& message); - - DISALLOW_COPY_AND_ASSIGN(MessageHandler); -}; - -} // namespace extensions - -#endif // CHROME_BROWSER_EXTENSIONS_MESSAGE_HANDLER_H_ diff --git a/chrome/browser/notifications/balloon_host.cc b/chrome/browser/notifications/balloon_host.cc index 362804f..c3de873 100644 --- a/chrome/browser/notifications/balloon_host.cc +++ b/chrome/browser/notifications/balloon_host.cc @@ -5,6 +5,7 @@ #include "chrome/browser/notifications/balloon_host.h" #include "chrome/browser/chrome_notification_types.h" +#include "chrome/browser/extensions/extension_web_contents_observer.h" #include "chrome/browser/notifications/balloon.h" #include "chrome/browser/notifications/balloon_collection_impl.h" #include "chrome/browser/notifications/notification.h" @@ -141,6 +142,8 @@ void BalloonHost::Init() { extensions::SetViewType( web_contents_.get(), extensions::VIEW_TYPE_NOTIFICATION); web_contents_->SetDelegate(this); + extensions::ExtensionWebContentsObserver::CreateForWebContents( + web_contents_.get()); Observe(web_contents_.get()); renderer_preferences_util::UpdateFromSystemSettings( web_contents_->GetMutableRendererPrefs(), balloon_->profile()); diff --git a/chrome/browser/tab_contents/background_contents.cc b/chrome/browser/tab_contents/background_contents.cc index 8d3dcec..a6c9a58 100644 --- a/chrome/browser/tab_contents/background_contents.cc +++ b/chrome/browser/tab_contents/background_contents.cc @@ -6,6 +6,7 @@ #include "chrome/browser/background/background_contents_service.h" #include "chrome/browser/chrome_notification_types.h" +#include "chrome/browser/extensions/extension_web_contents_observer.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_preferences_util.h" #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" @@ -47,6 +48,8 @@ BackgroundContents::BackgroundContents( web_contents_.get(), extensions::VIEW_TYPE_BACKGROUND_CONTENTS); web_contents_->SetDelegate(this); content::WebContentsObserver::Observe(web_contents_.get()); + extensions::ExtensionWebContentsObserver::CreateForWebContents( + web_contents_.get()); // Close ourselves when the application is shutting down. registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, diff --git a/chrome/browser/ui/panels/panel_host.cc b/chrome/browser/ui/panels/panel_host.cc index 66ce281..73dd5a2 100644 --- a/chrome/browser/ui/panels/panel_host.cc +++ b/chrome/browser/ui/panels/panel_host.cc @@ -9,6 +9,7 @@ #include "base/message_loop/message_loop.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_page_zoom.h" +#include "chrome/browser/extensions/extension_web_contents_observer.h" #include "chrome/browser/extensions/window_controller.h" #include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/profiles/profile.h" @@ -63,6 +64,8 @@ void PanelHost::Init(const GURL& url) { FaviconTabHelper::CreateForWebContents(web_contents_.get()); PrefsTabHelper::CreateForWebContents(web_contents_.get()); + extensions::ExtensionWebContentsObserver::CreateForWebContents( + web_contents_.get()); web_contents_->GetController().LoadURL( url, content::Referrer(), content::PAGE_TRANSITION_LINK, std::string()); diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index 2867658..6b296cc8 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -803,8 +803,6 @@ 'browser/extensions/management_policy.h', 'browser/extensions/menu_manager.cc', 'browser/extensions/menu_manager.h', - 'browser/extensions/message_handler.cc', - 'browser/extensions/message_handler.h', 'browser/extensions/navigation_observer.cc', 'browser/extensions/navigation_observer.h', 'browser/extensions/pack_extension_job.cc', |