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

Side by Side Diff: chrome/test/data/extensions/api_test/messaging/connect/test.js

Issue 709933002: Add frameId to MessageSender (extension messaging API) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments put message in assertTrue Created 6 years, 1 month 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
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 var listenOnce = chrome.test.listenOnce; 5 var listenOnce = chrome.test.listenOnce;
6 var listenForever = chrome.test.listenForever; 6 var listenForever = chrome.test.listenForever;
7 7
8 JSON.parse = function() { 8 JSON.parse = function() {
9 return "JSON.parse clobbered by extension."; 9 return "JSON.parse clobbered by extension.";
10 }; 10 };
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 chrome.test.assertEq(msg.portName, portName); 63 chrome.test.assertEq(msg.portName, portName);
64 port.disconnect(); 64 port.disconnect();
65 }); 65 });
66 }, 66 },
67 67
68 // Tests that postMessage from the tab and its response works. 68 // Tests that postMessage from the tab and its response works.
69 function postMessageFromTab() { 69 function postMessageFromTab() {
70 listenOnce(chrome.runtime.onConnect, function(port) { 70 listenOnce(chrome.runtime.onConnect, function(port) {
71 chrome.test.assertEq({ 71 chrome.test.assertEq({
72 tab: testTab, 72 tab: testTab,
73 frameId: 0, // Main frame
73 url: testTab.url, 74 url: testTab.url,
74 id: chrome.runtime.id 75 id: chrome.runtime.id
75 }, port.sender); 76 }, port.sender);
76 listenOnce(port.onMessage, function(msg) { 77 listenOnce(port.onMessage, function(msg) {
77 chrome.test.assertTrue(msg.testPostMessageFromTab); 78 chrome.test.assertTrue(msg.testPostMessageFromTab);
78 port.postMessage({success: true, portName: port.name}); 79 port.postMessage({success: true, portName: port.name});
79 chrome.test.log("postMessageFromTab: got message from tab"); 80 chrome.test.log("postMessageFromTab: got message from tab");
80 }); 81 });
81 }); 82 });
82 83
83 var port = chrome.tabs.connect(testTab.id); 84 var port = chrome.tabs.connect(testTab.id);
84 port.postMessage({testPostMessageFromTab: true}); 85 port.postMessage({testPostMessageFromTab: true});
85 chrome.test.log("postMessageFromTab: sent first message to tab"); 86 chrome.test.log("postMessageFromTab: sent first message to tab");
86 listenOnce(port.onMessage, function(msg) { 87 listenOnce(port.onMessage, function(msg) {
87 port.disconnect(); 88 port.disconnect();
88 }); 89 });
89 }, 90 },
90 91
91 // Tests receiving a request from a content script and responding. 92 // Tests receiving a request from a content script and responding.
92 function sendMessageFromTab() { 93 function sendMessageFromTab() {
93 var doneListening = listenForever( 94 var doneListening = listenForever(
94 chrome.runtime.onMessage, 95 chrome.runtime.onMessage,
95 function(request, sender, sendResponse) { 96 function(request, sender, sendResponse) {
96 chrome.test.assertEq({ 97 chrome.test.assertEq({
97 tab: testTab, 98 tab: testTab,
99 frameId: 0, // Main frame
98 url: testTab.url, 100 url: testTab.url,
99 id: chrome.runtime.id 101 id: chrome.runtime.id
100 }, sender); 102 }, sender);
101 if (request.step == 1) { 103 if (request.step == 1) {
102 // Step 1: Page should send another request for step 2. 104 // Step 1: Page should send another request for step 2.
103 chrome.test.log("sendMessageFromTab: got step 1"); 105 chrome.test.log("sendMessageFromTab: got step 1");
104 sendResponse({nextStep: true}); 106 sendResponse({nextStep: true});
105 } else { 107 } else {
106 // Step 2. 108 // Step 2.
107 chrome.test.assertEq(request.step, 2); 109 chrome.test.assertEq(request.step, 2);
108 sendResponse(); 110 sendResponse();
109 doneListening(); 111 doneListening();
110 } 112 }
111 }); 113 });
112 114
113 var port = chrome.tabs.connect(testTab.id); 115 var port = chrome.tabs.connect(testTab.id);
114 port.postMessage({testSendMessageFromTab: true}); 116 port.postMessage({testSendMessageFromTab: true});
115 port.disconnect(); 117 port.disconnect();
116 chrome.test.log("sendMessageFromTab: sent first message to tab"); 118 chrome.test.log("sendMessageFromTab: sent first message to tab");
117 }, 119 },
118 120
121 // Tests that a message from a child frame has a correct frameId.
122 function sendMessageFromFrameInTab() {
123 // This test will run twice.
124 // At the first run, the frameId will be saved. At the second run we check
125 // whether the frameId is different from the previously saved frameId.
126 var runCount = 0;
127 var frameId;
128 listenForever(
129 chrome.runtime.onMessage,
130 function(request, sender, sendResponse) {
131 // Child frames have a positive frameId.
132 chrome.test.assertTrue(sender.frameId >= 1,
133 'frameId must be positive, but it is ' + sender.frameId);
134 if (runCount === 0)
135 frameId = sender.frameId;
136 else // The second (different) frame must have a different frameId.
137 chrome.test.assertTrue(sender.frameId != frameId);
138 delete sender.frameId;
139 chrome.test.assertEq({
140 tab: testTab,
141 url: request.frameUrl,
142 id: chrome.runtime.id
143 }, sender);
144
145 // Now test whether the frameId that we got back makes sense...
146 chrome.webNavigation.getAllFrames({
147 tabId: testTab.id
148 }, function(details) {
149 var frames = details.filter(function(frame) {
150 return frame.frameId === frameId;
151 });
152 // If |frames.length| is zero, then the frameId was bogus.
153 // If it is higher than one, then the webNavigation API is broken.
154 chrome.test.assertEq(frames.length, 1);
155 chrome.test.assertEq(frames[0].url, request.frameUrl);
156 if (++runCount == 2) {
157 // This is the second run, the test has completed.
158 doneListening();
159 }
160 });
161 }
162 );
not at google - send to devlin 2014/11/11 01:00:56 Sorry - why does it need to be as complicated as t
robwu 2014/11/11 21:32:47 and 3) frameId is positive and 4) frameId is uniqu
not at google - send to devlin 2014/11/11 22:01:58 3 and 4 seem implicitly tested by 1 and 2? So long
robwu 2014/11/11 22:20:49 Yes. We're commenting on an old version of the fil
163
164 var port = chrome.tabs.connect(testTab.id);
165 port.postMessage({testSendMessageFromFrame: true});
166 port.disconnect();
167 chrome.test.log("sendMessageFromFrameInTab: send 1st message to tab");
168 },
169
119 // Tests error handling when sending a request from a content script to an 170 // Tests error handling when sending a request from a content script to an
120 // invalid extension. 171 // invalid extension.
121 function sendMessageFromTabError() { 172 function sendMessageFromTabError() {
122 listenOnce( 173 listenOnce(
123 chrome.runtime.onMessage, 174 chrome.runtime.onMessage,
124 function(request, sender, sendResponse) { 175 function(request, sender, sendResponse) {
125 if (!request.success) 176 if (!request.success)
126 chrome.test.fail(); 177 chrome.test.fail();
127 } 178 }
128 ); 179 );
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } catch(e) { 256 } catch(e) {
206 error = e; 257 error = e;
207 } 258 }
208 chrome.test.assertTrue(error != undefined); 259 chrome.test.assertTrue(error != undefined);
209 260
210 chrome.test.succeed(); 261 chrome.test.succeed();
211 }, 262 },
212 263
213 ]); 264 ]);
214 }); 265 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698