Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(773)

Side by Side Diff: chrome/test/data/extensions/api_test/mime_handler_view/embedded.js

Issue 878773002: Add a test for mime handler view iframes and make them work on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 });
OLDNEW
« no previous file with comments | « chrome/chrome_tests.gypi ('k') | chrome/test/data/extensions/api_test/mime_handler_view/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698