diff --git a/extensions/firefox/content/PdfJs.jsm b/extensions/firefox/content/PdfJs.jsm index 50ee8adcc..263186b54 100644 --- a/extensions/firefox/content/PdfJs.jsm +++ b/extensions/firefox/content/PdfJs.jsm @@ -67,10 +67,11 @@ function getIntPref(aPref, aDefaultValue) { } function isDefaultHandler() { - if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT) { - return PdfjsContentUtils.isDefaultHandlerApp(); - } - return PdfjsChromeUtils.isDefaultHandlerApp(); + if (Services.appinfo.processType !== Services.appinfo.PROCESS_TYPE_DEFAULT) { + throw new Error("isDefaultHandler should only get called in the parent " + + "process."); + } + return PdfjsChromeUtils.isDefaultHandlerApp(); } function initializeDefaultPreferences() { @@ -251,13 +252,16 @@ var PdfJs = { // nsIObserver observe: function observe(aSubject, aTopic, aData) { - this.updateRegistration(); - if (Services.appinfo.processType === + if (Services.appinfo.processType !== Services.appinfo.PROCESS_TYPE_DEFAULT) { - let jsm = "resource://pdf.js/PdfjsChromeUtils.jsm"; - let PdfjsChromeUtils = Components.utils.import(jsm, {}).PdfjsChromeUtils; - PdfjsChromeUtils.notifyChildOfSettingsChange(); + throw new Error("Only the parent process should be observing PDF " + + "handler changes."); } + + this.updateRegistration(); + let jsm = "resource://pdf.js/PdfjsChromeUtils.jsm"; + let PdfjsChromeUtils = Components.utils.import(jsm, {}).PdfjsChromeUtils; + PdfjsChromeUtils.notifyChildOfSettingsChange(this.enabled); }, /** diff --git a/extensions/firefox/content/PdfjsChromeUtils.jsm b/extensions/firefox/content/PdfjsChromeUtils.jsm index b22ade9d9..af7b4c2fb 100644 --- a/extensions/firefox/content/PdfjsChromeUtils.jsm +++ b/extensions/firefox/content/PdfjsChromeUtils.jsm @@ -117,7 +117,7 @@ var PdfjsChromeUtils = { * instruct the child to refresh its configuration and (possibly) * the module's registration. */ - notifyChildOfSettingsChange() { + notifyChildOfSettingsChange(enabled) { if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_DEFAULT && this._ppmm) { // XXX kinda bad, we want to get the parent process mm associated @@ -125,7 +125,8 @@ var PdfjsChromeUtils = { // manager, which means this is going to fire to every child process // we have open. Unfortunately I can't find a way to get at that // process specific mm from js. - this._ppmm.broadcastAsyncMessage("PDFJS:Child:refreshSettings", {}); + this._ppmm.broadcastAsyncMessage("PDFJS:Child:updateSettings", + { enabled, }); } }, diff --git a/extensions/firefox/content/PdfjsContentUtils.jsm b/extensions/firefox/content/PdfjsContentUtils.jsm index e625c4528..1d55ffc16 100644 --- a/extensions/firefox/content/PdfjsContentUtils.jsm +++ b/extensions/firefox/content/PdfjsContentUtils.jsm @@ -43,7 +43,7 @@ var PdfjsContentUtils = { if (!this._mm) { this._mm = Cc["@mozilla.org/childprocessmessagemanager;1"]. getService(Ci.nsISyncMessageSender); - this._mm.addMessageListener("PDFJS:Child:refreshSettings", this); + this._mm.addMessageListener("PDFJS:Child:updateSettings", this); //#if !MOZCENTRAL // The signature of `Services.obs.addObserver` changed in Firefox 55, @@ -62,7 +62,7 @@ var PdfjsContentUtils = { uninit() { if (this._mm) { - this._mm.removeMessageListener("PDFJS:Child:refreshSettings", this); + this._mm.removeMessageListener("PDFJS:Child:updateSettings", this); Services.obs.removeObserver(this, "quit-application"); } this._mm = null; @@ -108,14 +108,6 @@ var PdfjsContentUtils = { }); }, - /* - * Forwards default app query to the parent where we check various - * handler app settings only available in the parent process. - */ - isDefaultHandlerApp() { - return this._mm.sendSyncMessage("PDFJS:Parent:isDefaultHandlerApp")[0]; - }, - /* * Request the display of a notification warning in the associated window * when the renderer isn't sure a pdf displayed correctly. @@ -145,13 +137,17 @@ var PdfjsContentUtils = { receiveMessage(aMsg) { switch (aMsg.name) { - case "PDFJS:Child:refreshSettings": + case "PDFJS:Child:updateSettings": // Only react to this if we are remote. if (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT) { let jsm = "resource://pdf.js/PdfJs.jsm"; let pdfjs = Components.utils.import(jsm, {}).PdfJs; - pdfjs.updateRegistration(); + if (aMsg.data.enabled) { + pdfjs.ensureRegistered(); + } else { + pdfjs.ensureUnregistered(); + } } break; }