diff --git a/extensions/firefox/components/pdfContentHandler.js b/extensions/firefox/components/pdfContentHandler.js index fc42b9260..320d69d30 100644 --- a/extensions/firefox/components/pdfContentHandler.js +++ b/extensions/firefox/components/pdfContentHandler.js @@ -70,6 +70,17 @@ pdfContentHandler.prototype = { onStartRequest: function(aRequest, aContext) { // Setup the request so we can use it below. aRequest.QueryInterface(Ci.nsIChannel); + // Cancel the request so the viewer can handle it. + aRequest.cancel(Cr.NS_BINDING_ABORTED); + + // Check if we should download. + var targetUrl = aRequest.originalURI.spec; + var downloadHash = targetUrl.indexOf('?#pdfjs.action=download'); + if (downloadHash >= 0) { + targetUrl = targetUrl.substring(0, downloadHash); + Services.wm.getMostRecentWindow("navigator:browser").saveURL(targetUrl); + return; + } // Create a new channel that is viewer loaded as a resource. var ioService = Cc['@mozilla.org/network/io-service;1'] @@ -79,9 +90,6 @@ pdfContentHandler.prototype = { // Keep the URL the same so the browser sees it as the same. channel.originalURI = aRequest.originalURI; channel.asyncOpen(this.listener, aContext); - - // Cancel the request so the viewer can handle it. - aRequest.cancel(Cr.NS_BINDING_ABORTED); }, // nsIRequestObserver::onStopRequest diff --git a/web/viewer.js b/web/viewer.js index b784e6f5a..55d0a595c 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -249,7 +249,14 @@ var PDFView = { }, download: function pdfViewDownload() { - window.open(this.url + '#pdfjs.action=download', '_parent'); + var url = this.url.split('#')[0]; + // For the extension we add an extra '?' to force the page to reload, its + // stripped off by the extension. + if (PDFJS.isFirefoxExtension) + url += '?#pdfjs.action=download'; + else + url += '#pdfjs.action=download', '_parent'; + window.open(url, '_parent'); }, navigateTo: function pdfViewNavigateTo(dest) {