1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Downloads Test</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
async function background() {
const url = "http://mochi.test:8888/tests/mobile/shared/components/extensions/test/mochitest/context_tabs_onUpdated_page.html";
browser.test.assertThrows(
() => browser.downloads.download(),
/Incorrect argument types for downloads.download/,
"Should fail without options"
);
browser.test.assertThrows(
() => browser.downloads.download({url: "invalid url"}),
/invalid url is not a valid URL/,
"Should fail on invalid URL"
);
browser.test.assertThrows(
() => browser.downloads.download({}),
/Property "url" is required/,
"Should fail with no URL"
);
browser.test.assertThrows(
() => browser.downloads.download({url, method: "DELETE"}),
/Invalid enumeration value "DELETE"/,
"Should fail with invalid method"
);
await browser.test.assertRejects(
browser.downloads.download({url, headers: [{name: "Host", value: "Banana"}]}),
/Forbidden request header name/,
"Should fail with a forbidden header"
);
const absoluteFilename = SpecialPowers.Services.appinfo.OS === "WINNT"
? "C:\\tmp\\file.gif"
: "/tmp/file.gif";
await browser.test.assertRejects(
browser.downloads.download({url, filename: absoluteFilename}),
/filename must not be an absolute path/,
"Should fail with an absolute file path"
);
await browser.test.assertRejects(
browser.downloads.download({url, filename: ""}),
/filename must not be empty/,
"Should fail with an empty file path"
);
await browser.test.assertRejects(
browser.downloads.download({url, filename: "file."}),
/filename must not contain illegal characters/,
"Should fail with a dot in the filename"
);
await browser.test.assertRejects(
browser.downloads.download({url, filename: "123. file"}),
/filename must not contain illegal characters/,
"Should fail with a space after the trailing dot in the filename"
);
await browser.test.assertRejects(
browser.downloads.download({url, filename: "../file.gif"}),
/filename must not contain back-references/,
"Should fail with a file path that contains back-references"
);
browser.test.notifyPass("download.done");
}
add_task(async function test_invalid_download_parameters() {
const extension = ExtensionTestUtils.loadExtension({
manifest: {permissions: ["downloads"]},
background,
});
await extension.startup();
await extension.awaitFinish("download.done");
await extension.unload();
});
</script>
</body>
</html>
|