summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-14 19:04:15 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-14 19:04:15 +0000
commit9966c15b544129454e32349c43e8bd8ddeaf42d9 (patch)
treeb0ee9d420f63526894aca6ceee33a3d927d2eb36 /chrome/browser
parentd443fba7a6e9ad4eaa9fd86e508ee3973bcf81cf (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/debugger/extension_ports_remote_service.cc13
-rw-r--r--chrome/browser/debugger/extension_ports_remote_service.h5
-rw-r--r--chrome/browser/extensions/extension_message_service.cc12
-rw-r--r--chrome/browser/extensions/extension_message_service.h1
-rw-r--r--chrome/browser/extensions/extension_messages_browsertest.cc13
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 =