Dactyloidae/toolkit/components/webextensions/test/mochitest/test_clipboard.html

140 lines
3.7 KiB
HTML

<!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>