diff --git a/platform/firefox/vapi-background.js b/platform/firefox/vapi-background.js index 51ca40c15..c1fa70c19 100644 --- a/platform/firefox/vapi-background.js +++ b/platform/firefox/vapi-background.js @@ -371,6 +371,9 @@ var getTabBrowser = function(win) { /******************************************************************************/ var getBrowserForTab = function(tab) { + if ( !tab ) { + return null; + } return vAPI.fennec && tab.browser || tab.linkedBrowser || null; }; @@ -457,6 +460,9 @@ vAPI.tabs.stackId = 1; /******************************************************************************/ vAPI.tabs.getTabId = function(target) { + if ( !target ) { + return vAPI.noTabId; + } if ( vAPI.fennec ) { if ( target.browser ) { // target is a tab @@ -1010,6 +1016,15 @@ var httpObserver = { Services.obs.addObserver(this, 'http-on-opening-request', true); Services.obs.addObserver(this, 'http-on-examine-response', true); + // Guard against stale instances not having been unregistered + if ( this.componentRegistrar.isCIDRegistered(this.classID) ) { + try { + this.componentRegistrar.unregisterFactory(this.classID, Components.manager.getClassObject(this.classID, Ci.nsIFactory)) + } catch (ex) { + console.error('µBlock> httpObserver > unable to unregister stale instance: ', ex); + } + } + this.componentRegistrar.registerFactory( this.classID, this.classDescription, @@ -1813,10 +1828,9 @@ var optionsObserver = { cleanupTasks.push(this.unregister.bind(this)); var browser = getBrowserForTab(vAPI.tabs.get(null)); - if ( browser.currentURI.spec !== 'about:addons' ) { - return; + if ( browser && browser.currentURI && browser.currentURI.spec === 'about:addons' ) { + this.observe(browser.contentDocument, 'addon-enabled', this.addonId); } - this.observe(browser.contentDocument, 'addon-enabled', this.addonId); }, unregister: function() {