Merge pull request #5918 from Snuffleupagus/remove-fallback-cpow

[Firefox] Replace the CPOW with asynchronous messages for the Fallback bar
This commit is contained in:
Yury Delendik 2015-07-06 21:31:48 -05:00
commit eb2ad11571
3 changed files with 34 additions and 16 deletions

View File

@ -493,9 +493,23 @@ ChromeActions.prototype = {
message = getLocalizedString(strings, 'unsupported_feature'); message = getLocalizedString(strings, 'unsupported_feature');
} }
PdfJsTelemetry.onFallback(); PdfJsTelemetry.onFallback();
PdfjsContentUtils.displayWarning(domWindow, message, sendResponse, PdfjsContentUtils.displayWarning(domWindow, message,
getLocalizedString(strings, 'open_with_different_viewer'), getLocalizedString(strings, 'open_with_different_viewer'),
getLocalizedString(strings, 'open_with_different_viewer', 'accessKey')); getLocalizedString(strings, 'open_with_different_viewer', 'accessKey'));
let winmm = domWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDocShell)
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIContentFrameMessageManager);
winmm.addMessageListener('PDFJS:Child:fallbackDownload',
function fallbackDownload(msg) {
let data = msg.data;
sendResponse(data.download);
winmm.removeMessageListener('PDFJS:Child:fallbackDownload',
fallbackDownload);
});
}, },
updateFindControlState: function(data) { updateFindControlState: function(data) {
if (!this.supportsIntegratedFind()) { if (!this.supportsIntegratedFind()) {

View File

@ -306,24 +306,30 @@ let PdfjsChromeUtils = {
* a pdf displayed correctly. * a pdf displayed correctly.
*/ */
_displayWarning: function (aMsg) { _displayWarning: function (aMsg) {
let json = aMsg.data; let data = aMsg.data;
let browser = aMsg.target; let browser = aMsg.target;
let cpowCallback = aMsg.objects.callback;
let tabbrowser = browser.getTabBrowser(); let tabbrowser = browser.getTabBrowser();
let notificationBox = tabbrowser.getNotificationBox(browser); let notificationBox = tabbrowser.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 // Flag so we don't send the message twice, since if the user clicks
// "open with different viewer" both the button callback and
// eventCallback will be called. // eventCallback will be called.
let responseSent = false; let messageSent = false;
function sendMessage(download) {
let mm = browser.messageManager;
mm.sendAsyncMessage('PDFJS:Child:fallbackDownload',
{ download: download });
}
let buttons = [{ let buttons = [{
label: json.label, label: data.label,
accessKey: json.accessKey, accessKey: data.accessKey,
callback: function() { callback: function() {
responseSent = true; messageSent = true;
cpowCallback(true); sendMessage(true);
} }
}]; }];
notificationBox.appendNotification(json.message, 'pdfjs-fallback', null, notificationBox.appendNotification(data.message, 'pdfjs-fallback', null,
notificationBox.PRIORITY_INFO_LOW, notificationBox.PRIORITY_INFO_LOW,
buttons, buttons,
function eventsCallback(eventType) { function eventsCallback(eventType) {
@ -334,10 +340,10 @@ let PdfjsChromeUtils = {
} }
// Don't send a response again if we already responded when the button was // Don't send a response again if we already responded when the button was
// clicked. // clicked.
if (responseSent) { if (messageSent) {
return; return;
} }
cpowCallback(false); sendMessage(false);
}); });
} }
}; };

View File

@ -112,7 +112,7 @@ let PdfjsContentUtils = {
* Request the display of a notification warning in the associated window * Request the display of a notification warning in the associated window
* when the renderer isn't sure a pdf displayed correctly. * when the renderer isn't sure a pdf displayed correctly.
*/ */
displayWarning: function (aWindow, aMessage, aCallback, aLabel, accessKey) { displayWarning: function (aWindow, aMessage, aLabel, accessKey) {
// the child's dom frame mm associated with the window. // the child's dom frame mm associated with the window.
let winmm = aWindow.QueryInterface(Ci.nsIInterfaceRequestor) let winmm = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDocShell) .getInterface(Ci.nsIDocShell)
@ -122,8 +122,6 @@ let PdfjsContentUtils = {
message: aMessage, message: aMessage,
label: aLabel, label: aLabel,
accessKey: accessKey accessKey: accessKey
}, {
callback: aCallback
}); });
}, },