Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Side by Side Diff: chrome/browser/extensions/extension_messages_browsertest.cc

Issue 8143009: Reland 103263 - Revert 103263 - Merge 101221 - Reland 101111 - Only deliver extension messages to... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/874/src/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/utf_string_conversions.h" 5 #include "base/utf_string_conversions.h"
6 #include "base/values.h" 6 #include "base/values.h"
7 #include "chrome/browser/extensions/extension_message_service.h" 7 #include "chrome/browser/extensions/extension_message_service.h"
8 #include "chrome/common/extensions/extension_messages.h" 8 #include "chrome/common/extensions/extension_messages.h"
9 #include "chrome/common/render_messages.h" 9 #include "chrome/common/render_messages.h"
10 #include "chrome/renderer/extensions/event_bindings.h" 10 #include "chrome/renderer/extensions/event_bindings.h"
11 #include "chrome/renderer/extensions/renderer_extension_bindings.h"
11 #include "chrome/test/base/render_view_test.h" 12 #include "chrome/test/base/render_view_test.h"
12 #include "content/common/view_messages.h" 13 #include "content/common/view_messages.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 static void DispatchOnConnect(int source_port_id, const std::string& name, 16 static void DispatchOnConnect(int source_port_id, const std::string& name,
16 const std::string& tab_json) { 17 const std::string& tab_json) {
17 ListValue args; 18 ListValue args;
18 args.Set(0, Value::CreateIntegerValue(source_port_id)); 19 args.Set(0, Value::CreateIntegerValue(source_port_id));
19 args.Set(1, Value::CreateStringValue(name)); 20 args.Set(1, Value::CreateStringValue(name));
20 args.Set(2, Value::CreateStringValue(tab_json)); 21 args.Set(2, Value::CreateStringValue(tab_json));
21 // Testing extensionId. Set in EventBindings::HandleContextCreated. 22 // Testing extensionId. Set in EventBindings::HandleContextCreated.
22 // We use the same id for source & target to similute an extension "talking 23 // We use the same id for source & target to similute an extension "talking
23 // to itself". 24 // to itself".
24 args.Set(3, Value::CreateStringValue(EventBindings::kTestingExtensionId)); 25 args.Set(3, Value::CreateStringValue(EventBindings::kTestingExtensionId));
25 args.Set(4, Value::CreateStringValue(EventBindings::kTestingExtensionId)); 26 args.Set(4, Value::CreateStringValue(EventBindings::kTestingExtensionId));
26 EventBindings::CallFunction( 27 EventBindings::CallFunction(
27 "", ExtensionMessageService::kDispatchOnConnect, args, NULL, GURL()); 28 "", ExtensionMessageService::kDispatchOnConnect, args, NULL, GURL());
28 } 29 }
29 30
30 static void DispatchOnDisconnect(int source_port_id) { 31 static void DispatchOnDisconnect(int source_port_id) {
31 ListValue args; 32 ListValue args;
32 args.Set(0, Value::CreateIntegerValue(source_port_id)); 33 args.Set(0, Value::CreateIntegerValue(source_port_id));
33 EventBindings::CallFunction( 34 EventBindings::CallFunction(
34 "", ExtensionMessageService::kDispatchOnDisconnect, args, NULL, GURL()); 35 "", ExtensionMessageService::kDispatchOnDisconnect, args, NULL, GURL());
35 } 36 }
36 37
37 static void DispatchOnMessage(const std::string& message, int source_port_id) {
38 ListValue args;
39 args.Set(0, Value::CreateStringValue(message));
40 args.Set(1, Value::CreateIntegerValue(source_port_id));
41 EventBindings::CallFunction(
42 "", ExtensionMessageService::kDispatchOnMessage, args, NULL, GURL());
43 }
44
45 // Tests that the bindings for opening a channel to an extension and sending 38 // Tests that the bindings for opening a channel to an extension and sending
46 // and receiving messages through that channel all works. 39 // and receiving messages through that channel all works.
47 TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) { 40 TEST_F(RenderViewTest, ExtensionMessagesOpenChannel) {
48 render_thread_.sink().ClearMessages(); 41 render_thread_.sink().ClearMessages();
49 LoadHTML("<body></body>"); 42 LoadHTML("<body></body>");
50 ExecuteJavaScript( 43 ExecuteJavaScript(
51 "var port = chrome.extension.connect({name:'testName'});" 44 "var port = chrome.extension.connect({name:'testName'});"
52 "port.onMessage.addListener(doOnMessage);" 45 "port.onMessage.addListener(doOnMessage);"
53 "port.postMessage({message: 'content ready'});" 46 "port.postMessage({message: 'content ready'});"
54 "function doOnMessage(msg, port) {" 47 "function doOnMessage(msg, port) {"
(...skipping 14 matching lines...) Expand all
69 render_thread_.sink().GetUniqueMessageMatching( 62 render_thread_.sink().GetUniqueMessageMatching(
70 ExtensionHostMsg_PostMessage::ID); 63 ExtensionHostMsg_PostMessage::ID);
71 ASSERT_TRUE(post_msg); 64 ASSERT_TRUE(post_msg);
72 ExtensionHostMsg_PostMessage::Param post_params; 65 ExtensionHostMsg_PostMessage::Param post_params;
73 ExtensionHostMsg_PostMessage::Read(post_msg, &post_params); 66 ExtensionHostMsg_PostMessage::Read(post_msg, &post_params);
74 EXPECT_EQ("{\"message\":\"content ready\"}", post_params.b); 67 EXPECT_EQ("{\"message\":\"content ready\"}", post_params.b);
75 68
76 // Now simulate getting a message back from the other side. 69 // Now simulate getting a message back from the other side.
77 render_thread_.sink().ClearMessages(); 70 render_thread_.sink().ClearMessages();
78 const int kPortId = 0; 71 const int kPortId = 0;
79 DispatchOnMessage("{\"val\": 42}", kPortId); 72 RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}", NULL);
80 73
81 // Verify that we got it. 74 // Verify that we got it.
82 const IPC::Message* alert_msg = 75 const IPC::Message* alert_msg =
83 render_thread_.sink().GetUniqueMessageMatching( 76 render_thread_.sink().GetUniqueMessageMatching(
84 ViewHostMsg_RunJavaScriptMessage::ID); 77 ViewHostMsg_RunJavaScriptMessage::ID);
85 ASSERT_TRUE(alert_msg); 78 ASSERT_TRUE(alert_msg);
86 iter = IPC::SyncMessage::GetDataIterator(alert_msg); 79 iter = IPC::SyncMessage::GetDataIterator(alert_msg);
87 ViewHostMsg_RunJavaScriptMessage::SendParam alert_param; 80 ViewHostMsg_RunJavaScriptMessage::SendParam alert_param;
88 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param)); 81 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
89 EXPECT_EQ(ASCIIToUTF16("content got: 42"), alert_param.a); 82 EXPECT_EQ(ASCIIToUTF16("content got: 42"), alert_param.a);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 ExtensionHostMsg_PostMessage::ID); 114 ExtensionHostMsg_PostMessage::ID);
122 ASSERT_TRUE(post_msg); 115 ASSERT_TRUE(post_msg);
123 ExtensionHostMsg_PostMessage::Param post_params; 116 ExtensionHostMsg_PostMessage::Param post_params;
124 ExtensionHostMsg_PostMessage::Read(post_msg, &post_params); 117 ExtensionHostMsg_PostMessage::Read(post_msg, &post_params);
125 std::string expected_msg = 118 std::string expected_msg =
126 "{\"message\":\"onconnect from foo://bar name " + kPortName + "\"}"; 119 "{\"message\":\"onconnect from foo://bar name " + kPortName + "\"}";
127 EXPECT_EQ(expected_msg, post_params.b); 120 EXPECT_EQ(expected_msg, post_params.b);
128 121
129 // Now simulate getting a message back from the channel opener. 122 // Now simulate getting a message back from the channel opener.
130 render_thread_.sink().ClearMessages(); 123 render_thread_.sink().ClearMessages();
131 DispatchOnMessage("{\"val\": 42}", kPortId); 124 RendererExtensionBindings::DeliverMessage(kPortId, "{\"val\": 42}", NULL);
132 125
133 // Verify that we got it. 126 // Verify that we got it.
134 const IPC::Message* alert_msg = 127 const IPC::Message* alert_msg =
135 render_thread_.sink().GetUniqueMessageMatching( 128 render_thread_.sink().GetUniqueMessageMatching(
136 ViewHostMsg_RunJavaScriptMessage::ID); 129 ViewHostMsg_RunJavaScriptMessage::ID);
137 ASSERT_TRUE(alert_msg); 130 ASSERT_TRUE(alert_msg);
138 void* iter = IPC::SyncMessage::GetDataIterator(alert_msg); 131 void* iter = IPC::SyncMessage::GetDataIterator(alert_msg);
139 ViewHostMsg_RunJavaScriptMessage::SendParam alert_param; 132 ViewHostMsg_RunJavaScriptMessage::SendParam alert_param;
140 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param)); 133 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
141 EXPECT_EQ(ASCIIToUTF16("got: 42"), alert_param.a); 134 EXPECT_EQ(ASCIIToUTF16("got: 42"), alert_param.a);
142 135
143 // Now simulate the channel closing. 136 // Now simulate the channel closing.
144 render_thread_.sink().ClearMessages(); 137 render_thread_.sink().ClearMessages();
145 DispatchOnDisconnect(kPortId); 138 DispatchOnDisconnect(kPortId);
146 139
147 // Verify that we got it. 140 // Verify that we got it.
148 alert_msg = 141 alert_msg =
149 render_thread_.sink().GetUniqueMessageMatching( 142 render_thread_.sink().GetUniqueMessageMatching(
150 ViewHostMsg_RunJavaScriptMessage::ID); 143 ViewHostMsg_RunJavaScriptMessage::ID);
151 ASSERT_TRUE(alert_msg); 144 ASSERT_TRUE(alert_msg);
152 iter = IPC::SyncMessage::GetDataIterator(alert_msg); 145 iter = IPC::SyncMessage::GetDataIterator(alert_msg);
153 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param)); 146 ASSERT_TRUE(IPC::ReadParam(alert_msg, &iter, &alert_param));
154 EXPECT_EQ(ASCIIToUTF16("disconnected: 24"), alert_param.a); 147 EXPECT_EQ(ASCIIToUTF16("disconnected: 24"), alert_param.a);
155 } 148 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_message_service.cc ('k') | chrome/common/extensions/extension_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698