OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 }); |
OLD | NEW |