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