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