diff options
author | ericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-14 19:51:12 +0000 |
---|---|---|
committer | ericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-14 19:51:12 +0000 |
commit | a485f51aef852de42617b523db71794349664764 (patch) | |
tree | 314280759db1734177b4255886a2f4bf547ce459 /chrome/browser | |
parent | 828e61af05541c2b9fb098a42e0955eae602431c (diff) | |
download | chromium_src-a485f51aef852de42617b523db71794349664764.zip chromium_src-a485f51aef852de42617b523db71794349664764.tar.gz chromium_src-a485f51aef852de42617b523db71794349664764.tar.bz2 |
Revert 101111 - 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
TBR=aa@chromium.org
Review URL: http://codereview.chromium.org/7888050
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101130 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
5 files changed, 30 insertions, 14 deletions
diff --git a/chrome/browser/debugger/extension_ports_remote_service.cc b/chrome/browser/debugger/extension_ports_remote_service.cc index cf46fb8..3c0275d 100644 --- a/chrome/browser/debugger/extension_ports_remote_service.cc +++ b/chrome/browser/debugger/extension_ports_remote_service.cc @@ -226,7 +226,6 @@ 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() @@ -239,7 +238,13 @@ void ExtensionPortsRemoteService::OnExtensionMessageInvoke( const std::string& function_name, const ListValue& args, const GURL& event_url) { - if (function_name == ExtensionMessageService::kDispatchOnDisconnect) { + 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) { DCHECK_EQ(args.GetSize(), 1u); int port_id; if (args.GetInteger(0, &port_id)) @@ -253,8 +258,8 @@ void ExtensionPortsRemoteService::OnExtensionMessageInvoke( } } -void ExtensionPortsRemoteService::OnDeliverMessage( - int port_id, const std::string& message) { +void ExtensionPortsRemoteService::OnExtensionMessage( + const std::string& message, int port_id) { 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 401f560..0a5eea6 100644 --- a/chrome/browser/debugger/extension_ports_remote_service.h +++ b/chrome/browser/debugger/extension_ports_remote_service.h @@ -77,15 +77,14 @@ class ExtensionPortsRemoteService : public DevToolsRemoteListener, const std::string& tool, const std::string& destination); - // Handles requests from ExtensionMessageService to invoke specific - // JavaScript functions. Currently we only handle the "disconnect" function. + // Handles a message from the ExtensionMessageService. 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 OnDeliverMessage(int port_id, const std::string& message); + void OnExtensionMessage(const std::string& message, int port_id); // 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 1fe3455..57df12a 100644 --- a/chrome/browser/extensions/extension_message_service.cc +++ b/chrome/browser/extensions/extension_message_service.cc @@ -50,6 +50,8 @@ const char ExtensionMessageService::kDispatchOnConnect[] = "Port.dispatchOnConnect"; const char ExtensionMessageService::kDispatchOnDisconnect[] = "Port.dispatchOnDisconnect"; +const char ExtensionMessageService::kDispatchOnMessage[] = + "Port.dispatchOnMessage"; namespace { @@ -86,10 +88,12 @@ static void DispatchOnDisconnect( } static void DispatchOnMessage(const ExtensionMessageService::MessagePort& port, - const std::string& message, int target_port_id) { - port.sender->Send( - new ExtensionMsg_DeliverMessage( - port.routing_id, target_port_id, message)); + 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())); } } // namespace diff --git a/chrome/browser/extensions/extension_message_service.h b/chrome/browser/extensions/extension_message_service.h index 380e3a9..cfcd7fe 100644 --- a/chrome/browser/extensions/extension_message_service.h +++ b/chrome/browser/extensions/extension_message_service.h @@ -56,6 +56,7 @@ 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 56be33c..ace9c0c 100644 --- a/chrome/browser/extensions/extension_messages_browsertest.cc +++ b/chrome/browser/extensions/extension_messages_browsertest.cc @@ -8,7 +8,6 @@ #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" @@ -35,6 +34,14 @@ 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) { @@ -69,7 +76,7 @@ TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) { // Now simulate getting a message back from the other side. render_thread_.sink().ClearMessages(); const int kPortId = 0; - RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}"); + DispatchOnMessage("{\"val\": 42}", kPortId); // Verify that we got it. const IPC::Message* alert_msg = @@ -121,7 +128,7 @@ TEST_F(RenderViewTest, ExtensionMessagesOnConnect) { // Now simulate getting a message back from the channel opener. render_thread_.sink().ClearMessages(); - RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}"); + DispatchOnMessage("{\"val\": 42}", kPortId); // Verify that we got it. const IPC::Message* alert_msg = |