summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_ext_clipboard.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/test_ext_clipboard.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_clipboard.html210
1 files changed, 210 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_clipboard.html b/toolkit/components/extensions/test/mochitest/test_ext_clipboard.html
new file mode 100644
index 0000000000..77ac767391
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_clipboard.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Clipboard permissions tests</title>
+ <script src="/tests/SimpleTest/SimpleTest.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";
+
+/* globals doCopy, doPaste */
+function shared() {
+ let field = document.createElement("textarea");
+ document.body.appendChild(field);
+ field.contentEditable = true;
+
+ this.doCopy = function(txt) {
+ field.value = txt;
+ field.select();
+ return document.execCommand("copy");
+ };
+
+ this.doPaste = function() {
+ field.select();
+ return document.execCommand("paste") && field.value;
+ };
+}
+
+add_task(async function test_background_clipboard_permissions() {
+ function backgroundScript() {
+ browser.test.assertEq(false, doCopy("whatever"),
+ "copy should be denied without permission");
+ browser.test.assertEq(false, doPaste(),
+ "paste should be denied without permission");
+ browser.test.sendMessage("ready");
+ }
+ let extensionData = {
+ background: [shared, backgroundScript],
+ };
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+
+ await extension.awaitMessage("ready");
+
+ await extension.unload();
+});
+
+add_task(async function test_background_clipboard_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: `(${shared})();(${backgroundScript})();`,
+ manifest: {
+ permissions: [
+ "clipboardWrite",
+ ],
+ },
+ };
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+ await extension.awaitMessage("ready");
+
+ const DUMMY_STR = "dummy string to copy";
+ await new Promise(resolve => {
+ SimpleTest.waitForClipboard(DUMMY_STR, () => {
+ extension.sendMessage(DUMMY_STR);
+ }, resolve, resolve);
+ });
+
+ await extension.unload();
+});
+
+add_task(async function test_contentscript_clipboard_permissions() {
+ function contentScript() {
+ browser.test.assertEq(false, doCopy("whatever"),
+ "copy should be denied without permission");
+ browser.test.assertEq(false, doPaste(),
+ "paste should be denied without permission");
+ browser.test.sendMessage("ready");
+ }
+ let extensionData = {
+ manifest: {
+ content_scripts: [{
+ js: ["shared.js", "contentscript.js"],
+ matches: ["http://mochi.test/*/file_sample.html"],
+ }],
+ },
+ files: {
+ "shared.js": shared,
+ "contentscript.js": contentScript,
+ },
+ };
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+
+ let win = window.open("file_sample.html");
+ await extension.awaitMessage("ready");
+ win.close();
+
+ await extension.unload();
+});
+
+add_task(async function test_contentscript_clipboard_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: ["shared.js", "contentscript.js"],
+ matches: ["http://mochi.test/*/file_sample.html"],
+ }],
+ permissions: [
+ "clipboardWrite",
+ ],
+ },
+ files: {
+ "shared.js": shared,
+ "contentscript.js": contentScript,
+ },
+ };
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+
+ let win = window.open("file_sample.html");
+ await extension.awaitMessage("ready");
+
+ const DUMMY_STR = "dummy string to copy in content script";
+ await new Promise(resolve => {
+ SimpleTest.waitForClipboard(DUMMY_STR, () => {
+ extension.sendMessage(DUMMY_STR);
+ }, resolve, resolve);
+ });
+
+ win.close();
+
+ await extension.unload();
+});
+
+add_task(async function test_contentscript_clipboard_paste() {
+ const extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: [
+ "clipboardRead",
+ ],
+ content_scripts: [{
+ matches: ["http://mochi.test/*/file_sample.html"],
+ js: ["shared.js", "content_script.js"],
+ }],
+ },
+ files: {
+ "shared.js": shared,
+ "content_script.js": () => {
+ browser.test.sendMessage("paste", doPaste());
+ },
+ },
+ });
+
+ const STRANGE = "A Strange Thing";
+ SpecialPowers.clipboardCopyString(STRANGE);
+
+ await extension.startup();
+ const win = window.open("file_sample.html");
+
+ const paste = await extension.awaitMessage("paste");
+ is(paste, STRANGE, "the correct string was pasted");
+
+ win.close();
+ await extension.unload();
+});
+
+add_task(async function test_background_clipboard_paste() {
+ function background() {
+ browser.test.sendMessage("paste", doPaste());
+ }
+
+ const extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["clipboardRead"],
+ },
+ background: [shared, background],
+ });
+
+ const STRANGE = "Stranger Things";
+ SpecialPowers.clipboardCopyString(STRANGE);
+
+ await extension.startup();
+
+ const paste = await extension.awaitMessage("paste");
+ is(paste, STRANGE, "the correct string was pasted");
+
+ await extension.unload();
+});
+
+</script>
+</body>
+</html>