<!DOCTYPE HTML> <html> <head> <title>clipboard permission test</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <script src="/tests/SimpleTest/SpawnTask.js"></script> <script src="/tests/SimpleTest/ExtensionTestUtils.js"></script> <script src="head.js"></script> <link rel="stylesheet" href="/tests/SimpleTest/test.css"> </head> <body> <script> "use strict"; function doCopy(txt) { let field = document.createElement("textarea"); document.body.appendChild(field); field.value = txt; field.select(); return document.execCommand("copy"); } add_task(function* no_permission_deny_copy() { function backgroundScript() { browser.test.assertEq(false, doCopy("whatever"), "copy should be denied without permission"); browser.test.sendMessage("ready"); } let extensionData = { background: `${doCopy};(${backgroundScript})();`, }; let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); yield extension.awaitMessage("ready"); yield extension.unload(); }); /** Selecting text in a bg page is not possible, skip test until it's fixed. add_task(function* with_permission_allow_copy() { function backgroundScript() { browser.test.onMessage.addListener(txt => { browser.test.assertEq(true, doCopy(txt), "copy should be allowed with permission"); }); browser.test.sendMessage("ready"); } let extensionData = { background: `${doCopy};(${backgroundScript})();`, manifest: { permissions: [ "clipboardWrite", ], }, }; let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); yield extension.awaitMessage("ready"); const DUMMY_STR = "dummy string to copy"; yield new Promise(resolve => { SimpleTest.waitForClipboard(DUMMY_STR, () => { extension.sendMessage(DUMMY_STR); }, resolve, resolve); }); yield extension.unload(); }); */ add_task(function* content_script_no_permission_deny_copy() { function contentScript() { browser.test.assertEq(false, doCopy("whatever"), "copy should be denied without permission"); browser.test.sendMessage("ready"); } let extensionData = { manifest: { content_scripts: [{ js: ["contentscript.js"], matches: ["http://mochi.test/*/file_sample.html"], }], }, files: { "contentscript.js": `${doCopy};(${contentScript})();`, }, }; let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); let win = window.open("file_sample.html"); yield extension.awaitMessage("ready"); win.close(); yield extension.unload(); }); add_task(function* content_script_with_permission_allow_copy() { function contentScript() { browser.test.onMessage.addListener(txt => { browser.test.assertEq(true, doCopy(txt), "copy should be allowed with permission"); }); browser.test.sendMessage("ready"); } let extensionData = { manifest: { content_scripts: [{ js: ["contentscript.js"], matches: ["http://mochi.test/*/file_sample.html"], }], permissions: [ "clipboardWrite", ], }, files: { "contentscript.js": `${doCopy};(${contentScript})();`, }, }; let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); let win = window.open("file_sample.html"); yield extension.awaitMessage("ready"); const DUMMY_STR = "dummy string to copy in content script"; yield new Promise(resolve => { SimpleTest.waitForClipboard(DUMMY_STR, () => { extension.sendMessage(DUMMY_STR); }, resolve, resolve); }); win.close(); yield extension.unload(); }); </script> </body> </html>