diff options
author | Einar Egilsson <einar@einaregilsson.com> | 2015-09-23 12:07:12 +0000 |
---|---|---|
committer | Einar Egilsson <einar@einaregilsson.com> | 2015-09-23 12:07:12 +0000 |
commit | d8cf1e9fb53dc262f6deb8633c5ecc43240c82ef (patch) | |
tree | 30aaea34c82072828992da483e142a7217b2f6d8 /js | |
parent | 354b7325e453c3fa259ecd9a07b4634d09cf5afe (diff) |
Mostly working, dead object problems
Diffstat (limited to 'js')
-rw-r--r-- | js/background.js | 9 | ||||
-rw-r--r-- | js/firefox/background-shim.js | 26 | ||||
-rw-r--r-- | js/firefox/content-script-proxy.js | 20 |
3 files changed, 41 insertions, 14 deletions
diff --git a/js/background.js b/js/background.js index 81bf405..16c052f 100644 --- a/js/background.js +++ b/js/background.js @@ -18,6 +18,10 @@ if (typeof chrome == 'undefined') { firefoxShim.setLogger(log); chrome = firefoxShim.chrome; Redirect = firefoxShim.Redirect; + exports.onUnload = function (reason) { + redirectEvent.removeListener(checkRedirects); + chrome.storage.onChanged.removeListener(monitorChanges); + }; } //Hopefully Firefox will fix this at some point and we can just use onBeforeRequest everywhere... var redirectEvent = isFirefox ? chrome.webRequest.onBeforeSendHeaders : chrome.webRequest.onBeforeRequest; @@ -100,7 +104,7 @@ function checkRedirects(details) { //Monitor changes in data, and setup everything again. //This could probably be optimized to not do everything on every change //but why bother? -chrome.storage.onChanged.addListener(function(changes, namespace) { +function monitorChanges(changes, namespace) { if (changes.disabled) { updateIcon(); @@ -117,7 +121,8 @@ chrome.storage.onChanged.addListener(function(changes, namespace) { log('Redirects have changed, setting up listener again'); setUpRedirectListener(); } -}); +} +chrome.storage.onChanged.addListener(monitorChanges); //Creates a filter to pass to the listener so we don't have to run through //all the redirects for all the request types we don't have any redirects for anyway. diff --git a/js/firefox/background-shim.js b/js/firefox/background-shim.js index 4cf96eb..34d0fc5 100644 --- a/js/firefox/background-shim.js +++ b/js/firefox/background-shim.js @@ -34,7 +34,9 @@ function migrateFromOlderVersion() { var Redirect = require('../redirect').Redirect; var newData = {redirects:[]}; for (var r of jsonData.redirects) { - newData.redirects.push(new Redirect(r).toObject()); + var redirect = new Redirect(r); + redirect.updateExampleResult(); + newData.redirects.push(redirect.toObject()); } Cu.import("resource://gre/modules/Services.jsm"); @@ -49,8 +51,9 @@ function migrateFromOlderVersion() { var oldPrefs = ['enabled', 'debugEnabled', 'enableShortcutKey', 'version', 'defaultDir']; for (var p of oldPrefs) { try { - Services.prefs.deleteBranch('extensions.redirector.' + oldPrefs); - } catch(e) {} + Services.prefs.deleteBranch('extensions.redirector.' + p); + } catch(e) { + } } @@ -147,12 +150,13 @@ function attachedPage(worker) { worker.port.emit('message', msg); } - //We proxy all logging over here so we can control it with one switch - worker.port.on('log', function(logMessage) { + function logger(logMessage) { log(logMessage); - }); + } + //We proxy all logging over here so we can control it with one switch + worker.port.on('log', logger); - worker.port.on('message', function(message) { + function receive(message) { log('background got message: ' + JSON.stringify(message)); if (message.messageType == 'storage.get') { @@ -195,7 +199,13 @@ function attachedPage(worker) { panel.hide(); sendReply(message, null); } - }); + } + worker.port.on('message', receive); + + worker.on('detach', function() { + worker.port.removeListener('message', receive); + worker.port.removeListener('log', logger); + }); } attachedPage(panel); diff --git a/js/firefox/content-script-proxy.js b/js/firefox/content-script-proxy.js index 271bfa1..c56de29 100644 --- a/js/firefox/content-script-proxy.js +++ b/js/firefox/content-script-proxy.js @@ -3,7 +3,8 @@ function log(msg) { self.port.emit('log', msg); } -window.addEventListener('message', function(message) { + +function receiveWindowMessage(message) { if (message.data.sender !== 'page') { return; } @@ -18,9 +19,20 @@ window.addEventListener('message', function(message) { //Forward the message to the background script self.port.emit('message', message.data); -}) +} -self.port.on('message', function(message) { +window.addEventListener('message', receiveWindowMessage); + +function receiveMessage(message) { log('proxy got chrome message: ' + JSON.stringify(message)); window.postMessage(message, '*'); -});
\ No newline at end of file +} +self.port.on('message', receiveMessage); + +function cleanup() { + window.removeEventListener('message', receiveWindowMessage); + self.port.removeListener('message', receiveMessage); + self.port.removeListener('detach', cleanup); +} + +self.port.on('detach', cleanup); |