Chromium Code Reviews| 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 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 283 try { | 283 try { |
| 284 chrome.extension.onRequest.addListener(function() {}); | 284 chrome.extension.onRequest.addListener(function() {}); |
| 285 } catch(e) { | 285 } catch(e) { |
| 286 error = e; | 286 error = e; |
| 287 } | 287 } |
| 288 chrome.test.assertTrue(error != undefined); | 288 chrome.test.assertTrue(error != undefined); |
| 289 | 289 |
| 290 chrome.test.succeed(); | 290 chrome.test.succeed(); |
| 291 }, | 291 }, |
| 292 | 292 |
| 293 // Tests that chrome.runtime.sendMessage is *not* delivered to the current | |
| 294 // context, consistent behavior with chrome.runtime.connect() and web APIs | |
| 295 // like localStorage changed listeners. | |
| 296 // Regression test for http://crbug.com/479951. | |
| 297 function sendMessageToCurrentContextFails() { | |
| 298 var stopFailing = failWhileListening(chrome.runtime.onMessage); | |
|
Devlin
2015/04/28 22:24:40
nit: stopFailing is kinda a funny name...but I got
not at google - send to devlin
2015/04/28 22:46:31
I think of it like a function.
function stopFaili
| |
| 299 chrome.runtime.sendMessage('ping', chrome.test.callbackFail( | |
| 300 'Could not establish connection. Receiving end does not exist.', | |
| 301 function() { | |
| 302 stopFailing(); | |
| 303 chrome.test.succeed(); | |
| 304 } | |
| 305 )); | |
| 306 }, | |
| 307 | |
| 308 // Like sendMessageToCurrentContextFails, but with the sendMessage call not | |
| 309 // given a callback. This requires a more creative test setup because there | |
| 310 // is no callback to signal when it's supposed to have been done. | |
| 311 // Regression test for http://crbug.com/479951. | |
| 312 function sendMessageToCurrentTextWithoutCallbackFails() { | |
| 313 // Make the iframe - in a different context - watch for the message | |
| 314 // event. It *should* get it, while the current context's one doesn't. | |
| 315 var iframe = document.createElement('iframe'); | |
| 316 iframe.src = chrome.runtime.getURL('blank_iframe.html'); | |
| 317 document.body.appendChild(iframe); | |
| 318 | |
| 319 var stopFailing = failWhileListening(chrome.runtime.onMessage); | |
| 320 chrome.test.listenOnce( | |
| 321 iframe.contentWindow.chrome.runtime.onMessage, | |
| 322 function(msg, sender) { | |
| 323 chrome.test.assertEq('ping', msg); | |
| 324 chrome.test.assertEq(chrome.runtime.id, sender.id); | |
| 325 chrome.test.assertEq(location.href, sender.url); | |
| 326 setTimeout(function() { | |
| 327 stopFailing(); | |
| 328 chrome.test.succeed(); | |
| 329 }, 0); | |
| 330 } | |
| 331 ); | |
| 332 | |
| 333 chrome.runtime.sendMessage('ping'); | |
| 334 }, | |
| 293 ]); | 335 ]); |
| 294 }); | 336 }); |
| 295 | 337 |
| 296 function connectToTabWithFrameId(frameId, expectedMessages) { | 338 function connectToTabWithFrameId(frameId, expectedMessages) { |
| 297 var port = chrome.tabs.connect(testTab.id, { | 339 var port = chrome.tabs.connect(testTab.id, { |
| 298 frameId: frameId | 340 frameId: frameId |
| 299 }); | 341 }); |
| 300 var messages = []; | 342 var messages = []; |
| 301 var isDone = false; | 343 var isDone = false; |
| 302 listenForever(port.onMessage, function(message) { | 344 listenForever(port.onMessage, function(message) { |
| 303 if (isDone) // Should not get any messages after completing the test. | 345 if (isDone) // Should not get any messages after completing the test. |
| 304 chrome.test.fail( | 346 chrome.test.fail( |
| 305 'Unexpected message from port to frame ' + frameId + ': ' + message); | 347 'Unexpected message from port to frame ' + frameId + ': ' + message); |
| 306 | 348 |
| 307 messages.push(message); | 349 messages.push(message); |
| 308 isDone = messages.length == expectedMessages.length; | 350 isDone = messages.length == expectedMessages.length; |
| 309 if (isDone) { | 351 if (isDone) { |
| 310 chrome.test.assertEq(expectedMessages.sort(), messages.sort()); | 352 chrome.test.assertEq(expectedMessages.sort(), messages.sort()); |
| 311 chrome.test.succeed(); | 353 chrome.test.succeed(); |
| 312 } | 354 } |
| 313 }); | 355 }); |
| 314 listenOnce(port.onDisconnect, function() { | 356 listenOnce(port.onDisconnect, function() { |
| 315 if (!isDone) // The event should never be triggered when we expect messages. | 357 if (!isDone) // The event should never be triggered when we expect messages. |
| 316 chrome.test.fail('Unexpected disconnect from port to frame ' + frameId); | 358 chrome.test.fail('Unexpected disconnect from port to frame ' + frameId); |
| 317 }); | 359 }); |
| 318 port.postMessage({testSendMessageToFrame: true}); | 360 port.postMessage({testSendMessageToFrame: true}); |
| 319 chrome.test.log('connectToTabWithFrameId: port to frame ' + frameId); | 361 chrome.test.log('connectToTabWithFrameId: port to frame ' + frameId); |
| 320 } | 362 } |
| 363 | |
| 364 // Listens to |event| and returns a callback to run to stop listening. While | |
| 365 // listening, if |event| is fired, calls chrome.test.fail(). | |
| 366 function failWhileListening(event, doneListening) { | |
| 367 var failListener = function() { | |
| 368 chrome.test.fail('Event listener ran, but it shouldn\'t have. ' + | |
| 369 'It\'s possible that may be triggered flakily, but this ' + | |
| 370 'really is a real failure, not flaky sadness. Promise!'); | |
| 371 }; | |
| 372 var release = chrome.test.callbackAdded(); | |
| 373 event.addListener(failListener); | |
| 374 return function() { | |
| 375 event.removeListener(failListener); | |
| 376 release(); | |
| 377 }; | |
| 378 } | |
| OLD | NEW |