Bug 1384572 - Prevent JSON Viewer from loading in iframes.
MozReview-Commit-ID: Cj79fMt5oAO
--- 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");
}
});
}
}