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

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

Issue 10213002: Make downloads.download() respect host permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style Created 8 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // downloads api test 5 // downloads api test
6 // browser_tests.exe --gtest_filter=DownloadsApiTest.Downloads 6 // browser_tests.exe --gtest_filter=DownloadsApiTest.Downloads
7 7
8 // Comment this out to enable debugging. 8 // Comment this out to enable debugging.
9 console.debug = function() {}; 9 console.debug = function() {};
10 10
11 function debugObject(obj) { 11 function debugObject(obj) {
12 for (var property in obj) { 12 for (var property in obj) {
13 console.debug(property + ': ' + obj[property]); 13 console.debug(property + ': ' + obj[property]);
14 } 14 }
15 } 15 }
16 16
17 var downloads = chrome.experimental.downloads; 17 var downloads = chrome.experimental.downloads;
18 window.requestFileSystem = (window.requestFileSystem ||
19 window.webkitRequestFileSystem);
20 window.BlobBuilder = (window.BlobBuilder ||
21 window.WebKitBlobBuilder ||
22 window.MozBlobBuilder);
ericu 2012/05/03 17:14:55 Why MozBlobBuilder? This won't run on Firefox.
benjhayden 2012/05/03 19:38:35 Done.
18 23
19 chrome.test.getConfig(function(testConfig) { 24 chrome.test.getConfig(function(testConfig) {
20 function getURL(path) { 25 function getURL(path) {
21 return 'http://localhost:' + testConfig.testServer.port + '/' + path; 26 return 'http://localhost:' + testConfig.testServer.port + '/' + path;
22 } 27 }
23 28
24 var nextId = 0; 29 var nextId = 0;
25 function getNextId() { 30 function getNextId() {
26 return nextId++; 31 return nextId++;
27 } 32 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // Test that we can begin a download. 103 // Test that we can begin a download.
99 var downloadId = getNextId(); 104 var downloadId = getNextId();
100 console.debug(downloadId); 105 console.debug(downloadId);
101 downloads.download( 106 downloads.download(
102 {'url': SAFE_FAST_URL}, 107 {'url': SAFE_FAST_URL},
103 chrome.test.callback(function(id) { 108 chrome.test.callback(function(id) {
104 chrome.test.assertEq(downloadId, id); 109 chrome.test.assertEq(downloadId, id);
105 })); 110 }));
106 }, 111 },
107 112
113 function downloadBlob() {
114 // Test that we can begin a download for a blob.
115 var downloadId = getNextId();
116 console.debug(downloadId);
117 function getBlobURL(data, filename, callback) {
118 var dirname = '' + Math.random();
119 function fileSystemError(operation, data) {
120 return function(fileError) {
121 callback(null, {operation: operation,
122 data: data,
123 code: fileError.code});
124 }
125 }
126 window.requestFileSystem(TEMPORARY, 5*1024*1024, function(fs) {
127 fs.root.getDirectory(dirname, {create: true, exclusive: true},
128 function(dirEntry) {
129 dirEntry.getFile(filename, {create: true, exclusive: true},
130 function(fileEntry) {
131 fileEntry.createWriter(function(fileWriter) {
132 fileWriter.onwriteend = function(e) {
133 callback(fileEntry.toURL(), null);
134 };
135 fileWriter.onerror = function(e) {
136 callback(null, ('Write failed: ' + e.toString()));
137 };
138 var bb = new window.BlobBuilder();
139 bb.append(data);
140 fileWriter.write(bb.getBlob());
141 }, fileSystemError('createWriter'));
142 }, fileSystemError('getFile', filename));
143 }, fileSystemError('getDirectory', dirname));
144 }, fileSystemError('requestFileSystem'));
145 }
146
147 getBlobURL('Lorem ipsum', downloadId + '.txt',
148 chrome.test.callback(function(blobUrl, blobError) {
149 if (blobError)
150 throw blobError;
151 console.debug(blobUrl);
152 downloads.download(
153 {'url': blobUrl},
154 chrome.test.callback(function(id) {
155 console.debug(id);
156 chrome.test.assertEq(downloadId, id);
157 }));
158 }));
159 },
160
108 function downloadOnChanged() { 161 function downloadOnChanged() {
109 // Test that download completion is detectable by an onChanged event 162 // Test that download completion is detectable by an onChanged event
110 // listener. 163 // listener.
111 var downloadId = getNextId(); 164 var downloadId = getNextId();
112 console.debug(downloadId); 165 console.debug(downloadId);
113 var callbackCompleted = chrome.test.callbackAdded(); 166 var callbackCompleted = chrome.test.callbackAdded();
114 function myListener(delta) { 167 function myListener(delta) {
115 console.debug(delta.id); 168 console.debug(delta.id);
116 if ((delta.id != downloadId) || 169 if ((delta.id != downloadId) ||
117 !delta.state) 170 !delta.state)
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 // Valid file URLs are valid URLs. 776 // Valid file URLs are valid URLs.
724 var downloadId = getNextId(); 777 var downloadId = getNextId();
725 console.debug(downloadId); 778 console.debug(downloadId);
726 downloads.download( 779 downloads.download(
727 {'url': 'file:///'}, 780 {'url': 'file:///'},
728 chrome.test.callback(function(id) { 781 chrome.test.callback(function(id) {
729 chrome.test.assertEq(downloadId, id); 782 chrome.test.assertEq(downloadId, id);
730 })); 783 }));
731 }, 784 },
732 785
733 // TODO(benjhayden): Set up a test ftp server. 786 function downloadInvalidURL7() {
787 // Test that download() rejects javascript urls.
788 downloads.download(
789 {'url': 'javascript:document.write("hello");'},
790 chrome.test.callbackFail(downloads.ERROR_INVALID_URL));
791 },
792
793 function downloadInvalidURL8() {
794 // Test that download() rejects javascript urls.
795 downloads.download(
796 {'url': 'javascript:return false;'},
797 chrome.test.callbackFail(downloads.ERROR_INVALID_URL));
798 },
799
800 function downloadInvalidURL9() {
801 // Test that download() rejects otherwise-valid URLs that fail the host
802 // permissions check.
803 downloads.download(
804 {'url': 'ftp://example.com/example.txt'},
805 chrome.test.callbackFail(downloads.ERROR_INVALID_URL));
806 },
807
808 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to
809 // permissions, maybe update downloadInvalidURL9.
734 // function downloadAllowFTPURLs() { 810 // function downloadAllowFTPURLs() {
735 // // Valid ftp URLs are valid URLs. 811 // // Valid ftp URLs are valid URLs.
736 // var downloadId = getNextId(); 812 // var downloadId = getNextId();
737 // console.debug(downloadId); 813 // console.debug(downloadId);
738 // downloads.download( 814 // downloads.download(
739 // {'url': 'ftp://localhost:' + testConfig.testServer.port + '/'}, 815 // {'url': 'ftp://localhost:' + testConfig.testServer.port + '/'},
740 // chrome.test.callback(function(id) { 816 // chrome.test.callback(function(id) {
741 // chrome.test.assertEq(downloadId, id); 817 // chrome.test.assertEq(downloadId, id);
742 // })); 818 // }));
743 // }, 819 // },
744 820
745 function downloadInvalidURL7() {
746 // Test that download() rejects javascript urls.
747 downloads.download(
748 {'url': 'javascript:document.write("hello");'},
749 chrome.test.callbackFail('net::ERR_ACCESS_DENIED'));
750 },
751
752 function downloadInvalidURL8() {
753 // Test that download() rejects javascript urls.
754 downloads.download(
755 {'url': 'javascript:return false;'},
756 chrome.test.callbackFail('net::ERR_ACCESS_DENIED'));
757 },
758
759 function downloadInvalidMethod() { 821 function downloadInvalidMethod() {
760 assertThrows(('Invalid value for argument 1. Property \'method\': ' + 822 assertThrows(('Invalid value for argument 1. Property \'method\': ' +
761 'Value must be one of: [GET, POST].'), 823 'Value must be one of: [GET, POST].'),
762 downloads.download, 824 downloads.download,
763 {'url': SAFE_FAST_URL, 'method': 'GOAT'}); 825 {'url': SAFE_FAST_URL, 'method': 'GOAT'});
764 }, 826 },
765 827
766 function downloadInvalidHeader() { 828 function downloadInvalidHeader() {
767 // Test that download() disallows setting the Cookie header. 829 // Test that download() disallows setting the Cookie header.
768 downloads.download( 830 downloads.download(
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 }, 919 },
858 920
859 function callNotifyPass() { 921 function callNotifyPass() {
860 chrome.test.notifyPass(); 922 chrome.test.notifyPass();
861 setTimeout(chrome.test.callback(function() { 923 setTimeout(chrome.test.callback(function() {
862 console.debug(''); 924 console.debug('');
863 }), 0); 925 }), 0);
864 } 926 }
865 ]); 927 ]);
866 }); 928 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698