summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/DEPS1
-rw-r--r--apps/shell_window.cc2
-rw-r--r--chrome/browser/chrome_browser_main.cc11
-rw-r--r--chrome/browser/chrome_browser_main.h3
-rw-r--r--chrome/browser/devtools/devtools_window.cc2
-rw-r--r--chrome/browser/extensions/extension_web_contents_observer.cc24
-rw-r--r--chrome/browser/extensions/extension_web_contents_observer.h3
-rw-r--r--chrome/browser/extensions/message_handler.cc55
-rw-r--r--chrome/browser/extensions/message_handler.h43
-rw-r--r--chrome/browser/notifications/balloon_host.cc3
-rw-r--r--chrome/browser/tab_contents/background_contents.cc3
-rw-r--r--chrome/browser/ui/panels/panel_host.cc3
-rw-r--r--chrome/chrome_browser_extensions.gypi2
13 files changed, 41 insertions, 114 deletions
diff --git a/apps/DEPS b/apps/DEPS
index 31e8bc85..b7cf3e1 100644
--- a/apps/DEPS
+++ b/apps/DEPS
@@ -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',