From fca6f352e4a73b26b17244d66d53145cf7668281 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 10 May 2012 15:54:58 -0700 Subject: [PATCH] Add firefox ui fallback on error/unsupported feature. --- .../firefox/components/PdfStreamConverter.js | 39 ++++++++++++++++++- l10n/en-US/viewer.properties | 3 ++ web/viewer.js | 5 +++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/extensions/firefox/components/PdfStreamConverter.js b/extensions/firefox/components/PdfStreamConverter.js index 49fd134ae..57647d67e 100644 --- a/extensions/firefox/components/PdfStreamConverter.js +++ b/extensions/firefox/components/PdfStreamConverter.js @@ -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; diff --git a/l10n/en-US/viewer.properties b/l10n/en-US/viewer.properties index c8dbe4aba..c1617b0bd 100644 --- a/l10n/en-US/viewer.properties +++ b/l10n/en-US/viewer.properties @@ -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 diff --git a/web/viewer.js b/web/viewer.js index dcbfcf14e..d700e11f3 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -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];