To get Firefox's implementation of Content Analysis in line with what DLP agents expect, by default we will only send the plain text contents of the clipboard and drag and drop. Differential Revision: https://phabricator.services.mozilla.com/D238202
101 lines
3.7 KiB
HTML
101 lines
3.7 KiB
HTML
<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 pasteAllowed = document.getElementById("pasteAllowed").checked;
|
|
let plainTextOnly = document.getElementById("plainTextOnly").checked;
|
|
let contentAnalysisReturnsError = document.getElementById("contentAnalysisReturnsError").checked;
|
|
pasteAllowed = pasteAllowed && !contentAnalysisReturnsError;
|
|
is(gotNotAllowedException, !pasteAllowed && isReadTextTest, "Should get exception from readText() if not allowed");
|
|
if (isReadTextTest) {
|
|
is(readResult, pasteAllowed ? "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, !pasteAllowed, "should get exception from reading text data when blocked");
|
|
if (pasteAllowed) {
|
|
is(text, "Some plain text", "check text/plain data");
|
|
}
|
|
}
|
|
|
|
{
|
|
// I think this will change when bug 1938618 is fixed - then the HTML should be blocked
|
|
// even if we're in plainTextOnly mode
|
|
let htmlPasteAllowed = pasteAllowed || plainTextOnly;
|
|
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, !htmlPasteAllowed, "should get exception from reading html data when blocked");
|
|
if (htmlPasteAllowed) {
|
|
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="plainTextOnly">Plain text only?</label><input id="plainTextOnly" type="checkbox">
|
|
<label for="contentAnalysisReturnsError">Content Analysis returns error?</label><input id="contentAnalysisReturnsError" type="checkbox">
|
|
</body>
|
|
</html>
|