OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 'use strict'; | 5 'use strict'; |
6 | 6 |
7 window.addEventListener('message', function(event) { | 7 // Tests don't start running until an async call to |
8 // Echo the data back to the source window. | 8 // chrome.mimeHandlerPrivate.getStreamInfo() completes, so queue any messages |
9 event.source.postMessage(event.data, '*'); | 9 // received until that point. |
10 }, false); | 10 var queuedMessages = []; |
| 11 |
| 12 function queueMessage(event) { |
| 13 queuedMessages.push(event); |
| 14 } |
| 15 |
| 16 window.addEventListener('message', queueMessage, false); |
11 | 17 |
12 var streamDetails; | 18 var streamDetails; |
13 | 19 |
14 function fetchUrl(url) { | 20 function fetchUrl(url) { |
15 return new Promise(function(resolve, reject) { | 21 return new Promise(function(resolve, reject) { |
16 var request = new XMLHttpRequest(); | 22 var request = new XMLHttpRequest(); |
17 request.onreadystatechange = function() { | 23 request.onreadystatechange = function() { |
18 if (request.readyState == 4) { | 24 if (request.readyState == 4) { |
19 resolve({ | 25 resolve({ |
20 status: request.status, | 26 status: request.status, |
21 data: request.responseText, | 27 data: request.responseText, |
22 }); | 28 }); |
23 } | 29 } |
24 }; | 30 }; |
25 request.open('GET', streamDetails.streamUrl, true); | 31 request.open('GET', streamDetails.streamUrl, true); |
26 request.send(); | 32 request.send(); |
27 }); | 33 }); |
28 } | 34 } |
29 | 35 |
| 36 function expectSuccessfulRead(response) { |
| 37 chrome.test.assertEq(200, response.status); |
| 38 chrome.test.assertEq('content to read\n', response.data); |
| 39 } |
| 40 |
| 41 function checkStreamDetails(name, embedded) { |
| 42 chrome.test.assertTrue(streamDetails.originalUrl.indexOf(name) != -1); |
| 43 chrome.test.assertEq('text/csv', streamDetails.mimeType); |
| 44 chrome.test.assertTrue(streamDetails.tabId != -1); |
| 45 chrome.test.assertEq(embedded, streamDetails.embedded); |
| 46 chrome.test.assertEq('text/csv', |
| 47 streamDetails.responseHeaders['Content-Type']); |
| 48 } |
| 49 |
30 var tests = [ | 50 var tests = [ |
31 function testBasic() { | 51 function testBasic() { |
32 chrome.test.assertEq( | 52 checkStreamDetails('testBasic.csv', false); |
33 'chrome-extension://oickdpebdnfbgkcaoklfcdhjniefkcji/testBasic.csv', | 53 fetchUrl(streamDetails.streamUrl) |
34 streamDetails.originalUrl); | 54 .then(expectSuccessfulRead) |
35 chrome.test.assertEq('text/csv', streamDetails.mimeType); | 55 .then(chrome.test.succeed); |
36 chrome.test.assertTrue(streamDetails.tabId != -1); | |
37 chrome.test.assertFalse(streamDetails.embedded); | |
38 | |
39 fetchUrl(streamDetails.streamUrl).then(function(response) { | |
40 chrome.test.assertEq(200, response.status); | |
41 chrome.test.assertEq('content to read\n', response.data); | |
42 chrome.test.succeed(); | |
43 }); | |
44 }, | 56 }, |
45 | 57 |
46 function testEmbedded() { | 58 function testEmbedded() { |
47 chrome.test.assertEq( | 59 checkStreamDetails('testEmbedded.csv', true); |
48 'chrome-extension://oickdpebdnfbgkcaoklfcdhjniefkcji/testEmbedded.csv', | 60 fetchUrl(streamDetails.streamUrl) |
49 streamDetails.originalUrl); | 61 .then(expectSuccessfulRead) |
50 chrome.test.assertEq('text/csv', streamDetails.mimeType); | 62 .then(chrome.test.succeed); |
51 chrome.test.assertTrue(streamDetails.tabId != -1); | 63 }, |
52 chrome.test.assertTrue(streamDetails.embedded); | |
53 | 64 |
54 fetchUrl(streamDetails.streamUrl).then(function(response) { | 65 function testIframe() { |
55 chrome.test.assertEq(200, response.status); | 66 checkStreamDetails('testIframe.csv', true); |
56 chrome.test.assertEq('content to read\n', response.data); | 67 var printMessageArrived = new Promise(function(resolve, reject) { |
57 chrome.test.succeed(); | 68 window.addEventListener('message', function(event) { |
| 69 chrome.test.assertEq('print', event.data.type); |
| 70 resolve(); |
| 71 }, false); |
58 }); | 72 }); |
| 73 var contentRead = fetchUrl(streamDetails.streamUrl) |
| 74 .then(expectSuccessfulRead); |
| 75 Promise.all([printMessageArrived, contentRead]).then(chrome.test.succeed); |
59 }, | 76 }, |
60 | 77 |
61 function testAbort() { | 78 function testAbort() { |
| 79 checkStreamDetails('testAbort.csv', false); |
62 chrome.mimeHandlerPrivate.abortStream(function() { | 80 chrome.mimeHandlerPrivate.abortStream(function() { |
63 fetchUrl(streamDetails.streamUrl).then(function(response) { | 81 fetchUrl(streamDetails.streamUrl).then(function(response) { |
64 chrome.test.assertEq(404, response.status); | 82 chrome.test.assertEq(404, response.status); |
65 chrome.test.assertEq('', response.data); | 83 chrome.test.assertEq('', response.data); |
66 chrome.test.succeed(); | 84 chrome.test.succeed(); |
67 }); | 85 }); |
68 }); | 86 }); |
69 }, | 87 }, |
| 88 |
| 89 function testPostMessage() { |
| 90 var expectedMessages = ['hey', 100, 25.0]; |
| 91 var messagesReceived = 0; |
| 92 function handleMessage(event) { |
| 93 if (event.data == 'succeed' && |
| 94 messagesReceived == expectedMessages.length) { |
| 95 chrome.test.succeed(); |
| 96 } else if (event.data == 'fail') { |
| 97 chrome.test.fail(); |
| 98 } else if (event.data == expectedMessages[messagesReceived]) { |
| 99 event.source.postMessage(event.data, '*'); |
| 100 messagesReceived++; |
| 101 } else { |
| 102 chrome.test.fail('unexpected message ' + event.data); |
| 103 } |
| 104 } |
| 105 window.addEventListener('message', handleMessage, false); |
| 106 while (queuedMessages.length) { |
| 107 handleMessage(queuedMessages.shift()); |
| 108 } |
| 109 |
| 110 } |
70 ]; | 111 ]; |
71 | 112 |
72 var testsByName = {}; | 113 var testsByName = {}; |
73 for (let i = 0; i < tests.length; i++) { | 114 for (let i = 0; i < tests.length; i++) { |
74 testsByName[tests[i].name] = tests[i]; | 115 testsByName[tests[i].name] = tests[i]; |
75 } | 116 } |
76 | 117 |
77 chrome.mimeHandlerPrivate.getStreamInfo(function(streamInfo) { | 118 chrome.mimeHandlerPrivate.getStreamInfo(function(streamInfo) { |
78 if (!streamInfo) | 119 if (!streamInfo) |
79 return; | 120 return; |
80 | 121 |
81 // If the name of the file we're handling matches the name of a test, run that | 122 // If the name of the file we're handling matches the name of a test, run that |
82 // test. | 123 // test. |
83 var urlComponents = streamInfo.originalUrl.split('/'); | 124 var urlComponents = streamInfo.originalUrl.split('/'); |
84 var test = urlComponents[urlComponents.length - 1].split('.')[0]; | 125 var test = urlComponents[urlComponents.length - 1].split('.')[0]; |
85 streamDetails = streamInfo; | 126 streamDetails = streamInfo; |
86 if (testsByName[test]) | 127 if (testsByName[test]) { |
| 128 window.removeEventListener('message', queueMessage); |
87 chrome.test.runTests([testsByName[test]]); | 129 chrome.test.runTests([testsByName[test]]); |
| 130 } |
88 }); | 131 }); |
OLD | NEW |