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

Unified Diff: chrome/test/data/extensions/api_test/downloads/test.js

Issue 10542038: Rewrite DownloadsApiTest in C++. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/downloads/test.js
diff --git a/chrome/test/data/extensions/api_test/downloads/test.js b/chrome/test/data/extensions/api_test/downloads/test.js
deleted file mode 100644
index 744525bcf2b4a6b2c5236b60fb7c8c6c5fbe4792..0000000000000000000000000000000000000000
--- a/chrome/test/data/extensions/api_test/downloads/test.js
+++ /dev/null
@@ -1,1100 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// downloads api test
-// browser_tests.exe --gtest_filter=DownloadsApiTest.Downloads
-
-// Comment this out to enable debugging.
-console.debug = function() {};
-
-function debugObject(obj) {
- for (var property in obj) {
- console.debug(property + ': ' + obj[property]);
- }
-}
-
-window.requestFileSystem = (window.requestFileSystem ||
- window.webkitRequestFileSystem);
-window.BlobBuilder = (window.BlobBuilder ||
- window.WebKitBlobBuilder);
-
-var downloads = chrome.downloads;
-
-// These strings may change. Do not rely on them in non-test extensions.
-var ERROR_GENERIC = "I'm afraid I can't do that.";
-var ERROR_INVALID_URL = 'Invalid URL.';
-var ERROR_INVALID_OPERATION = 'Invalid operation.';
-
-chrome.test.getConfig(function(testConfig) {
- function getURL(path) {
- return 'http://localhost:' + testConfig.testServer.port + '/' + path;
- }
-
- var nextId = 0;
- function getNextId() {
- return nextId++;
- }
-
- // There can be only one assertThrows per test function. This should be
- // called as follows:
- //
- // assertThrows(exceptionMessage, function, [arg1, [arg2, ... ]])
- //
- // ... where |exceptionMessage| is the expected exception message.
- // |arg1|, |arg2|, etc.. are arguments to |function|.
- function assertThrows(exceptionMessage, func) {
- var args = Array.prototype.slice.call(arguments, 2);
- try {
- args.push(function() {
- // Don't use chrome.test.callbackFail because it requires the
- // callback to be called.
- chrome.test.fail('Failed to throw exception (' +
- exceptionMessage + ')');
- });
- func.apply(null, args);
- } catch (exception) {
- chrome.test.assertEq(exceptionMessage, exception.message);
- chrome.test.succeed();
- }
- }
-
- // The "/slow" handler waits a specified amount of time before returning a
- // safe file. Specify zero seconds to return quickly.
- var SAFE_FAST_URL = getURL('slow?0');
-
- var NEVER_FINISH_URL = getURL('download-known-size');
-
- // This URL should only work with the POST method and a request body
- // containing 'BODY'.
- var POST_URL = getURL('files/post/downloads/a_zip_file.zip?' +
- 'expected_body=BODY');
-
- // This URL should only work with headers 'Foo: bar' and 'Qx: yo'.
- var HEADERS_URL = getURL('files/downloads/a_zip_file.zip?' +
- 'expected_headers=Foo:bar&expected_headers=Qx:yo');
-
- // A simple handler that requires http auth basic.
- var AUTH_BASIC_URL = getURL('auth-basic');
-
- // This is just base64 of 'username:secret'.
- var AUTHORIZATION = 'dXNlcm5hbWU6c2VjcmV0';
-
- chrome.test.runTests([
- // TODO(benjhayden): Test onErased using remove().
-
- // TODO(benjhayden): Sub-directories depend on http://crbug.com/109443
- // TODO(benjhayden): Windows slashes.
- // function downloadSubDirectoryFilename() {
- // var downloadId = getNextId();
- // var callbackCompleted = chrome.test.callbackAdded();
- // function myListener(delta) {
- // if ((delta.id != downloadId) ||
- // !delta.filename ||
- // (delta.filename.current.indexOf('/foo/slow') == -1))
- // return;
- // downloads.onChanged.removeListener(myListener);
- // callbackCompleted();
- // }
- // downloads.onChanged.addListener(myListener);
- // downloads.download(
- // {'url': SAFE_FAST_URL, 'filename': 'foo/slow'},
- // chrome.test.callback(function(id) {
- // chrome.test.assertEq(downloadId, id);
- // }));
- // },
-
- function downloadBlob() {
- // Test that we can begin a download for a blob.
- var downloadId = getNextId();
- console.debug(downloadId);
- function getBlobURL(data, filename, callback) {
- var dirname = '' + Math.random();
- function fileSystemError(operation, data) {
- return function(fileError) {
- callback(null, {operation: operation,
- data: data,
- code: fileError.code});
- }
- }
- window.requestFileSystem(TEMPORARY, 5*1024*1024, function(fs) {
- fs.root.getDirectory(dirname, {create: true, exclusive: true},
- function(dirEntry) {
- dirEntry.getFile(filename, {create: true, exclusive: true},
- function(fileEntry) {
- fileEntry.createWriter(function(fileWriter) {
- fileWriter.onwriteend = function(e) {
- callback(fileEntry.toURL(), null);
- };
- fileWriter.onerror = function(e) {
- callback(null, ('Write failed: ' + e.toString()));
- };
- var bb = new window.BlobBuilder();
- bb.append(data);
- fileWriter.write(bb.getBlob());
- }, fileSystemError('createWriter'));
- }, fileSystemError('getFile', filename));
- }, fileSystemError('getDirectory', dirname));
- }, fileSystemError('requestFileSystem'));
- }
-
- getBlobURL('Lorem ipsum', downloadId + '.txt',
- chrome.test.callback(function(blobUrl, blobError) {
- if (blobError)
- throw blobError;
- console.debug(blobUrl);
- downloads.download(
- {'url': blobUrl},
- chrome.test.callback(function(id) {
- console.debug(id);
- chrome.test.assertEq(downloadId, id);
- }));
- }));
- },
-
- function downloadSimple() {
- // Test that we can begin a download.
- var downloadId = getNextId();
- console.debug(downloadId);
- downloads.download(
- {'url': SAFE_FAST_URL},
- chrome.test.callback(function(id) {
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadOnChanged() {
- // Test that download completion is detectable by an onChanged event
- // listener.
- var downloadId = getNextId();
- console.debug(downloadId);
- var callbackCompleted = chrome.test.callbackAdded();
- function myListener(delta) {
- console.debug(JSON.stringify(delta));
- if ((delta.id != downloadId) ||
- !delta.state)
- return;
- chrome.test.assertEq('complete', delta.state.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(myListener);
- callbackCompleted();
- }
- downloads.onChanged.addListener(myListener);
- downloads.download(
- {"url": SAFE_FAST_URL},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadAuthBasicFail() {
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides completion.
- if ((delta.id != downloadId) ||
- !delta.state ||
- !delta.error)
- return;
- console.debug(downloadId);
- chrome.test.assertEq('interrupted', delta.state.current);
- chrome.test.assertEq(30, delta.error.current);
- downloads.onChanged.removeListener(changedListener);
- if (changedCompleted) {
- changedCompleted();
- changedCompleted = null;
- }
- }
- downloads.onChanged.addListener(changedListener);
-
- // Sometimes the DownloadsEventRouter detects the item for the first time
- // after the item has already been interrupted. In this case, the
- // onChanged event never fires, so run the changedListener manually. If
- // the DownloadsEventRouter detects the item before it's interrupted, then
- // the onChanged event should fire correctly.
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(createdItem) {
- console.debug(createdItem.id);
- // Ignore events for any download besides our own.
- if (createdItem.id != downloadId)
- return;
- console.debug(downloadId);
- downloads.onCreated.removeListener(createdListener);
- createdCompleted();
- if (createdItem.state == 'interrupted') {
- changedListener({id: downloadId,
- state: {current: createdItem.state},
- error: {current: createdItem.error}});
- }
- }
- downloads.onCreated.addListener(createdListener);
-
- downloads.download(
- {'url': AUTH_BASIC_URL,
- 'filename': downloadId + '.txt'},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadAuthBasicSucceed() {
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides completion.
- if ((delta.id != downloadId) ||
- !delta.state)
- return;
- chrome.test.assertEq('complete', delta.state.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(changedListener);
- changedCompleted();
- }
- downloads.onChanged.addListener(changedListener);
-
- downloads.download(
- {'url': AUTH_BASIC_URL,
- 'headers': [{'name': 'Authorization',
- 'value': 'Basic ' + AUTHORIZATION}],
- 'filename': downloadId + '.txt'},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadPostSuccess() {
- // Test the |method| download option.
- var downloadId = getNextId();
- console.debug(downloadId);
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides completion.
- if ((delta.id != downloadId) ||
- !delta.state)
- return;
- chrome.test.assertEq('complete', delta.state.current);
- console.debug(downloadId);
- downloads.search({id: downloadId},
- chrome.test.callback(function(items) {
- console.debug(downloadId);
- chrome.test.assertEq(1, items.length);
- chrome.test.assertEq(downloadId, items[0].id);
- debugObject(items[0]);
- var EXPECTED_SIZE = 164;
- chrome.test.assertEq(EXPECTED_SIZE, items[0].bytesReceived);
- }));
- downloads.onChanged.removeListener(changedListener);
- changedCompleted();
- }
- downloads.onChanged.addListener(changedListener);
-
- downloads.download(
- {'url': POST_URL,
- 'method': 'POST',
- 'filename': downloadId + '.txt',
- 'body': 'BODY'},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadPostWouldFailWithoutMethod() {
- // Test that downloadPostSuccess would fail if the resource requires the
- // POST method, and chrome fails to propagate the |method| parameter back
- // to the server. This tests both that testserver.py does not succeed when
- // it should fail, and this tests how the downloads extension api exposes
- // the failure to extensions.
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides interruption.
- if ((delta.id != downloadId) ||
- !delta.state ||
- !delta.error)
- return;
- chrome.test.assertEq('interrupted', delta.state.current);
- chrome.test.assertEq(33, delta.error.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(changedListener);
- if (changedCompleted) {
- changedCompleted();
- changedCompleted = null;
- }
- }
- downloads.onChanged.addListener(changedListener);
-
- // Sometimes the DownloadsEventRouter detects the item for the first time
- // after the item has already been interrupted. In this case, the
- // onChanged event never fires, so run the changedListener manually. If
- // the DownloadsEventRouter detects the item before it's interrupted, then
- // the onChanged event should fire correctly.
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(createdItem) {
- console.debug(createdItem.id);
- // Ignore events for any download besides our own.
- if (createdItem.id != downloadId)
- return;
- console.debug(downloadId);
- downloads.onCreated.removeListener(createdListener);
- createdCompleted();
- if (createdItem.state == 'interrupted') {
- changedListener({id: downloadId,
- state: {current: createdItem.state},
- error: {current: createdItem.error}});
- }
- }
- downloads.onCreated.addListener(createdListener);
-
- downloads.download(
- {'url': POST_URL,
- 'filename': downloadId + '.txt', // Prevent 'file' danger.
- 'body': 'BODY'},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadPostWouldFailWithoutBody() {
- // Test that downloadPostSuccess would fail if the resource requires the
- // POST method and a request body, and chrome fails to propagate the
- // |body| parameter back to the server. This tests both that testserver.py
- // does not succeed when it should fail, and this tests how the downloads
- // extension api exposes the failure to extensions.
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides interruption.
- if ((delta.id != downloadId) ||
- !delta.state ||
- !delta.error)
- return;
- chrome.test.assertEq('interrupted', delta.state.current);
- chrome.test.assertEq(33, delta.error.current);
- if (delta.error) console.debug(delta.error.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(changedListener);
- if (changedCompleted) {
- changedCompleted();
- changedCompleted = null;
- }
- }
- downloads.onChanged.addListener(changedListener);
-
- // Sometimes the DownloadsEventRouter detects the item for the first time
- // after the item has already been interrupted. In this case, the
- // onChanged event never fires, so run the changedListener manually. If
- // the DownloadsEventRouter detects the item before it's interrupted, then
- // the onChanged event should fire correctly.
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(createdItem) {
- console.debug(createdItem.id);
- // Ignore events for any download besides our own.
- if (createdItem.id != downloadId)
- return;
- console.debug(downloadId);
- downloads.onCreated.removeListener(createdListener);
- createdCompleted();
- if (createdItem.state == 'interrupted') {
- changedListener({id: downloadId,
- state: {current: createdItem.state},
- error: {current: createdItem.error}});
- }
- }
- downloads.onCreated.addListener(createdListener);
-
- downloads.download(
- {'url': POST_URL,
- 'filename': downloadId + '.txt', // Prevent 'file' danger.
- 'method': 'POST'},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadHeadersSuccess() {
- // Test the |header| download option.
- var downloadId = getNextId();
- console.debug(downloadId);
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides completion.
- if ((delta.id != downloadId) ||
- !delta.state)
- return;
- chrome.test.assertEq('complete', delta.state.current);
- console.debug(downloadId);
- downloads.search({id: downloadId},
- chrome.test.callback(function(items) {
- console.debug(downloadId);
- chrome.test.assertEq(1, items.length);
- chrome.test.assertEq(downloadId, items[0].id);
- debugObject(items[0]);
- var EXPECTED_SIZE = 164;
- chrome.test.assertEq(EXPECTED_SIZE, items[0].bytesReceived);
- }));
- downloads.onChanged.removeListener(changedListener);
- changedCompleted();
- }
- downloads.onChanged.addListener(changedListener);
-
- downloads.download(
- {'url': HEADERS_URL,
- 'filename': downloadId + '.txt', // Prevent 'file' danger.
- 'headers': [{'name': 'Foo', 'value': 'bar'},
- {'name': 'Qx', 'value': 'yo'}]},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadHeadersWouldFail() {
- // Test that downloadHeadersSuccess() would fail if the resource requires
- // the headers, and chrome fails to propagate them back to the server.
- // This tests both that testserver.py does not succeed when it should
- // fail as well as how the downloads extension api exposes the
- // failure to extensions.
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides interruption.
- if ((delta.id != downloadId) ||
- !delta.state ||
- !delta.error)
- return;
- chrome.test.assertEq('interrupted', delta.state.current);
- chrome.test.assertEq(33, delta.error.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(changedListener);
- if (changedCompleted) {
- changedCompleted();
- changedCompleted = null;
- }
- }
- downloads.onChanged.addListener(changedListener);
-
- // Sometimes the DownloadsEventRouter detects the item for the first time
- // after the item has already been interrupted. In this case, the
- // onChanged event never fires, so run the changedListener manually. If
- // the DownloadsEventRouter detects the item before it's interrupted, then
- // the onChanged event should fire correctly.
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(createdItem) {
- console.debug(createdItem.id);
- // Ignore events for any download besides our own.
- if (createdItem.id != downloadId)
- return;
- console.debug(downloadId);
- downloads.onCreated.removeListener(createdListener);
- createdCompleted();
- if (createdItem.state == 'interrupted') {
- changedListener({id: downloadId,
- state: {current: createdItem.state},
- error: {current: createdItem.error}});
- }
- }
- downloads.onCreated.addListener(createdListener);
-
- downloads.download(
- {'url': HEADERS_URL},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadHeadersInvalid0() {
- // Test that we disallow certain headers case-insensitive.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'Accept-chArsEt', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid1() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'accept-eNcoding', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid2() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'coNNection', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid3() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'coNteNt-leNgth', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid4() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'cooKIE', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid5() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'cOOkie2', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid6() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'coNteNt-traNsfer-eNcodiNg', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid7() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'dAtE', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid8() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'ExpEcT', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid9() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'hOsT', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid10() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'kEEp-aLivE', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid11() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'rEfErEr', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid12() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'tE', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid13() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'trAilER', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid14() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'trANsfer-eNcodiNg', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid15() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'upGRAde', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid16() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'usER-agENt', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid17() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'viA', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid18() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'pRoxY-', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid19() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'sEc-', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid20() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'pRoxY-probably-not-evil', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid21() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'sEc-probably-not-evil', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid22() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'oRiGiN', 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid23() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'Access-Control-Request-Headers',
- 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadHeadersInvalid24() {
- // Test that we disallow certain headers.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{'name': 'Access-Control-Request-Method',
- 'value': 'evil'}]},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadInterrupted() {
- // Test that cancel()ing an in-progress download causes its state to
- // transition to interrupted, and test that that state transition is
- // detectable by an onChanged event listener.
- // TODO(benjhayden): Test other sources of interruptions such as server
- // death.
- var downloadId = getNextId();
- console.debug(downloadId);
-
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(createdItem) {
- console.debug(createdItem.id);
- // Ignore onCreated events for any download besides our own.
- if (createdItem.id != downloadId)
- return;
- console.debug(downloadId);
- // TODO(benjhayden) Move this cancel() into the download() callback
- // after ensuring that DownloadItems are created before that callback
- // is fired.
- downloads.cancel(downloadId, chrome.test.callback(function() {
- console.debug(downloadId);
- }));
- downloads.onCreated.removeListener(createdListener);
- createdCompleted();
- }
- downloads.onCreated.addListener(createdListener);
-
- var changedCompleted = chrome.test.callbackAdded();
- function changedListener(delta) {
- console.debug(delta.id);
- // Ignore onChanged events for downloads besides our own, or events that
- // signal any change besides interruption.
- if ((delta.id != downloadId) ||
- !delta.state ||
- !delta.error)
- return;
- chrome.test.assertEq('interrupted', delta.state.current);
- chrome.test.assertEq(40, delta.error.current);
- console.debug(downloadId);
- downloads.onChanged.removeListener(changedListener);
- changedCompleted();
- }
- downloads.onChanged.addListener(changedListener);
-
- downloads.download(
- {'url': NEVER_FINISH_URL},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadFilename() {
- // Test that we can suggest a filename for a new download, and test that
- // we can detect filename changes with an onChanged event listener.
- var FILENAME = 'owiejtoiwjrfoiwjroiwjroiwjroiwjrfi';
- var downloadId = getNextId();
- console.debug(downloadId);
- var callbackCompleted = chrome.test.callbackAdded();
- function myListener(delta) {
- console.debug(delta.id);
- if ((delta.id != downloadId) ||
- !delta.filename ||
- (delta.filename.current.indexOf(FILENAME) == -1))
- return;
- console.debug(downloadId);
- downloads.onChanged.removeListener(myListener);
- callbackCompleted();
- }
- downloads.onChanged.addListener(myListener);
- downloads.download(
- {'url': SAFE_FAST_URL, 'filename': FILENAME},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- // TODO(benjhayden): Update this test when downloading to sub-directories is
- // supported.
- function downloadFilenameDisallowSlashes() {
- downloads.download(
- {'url': SAFE_FAST_URL, 'filename': 'subdirectory/file.txt'},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadOnCreated() {
- // Test that the onCreated event fires when we start a download.
- var downloadId = getNextId();
- console.debug(downloadId);
- var createdCompleted = chrome.test.callbackAdded();
- function createdListener(item) {
- console.debug(item.id);
- if (item.id != downloadId)
- return;
- console.debug(downloadId);
- createdCompleted();
- downloads.onCreated.removeListener(createdListener);
- };
- downloads.onCreated.addListener(createdListener);
- downloads.download(
- {'url': SAFE_FAST_URL},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadInvalidFilename() {
- // Test that we disallow invalid filenames for new downloads.
- downloads.download(
- {'url': SAFE_FAST_URL, 'filename': '../../../../../etc/passwd'},
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadEmpty() {
- assertThrows(('Invalid value for argument 1. Property \'url\': ' +
- 'Property is required.'),
- downloads.download, {});
- },
-
- function downloadInvalidSaveAs() {
- assertThrows(('Invalid value for argument 1. Property \'saveAs\': ' +
- 'Expected \'boolean\' but got \'string\'.'),
- downloads.download,
- {'url': SAFE_FAST_URL, 'saveAs': 'GOAT'});
- },
-
- function downloadInvalidHeadersOption() {
- assertThrows(('Invalid value for argument 1. Property \'headers\': ' +
- 'Expected \'array\' but got \'string\'.'),
- downloads.download,
- {'url': SAFE_FAST_URL, 'headers': 'GOAT'});
- },
-
- function downloadInvalidURL0() {
- // Test that download() requires a valid url.
- downloads.download(
- {'url': 'foo bar'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL1() {
- // Test that download() requires a valid url, including protocol and
- // hostname.
- downloads.download(
- {'url': '../hello'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL2() {
- // Test that download() requires a valid url, including protocol and
- // hostname.
- downloads.download(
- {'url': '/hello'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL3() {
- // Test that download() requires a valid url, including protocol.
- downloads.download(
- {'url': 'google.com/'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL4() {
- // Test that download() requires a valid url, including protocol and
- // hostname.
- downloads.download(
- {'url': 'http://'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL5() {
- // Test that download() requires a valid url, including protocol and
- // hostname.
- downloads.download(
- {'url': '#frag'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL6() {
- // Test that download() requires a valid url, including protocol and
- // hostname.
- downloads.download(
- {'url': 'foo/bar.html#frag'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadAllowFragments() {
- // Valid URLs plus fragments are still valid URLs.
- var downloadId = getNextId();
- console.debug(downloadId);
- downloads.download(
- {'url': SAFE_FAST_URL + '#frag'},
- chrome.test.callback(function(id) {
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadAllowDataURLs() {
- var downloadId = getNextId();
- downloads.download(
- {'url': 'data:text/plain,hello'},
- chrome.test.callback(function(id) {
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadAllowFileURLs() {
- // Valid file URLs are valid URLs.
- var downloadId = getNextId();
- console.debug(downloadId);
- downloads.download(
- {'url': 'file:///'},
- chrome.test.callback(function(id) {
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function downloadInvalidURL7() {
- // Test that download() rejects javascript urls.
- downloads.download(
- {'url': 'javascript:document.write("hello");'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL8() {
- // Test that download() rejects javascript urls.
- downloads.download(
- {'url': 'javascript:return false;'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- function downloadInvalidURL9() {
- // Test that download() rejects otherwise-valid URLs that fail the host
- // permissions check.
- downloads.download(
- {'url': 'ftp://example.com/example.txt'},
- chrome.test.callbackFail(ERROR_INVALID_URL));
- },
-
- // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to
- // permissions, maybe update downloadInvalidURL9.
- // function downloadAllowFTPURLs() {
- // // Valid ftp URLs are valid URLs.
- // var downloadId = getNextId();
- // console.debug(downloadId);
- // downloads.download(
- // {'url': 'ftp://localhost:' + testConfig.testServer.port + '/'},
- // chrome.test.callback(function(id) {
- // chrome.test.assertEq(downloadId, id);
- // }));
- // },
-
- function downloadInvalidMethod() {
- assertThrows(('Invalid value for argument 1. Property \'method\': ' +
- 'Value must be one of: [GET, POST].'),
- downloads.download,
- {'url': SAFE_FAST_URL, 'method': 'GOAT'});
- },
-
- function downloadInvalidHeader() {
- // Test that download() disallows setting the Cookie header.
- downloads.download(
- {'url': SAFE_FAST_URL,
- 'headers': [{ 'name': 'Cookie', 'value': 'fake'}]
- },
- chrome.test.callbackFail(ERROR_GENERIC));
- },
-
- function downloadGetFileIconInvalidOptions() {
- assertThrows(('Invalid value for argument 2. Property \'cat\': ' +
- 'Unexpected property.'),
- downloads.getFileIcon,
- -1, {cat: 'mouse'});
- },
-
- function downloadGetFileIconInvalidSize() {
- assertThrows(('Invalid value for argument 2. Property \'size\': ' +
- 'Value must be one of: [16, 32].'),
- downloads.getFileIcon, -1, {size: 31});
- },
-
- function downloadGetFileIconInvalidId() {
- downloads.getFileIcon(-42, {size: 32},
- chrome.test.callbackFail(ERROR_INVALID_OPERATION));
- },
-
- function downloadPauseInvalidId() {
- downloads.pause(-42, chrome.test.callbackFail(
- ERROR_INVALID_OPERATION));
- },
-
- function downloadPauseInvalidType() {
- assertThrows(('Invocation of form downloads.pause(string, function) ' +
- 'doesn\'t match definition downloads.pause(integer ' +
- 'downloadId, optional function NullCallback)'),
- downloads.pause,
- 'foo');
- },
-
- function downloadResumeInvalidId() {
- downloads.resume(-42, chrome.test.callbackFail(
- ERROR_INVALID_OPERATION));
- },
-
- function downloadResumeInvalidType() {
- assertThrows(('Invocation of form downloads.resume(string, function) ' +
- 'doesn\'t match definition downloads.resume(integer ' +
- 'downloadId, optional function NullCallback)'),
- downloads.resume,
- 'foo');
- },
-
- function downloadCancelInvalidId() {
- // Canceling a non-existent download is not considered an error.
- downloads.cancel(-42, chrome.test.callback(function() {
- console.debug('');
- }));
- },
-
- function downloadCancelInvalidType() {
- assertThrows(('Invocation of form downloads.cancel(string, function) ' +
- 'doesn\'t match definition downloads.cancel(integer ' +
- 'downloadId, optional function NullCallback)'),
- downloads.cancel, 'foo');
- },
-
- function downloadNoComplete() {
- // This is used partly to test cleanUp.
- var downloadId = getNextId();
- console.debug(downloadId);
- downloads.download(
- {'url': NEVER_FINISH_URL},
- chrome.test.callback(function(id) {
- console.debug(downloadId);
- chrome.test.assertEq(downloadId, id);
- }));
- },
-
- function cleanUp() {
- // cleanUp must come last. It clears out all in-progress downloads
- // so the browser can shutdown cleanly.
- console.debug(nextId);
- function makeCallback(id) {
- return function() {
- console.debug(id);
- }
- }
- for (var id = 0; id < nextId; ++id) {
- downloads.cancel(id, chrome.test.callback(makeCallback(id)));
- }
- },
-
- function callNotifyPass() {
- chrome.test.notifyPass();
- setTimeout(chrome.test.callback(function() {
- console.debug('');
- }), 0);
- }
- ]);
-});

Powered by Google App Engine
This is Rietveld 408576698