summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_messages_unittest.cc
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/extensions/extension_messages_unittest.cc
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/extensions/extension_messages_unittest.cc')
-rw-r--r--chrome/browser/extensions/extension_messages_unittest.cc53
1 files changed, 47 insertions, 6 deletions
diff --git a/chrome/browser/extensions/extension_messages_unittest.cc b/chrome/browser/extensions/extension_messages_unittest.cc
index c3e92ce..45de6c7 100644
--- a/chrome/browser/extensions/extension_messages_unittest.cc
+++ b/chrome/browser/extensions/extension_messages_unittest.cc
@@ -2,12 +2,36 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "chrome/browser/extensions/extension_message_service.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/render_view_test.h"
#include "testing/gtest/include/gtest/gtest.h"
+static void DispatchOnConnect(int source_port_id, const std::string& tab_json) {
+ ListValue args;
+ args.Set(0, Value::CreateIntegerValue(source_port_id));
+ args.Set(1, Value::CreateStringValue(tab_json));
+ RendererExtensionBindings::Invoke(
+ ExtensionMessageService::kDispatchOnConnect, args);
+}
+
+static void DispatchOnDisconnect(int source_port_id) {
+ ListValue args;
+ args.Set(0, Value::CreateIntegerValue(source_port_id));
+ RendererExtensionBindings::Invoke(
+ ExtensionMessageService::kDispatchOnDisconnect, args);
+}
+
+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));
+ RendererExtensionBindings::Invoke(
+ ExtensionMessageService::kDispatchOnMessage, args);
+}
+
// Tests that the bindings for opening a channel to an extension and sending
// and receiving messages through that channel all works.
TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOpenChannel) {
@@ -39,7 +63,7 @@ TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOpenChannel) {
// Now simulate getting a message back from the other side.
render_thread_.sink().ClearMessages();
const int kPortId = 0;
- RendererExtensionBindings::HandleMessage("{\"val\": 42}", kPortId);
+ DispatchOnMessage("{\"val\": 42}", kPortId);
// Verify that we got it.
const IPC::Message* alert_msg =
@@ -52,25 +76,29 @@ TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOpenChannel) {
EXPECT_EQ(L"content got: 42", alert_param.a);
}
-// Tests that the bindings for handling a new channel connection and sending
-// and receiving messages through that channel all works.
+// Tests that the bindings for handling a new channel connection and channel
+// closing all works.
TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOnConnect) {
LoadHTML("<body></body>");
ExecuteJavaScript(
"chrome.self.onConnect.addListener(function (port) {"
+ " port.test = 24;"
" port.onMessage.addListener(doOnMessage);"
+ " port.onDisconnect.addListener(doOnDisconnect);"
" port.postMessage({message: 'onconnect from ' + port.tab.url});"
"});"
"function doOnMessage(msg, port) {"
" alert('got: ' + msg.val);"
+ "}"
+ "function doOnDisconnect(port) {"
+ " alert('disconnected: ' + port.test);"
"}");
render_thread_.sink().ClearMessages();
// Simulate a new connection being opened.
const int kPortId = 0;
- RendererExtensionBindings::HandleConnect(kPortId,
- "{\"url\":\"foo://bar\"}");
+ DispatchOnConnect(kPortId, "{\"url\":\"foo://bar\"}");
// Verify that we handled the new connection by posting a message.
const IPC::Message* post_msg =
@@ -83,7 +111,7 @@ TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOnConnect) {
// Now simulate getting a message back from the channel opener.
render_thread_.sink().ClearMessages();
- RendererExtensionBindings::HandleMessage("{\"val\": 42}", kPortId);
+ DispatchOnMessage("{\"val\": 42}", kPortId);
// Verify that we got it.
const IPC::Message* alert_msg =
@@ -94,4 +122,17 @@ TEST_F(RenderViewTest, DISABLED_ExtensionMessagesOnConnect) {
ViewHostMsg_RunJavaScriptMessage::SendParam alert_param;
ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
EXPECT_EQ(L"got: 42", alert_param.a);
+
+ // Now simulate the channel closing.
+ render_thread_.sink().ClearMessages();
+ DispatchOnDisconnect(kPortId);
+
+ // Verify that we got it.
+ alert_msg =
+ render_thread_.sink().GetUniqueMessageMatching(
+ ViewHostMsg_RunJavaScriptMessage::ID);
+ ASSERT_TRUE(alert_msg);
+ iter = IPC::SyncMessage::GetDataIterator(alert_msg);
+ ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
+ EXPECT_EQ(L"disconnected: 24", alert_param.a);
}