diff options
-rwxr-xr-x | build.py | 21 | ||||
-rw-r--r-- | js/background.js | 15 | ||||
-rw-r--r-- | js/firefox/background-shim.js | 89 | ||||
-rw-r--r-- | js/firefox/content-script-proxy.js | 14 | ||||
-rw-r--r-- | js/firefox/page-shim.js | 18 | ||||
-rw-r--r-- | manifest.json | 2 | ||||
-rw-r--r-- | package.json | 10 |
7 files changed, 143 insertions, 26 deletions
@@ -4,7 +4,14 @@ import os, os.path, re, zipfile, json def get_files_to_zip(): #Exclude git stuff, build scripts etc. - exclude = [r'(\\|/)\.git(\\|/)', r'\.(py|sh)$', r'\.DS_Store$', r'\.gitignore$',r'(\\|/)build(\\|/)', '.*devprofile.*', r'debug\.sh'] + exclude = [ + r'(\\|/)\.git(\\|/)', + r'\.(py|sh)$', + r'\.DS_Store$', + r'\.gitignore$', + r'(\\|/)build(\\|/)', + r'debug\.sh' + ] zippable_files = [] for root, folders, files in os.walk('.'): @@ -14,6 +21,13 @@ def get_files_to_zip(): zippable_files.append(file) return zippable_files +def create_firefox_addon(): + os.system('jpm xpi') + import glob, shutil + name = glob.glob('*.xpi')[0] + shutil.move(name, os.path.join('build', 'redirector-firefox.xpi')) + + def create_addon(files, browser): output_folder = 'build' if not os.path.isdir(output_folder): @@ -56,6 +70,7 @@ if __name__ == '__main__': print '' browsers = ['chrome', 'firefox', 'opera'] - for b in browsers: - create_addon(files, b) + create_addon(files, 'chrome') + create_addon(files, 'opera') + create_firefox_addon() diff --git a/js/background.js b/js/background.js index 40998f7..81bf405 100644 --- a/js/background.js +++ b/js/background.js @@ -1,6 +1,13 @@ //This is the background script. It is responsible for actually redirecting requests, //as well as monitoring changes in the redirects and the disabled status and reacting to them. +function log(msg) { + if (log.enabled) { + console.log('REDIRECTOR: ' + msg); + } +} +log.enabled = false; + //TODO: Better browser detection... var isFirefox = false; @@ -8,6 +15,7 @@ var isFirefox = false; if (typeof chrome == 'undefined') { isFirefox = true; var firefoxShim = require('./firefox/background-shim'); + firefoxShim.setLogger(log); chrome = firefoxShim.chrome; Redirect = firefoxShim.Redirect; } @@ -25,13 +33,6 @@ var ignoreNextRequest = { }; -function log(msg) { - if (log.enabled) { - console.log('REDIRECTOR: ' + msg); - } -} -log.enabled = true; - function setIcon(image) { var data = { path: { 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); diff --git a/manifest.json b/manifest.json index 405765d..aa2fbf7 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Redirector", - "description": "Redirect pages based on user-defined patterns.", + "description": "Automatically redirect pages based on user-defined rules. E.g. always redirect an article url to its printer-friendly version.", "version": "3.0", "icons": { "16": "images/icon-active-16.png", diff --git a/package.json b/package.json index 91fe391..47bb763 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,15 @@ "id" : "redirector@einaregilsson.com", "version": "3.0.0", "homepage" : "http://einaregilsson.com/redirector", - "icon" : "images/icon-active-48.png", - "icon64" : "images/icon-active-64.png", - "description": "A basic add-on", + "icon" : "resource://redirector-at-einaregilsson-dot-com/images/icon-active-48.png", + "icon64" : "iresource://redirector-at-einaregilsson-dot-com/images/icon-active-64.png", + "description": "Automatically redirect pages based on user-defined rules. E.g. always redirect an article url to its printer-friendly version.", "main": "js/background.js", "author": "Einar Egilsson", "permissions" : { "multiprocess" : true }, "engines": { - "firefox": ">=38.0a1", - "fennec": ">=38.0a1" + "firefox": ">=41.0", + "fennec": ">=41.0" }, "license": "MIT" } |