Bug 1353006 - Stop using sdk/clipboard in JSONViewer; r=jryans draft
authorJan Odvarko <odvarko@gmail.com>
Wed, 05 Apr 2017 14:57:49 +0200
changeset 556137 c204f9ba27c3c9852b7fade9d0c207bd8bc00eff
parent 556131 a9696913aa212b06858c7376eccc038299fac266
child 556138 3b9f6bbca626abc0a6082cb0fdb8aff39bf62707
push id52457
push userjodvarko@mozilla.com
push dateWed, 05 Apr 2017 13:01:59 +0000
reviewersjryans
bugs1353006
milestone55.0a1
Bug 1353006 - Stop using sdk/clipboard in JSONViewer; r=jryans MozReview-Commit-ID: AQXsf3DQdS9
devtools/client/jsonview/converter-child.js
--- a/devtools/client/jsonview/converter-child.js
+++ b/devtools/client/jsonview/converter-child.js
@@ -7,18 +7,16 @@
 "use strict";
 
 const {Cc, Ci, Cu} = require("chrome");
 const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
 const Services = require("Services");
 
 loader.lazyRequireGetter(this, "NetworkHelper",
                                "devtools/shared/webconsole/network-helper");
-loader.lazyRequireGetter(this, "Clipboard",
-                               "sdk/clipboard");
 loader.lazyRequireGetter(this, "JsonViewUtils",
                                "devtools/client/jsonview/utils");
 
 const childProcessMessageManager =
   Cc["@mozilla.org/childprocessmessagemanager;1"]
     .getService(Ci.nsISyncMessageSender);
 
 // Amount of space that will be allocated for the stream's backing-store.
@@ -274,30 +272,30 @@ Converter.prototype = {
     let win = NetworkHelper.getWindowForRequest(this.channel);
     if (win != e.target) {
       return;
     }
 
     let value = e.detail.value;
     switch (e.detail.type) {
       case "copy":
-        Clipboard.set(value, "text");
+        copyString(win, value);
         break;
 
       case "copy-headers":
-        this.copyHeaders(value);
+        this.copyHeaders(win, value);
         break;
 
       case "save":
         childProcessMessageManager.sendAsyncMessage(
           "devtools:jsonview:save", value);
     }
   },
 
-  copyHeaders: function (headers) {
+  copyHeaders: function (win, headers) {
     let value = "";
     let eol = (Services.appinfo.OS !== "WINNT") ? "\n" : "\r\n";
 
     let responseHeaders = headers.response;
     for (let i = 0; i < responseHeaders.length; i++) {
       let header = responseHeaders[i];
       value += header.name + ": " + header.value + eol;
     }
@@ -305,19 +303,28 @@ Converter.prototype = {
     value += eol;
 
     let requestHeaders = headers.request;
     for (let i = 0; i < requestHeaders.length; i++) {
       let header = requestHeaders[i];
       value += header.name + ": " + header.value + eol;
     }
 
-    Clipboard.set(value, "text");
+    copyString(win, value);
   }
 };
 
+function copyString(win, string) {
+  win.document.addEventListener("copy", event => {
+    event.clipboardData.setData("text/plain", string);
+    event.preventDefault();
+  }, {once: true});
+
+  win.document.execCommand("copy", false, null);
+}
+
 function createInstance() {
   return new Converter();
 }
 
 exports.JsonViewService = {
   createInstance: createInstance,
 };