]> git.parisson.com Git - pdf.js.git/commitdiff
Add firefox ui fallback on error/unsupported feature.
authorBrendan Dahl <brendan.dahl@gmail.com>
Thu, 10 May 2012 22:54:58 +0000 (15:54 -0700)
committerBrendan Dahl <brendan.dahl@gmail.com>
Thu, 10 May 2012 22:54:58 +0000 (15:54 -0700)
extensions/firefox/components/PdfStreamConverter.js
l10n/en-US/viewer.properties
web/viewer.js

index 49fd134aed7cdc3246b3456753c56dec8d3d0ad4..57647d67e1fcd7121a9c423aa29a76ab5f2eb3cc 100644 (file)
@@ -11,12 +11,14 @@ const Cr = Components.results;
 const Cu = Components.utils;
 const PDFJS_EVENT_ID = 'pdf.js.message';
 const PDF_CONTENT_TYPE = 'application/pdf';
-const EXT_PREFIX = 'extensions.uriloader@pdf.js';
+const EXT_ID = 'uriloader@pdf.js';
+const EXT_PREFIX = 'extensions.' + EXT_ID;
 const MAX_DATABASE_LENGTH = 4096;
 
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 Cu.import('resource://gre/modules/Services.jsm');
 Cu.import('resource://gre/modules/NetUtil.jsm');
+Cu.import('resource://gre/modules/AddonManager.jsm');
 
 let privateBrowsing = Cc['@mozilla.org/privatebrowsing;1']
                         .getService(Ci.nsIPrivateBrowsingService);
@@ -59,6 +61,13 @@ function getDOMWindow(aChannel) {
   return win;
 }
 
+// Fake l10n until we get the real l10n sorted out.
+var mozL10n = {
+  get: function(key, args, fallback) {
+    return fallback;
+  }
+};
+
 // All the priviledged actions.
 function ChromeActions() {
   this.inPrivateBrowswing = privateBrowsing.privateBrowsingEnabled;
@@ -115,10 +124,36 @@ ChromeActions.prototype = {
   },
   pdfBugEnabled: function() {
     return getBoolPref(EXT_PREFIX + '.pdfBugEnabled', false);
+  },
+  fallback: function(url) {
+    var self = this;
+    var message = mozL10n.get('unsupported_feature', null,
+                  'An unsupported feature was detected in this PDF document.');
+    var win = Services.wm.getMostRecentWindow('navigator:browser');
+    var notificationBox = win.gBrowser.getNotificationBox();
+    var buttons = [{
+      label: mozL10n.get('download_document', null, 'Download Document'),
+      accessKey: null,
+      callback: function() {
+        self.download(url);
+      }
+    }, {
+      label: mozL10n.get('disable_pdfjs', null,
+                         'Disable Mozilla PDF Viewer'),
+      accessKey: null,
+      callback: function() {
+        AddonManager.getAddonByID(EXT_ID, function(aAddon) {
+          aAddon.userDisabled = true;
+          win.gBrowser.contentWindow.location.reload();
+        });
+      }
+    }];
+    notificationBox.appendNotification(message, 'pdfjs-fallback', null,
+                                       notificationBox.PRIORITY_WARNING_LOW,
+                                       buttons);
   }
 };
 
-
 // Event listener to trigger chrome privedged code.
 function RequestListener(actions) {
   this.actions = actions;
index c8dbe4aba4c16074feef143eab7699093900b8e7..c1617b0bd442d111f9d9e310f5c22d7c6289df83 100644 (file)
@@ -42,3 +42,6 @@ zoom_in_label=Zoom In
 zoom.title=Zoom
 thumb_page_title=Page {{page}}
 thumb_page_canvas=Thumbnail of Page {{page}}
+unsupported_feature=An unsupported feature was detected in this PDF document.
+download_document=Download Document
+disable_pdfjs=Disable Mozilla PDF Viewer
index dcbfcf14e6e14e8074930e16195e472316d7495e..d700e11f39af5e24c8d61631f2cb2e6df58a1ca7 100644 (file)
@@ -374,6 +374,11 @@ var PDFView = {
     }
   },
 
+  fallback: function pdfViewDownload() {
+    var url = this.url.split('#')[0];
+    FirefoxCom.request('fallback', url);
+  },
+
   navigateTo: function pdfViewNavigateTo(dest) {
     if (typeof dest === 'string')
       dest = this.destinations[dest];