forked from mirrors/gecko-dev
When content analysis is on, pastes will be checked by the CA agent while tab input is blocked. The synchronous nsIClipboard.getData() method must block until the analysis result is received, so this requires doing a SpinEventLoopUntil. Differential Revision: https://phabricator.services.mozilla.com/D196997
153 lines
4.3 KiB
JavaScript
153 lines
4.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/* import-globals-from clipboard_helper.js */
|
|
|
|
"use strict";
|
|
|
|
function getLoadContext() {
|
|
return SpecialPowers.wrap(window).docShell.QueryInterface(Ci.nsILoadContext);
|
|
}
|
|
|
|
// Get clipboard data to paste.
|
|
function paste(clipboard) {
|
|
let trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(
|
|
Ci.nsITransferable
|
|
);
|
|
trans.init(getLoadContext());
|
|
trans.addDataFlavor("text/plain");
|
|
clipboard.getData(
|
|
trans,
|
|
Ci.nsIClipboard.kGlobalClipboard,
|
|
SpecialPowers.wrap(window).browsingContext.currentWindowContext
|
|
);
|
|
let str = SpecialPowers.createBlankObject();
|
|
try {
|
|
trans.getTransferData("text/plain", str);
|
|
} catch (e) {
|
|
str = "";
|
|
}
|
|
if (str) {
|
|
str = str.value.QueryInterface(Ci.nsISupportsString);
|
|
if (str) {
|
|
str = str.data;
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
|
|
add_setup(function init() {
|
|
cleanupAllClipboard();
|
|
});
|
|
|
|
/* Test for bug 948065 */
|
|
add_task(function test_copy() {
|
|
// Test copy.
|
|
const data = "random number: " + Math.random();
|
|
let helper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
|
|
Ci.nsIClipboardHelper
|
|
);
|
|
helper.copyString(data);
|
|
is(paste(clipboard), data, "Data was successfully copied.");
|
|
|
|
clipboard.emptyClipboard(Ci.nsIClipboard.kGlobalClipboard);
|
|
is(paste(clipboard), "", "Data was successfully cleared.");
|
|
|
|
cleanupAllClipboard();
|
|
});
|
|
|
|
/* Tests for bug 1834073 */
|
|
clipboardTypes.forEach(function (clipboardType) {
|
|
if (clipboard.isClipboardTypeSupported(clipboardType)) {
|
|
add_task(function test_clipboard_apis() {
|
|
info(`Test clipboard apis for type ${clipboardType}`);
|
|
|
|
// Set clipboard data
|
|
let str;
|
|
try {
|
|
str = writeRandomStringToClipboard("text/plain", clipboardType);
|
|
} catch (e) {
|
|
ok(
|
|
false,
|
|
`setData should not throw error for clipboard type ${clipboardType}`
|
|
);
|
|
}
|
|
|
|
// Test hasDataMatchingFlavors
|
|
try {
|
|
ok(
|
|
clipboard.hasDataMatchingFlavors(["text/plain"], clipboardType),
|
|
`Test hasDataMatchingFlavors for clipboard type ${clipboardType}`
|
|
);
|
|
} catch (e) {
|
|
ok(
|
|
false,
|
|
`hasDataMatchingFlavors should not throw error for clipboard type ${clipboardType}`
|
|
);
|
|
}
|
|
|
|
// Test getData
|
|
try {
|
|
is(
|
|
getClipboardData("text/plain", clipboardType),
|
|
str,
|
|
`Test getData for clipboard type ${clipboardType}`
|
|
);
|
|
} catch (e) {
|
|
ok(
|
|
false,
|
|
`getData should not throw error for clipboard type ${clipboardType}`
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(function test_clipboard_set_empty_string() {
|
|
info(`Test setting empty string to type ${clipboardType}`);
|
|
|
|
// Clear clipboard type.
|
|
clipboard.emptyClipboard(clipboardType);
|
|
is(
|
|
getClipboardData("text/plain", clipboardType),
|
|
null,
|
|
`Should get null data on clipboard type ${clipboardType}`
|
|
);
|
|
ok(
|
|
!clipboard.hasDataMatchingFlavors(["text/plain"], clipboardType),
|
|
`Should not have text/plain flavor on clipboard ${clipboardType}`
|
|
);
|
|
|
|
// Set text/plain to empty string.
|
|
writeStringToClipboard("", "text/plain", clipboardType);
|
|
// XXX gtk doesn't support get empty text data from clipboard, bug 1852983.
|
|
if (navigator.platform.includes("Linux")) {
|
|
todo_is(
|
|
getClipboardData("text/plain", clipboardType),
|
|
"",
|
|
`Should get empty string on clipboard type ${clipboardType}`
|
|
);
|
|
} else {
|
|
is(
|
|
getClipboardData("text/plain", clipboardType),
|
|
"",
|
|
`Should get empty string on clipboard type ${clipboardType}`
|
|
);
|
|
}
|
|
// XXX android doesn't support setting empty text data to clipboard, bug 1841058.
|
|
if (navigator.userAgent.includes("Android")) {
|
|
todo_is(
|
|
clipboard.hasDataMatchingFlavors(["text/plain"], clipboardType),
|
|
true,
|
|
`Should have text/plain flavor on clipboard ${clipboardType}`
|
|
);
|
|
} else {
|
|
ok(
|
|
clipboard.hasDataMatchingFlavors(["text/plain"], clipboardType),
|
|
`Should have text/plain flavor on clipboard ${clipboardType}`
|
|
);
|
|
}
|
|
|
|
// Clear all clipboard data.
|
|
cleanupAllClipboard();
|
|
});
|
|
}
|
|
});
|