Index: chrome/test/data/extensions/api_test/mime_handler_view/embedded.js |
diff --git a/chrome/test/data/extensions/api_test/mime_handler_view/embedded.js b/chrome/test/data/extensions/api_test/mime_handler_view/embedded.js |
index be6582391b15164c16d1a7d1ff66183a84c1d329..7341521355693c9d2cc18bd0b347e6fb8485c0a5 100644 |
--- a/chrome/test/data/extensions/api_test/mime_handler_view/embedded.js |
+++ b/chrome/test/data/extensions/api_test/mime_handler_view/embedded.js |
@@ -4,10 +4,16 @@ |
'use strict'; |
-window.addEventListener('message', function(event) { |
- // Echo the data back to the source window. |
- event.source.postMessage(event.data, '*'); |
-}, false); |
+// Tests don't start running until an async call to |
+// chrome.mimeHandlerPrivate.getStreamInfo() completes, so queue any messages |
+// received until that point. |
+var queuedMessages = []; |
+ |
+function queueMessage(event) { |
+ queuedMessages.push(event); |
+} |
+ |
+window.addEventListener('message', queueMessage, false); |
var streamDetails; |
@@ -27,38 +33,50 @@ function fetchUrl(url) { |
}); |
} |
+function expectSuccessfulRead(response) { |
+ chrome.test.assertEq(200, response.status); |
+ chrome.test.assertEq('content to read\n', response.data); |
+} |
+ |
+function checkStreamDetails(name, embedded) { |
+ chrome.test.assertTrue(streamDetails.originalUrl.indexOf(name) != -1); |
+ chrome.test.assertEq('text/csv', streamDetails.mimeType); |
+ chrome.test.assertTrue(streamDetails.tabId != -1); |
+ chrome.test.assertEq(embedded, streamDetails.embedded); |
+ chrome.test.assertEq('text/csv', |
+ streamDetails.responseHeaders['Content-Type']); |
+} |
+ |
var tests = [ |
function testBasic() { |
- chrome.test.assertEq( |
- 'chrome-extension://oickdpebdnfbgkcaoklfcdhjniefkcji/testBasic.csv', |
- streamDetails.originalUrl); |
- chrome.test.assertEq('text/csv', streamDetails.mimeType); |
- chrome.test.assertTrue(streamDetails.tabId != -1); |
- chrome.test.assertFalse(streamDetails.embedded); |
- |
- fetchUrl(streamDetails.streamUrl).then(function(response) { |
- chrome.test.assertEq(200, response.status); |
- chrome.test.assertEq('content to read\n', response.data); |
- chrome.test.succeed(); |
- }); |
+ checkStreamDetails('testBasic.csv', false); |
+ fetchUrl(streamDetails.streamUrl) |
+ .then(expectSuccessfulRead) |
+ .then(chrome.test.succeed); |
}, |
function testEmbedded() { |
- chrome.test.assertEq( |
- 'chrome-extension://oickdpebdnfbgkcaoklfcdhjniefkcji/testEmbedded.csv', |
- streamDetails.originalUrl); |
- chrome.test.assertEq('text/csv', streamDetails.mimeType); |
- chrome.test.assertTrue(streamDetails.tabId != -1); |
- chrome.test.assertTrue(streamDetails.embedded); |
- |
- fetchUrl(streamDetails.streamUrl).then(function(response) { |
- chrome.test.assertEq(200, response.status); |
- chrome.test.assertEq('content to read\n', response.data); |
- chrome.test.succeed(); |
+ checkStreamDetails('testEmbedded.csv', true); |
+ fetchUrl(streamDetails.streamUrl) |
+ .then(expectSuccessfulRead) |
+ .then(chrome.test.succeed); |
+ }, |
+ |
+ function testIframe() { |
+ checkStreamDetails('testIframe.csv', true); |
+ var printMessageArrived = new Promise(function(resolve, reject) { |
+ window.addEventListener('message', function(event) { |
+ chrome.test.assertEq('print', event.data.type); |
+ resolve(); |
+ }, false); |
}); |
+ var contentRead = fetchUrl(streamDetails.streamUrl) |
+ .then(expectSuccessfulRead); |
+ Promise.all([printMessageArrived, contentRead]).then(chrome.test.succeed); |
}, |
function testAbort() { |
+ checkStreamDetails('testAbort.csv', false); |
chrome.mimeHandlerPrivate.abortStream(function() { |
fetchUrl(streamDetails.streamUrl).then(function(response) { |
chrome.test.assertEq(404, response.status); |
@@ -67,6 +85,29 @@ var tests = [ |
}); |
}); |
}, |
+ |
+ function testPostMessage() { |
+ var expectedMessages = ['hey', 100, 25.0]; |
+ var messagesReceived = 0; |
+ function handleMessage(event) { |
+ if (event.data == 'succeed' && |
+ messagesReceived == expectedMessages.length) { |
+ chrome.test.succeed(); |
+ } else if (event.data == 'fail') { |
+ chrome.test.fail(); |
+ } else if (event.data == expectedMessages[messagesReceived]) { |
+ event.source.postMessage(event.data, '*'); |
+ messagesReceived++; |
+ } else { |
+ chrome.test.fail('unexpected message ' + event.data); |
+ } |
+ } |
+ window.addEventListener('message', handleMessage, false); |
+ while (queuedMessages.length) { |
+ handleMessage(queuedMessages.shift()); |
+ } |
+ |
+ } |
]; |
var testsByName = {}; |
@@ -83,6 +124,8 @@ chrome.mimeHandlerPrivate.getStreamInfo(function(streamInfo) { |
var urlComponents = streamInfo.originalUrl.split('/'); |
var test = urlComponents[urlComponents.length - 1].split('.')[0]; |
streamDetails = streamInfo; |
- if (testsByName[test]) |
+ if (testsByName[test]) { |
+ window.removeEventListener('message', queueMessage); |
chrome.test.runTests([testsByName[test]]); |
+ } |
}); |