summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html114
1 files changed, 114 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html
new file mode 100644
index 0000000000..530937c1ac
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_open.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test for permissions</title>
+ <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+ <script src="chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+</head>
+<body>
+
+<script type="text/javascript">
+"use strict";
+
+add_task(async function test_downloads_open_permission() {
+ function backgroundScript() {
+ browser.test.assertEq(browser.downloads.open, undefined,
+ "`downloads.open` permission is required.");
+ browser.test.notifyPass("downloads tests");
+ }
+
+ let extensionData = {
+ background: backgroundScript,
+ manifest: {
+ permissions: ["downloads"],
+ },
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+ await extension.awaitFinish("downloads tests");
+ await extension.unload();
+});
+
+add_task(async function test_downloads_open_requires_user_interaction() {
+ async function backgroundScript() {
+ await browser.test.assertRejects(
+ browser.downloads.open(10),
+ "downloads.open may only be called from a user input handler",
+ "The error is informative.");
+
+ browser.test.notifyPass("downloads tests");
+ }
+
+ let extensionData = {
+ background: backgroundScript,
+ manifest: {
+ permissions: ["downloads", "downloads.open"],
+ },
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+ await extension.awaitFinish("downloads tests");
+ await extension.unload();
+});
+
+add_task(async function downloads_open_invalid_id() {
+ async function pageScript() {
+ window.addEventListener("keypress", async function handler() {
+ try {
+ await browser.downloads.open(10);
+ browser.test.sendMessage("download-open.result", {success: true});
+ } catch (e) {
+ browser.test.sendMessage("download-open.result", {
+ success: false,
+ error: e.message,
+ });
+ }
+ window.removeEventListener("keypress", handler);
+ });
+
+ browser.test.sendMessage("page-ready");
+ }
+
+ let extensionData = {
+ background() {
+ browser.test.sendMessage("ready", browser.runtime.getURL("page.html"));
+ },
+ files: {
+ "foo.txt": "It's the file called foo.txt.",
+ "page.html": `<html><head>
+ <script src="page.js"><\/script>
+ </head></html>`,
+ "page.js": pageScript,
+ },
+ manifest: {
+ permissions: ["downloads", "downloads.open"],
+ },
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+
+ let url = await extension.awaitMessage("ready");
+ let win = window.open();
+ let browserFrame = win.browsingContext.embedderElement;
+ win.location.href = url;
+ await extension.awaitMessage("page-ready");
+
+ synthesizeKey("a", {}, browserFrame.contentWindow);
+ let result = await extension.awaitMessage("download-open.result");
+
+ is(result.success, false, "Opening download fails.");
+ is(result.error, "Invalid download id 10", "The error is informative.");
+
+
+ await extension.unload();
+});
+
+</script>
+
+</body>
+</html>