summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation
diff options
context:
space:
mode:
authormpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-17 19:32:43 +0000
committermpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-17 19:32:43 +0000
commitdfcb62a173898e182e2f10ca635deb753977b9f8 (patch)
tree39d4ca8b82cfc9f39f1726d4b0ad061cb141c516 /chrome/browser/automation
parent851c567a756e96913098ac03d84fb9ea5761558d (diff)
downloadchromium_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.cc21
-rw-r--r--chrome/browser/automation/extension_port_container.h4
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.