| 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 // Tests don't start running until an async call to | 7 // Tests don't start running until an async call to |
| 8 // chrome.mimeHandlerPrivate.getStreamInfo() completes, so queue any messages | 8 // chrome.mimeHandlerPrivate.getStreamInfo() completes, so queue any messages |
| 9 // received until that point. | 9 // received until that point. |
| 10 var queuedMessages = []; | 10 var queuedMessages = []; |
| 11 | 11 |
| 12 function queueMessage(event) { | 12 function queueMessage(event) { |
| 13 queuedMessages.push(event); | 13 queuedMessages.push(event); |
| 14 } | 14 } |
| 15 | 15 |
| 16 window.addEventListener('message', queueMessage, false); | 16 window.addEventListener('message', queueMessage, false); |
| 17 | 17 |
| 18 let mimeHandlerPromise = (async function() { |
| 19 let [frameInterfaces, mojom, connectionModule] = await Promise.all([ |
| 20 chrome.mojoPrivate.requireAsync('content/public/renderer/frame_interfaces'), |
| 21 chrome.mojoPrivate.requireAsync('extensions/common/api/mime_handler.mojom'), |
| 22 chrome.mojoPrivate.requireAsync('mojo/public/js/connection'), |
| 23 ]); |
| 24 return connectionModule.bindHandleToProxy( |
| 25 frameInterfaces.getInterface(mojom.MimeHandlerService.name), |
| 26 mojom.MimeHandlerService); |
| 27 })(); |
| 28 |
| 18 var streamDetails; | 29 var streamDetails; |
| 19 | 30 |
| 20 function fetchUrl(url) { | 31 function fetchUrl(url) { |
| 21 return new Promise(function(resolve, reject) { | 32 return new Promise(function(resolve, reject) { |
| 22 var request = new XMLHttpRequest(); | 33 var request = new XMLHttpRequest(); |
| 23 request.onreadystatechange = function() { | 34 request.onreadystatechange = function() { |
| 24 if (request.readyState == 4) { | 35 if (request.readyState == 4) { |
| 25 resolve({ | 36 resolve({ |
| 26 status: request.status, | 37 status: request.status, |
| 27 data: request.responseText, | 38 data: request.responseText, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 window.addEventListener('message', function(event) { | 88 window.addEventListener('message', function(event) { |
| 78 chrome.test.assertEq('print', event.data.type); | 89 chrome.test.assertEq('print', event.data.type); |
| 79 resolve(); | 90 resolve(); |
| 80 }, false); | 91 }, false); |
| 81 }); | 92 }); |
| 82 var contentRead = fetchUrl(streamDetails.streamUrl) | 93 var contentRead = fetchUrl(streamDetails.streamUrl) |
| 83 .then(expectSuccessfulRead); | 94 .then(expectSuccessfulRead); |
| 84 Promise.all([printMessageArrived, contentRead]).then(chrome.test.succeed); | 95 Promise.all([printMessageArrived, contentRead]).then(chrome.test.succeed); |
| 85 }, | 96 }, |
| 86 | 97 |
| 87 function testAbort() { | 98 async function testAbort() { |
| 88 checkStreamDetails('testAbort.csv', false); | 99 checkStreamDetails('testAbort.csv', false); |
| 89 chrome.mimeHandlerPrivate.abortStream(function() { | 100 |
| 90 fetchUrl(streamDetails.streamUrl).then(function(response) { | 101 let mimeHandlerInterface = await mimeHandlerPromise; |
| 91 chrome.test.assertEq(404, response.status); | 102 await mimeHandlerInterface.abortStream(); |
| 92 chrome.test.assertEq('', response.data); | 103 fetchUrl(streamDetails.streamUrl).then(function(response) { |
| 93 chrome.test.succeed(); | 104 chrome.test.assertEq(404, response.status); |
| 94 }); | 105 chrome.test.assertEq('', response.data); |
| 106 chrome.test.succeed(); |
| 95 }); | 107 }); |
| 96 }, | 108 }, |
| 97 | 109 |
| 98 function testNonAsciiHeaders() { | 110 function testNonAsciiHeaders() { |
| 99 checkStreamDetails('testNonAsciiHeaders.csv', false); | 111 checkStreamDetails('testNonAsciiHeaders.csv', false); |
| 100 chrome.test.assertEq(undefined, | 112 chrome.test.assertEq(undefined, |
| 101 streamDetails.responseHeaders['Content-Disposition']); | 113 streamDetails.responseHeaders['Content-Disposition']); |
| 102 chrome.test.assertEq(undefined, | 114 chrome.test.assertEq(undefined, |
| 103 streamDetails.responseHeaders['ü']); | 115 streamDetails.responseHeaders['ü']); |
| 104 chrome.test.succeed(); | 116 chrome.test.succeed(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 checkStreamDetails('testResizeBeforeAttach.csv', true); | 157 checkStreamDetails('testResizeBeforeAttach.csv', true); |
| 146 chrome.test.succeed(); | 158 chrome.test.succeed(); |
| 147 } | 159 } |
| 148 ]; | 160 ]; |
| 149 | 161 |
| 150 var testsByName = {}; | 162 var testsByName = {}; |
| 151 for (let i = 0; i < tests.length; i++) { | 163 for (let i = 0; i < tests.length; i++) { |
| 152 testsByName[tests[i].name] = tests[i]; | 164 testsByName[tests[i].name] = tests[i]; |
| 153 } | 165 } |
| 154 | 166 |
| 155 chrome.mimeHandlerPrivate.getStreamInfo(function(streamInfo) { | 167 function constructStreamInfoDict_(streamInfo) { |
| 168 var headers = {}; |
| 169 for (var header of streamInfo.response_headers) { |
| 170 headers[header[0]] = header[1]; |
| 171 } |
| 172 return { |
| 173 mimeType: streamInfo.mime_type, |
| 174 originalUrl: streamInfo.original_url, |
| 175 streamUrl: streamInfo.stream_url, |
| 176 tabId: streamInfo.tab_id, |
| 177 embedded: !!streamInfo.embedded, |
| 178 responseHeaders: headers, |
| 179 }; |
| 180 } |
| 181 |
| 182 (async function() { |
| 183 let mimeHandlerInterface = await mimeHandlerPromise; |
| 184 let streamInfo = constructStreamInfoDict_( |
| 185 (await mimeHandlerInterface.getStreamInfo()).stream_info); |
| 156 if (!streamInfo) | 186 if (!streamInfo) |
| 157 return; | 187 return; |
| 158 | 188 |
| 159 // If the name of the file we're handling matches the name of a test, run that | 189 // If the name of the file we're handling matches the name of a test, run that |
| 160 // test. | 190 // test. |
| 161 var urlComponents = streamInfo.originalUrl.split('/'); | 191 var urlComponents = streamInfo.originalUrl.split('/'); |
| 162 var test = urlComponents[urlComponents.length - 1].split('.')[0]; | 192 var test = urlComponents[urlComponents.length - 1].split('.')[0]; |
| 163 streamDetails = streamInfo; | 193 streamDetails = streamInfo; |
| 164 if (testsByName[test]) { | 194 if (testsByName[test]) { |
| 165 window.removeEventListener('message', queueMessage); | 195 window.removeEventListener('message', queueMessage); |
| 166 chrome.test.runTests([testsByName[test]]); | 196 chrome.test.runTests([testsByName[test]]); |
| 167 } | 197 } |
| 168 | 198 |
| 169 // Run the test for data URLs. | 199 // Run the test for data URLs. |
| 170 if (streamInfo.originalUrl.startsWith("data:")) { | 200 if (streamInfo.originalUrl.startsWith("data:")) { |
| 171 window.removeEventListener('message', queueMessage); | 201 window.removeEventListener('message', queueMessage); |
| 172 // Long data URLs get truncated. | 202 // Long data URLs get truncated. |
| 173 if (streamInfo.originalUrl == "data:") | 203 if (streamInfo.originalUrl == "data:") |
| 174 chrome.test.runTests([testsByName['testDataUrlLong']]); | 204 chrome.test.runTests([testsByName['testDataUrlLong']]); |
| 175 else | 205 else |
| 176 chrome.test.runTests([testsByName['testDataUrl']]); | 206 chrome.test.runTests([testsByName['testDataUrl']]); |
| 177 } | 207 } |
| 178 }); | 208 })(); |
| OLD | NEW |