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/extensions/extension_messages_unittest.cc | |
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/extensions/extension_messages_unittest.cc')
-rw-r--r-- | chrome/browser/extensions/extension_messages_unittest.cc | 53 |
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); } |