]> git.parisson.com Git - pdf.js.git/commitdiff
Use open with/save as dialog for fallback and download.
authorBrendan Dahl <brendan.dahl@gmail.com>
Tue, 8 May 2012 23:11:50 +0000 (16:11 -0700)
committerBrendan Dahl <brendan.dahl@gmail.com>
Tue, 8 May 2012 23:11:50 +0000 (16:11 -0700)
extensions/firefox/components/PdfStreamConverter.js
web/viewer.html
web/viewer.js

index 5d7ac69eace44861d0109faacfcf20973d760b64..f723c69e4ca24776f04eb5790333ad6fc7a4e83d 100644 (file)
@@ -44,42 +44,37 @@ function ChromeActions() {
 }
 ChromeActions.prototype = {
   download: function(data) {
-    Services.wm.getMostRecentWindow('navigator:browser').saveURL(data);
-  },
-  fallback: function(data) {
     let mimeService = Cc['@mozilla.org/mime;1'].getService(Ci.nsIMIMEService);
     var handlerInfo = mimeService.
                         getFromTypeAndExtension('application/pdf', 'pdf');
     var uri = NetUtil.newURI(data);
-    var filename = Services.wm.getMostRecentWindow('navigator:browser').
-                      getDefaultFileName('document.pdf', uri);
-    // Create a temporary file to output to.
-    var file = Cc['@mozilla.org/file/directory_service;1'].
-                getService(Ci.nsIProperties).
-                get('TmpD', Ci.nsIFile);
-    file.append(filename);
-    file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt('0666', 8));
-
-    var ostream = Cc['@mozilla.org/network/file-output-stream;1'].
-                    createInstance(Ci.nsIFileOutputStream);
-    ostream.init(file, -1, -1, 0);
-
-    // Fetch the file and once it's ready attempt to open it with the system's
-    // default pdf handler.
-    NetUtil.asyncFetch(uri, function(istream, aResult) {
-      if (!Components.isSuccessCode(aResult)) {
-        log('Error: Fetching file failed with code ' + aResult);
-        return;
+
+    var extHelperAppSvc =
+          Cc['@mozilla.org/uriloader/external-helper-app-service;1'].
+            getService(Ci.nsIExternalHelperAppService);
+    var frontWindow = Cc['@mozilla.org/embedcomp/window-watcher;1'].
+                        getService(Ci.nsIWindowWatcher).activeWindow;
+    var ioService = Services.io;
+    var channel = ioService.newChannel(data, null, null);
+    var listener = {
+      extListener: null,
+      onStartRequest: function(aRequest, aContext) {
+        this.extListener = extHelperAppSvc.doContent('application/pdf',
+                              aRequest, frontWindow, false);
+        this.extListener.onStartRequest(aRequest, aContext);
+      },
+      onStopRequest: function(aRequest, aContext, aStatusCode) {
+        if (this.extListener)
+          this.extListener.onStopRequest(aRequest, aContext, aStatusCode);
+      },
+      onDataAvailable: function(aRequest, aContext, aInputStream, aOffset,
+                                aCount) {
+        this.extListener.onDataAvailable(aRequest, aContext, aInputStream,
+                                         aOffset, aCount);
       }
-      NetUtil.asyncCopy(istream, ostream, function(aResult) {
-        if (!Components.isSuccessCode(aResult)) {
-          log('Error: Copying file failed with code: ' + aResult);
-          return;
-        }
-        handlerInfo.preferredAction = Ci.nsIHandlerInfo.useSystemDefault;
-        handlerInfo.launchWithFile(file);
-      });
-    });
+    };
+
+    channel.asyncOpen(listener, null);
   },
   setDatabase: function(data) {
     if (this.inPrivateBrowswing)
index fa836fdab75e1ca7c9d905c765b73d57dd334da1..0ec05e031943eb650a87d2cce05accbef8ac4f85 100644 (file)
                   <span data-l10n-id="print_label">Print</span>
                 </button>
                 -->
-                <button id="fallback" class="toolbarButton fallback" title="Open with System Default PDF Viewer" onclick="PDFView.fallback();" tabindex="12" data-l10n-id="fallback" hidden="true">F
-                  <span data-l10n-id="fallback_label">Open with System Default PDF Viewer</span>
-                </button>
-                <button id="download" class="toolbarButton download" title="Download" onclick="PDFView.download();" tabindex="13" data-l10n-id="download">
+
+                <button id="download" class="toolbarButton download" title="Download" onclick="PDFView.download();" tabindex="12" data-l10n-id="download">
                   <span data-l10n-id="download_label">Download</span>
                 </button>
                 <!-- <div class="toolbarButtonSpacer"></div> -->
-                <a href="#" id="viewBookmark" class="toolbarButton bookmark" title="Current view (copy or open in new window)" tabindex="14" data-l10n-id="bookmark"><span data-l10n-id="bookmark_label">Current View</span></a>
+                <a href="#" id="viewBookmark" class="toolbarButton bookmark" title="Current view (copy or open in new window)" tabindex="13" data-l10n-id="bookmark"><span data-l10n-id="bookmark_label">Current View</span></a>
               </div>
               <div class="outerCenter">
                 <div class="innerCenter" id="toolbarViewerMiddle">
index b15b123a41fba123d3fb9274776efcff699d7978..857429c5e02e78daa88d29808d010e457c66c7e6 100644 (file)
@@ -375,9 +375,9 @@ var PDFView = {
   },
 
   fallback: function pdfViewDownload() {
+    var url = this.url.split('#')[0];
     if (!PDFJS.isFirefoxExtension)
       return; // can't do this with regular viewer
-    var url = this.url.split('#')[0];
     FirefoxCom.request('fallback', url);
   },
 
@@ -1359,9 +1359,6 @@ window.addEventListener('load', function webViewerLoad(evt) {
     document.getElementById('fileInput').value = null;
   }
 
-  if (PDFJS.isFirefoxExtension)
-    document.getElementById('fallback').removeAttribute('hidden');
-
   // Special debugging flags in the hash section of the URL.
   var hash = document.location.hash.substring(1);
   var hashParams = PDFView.parseQueryString(hash);