From 87d9651eb71d574b5d979f61375faf23938f5dd2 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 4 Jun 2012 17:33:27 -0700 Subject: [PATCH] Fix fallback after new download. --- .../firefox/components/PdfStreamConverter.js | 21 ++++++++++++++++--- web/viewer.js | 6 +++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/extensions/firefox/components/PdfStreamConverter.js b/extensions/firefox/components/PdfStreamConverter.js index 8980fccc5..a0057ebb6 100644 --- a/extensions/firefox/components/PdfStreamConverter.js +++ b/extensions/firefox/components/PdfStreamConverter.js @@ -216,7 +216,7 @@ ChromeActions.prototype = { searchEnabled: function() { return getBoolPref(PREF_PREFIX + '.searchEnabled', false); }, - fallback: function(url) { + fallback: function(url, sendResponse) { var self = this; var domWindow = this.domWindow; var strings = getLocalizedStrings('chrome.properties'); @@ -225,17 +225,32 @@ ChromeActions.prototype = { var win = Services.wm.getMostRecentWindow('navigator:browser'); var browser = win.gBrowser.getBrowserForDocument(domWindow.top.document); var notificationBox = win.gBrowser.getNotificationBox(browser); + // Flag so we don't call the response callback twice, since if the user + // clicks open with different viewer both the button callback and + // eventCallback will be called. + var sentResponse = false; var buttons = [{ label: getLocalizedString(strings, 'open_with_different_viewer'), accessKey: getLocalizedString(strings, 'open_with_different_viewer', 'accessKey'), callback: function() { - self.download(url); + sentResponse = true; + sendResponse(true); } }]; notificationBox.appendNotification(message, 'pdfjs-fallback', null, notificationBox.PRIORITY_WARNING_LOW, - buttons); + buttons, + function eventsCallback(eventType) { + // Currently there is only one event "removed" but if there are any other + // added in the future we still only care about removed at the moment. + if (eventType !== 'removed') + return; + // Don't send a response again if we already responded when the button was + // clicked. + if (!sentResponse) + sendResponse(false); + }); } }; diff --git a/web/viewer.js b/web/viewer.js index 991a64e16..751f2deff 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -468,7 +468,11 @@ var PDFView = { return; this.fellback = true; var url = this.url.split('#')[0]; - FirefoxCom.request('fallback', url); + FirefoxCom.request('fallback', url, function response(download) { + if (!download) + return; + PDFView.download(); + }); }, navigateTo: function pdfViewNavigateTo(dest) {