Chromium Code Reviews| Index: chrome/test/data/extensions/api_test/messaging/connect/test.js |
| diff --git a/chrome/test/data/extensions/api_test/messaging/connect/test.js b/chrome/test/data/extensions/api_test/messaging/connect/test.js |
| index 3e00629ed8a3606c9b4c0412acb3cfda6db20dff..0723021c724a61d3df31b315a255dc6f9249e4d8 100644 |
| --- a/chrome/test/data/extensions/api_test/messaging/connect/test.js |
| +++ b/chrome/test/data/extensions/api_test/messaging/connect/test.js |
| @@ -290,6 +290,48 @@ chrome.test.getConfig(function(config) { |
| chrome.test.succeed(); |
| }, |
| + // Tests that chrome.runtime.sendMessage is *not* delivered to the current |
| + // context, consistent behavior with chrome.runtime.connect() and web APIs |
| + // like localStorage changed listeners. |
| + // Regression test for http://crbug.com/479951. |
| + function sendMessageToCurrentContextFails() { |
| + 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
|
| + chrome.runtime.sendMessage('ping', chrome.test.callbackFail( |
| + 'Could not establish connection. Receiving end does not exist.', |
| + function() { |
| + stopFailing(); |
| + chrome.test.succeed(); |
| + } |
| + )); |
| + }, |
| + |
| + // Like sendMessageToCurrentContextFails, but with the sendMessage call not |
| + // given a callback. This requires a more creative test setup because there |
| + // is no callback to signal when it's supposed to have been done. |
| + // Regression test for http://crbug.com/479951. |
| + function sendMessageToCurrentTextWithoutCallbackFails() { |
| + // Make the iframe - in a different context - watch for the message |
| + // event. It *should* get it, while the current context's one doesn't. |
| + var iframe = document.createElement('iframe'); |
| + iframe.src = chrome.runtime.getURL('blank_iframe.html'); |
| + document.body.appendChild(iframe); |
| + |
| + var stopFailing = failWhileListening(chrome.runtime.onMessage); |
| + chrome.test.listenOnce( |
| + iframe.contentWindow.chrome.runtime.onMessage, |
| + function(msg, sender) { |
| + chrome.test.assertEq('ping', msg); |
| + chrome.test.assertEq(chrome.runtime.id, sender.id); |
| + chrome.test.assertEq(location.href, sender.url); |
| + setTimeout(function() { |
| + stopFailing(); |
| + chrome.test.succeed(); |
| + }, 0); |
| + } |
| + ); |
| + |
| + chrome.runtime.sendMessage('ping'); |
| + }, |
| ]); |
| }); |
| @@ -318,3 +360,19 @@ function connectToTabWithFrameId(frameId, expectedMessages) { |
| port.postMessage({testSendMessageToFrame: true}); |
| chrome.test.log('connectToTabWithFrameId: port to frame ' + frameId); |
| } |
| + |
| +// Listens to |event| and returns a callback to run to stop listening. While |
| +// listening, if |event| is fired, calls chrome.test.fail(). |
| +function failWhileListening(event, doneListening) { |
| + var failListener = function() { |
| + chrome.test.fail('Event listener ran, but it shouldn\'t have. ' + |
| + 'It\'s possible that may be triggered flakily, but this ' + |
| + 'really is a real failure, not flaky sadness. Promise!'); |
| + }; |
| + var release = chrome.test.callbackAdded(); |
| + event.addListener(failListener); |
| + return function() { |
| + event.removeListener(failListener); |
| + release(); |
| + }; |
| +} |