From c71dd74969195b6c402a2546df33c6addd8ae16d Mon Sep 17 00:00:00 2001 From: JustOff Date: Fri, 13 Apr 2018 21:31:38 +0300 Subject: Make JS callers of ios.newChannel call ios.newChannel2 in browser/ --- application/palemoon/base/content/nsContextMenu.js | 17 +++++-- .../palemoon/modules/WindowsPreviewPerTab.jsm | 55 +++++++++++++--------- 2 files changed, 44 insertions(+), 28 deletions(-) (limited to 'application/palemoon') diff --git a/application/palemoon/base/content/nsContextMenu.js b/application/palemoon/base/content/nsContextMenu.js index 1d3ceb17e..017ab87cc 100644 --- a/application/palemoon/base/content/nsContextMenu.js +++ b/application/palemoon/base/content/nsContextMenu.js @@ -1116,10 +1116,17 @@ nsContextMenu.prototype = { } } - // set up a channel to do the saving - var ioService = Cc["@mozilla.org/network/io-service;1"]. - getService(Ci.nsIIOService); - var channel = ioService.newChannelFromURI(makeURI(linkURL)); + // setting up a new channel for 'right click - save link as ...' + // ideally we should use: + // * doc - as the loadingNode, and/or + // * this.principal - as the loadingPrincipal + // for now lets use systemPrincipal to bypass mixedContentBlocker + // checks after redirects, see bug: 1136055 + var channel = NetUtil.newChannel({ + uri: makeURI(linkURL), + loadUsingSystemPrincipal: true + }); + if (linkDownload) channel.contentDispositionFilename = linkDownload; if (channel instanceof Ci.nsIPrivateBrowsingChannel) { @@ -1152,7 +1159,7 @@ nsContextMenu.prototype = { timer.TYPE_ONE_SHOT); // kick off the channel with our proxy object as the listener - channel.asyncOpen(new saveAsListener(), null); + channel.asyncOpen2(new saveAsListener()); }, // Save URL of clicked-on link. diff --git a/application/palemoon/modules/WindowsPreviewPerTab.jsm b/application/palemoon/modules/WindowsPreviewPerTab.jsm index e186bcad2..c1ed05c39 100644 --- a/application/palemoon/modules/WindowsPreviewPerTab.jsm +++ b/application/palemoon/modules/WindowsPreviewPerTab.jsm @@ -62,9 +62,6 @@ const WINTASKBAR_CONTRACTID = "@mozilla.org/windows-taskbar;1"; //////////////////////////////////////////////////////////////////////////////// //// Various utility properties -XPCOMUtils.defineLazyServiceGetter(this, "ioSvc", - "@mozilla.org/network/io-service;1", - "nsIIOService"); XPCOMUtils.defineLazyServiceGetter(this, "imgTools", "@mozilla.org/image/tools;1", "imgITools"); @@ -73,8 +70,13 @@ XPCOMUtils.defineLazyServiceGetter(this, "faviconSvc", "nsIFaviconService"); // nsIURI -> imgIContainer -function _imageFromURI(uri, privateMode, callback) { - let channel = ioSvc.newChannelFromURI(uri); +function _imageFromURI(doc, uri, privateMode, callback) { + let channel = NetUtil.newChannel({ + uri: uri, + loadUsingSystemPrincipal: true, + contentPolicyType: Ci.nsIContentPolicy.TYPE_INTERNAL_IMAGE + }); + try { channel.QueryInterface(Ci.nsIPrivateBrowsingChannel); channel.setPrivate(privateMode); @@ -93,17 +95,17 @@ function _imageFromURI(uri, privateMode, callback) { // favicon). let defaultURI = faviconSvc.defaultFavicon; if (!defaultURI.equals(uri)) - _imageFromURI(defaultURI, callback); + _imageFromURI(doc, defaultURI, privateMode, callback); } }); } // string? -> imgIContainer -function getFaviconAsImage(iconurl, privateMode, callback) { +function getFaviconAsImage(doc, iconurl, privateMode, callback) { if (iconurl) - _imageFromURI(NetUtil.newURI(iconurl), privateMode, callback); + _imageFromURI(doc, NetUtil.newURI(iconurl), privateMode, callback); else - _imageFromURI(faviconSvc.defaultFavicon, privateMode, callback); + _imageFromURI(doc, faviconSvc.defaultFavicon, privateMode, callback); } // Snaps the given rectangle to be pixel-aligned at the given scale @@ -460,12 +462,16 @@ TabWindow.prototype = { preview.visible = AeroPeek.enabled; preview.active = this.tabbrowser.selectedTab == controller.tab; // Grab the default favicon - getFaviconAsImage(null, PrivateBrowsingUtils.isWindowPrivate(this.win), function (img) { - // It is possible that we've already gotten the real favicon, so make sure - // we have not set one before setting this default one. - if (!preview.icon) - preview.icon = img; - }); + getFaviconAsImage( + controller.linkedBrowser.contentWindow.document, + null, + PrivateBrowsingUtils.isWindowPrivate(this.win), + function (img) { + // It is possible that we've already gotten the real favicon, so make sure + // we have not set one before setting this default one. + if (!preview.icon) + preview.icon = img; + }); return preview; }, @@ -552,14 +558,17 @@ TabWindow.prototype = { //// Browser progress listener onLinkIconAvailable: function (aBrowser, aIconURL) { let self = this; - getFaviconAsImage(aIconURL, PrivateBrowsingUtils.isWindowPrivate(this.win), function (img) { - let index = self.tabbrowser.browsers.indexOf(aBrowser); - // Only add it if we've found the index. The tab could have closed! - if (index != -1) { - let tab = self.tabbrowser.tabs[index]; - self.previews.get(tab).icon = img; - } - }); + getFaviconAsImage( + aBrowser.contentWindow.document, + aIconURL,PrivateBrowsingUtils.isWindowPrivate(this.win), + function (img) { + let index = self.tabbrowser.browsers.indexOf(aBrowser); + // Only add it if we've found the index. The tab could have closed! + if (index != -1) { + let tab = self.tabbrowser.tabs[index]; + self.previews.get(tab).icon = img; + } + }); } } -- cgit v1.2.3