diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-14 19:04:15 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-14 19:04:15 +0000 |
commit | 9966c15b544129454e32349c43e8bd8ddeaf42d9 (patch) | |
tree | b0ee9d420f63526894aca6ceee33a3d927d2eb36 /chrome/browser | |
parent | d443fba7a6e9ad4eaa9fd86e508ee3973bcf81cf (diff) | |
download | chromium_src-9966c15b544129454e32349c43e8bd8ddeaf42d9.zip chromium_src-9966c15b544129454e32349c43e8bd8ddeaf42d9.tar.gz chromium_src-9966c15b544129454e32349c43e8bd8ddeaf42d9.tar.bz2 |
Only deliver extension messages to contexts that care. This
save 60 (of 70) mb of string data on www.mashable.com with
AdBlock installed.
BUG=96544,76571
Review URL: http://codereview.chromium.org/7890024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
5 files changed, 14 insertions, 30 deletions
diff --git a/chrome/browser/debugger/extension_ports_remote_service.cc b/chrome/browser/debugger/extension_ports_remote_service.cc index 3c0275d..cf46fb8 100644 --- a/chrome/browser/debugger/extension_ports_remote_service.cc +++ b/chrome/browser/debugger/extension_ports_remote_service.cc @@ -226,6 +226,7 @@ bool ExtensionPortsRemoteService::Send(IPC::Message *message) { IPC_BEGIN_MESSAGE_MAP(ExtensionPortsRemoteService, *message) IPC_MESSAGE_HANDLER(ExtensionMsg_MessageInvoke, OnExtensionMessageInvoke) + IPC_MESSAGE_HANDLER(ExtensionMsg_DeliverMessage, OnDeliverMessage) IPC_MESSAGE_UNHANDLED_ERROR() IPC_END_MESSAGE_MAP() @@ -238,13 +239,7 @@ void ExtensionPortsRemoteService::OnExtensionMessageInvoke( const std::string& function_name, const ListValue& args, const GURL& event_url) { - if (function_name == ExtensionMessageService::kDispatchOnMessage) { - DCHECK_EQ(args.GetSize(), 2u); - std::string message; - int port_id; - if (args.GetString(0, &message) && args.GetInteger(1, &port_id)) - OnExtensionMessage(message, port_id); - } else if (function_name == ExtensionMessageService::kDispatchOnDisconnect) { + if (function_name == ExtensionMessageService::kDispatchOnDisconnect) { DCHECK_EQ(args.GetSize(), 1u); int port_id; if (args.GetInteger(0, &port_id)) @@ -258,8 +253,8 @@ void ExtensionPortsRemoteService::OnExtensionMessageInvoke( } } -void ExtensionPortsRemoteService::OnExtensionMessage( - const std::string& message, int port_id) { +void ExtensionPortsRemoteService::OnDeliverMessage( + int port_id, const std::string& message) { VLOG(1) << "Message event: from port " << port_id << ", < " << message << ">"; // Transpose the information into a JSON message for the external client. DictionaryValue content; diff --git a/chrome/browser/debugger/extension_ports_remote_service.h b/chrome/browser/debugger/extension_ports_remote_service.h index 0a5eea6..401f560 100644 --- a/chrome/browser/debugger/extension_ports_remote_service.h +++ b/chrome/browser/debugger/extension_ports_remote_service.h @@ -77,14 +77,15 @@ class ExtensionPortsRemoteService : public DevToolsRemoteListener, const std::string& tool, const std::string& destination); - // Handles a message from the ExtensionMessageService. + // Handles requests from ExtensionMessageService to invoke specific + // JavaScript functions. Currently we only handle the "disconnect" function. void OnExtensionMessageInvoke(const std::string& extension_id, const std::string& function_name, const base::ListValue& args, const GURL& event_url); // Handles a message sent from an extension through the // ExtensionMessageService, to be passed to the external client. - void OnExtensionMessage(const std::string& message, int port_id); + void OnDeliverMessage(int port_id, const std::string& message); // Handles a disconnect event sent from the ExtensionMessageService. void OnExtensionPortDisconnected(int port_id); diff --git a/chrome/browser/extensions/extension_message_service.cc b/chrome/browser/extensions/extension_message_service.cc index 57df12a..1fe3455 100644 --- a/chrome/browser/extensions/extension_message_service.cc +++ b/chrome/browser/extensions/extension_message_service.cc @@ -50,8 +50,6 @@ const char ExtensionMessageService::kDispatchOnConnect[] = "Port.dispatchOnConnect"; const char ExtensionMessageService::kDispatchOnDisconnect[] = "Port.dispatchOnDisconnect"; -const char ExtensionMessageService::kDispatchOnMessage[] = - "Port.dispatchOnMessage"; namespace { @@ -88,12 +86,10 @@ static void DispatchOnDisconnect( } static void DispatchOnMessage(const ExtensionMessageService::MessagePort& port, - const std::string& message, int source_port_id) { - ListValue args; - args.Set(0, Value::CreateStringValue(message)); - args.Set(1, Value::CreateIntegerValue(source_port_id)); - port.sender->Send(new ExtensionMsg_MessageInvoke(port.routing_id, - "", ExtensionMessageService::kDispatchOnMessage, args, GURL())); + const std::string& message, int target_port_id) { + port.sender->Send( + new ExtensionMsg_DeliverMessage( + port.routing_id, target_port_id, message)); } } // namespace diff --git a/chrome/browser/extensions/extension_message_service.h b/chrome/browser/extensions/extension_message_service.h index cfcd7fe..380e3a9 100644 --- a/chrome/browser/extensions/extension_message_service.h +++ b/chrome/browser/extensions/extension_message_service.h @@ -56,7 +56,6 @@ class ExtensionMessageService // Javascript function name constants. static const char kDispatchOnConnect[]; static const char kDispatchOnDisconnect[]; - static const char kDispatchOnMessage[]; // Allocates a pair of port ids. // NOTE: this can be called from any thread. diff --git a/chrome/browser/extensions/extension_messages_browsertest.cc b/chrome/browser/extensions/extension_messages_browsertest.cc index ace9c0c..56be33c 100644 --- a/chrome/browser/extensions/extension_messages_browsertest.cc +++ b/chrome/browser/extensions/extension_messages_browsertest.cc @@ -8,6 +8,7 @@ #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/render_messages.h" #include "chrome/renderer/extensions/event_bindings.h" +#include "chrome/renderer/extensions/renderer_extension_bindings.h" #include "chrome/test/base/render_view_test.h" #include "content/common/view_messages.h" #include "testing/gtest/include/gtest/gtest.h" @@ -34,14 +35,6 @@ static void DispatchOnDisconnect(int source_port_id) { "", ExtensionMessageService::kDispatchOnDisconnect, args, NULL, GURL()); } -static void DispatchOnMessage(const std::string& message, int source_port_id) { - ListValue args; - args.Set(0, Value::CreateStringValue(message)); - args.Set(1, Value::CreateIntegerValue(source_port_id)); - EventBindings::CallFunction( - "", ExtensionMessageService::kDispatchOnMessage, args, NULL, GURL()); -} - // Tests that the bindings for opening a channel to an extension and sending // and receiving messages through that channel all works. TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) { @@ -76,7 +69,7 @@ TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) { // Now simulate getting a message back from the other side. render_thread_.sink().ClearMessages(); const int kPortId = 0; - DispatchOnMessage("{\"val\": 42}", kPortId); + RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}"); // Verify that we got it. const IPC::Message* alert_msg = @@ -128,7 +121,7 @@ TEST_F(RenderViewTest, ExtensionMessagesOnConnect) { // Now simulate getting a message back from the channel opener. render_thread_.sink().ClearMessages(); - DispatchOnMessage("{\"val\": 42}", kPortId); + RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}"); // Verify that we got it. const IPC::Message* alert_msg = |