summaryrefslogtreecommitdiffstats
path: root/dom/ipc/tests/browser_child_clipboard_restricted.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/ipc/tests/browser_child_clipboard_restricted.js')
-rw-r--r--dom/ipc/tests/browser_child_clipboard_restricted.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/dom/ipc/tests/browser_child_clipboard_restricted.js b/dom/ipc/tests/browser_child_clipboard_restricted.js
new file mode 100644
index 0000000000..be2d1bca9c
--- /dev/null
+++ b/dom/ipc/tests/browser_child_clipboard_restricted.js
@@ -0,0 +1,93 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+add_task(async function () {
+ // Create a new content tab to make sure the paste is cross-process.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "data:text/html,<br>"
+ );
+ let browser = tab.linkedBrowser;
+
+ await SpecialPowers.spawn(browser, [], async function (arg) {
+ const trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(
+ Ci.nsITransferable
+ );
+ trans.init(null);
+
+ const string = Cc["@mozilla.org/supports-string;1"].createInstance(
+ Ci.nsISupportsString
+ );
+ string.data = "blablabla";
+
+ trans.addDataFlavor("text/unknown");
+ trans.setTransferData("text/unknown", string);
+
+ trans.addDataFlavor("text/plain");
+ trans.setTransferData("text/plain", string);
+
+ // Write to clipboard.
+ Services.clipboard.setData(trans, null, Ci.nsIClipboard.kGlobalClipboard);
+ });
+
+ // Wait for known.
+ for (var i = 0; i < 20; i++) {
+ if (
+ Services.clipboard.hasDataMatchingFlavors(
+ ["text/plain"],
+ Services.clipboard.kGlobalClipboard
+ )
+ ) {
+ break;
+ }
+ }
+
+ function readClipboard(flavor) {
+ const trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(
+ Ci.nsITransferable
+ );
+ trans.init(null);
+ trans.addDataFlavor(flavor);
+ Services.clipboard.getData(
+ trans,
+ Services.clipboard.kGlobalClipboard,
+ SpecialPowers.wrap(window).browsingContext.currentWindowContext
+ );
+
+ let data = {};
+ trans.getTransferData(flavor, data);
+ return data.value.QueryInterface(Ci.nsISupportsString).data;
+ }
+
+ ok(
+ Services.clipboard.hasDataMatchingFlavors(
+ ["text/plain"],
+ Services.clipboard.kGlobalClipboard
+ ),
+ "clipboard should have text/plain"
+ );
+
+ is(
+ readClipboard("text/plain"),
+ "blablabla",
+ "matching string for text/plain"
+ );
+
+ ok(
+ !Services.clipboard.hasDataMatchingFlavors(
+ ["text/unknown"],
+ Services.clipboard.kGlobalClipboard
+ ),
+ "clipboard should not have text/unknown"
+ );
+
+ let error = undefined;
+ try {
+ readClipboard("text/unknown");
+ } catch (e) {
+ error = e;
+ }
+ is(typeof error, "object", "reading text/unknown should fail");
+
+ BrowserTestUtils.removeTab(tab);
+});