summaryrefslogtreecommitdiffstats
path: root/toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html')
-rw-r--r--toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html95
1 files changed, 95 insertions, 0 deletions
diff --git a/toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html b/toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html
new file mode 100644
index 0000000000..14414a0f28
--- /dev/null
+++ b/toolkit/components/contentanalysis/tests/browser/clipboard_read_async.html
@@ -0,0 +1,95 @@
+<html>
+<body>
+
+<!--<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>-->
+<script class="testbody" type="application/javascript">
+function is(a, b, msg) {
+ if (!Object.is(a, b)) {
+ throw new Error(`FAIL: expected ${b} got ${a} - ${msg}`);
+ }
+}
+
+function isNotAllowedException(ex) {
+ return /NS_ERROR_CONTENT_BLOCKED/.test(ex.toString()) ||
+ /DataError/.test(ex.toString()) ||
+ /NotAllowedError/.test(ex.toString());
+}
+
+async function checkReadHelper(readResult, gotNotAllowedException, isReadTextTest) {
+ // Set by injected JS in the test
+ let filePasteAllowed = document.getElementById("pasteAllowed").checked;
+ let contentAnalysisReturnsError = document.getElementById("contentAnalysisReturnsError").checked;
+ filePasteAllowed = filePasteAllowed && !contentAnalysisReturnsError;
+ is(gotNotAllowedException, !filePasteAllowed && isReadTextTest, "Should get exception from readText() if not allowed");
+ if (isReadTextTest) {
+ is(readResult, filePasteAllowed ? "Some plain text" : null, "Should get expected text from clipboard.readText()");
+ }
+ else {
+ is(readResult.length, 1, "check number of ClipboardItems in response");
+ is(readResult[0].types.length, 2, "check number of types in ClipboardItem");
+
+ {
+ let text = null;
+ let gotNotAllowedException = false;
+ try {
+ let textBlob = await readResult[0].getType("text/plain");
+ text = await textBlob.text();
+ } catch (ex) {
+ gotNotAllowedException = isNotAllowedException(ex);
+ }
+ is(gotNotAllowedException, !filePasteAllowed, "should get exception from reading text data when blocked");
+ if (filePasteAllowed) {
+ is(text, "Some plain text", "check text/plain data");
+ }
+ }
+
+ {
+ let html = null;
+ let gotNotAllowedException = false;
+ try {
+ let htmlBlob = await readResult[0].getType("text/html");
+ html = await htmlBlob.text();
+ } catch (ex) {
+ gotNotAllowedException = isNotAllowedException(ex);
+ }
+ is(gotNotAllowedException, !filePasteAllowed, "should get exception from reading html data when blocked");
+ if (filePasteAllowed) {
+ const CLIPBOARD_HTML_STRING = "<b>Some HTML</b>";
+ let expectedHtml = navigator.platform.includes("Win")
+ ? `<html><body>\n<!--StartFragment-->${CLIPBOARD_HTML_STRING}<!--EndFragment-->\n</body>\n</html>`
+ : CLIPBOARD_HTML_STRING;
+ is(html, expectedHtml, "check text/html data");
+ }
+ }
+ }
+ return true;
+}
+
+document.addEventListener("teststart", async e => {
+ let isReadTextTest = e.detail.testType == "readText";
+ let gotNotAllowedException = false;
+ let readResult = null;
+ try {
+ let readPromise = isReadTextTest ? navigator.clipboard.readText() : navigator.clipboard.read();
+ readResult = await readPromise;
+ } catch (ex) {
+ gotNotAllowedException = isNotAllowedException(ex);
+ }
+
+ let result = null;
+ try {
+ result = checkReadHelper(readResult, gotNotAllowedException, isReadTextTest);
+ } catch (ex) {
+ result = ex.toString();
+ }
+
+ document.dispatchEvent(new CustomEvent('testresult', {
+ detail: { result }
+ }));
+});
+</script>
+
+<label for="pasteAllowed">Paste allowed?</label><input id="pasteAllowed" type="checkbox">
+<label for="contentAnalysisReturnsError">Content Analysis returns error?</label><input id="contentAnalysisReturnsError" type="checkbox">
+</body>
+</html>