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']
// 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
},
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) {