aboutsummaryrefslogtreecommitdiff
path: root/js/firefox
diff options
context:
space:
mode:
authorEinar Egilsson <einar@einaregilsson.com>2015-09-23 10:58:44 +0000
committerEinar Egilsson <einar@einaregilsson.com>2015-09-23 10:58:44 +0000
commit354b7325e453c3fa259ecd9a07b4634d09cf5afe (patch)
treeb137bf64bfe82e06d99e83c234875d8f08ecad3f /js/firefox
parent96560ba904512a429378531c65c70ecaceb9b241 (diff)
Build correctly for Firefox + allow to turn on logging
Diffstat (limited to 'js/firefox')
-rw-r--r--js/firefox/background-shim.js89
-rw-r--r--js/firefox/content-script-proxy.js14
-rw-r--r--js/firefox/page-shim.js18
3 files changed, 111 insertions, 10 deletions
diff --git a/js/firefox/background-shim.js b/js/firefox/background-shim.js
index d61d312..4cf96eb 100644
--- a/js/firefox/background-shim.js
+++ b/js/firefox/background-shim.js
@@ -3,6 +3,66 @@ var tabs = require('sdk/tabs');
const {Cu} = require('chrome');
+exports.setLogger = function(logger){
+ log = logger;
+}
+
+
+function migrateFromOlderVersion() {
+ const { pathFor } = require('sdk/system');
+ const path = require('sdk/fs/path');
+ const file = require('sdk/io/file');
+
+ var oldRedirectsFile = path.join(pathFor('ProfD'), 'Redirector.rjson');
+ if (!file.exists(oldRedirectsFile)) {
+ return;
+ }
+
+ var extensionId = require('sdk/self').id;
+ var newFolder = path.join(pathFor('ProfD'), 'browser-extension-data', extensionId);
+ file.mkpath(newFolder);
+ var newFile = path.join(newFolder, 'storage.js');
+
+ if (file.exists(newFile)) {
+ return;
+ }
+
+
+ var textReader = file.open(oldRedirectsFile, 'r');
+ var jsonData = JSON.parse(textReader.read());
+ textReader.close();
+ var Redirect = require('../redirect').Redirect;
+ var newData = {redirects:[]};
+ for (var r of jsonData.redirects) {
+ newData.redirects.push(new Redirect(r).toObject());
+ }
+
+ Cu.import("resource://gre/modules/Services.jsm");
+
+ var enabled = true;
+ try {
+ enabled = Services.prefs.getBoolPref('extensions.redirector.enabled');
+ } catch(e) {}
+ newData.disabled = !!enabled;
+
+ //Kill old prefs:
+ var oldPrefs = ['enabled', 'debugEnabled', 'enableShortcutKey', 'version', 'defaultDir'];
+ for (var p of oldPrefs) {
+ try {
+ Services.prefs.deleteBranch('extensions.redirector.' + oldPrefs);
+ } catch(e) {}
+ }
+
+
+ var textWriter = file.open(newFile, 'w');
+ textWriter.write(JSON.stringify(newData));
+ textWriter.close();
+
+ file.remove(oldRedirectsFile);
+}
+
+migrateFromOlderVersion();
+
function makeUrl(relativeUrl) {
return self.data.url(relativeUrl).replace('/data/', '/');
}
@@ -18,7 +78,9 @@ var button = ToggleButton({
label: "Redirector",
icon: {
"16": makeUrl("images/icon-active-16.png"),
- "32": makeUrl("images/icon-active-32.png")
+ "32": makeUrl("images/icon-active-32.png"),
+ "48": makeUrl("images/icon-active-48.png"),
+ "64": makeUrl("images/icon-active-64.png")
},
onChange: function(state) {
if (state.checked) {
@@ -27,7 +89,7 @@ var button = ToggleButton({
}
});
-var extensionId = require('../../package.json').id;
+var extensionId = require('sdk/self').id;
var chrome = {
webRequest : Cu.import('resource://gre/modules/WebRequest.jsm', {}),
@@ -35,10 +97,10 @@ var chrome = {
storage : {
local : {
get : function(query, callback) {
- ExtensionStorage.get(extensionId, query).then(callback);
+ ExtensionStorage.get(extensionId, query).then(callback || function(){});
},
set : function(data, callback) {
- ExtensionStorage.set(extensionId, data).then(callback);
+ ExtensionStorage.set(extensionId, data).then(callback || function(){});
}
},
@@ -81,11 +143,17 @@ var panel = panels.Panel({
function attachedPage(worker) {
function sendReply(originalMessage, reply) {
var msg = {messageId:originalMessage.messageId, payload:reply};
- console.info('background sending message: ' + JSON.stringify(msg));
+ log('background sending message: ' + JSON.stringify(msg));
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) {
+ log(logMessage);
+ });
+
worker.port.on('message', function(message) {
- console.info('background got message: ' + JSON.stringify(message));
+ log('background got message: ' + JSON.stringify(message));
if (message.messageType == 'storage.get') {
chrome.storage.local.get(message.payload, function(data) {
@@ -95,6 +163,14 @@ function attachedPage(worker) {
chrome.storage.local.set(message.payload, function(data) {
sendReply(message, data);
});
+ } else if (message.messageType == 'log.enabled') {
+ if (!message.payload.enabled) {
+ log('Logging has been disabled for Redirector');
+ }
+ log.enabled = message.payload.enabled;
+ if (log.enabled) {
+ log('Logging has been enabled for Redirector');
+ }
} else if (message.messageType == 'tabs.query') {
var result = [];
var windows = require("sdk/windows").browserWindows;
@@ -137,3 +213,4 @@ exports.chrome = chrome;
//Get redirect.js, which is included in the background page in webextensions.
exports.Redirect = require('../redirect').Redirect;
+
diff --git a/js/firefox/content-script-proxy.js b/js/firefox/content-script-proxy.js
index 58a6bc0..271bfa1 100644
--- a/js/firefox/content-script-proxy.js
+++ b/js/firefox/content-script-proxy.js
@@ -1,16 +1,26 @@
// This file listens to messages
+function log(msg) {
+ self.port.emit('log', msg);
+}
window.addEventListener('message', function(message) {
if (message.data.sender !== 'page') {
return;
}
- console.info('proxy got page message: ' + JSON.stringify(message.data));
+
+ if (message.data.logMessage) {
+ //Special handling for log messages.
+ log(message.data.logMessage);
+ return;
+ }
+
+ log('proxy got page message: ' + JSON.stringify(message.data));
//Forward the message to the background script
self.port.emit('message', message.data);
})
self.port.on('message', function(message) {
- console.info('proxy got chrome message: ' + JSON.stringify(message));
+ log('proxy got chrome message: ' + JSON.stringify(message));
window.postMessage(message, '*');
}); \ No newline at end of file
diff --git a/js/firefox/page-shim.js b/js/firefox/page-shim.js
index b6d750a..ec05f8f 100644
--- a/js/firefox/page-shim.js
+++ b/js/firefox/page-shim.js
@@ -5,6 +5,10 @@
return;
}
+ function log(msg) {
+ window.postMessage({sender:'page', logMessage: msg}, '*');
+ }
+
var messageId = 1;
var callbacks = {};
function send(type, message, callback) {
@@ -17,8 +21,7 @@
if (message.data.sender == 'page') {
return; //Ignore messages we sent ourselves
}
-
- console.info('page got message: ' + JSON.stringify(message.data));
+ log('page got message: ' + JSON.stringify(message.data));
var callback = callbacks[message.data.messageId];
if (callback) {
@@ -27,6 +30,17 @@
}
});
+ //Allow Firefox users to turn on logging
+ window.logging = {
+ enable : function() {
+ send('log.enabled', {enabled:true});
+ },
+
+ disable : function() {
+ send('log.enabled', {enabled:false});
+ }
+ }
+
var req = new XMLHttpRequest();
req.overrideMimeType('application/json');
req.open("GET", 'package.json', false);