From d3d3bb96951aae32d178f5de111aede6447c5eb5 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 10 Jun 2016 16:43:39 +0200 Subject: [PATCH] [Firefox addon] Change the minimum supported version to Firefox 38 and remove a bunch old no longer necessary fallback code From the discussion in issue 7386, it wasn't really clear if we can restrict addon support to Firefox `45` (i.e. the version that corresponds to the *current* ESR version). However, we have a bunch of code for *very* old Firefox versions. Hence this patch changes the minimum supported version to Firefox `38` (which was released on `2015-05-12`, and correspond to the *previous* ESR version), and removes code that only applies to old Firefox versions. Regardless what we end up deciding regarding addon support for previous Firefox versions, given the amount of code that even the Firefox `>= 38` condition lets us remove, I certainly think that there is value in doing this. --- .../firefox/content/PdfStreamConverter.jsm | 100 ++++-------------- .../firefox/content/PdfjsChromeUtils.jsm | 13 +-- extensions/firefox/install.rdf | 8 +- extensions/firefox/update.rdf | 8 +- 4 files changed, 27 insertions(+), 102 deletions(-) diff --git a/extensions/firefox/content/PdfStreamConverter.jsm b/extensions/firefox/content/PdfStreamConverter.jsm index 785f4a34f..f36349e29 100644 --- a/extensions/firefox/content/PdfStreamConverter.jsm +++ b/extensions/firefox/content/PdfStreamConverter.jsm @@ -65,32 +65,15 @@ function getFindBar(domWindow) { if (PdfjsContentUtils.isRemote) { throw new Error('FindBar is not accessible from the content process.'); } - var browser = getContainingBrowser(domWindow); try { + var browser = getContainingBrowser(domWindow); var tabbrowser = browser.getTabBrowser(); - var tab; -//#if MOZCENTRAL - tab = tabbrowser.getTabForBrowser(browser); -//#else - if (tabbrowser.getTabForBrowser) { - tab = tabbrowser.getTabForBrowser(browser); - } else { - // _getTabForBrowser is depreciated in Firefox 35, see - // https://bugzilla.mozilla.org/show_bug.cgi?id=1039500. - tab = tabbrowser._getTabForBrowser(browser); - } -//#endif + var tab = tabbrowser.getTabForBrowser(browser); return tabbrowser.getFindBar(tab); } catch (e) { - try { - // FF22 has no _getTabForBrowser, and FF24 has no getFindBar - var chromeWindow = browser.ownerDocument.defaultView; - return chromeWindow.gFindBar; - } catch (ex) { - // Suppress errors for PDF files opened in the bookmark sidebar, see - // https://bugzilla.mozilla.org/show_bug.cgi?id=1248959. - return null; - } + // Suppress errors for PDF files opened in the bookmark sidebar, see + // https://bugzilla.mozilla.org/show_bug.cgi?id=1248959. + return null; } } @@ -165,26 +148,6 @@ function getLocalizedString(strings, id, property) { return id; } -function makeContentReadable(obj, window) { -//#if MOZCENTRAL - /* jshint -W027 */ - return Cu.cloneInto(obj, window); -//#else - if (Cu.cloneInto) { - return Cu.cloneInto(obj, window); - } - if (typeof obj !== 'object' || obj === null) { - return obj; - } - var expose = {}; - for (let k in obj) { - expose[k] = 'r'; - } - obj.__exposedProps__ = expose; - return obj; -//#endif -} - function createNewChannel(uri, node, principal) { //#if !MOZCENTRAL if (NetUtil.newChannel2) { @@ -197,12 +160,6 @@ function createNewChannel(uri, node, principal) { Ci.nsILoadInfo.SEC_NORMAL, Ci.nsIContentPolicy.TYPE_OTHER); } - // The signature of `NetUtil.newChannel` changed in Firefox 38, - // see https://bugzilla.mozilla.org/show_bug.cgi?id=1125618. - var ffVersion = parseInt(Services.appinfo.platformVersion); - if (ffVersion < 38) { - return NetUtil.newChannel(uri); - } //#endif return NetUtil.newChannel({ uri: uri, @@ -294,13 +251,6 @@ function ChromeActions(domWindow, contentDispositionFilename) { ChromeActions.prototype = { isInPrivateBrowsing: function() { -//#if !MOZCENTRAL - if (!PrivateBrowsingUtils.isContentWindowPrivate) { - // pbu.isContentWindowPrivate was not supported prior Firefox 35. - // (https://bugzilla.mozilla.org/show_bug.cgi?id=1069059) - return PrivateBrowsingUtils.isWindowPrivate(this.domWindow); - } -//#endif return PrivateBrowsingUtils.isContentWindowPrivate(this.domWindow); }, download: function(data, sendResponse) { @@ -423,11 +373,7 @@ ChromeActions.prototype = { return (!!prefBrowser && prefGfx); }, supportsDocumentColors: function() { - if (getIntPref('browser.display.document_color_use', 0) === 2 || - !getBoolPref('browser.display.use_document_colors', true)) { - return false; - } - return true; + return getIntPref('browser.display.document_color_use', 0) !== 2; }, supportedMouseWheelZoomModifierKeys: function() { return { @@ -839,7 +785,7 @@ RequestListener.prototype.receive = function(event) { var response; if (sync) { response = actions[action].call(this.actions, data); - event.detail.response = makeContentReadable(response, doc.defaultView); + event.detail.response = Cu.cloneInto(response, doc.defaultView); } else { if (!event.detail.responseExpected) { doc.documentElement.removeChild(message); @@ -848,8 +794,7 @@ RequestListener.prototype.receive = function(event) { response = function sendResponse(response) { try { var listener = doc.createEvent('CustomEvent'); - let detail = makeContentReadable({response: response}, - doc.defaultView); + let detail = Cu.cloneInto({ response: response }, doc.defaultView); listener.initCustomEvent('pdf.js.response', true, false, detail); return message.dispatchEvent(listener); } catch (e) { @@ -893,7 +838,7 @@ FindEventManager.prototype.receiveMessage = function(msg) { var type = msg.data.type; var contentWindow = this.contentWindow; - detail = makeContentReadable(detail, contentWindow); + detail = Cu.cloneInto(detail, contentWindow); var forward = contentWindow.document.createEvent('CustomEvent'); forward.initCustomEvent(type, true, true, detail); contentWindow.dispatchEvent(forward); @@ -1016,11 +961,6 @@ PdfStreamConverter.prototype = { aRequest.setResponseHeader('Content-Security-Policy', '', false); aRequest.setResponseHeader('Content-Security-Policy-Report-Only', '', false); -//#if !MOZCENTRAL - aRequest.setResponseHeader('X-Content-Security-Policy', '', false); - aRequest.setResponseHeader('X-Content-Security-Policy-Report-Only', '', - false); -//#endif } PdfJsTelemetry.onViewerIsUsed(); @@ -1085,26 +1025,22 @@ PdfStreamConverter.prototype = { channel.loadGroup = aRequest.loadGroup; channel.loadInfo.originAttributes = aRequest.loadInfo.originAttributes; - // We can use resource principal when data is fetched by the chrome - // make sure we reuse the origin attributes from the request channel to keep - // isolation consistent. - // e.g. useful for NoScript + // We can use the resource principal when data is fetched by the chrome, + // e.g. useful for NoScript. Make make sure we reuse the origin attributes + // from the request channel to keep isolation consistent. var ssm = Cc['@mozilla.org/scriptsecuritymanager;1'] .getService(Ci.nsIScriptSecurityManager); var uri = NetUtil.newURI(PDF_VIEWER_WEB_PAGE, null, null); - var attrs = aRequest.loadInfo.originAttributes; var resourcePrincipal; //#if MOZCENTRAL - resourcePrincipal = ssm.createCodebasePrincipal(uri, attrs); + resourcePrincipal = + ssm.createCodebasePrincipal(uri, aRequest.loadInfo.originAttributes); //#else - // FF16 and below had getCodebasePrincipal, it was replaced by - // getNoAppCodebasePrincipal (bug 758258). - // FF43 then replaced getNoAppCodebasePrincipal with - // createCodebasePrincipal (bug 1165272). + // FF43 replaced `getCodebasePrincipal` with `createCodebasePrincipal`, + // see https://bugzilla.mozilla.org/show_bug.cgi?id=1165272. if ('createCodebasePrincipal' in ssm) { - resourcePrincipal = ssm.createCodebasePrincipal(uri, attrs); - } else if ('getNoAppCodebasePrincipal' in ssm) { - resourcePrincipal = ssm.getNoAppCodebasePrincipal(uri); + resourcePrincipal = + ssm.createCodebasePrincipal(uri, aRequest.loadInfo.originAttributes); } else { resourcePrincipal = ssm.getCodebasePrincipal(uri); } diff --git a/extensions/firefox/content/PdfjsChromeUtils.jsm b/extensions/firefox/content/PdfjsChromeUtils.jsm index 5b3e28d3a..7adb549fd 100644 --- a/extensions/firefox/content/PdfjsChromeUtils.jsm +++ b/extensions/firefox/content/PdfjsChromeUtils.jsm @@ -170,18 +170,7 @@ var PdfjsChromeUtils = { _findbarFromMessage: function(aMsg) { let browser = aMsg.target; let tabbrowser = browser.getTabBrowser(); - let tab; -//#if MOZCENTRAL - tab = tabbrowser.getTabForBrowser(browser); -//#else - if (tabbrowser.getTabForBrowser) { - tab = tabbrowser.getTabForBrowser(browser); - } else { - // _getTabForBrowser is deprecated in Firefox 35, see - // https://bugzilla.mozilla.org/show_bug.cgi?id=1039500. - tab = tabbrowser._getTabForBrowser(browser); - } -//#endif + let tab = tabbrowser.getTabForBrowser(browser); return tabbrowser.getFindBar(tab); }, diff --git a/extensions/firefox/install.rdf b/extensions/firefox/install.rdf index eb683b96b..2b874cec5 100644 --- a/extensions/firefox/install.rdf +++ b/extensions/firefox/install.rdf @@ -13,8 +13,8 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} - 10.0 - 46.0a1 + 38.0 + 50.0a1 @@ -31,8 +31,8 @@ {aa3c5121-dab2-40e2-81ca-7ea25febc110} - 11.0 - 46.0a1 + 38.0 + 50.0a1 diff --git a/extensions/firefox/update.rdf b/extensions/firefox/update.rdf index 29c826518..498f47eac 100644 --- a/extensions/firefox/update.rdf +++ b/extensions/firefox/update.rdf @@ -14,8 +14,8 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} - 10.0 - 46.0 + 38.0 + 50.0 https://raw.githubusercontent.com/mozilla/pdf.js/gh-pages/extensions/firefox/pdf.js.xpi @@ -25,8 +25,8 @@ {aa3c5121-dab2-40e2-81ca-7ea25febc110} - 10.0 - 46.0 + 38.0 + 50.0 https://raw.githubusercontent.com/mozilla/pdf.js/gh-pages/extensions/firefox/pdf.js.xpi