Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!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"],
}],
},
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"],
}],
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: [{
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>