diff options
author | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-17 19:32:43 +0000 |
---|---|---|
committer | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-17 19:32:43 +0000 |
commit | dfcb62a173898e182e2f10ca635deb753977b9f8 (patch) | |
tree | 39d4ca8b82cfc9f39f1726d4b0ad061cb141c516 /chrome/browser/automation | |
parent | 851c567a756e96913098ac03d84fb9ea5761558d (diff) | |
download | chromium_src-dfcb62a173898e182e2f10ca635deb753977b9f8.zip chromium_src-dfcb62a173898e182e2f10ca635deb753977b9f8.tar.gz chromium_src-dfcb62a173898e182e2f10ca635deb753977b9f8.tar.bz2 |
Add a port disconnect event for when one side of an extension message port
goes away.
Combine the various ExtensionMessageService IPC message into a single "Invoke"
message.
BUG=12686
TEST=no
Review URL: http://codereview.chromium.org/126234
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18645 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r-- | chrome/browser/automation/extension_port_container.cc | 21 | ||||
-rw-r--r-- | chrome/browser/automation/extension_port_container.h | 4 |
2 files changed, 23 insertions, 2 deletions
diff --git a/chrome/browser/automation/extension_port_container.cc b/chrome/browser/automation/extension_port_container.cc index a0846e5..7fd04dd 100644 --- a/chrome/browser/automation/extension_port_container.cc +++ b/chrome/browser/automation/extension_port_container.cc @@ -7,6 +7,7 @@ #include "base/logging.h" #include "base/json_reader.h" #include "base/json_writer.h" +#include "base/values.h" #include "chrome/common/render_messages.h" #include "chrome/browser/automation/automation_provider.h" #include "chrome/browser/automation/extension_automation_constants.h" @@ -91,8 +92,8 @@ bool ExtensionPortContainer::Send(IPC::Message *message) { DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI); IPC_BEGIN_MESSAGE_MAP(ExtensionPortContainer, *message) - IPC_MESSAGE_HANDLER(ViewMsg_ExtensionHandleMessage, - OnExtensionHandleMessage) + IPC_MESSAGE_HANDLER(ViewMsg_ExtensionMessageInvoke, + OnExtensionMessageInvoke) IPC_MESSAGE_UNHANDLED_ERROR() IPC_END_MESSAGE_MAP() @@ -100,6 +101,22 @@ bool ExtensionPortContainer::Send(IPC::Message *message) { return true; } +void ExtensionPortContainer::OnExtensionMessageInvoke( + const std::string& function_name, const ListValue& args) { + if (function_name == ExtensionMessageService::kDispatchOnMessage) { + DCHECK_EQ(args.GetSize(), 2); + + std::string message; + int source_port_id; + if (args.GetString(0, &message) && args.GetInteger(1, &source_port_id)) + OnExtensionHandleMessage(message, source_port_id); + } else if (function_name == ExtensionMessageService::kDispatchOnDisconnect) { + // do nothing + } else { + NOTREACHED() << function_name << " shouldn't be called."; + } +} + void ExtensionPortContainer::OnExtensionHandleMessage( const std::string& message, int source_port_id) { // Compose the reply message and fire it away. diff --git a/chrome/browser/automation/extension_port_container.h b/chrome/browser/automation/extension_port_container.h index 2758a9d..d9244b0 100644 --- a/chrome/browser/automation/extension_port_container.h +++ b/chrome/browser/automation/extension_port_container.h @@ -12,6 +12,7 @@ class AutomationProvider; class ExtensionMessageService; +class ListValue; class MessageLoop; class RenderViewHost; @@ -56,6 +57,9 @@ class ExtensionPortContainer : public IPC::Message::Sender { int connection_id); // Sends a response to the void SendConnectionResponse(int connection_id, int port_id); + + void OnExtensionMessageInvoke(const std::string& function_name, + const ListValue& args); void OnExtensionHandleMessage(const std::string& message, int source_port_id); // Our automation provider. |