diff --git a/extensions/firefox/content/PdfJs.jsm b/extensions/firefox/content/PdfJs.jsm index 786b4790c..54cbf5812 100644 --- a/extensions/firefox/content/PdfJs.jsm +++ b/extensions/firefox/content/PdfJs.jsm @@ -33,11 +33,15 @@ const PDF_CONTENT_TYPE = 'application/pdf'; Cu.import('resource://gre/modules/XPCOMUtils.jsm'); Cu.import('resource://gre/modules/Services.jsm'); Cu.import('resource://pdf.js.components/PdfStreamConverter.js'); +Cu.import('resource://pdf.js.components/PdfRedirector.js'); let Svc = {}; XPCOMUtils.defineLazyServiceGetter(Svc, 'mime', '@mozilla.org/mime;1', 'nsIMIMEService'); +XPCOMUtils.defineLazyServiceGetter(Svc, 'pluginHost', + '@mozilla.org/plugin/host;1', + 'nsIPluginHost'); function getBoolPref(aPref, aDefaultValue) { try { @@ -55,8 +59,10 @@ function getIntPref(aPref, aDefaultValue) { } } -// Register/unregister a constructor as a component. -let Factory = { +// Factory that registers/unregisters a constructor as a component. +function Factory() {} + +Factory.prototype = { QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory]), _targetConstructor: null, @@ -193,7 +199,14 @@ let PdfJs = { if (this._registered) return; - Factory.register(PdfStreamConverter); + this._pdfStreamConverterFactory = new Factory(); + this._pdfStreamConverterFactory.register(PdfStreamConverter); + + this._pdfRedirectorFactory = new Factory(); + this._pdfRedirectorFactory.register(PdfRedirector); + Svc.pluginHost.registerPlayPreviewMimeType('application/pdf', true, + 'data:application/x-moz-playpreview-pdfjs;,'); + this._registered = true; }, @@ -201,7 +214,13 @@ let PdfJs = { if (!this._registered) return; - Factory.unregister(); + this._pdfStreamConverterFactory.unregister(); + delete this._pdfStreamConverterFactory; + + this._pdfRedirectorFactory.unregister; + delete this._pdfRedirectorFactory; + Svc.pluginHost.unregisterPlayPreviewMimeType('application/pdf'); + this._registered = false; } };