aboutsummaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorEinar Egilsson <einar@einaregilsson.com>2015-09-23 12:07:12 +0000
committerEinar Egilsson <einar@einaregilsson.com>2015-09-23 12:07:12 +0000
commitd8cf1e9fb53dc262f6deb8633c5ecc43240c82ef (patch)
tree30aaea34c82072828992da483e142a7217b2f6d8 /js
parent354b7325e453c3fa259ecd9a07b4634d09cf5afe (diff)
Mostly working, dead object problems
Diffstat (limited to 'js')
-rw-r--r--js/background.js9
-rw-r--r--js/firefox/background-shim.js26
-rw-r--r--js/firefox/content-script-proxy.js20
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);