Chromium Code Reviews| 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 |