summaryrefslogtreecommitdiffstats
path: root/devtools/shared/platform/clipboard.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/shared/platform/clipboard.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/devtools/shared/platform/clipboard.js b/devtools/shared/platform/clipboard.js
new file mode 100644
index 0000000000..d9d471c504
--- /dev/null
+++ b/devtools/shared/platform/clipboard.js
@@ -0,0 +1,61 @@
+/* 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/. */
+
+// Helpers for clipboard handling.
+
+"use strict";
+
+const { Cc, Ci } = require("chrome");
+const Services = require("Services");
+const clipboardHelper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+);
+
+function copyString(string) {
+ clipboardHelper.copyString(string);
+}
+
+/**
+ * Retrieve the current clipboard data matching the flavor "text/unicode".
+ *
+ * @return {String} Clipboard text content, null if no text clipboard data is available.
+ */
+function getText() {
+ const flavor = "text/unicode";
+
+ const xferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(
+ Ci.nsITransferable
+ );
+
+ if (!xferable) {
+ throw new Error(
+ "Couldn't get the clipboard data due to an internal error " +
+ "(couldn't create a Transferable object)."
+ );
+ }
+
+ xferable.init(null);
+ xferable.addDataFlavor(flavor);
+
+ // Get the data into our transferable.
+ Services.clipboard.getData(xferable, Services.clipboard.kGlobalClipboard);
+
+ const data = {};
+ try {
+ xferable.getTransferData(flavor, data);
+ } catch (e) {
+ // Clipboard doesn't contain data in flavor, return null.
+ return null;
+ }
+
+ // There's no data available, return.
+ if (!data.value) {
+ return null;
+ }
+
+ return data.value.QueryInterface(Ci.nsISupportsString).data;
+}
+
+exports.copyString = copyString;
+exports.getText = getText;