Bug 1384572 - Prevent JSON Viewer from loading in iframes. draft
authorOriol Brufau <oriol-bugzilla@hotmail.com>
Wed, 20 Sep 2017 00:01:21 +0200
changeset 667586 b16f074bf43a63a902b3506ccaa3ee8df1561ec3
parent 663831 1888ec2f277f6bb26271b8808e08914a21db9efe
child 732437 03117780f72f54347754fc75e328d9e2009423cd
push id80769
push userbmo:oriol-bugzilla@hotmail.com
push dateWed, 20 Sep 2017 10:46:58 +0000
bugs1384572
milestone57.0a1
Bug 1384572 - Prevent JSON Viewer from loading in iframes. MozReview-Commit-ID: Cj79fMt5oAO
devtools/client/jsonview/converter-child.js
devtools/client/jsonview/converter-observer.js
devtools/shim/devtools-startup.js
--- a/devtools/client/jsonview/converter-child.js
+++ b/devtools/client/jsonview/converter-child.js
@@ -249,21 +249,18 @@ function onContentMessage(e) {
       copyString(win, value);
       break;
 
     case "copy-headers":
       copyHeaders(win, value);
       break;
 
     case "save":
-      // The window ID is needed when the JSON Viewer is inside an iframe.
-      let windowID = win.QueryInterface(Ci.nsIInterfaceRequestor)
-        .getInterface(Ci.nsIDOMWindowUtils).outerWindowID;
       childProcessMessageManager.sendAsyncMessage(
-        "devtools:jsonview:save", {url: value, windowID: windowID});
+        "devtools:jsonview:save", value);
   }
 }
 
 function copyHeaders(win, headers) {
   let value = "";
   let eol = (Services.appinfo.OS !== "WINNT") ? "\n" : "\r\n";
 
   let responseHeaders = headers.response;
--- a/devtools/client/jsonview/converter-observer.js
+++ b/devtools/client/jsonview/converter-observer.js
@@ -68,16 +68,19 @@ JsonViewSniffer.prototype = {
     }
     return false;
   },
 
   getMIMETypeFromContent: function (request, data, length) {
     if (request instanceof Ci.nsIChannel) {
       // JSON View is enabled only for top level loads only.
       if (!this.isTopLevelLoad(request)) {
+        if (request.contentType === JSON_VIEW_MIME_TYPE) {
+          return "application/json";
+        }
         return "";
       }
       try {
         if (request.contentDisposition ==
           Ci.nsIChannel.DISPOSITION_ATTACHMENT) {
           return "";
         }
       } catch (e) {
--- a/devtools/shim/devtools-startup.js
+++ b/devtools/shim/devtools-startup.js
@@ -618,29 +618,29 @@ const JsonView = {
 
   /**
    * Save JSON to a file needs to be implemented here
    * in the parent process.
    */
   onSave: function (message) {
     let chrome = Services.wm.getMostRecentWindow("navigator:browser");
     let browser = chrome.gBrowser.selectedBrowser;
-    if (message.data.url === null) {
+    if (message.data === null) {
       // Save original contents
-      chrome.saveBrowser(browser, false, message.data.windowID);
+      chrome.saveBrowser(browser);
     } else {
       // The following code emulates saveBrowser, but:
       // - Uses the given blob URL containing the custom contents to save.
       // - Obtains the file name from the URL of the document, not the blob.
       let persistable = browser.frameLoader;
-      persistable.startPersistence(message.data.windowID, {
+      persistable.startPersistence(0, {
         onDocumentReady(doc) {
           let uri = chrome.makeURI(doc.documentURI, doc.characterSet);
           let filename = chrome.getDefaultFileName(undefined, uri, doc, null);
-          chrome.internalSave(message.data.url, doc, filename, null, doc.contentType,
+          chrome.internalSave(message.data, doc, filename, null, doc.contentType,
             false, null, null, null, doc, false, null, undefined);
         },
         onError(status) {
           throw new Error("JSON Viewer's onSave failed in startPersistence");
         }
       });
     }
   }