diff options
Diffstat (limited to 'js/firefox/background-shim.js')
-rw-r--r-- | js/firefox/background-shim.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/js/firefox/background-shim.js b/js/firefox/background-shim.js new file mode 100644 index 0000000..fb08039 --- /dev/null +++ b/js/firefox/background-shim.js @@ -0,0 +1,108 @@ +var self = require("sdk/self"); + +const {Cu} = require('chrome'); + +function makeUrl(relativeUrl) { + return self.data.url(relativeUrl).replace('/data/', '/'); +} +//Get the extension storage from Nightly. +Cu.import(makeUrl('js/firefox/extension-storage.jsm')); + +//Create the browser action: +var { ToggleButton } = require("sdk/ui/button/toggle"); +var panels = require("sdk/panel"); + +var button = ToggleButton({ + id: "redirector", + label: "Redirector", + icon: { + "16": makeUrl("images/icon16active.png"), + "32": makeUrl("images/icon32active.png") + }, + onChange: function(state) { + if (state.checked) { + panel.show({position: button}); + } + } +}); + +var panel = panels.Panel({ + width: 200, + height: 130, + contentURL: makeUrl('popup.html'), + contentScriptFile : makeUrl('js/firefox/content-script-proxy.js'), + onHide: function() { + button.state('window', {checked: false}); + } +}); + +var extensionId = require('../../package.json').id; + +var chrome = { + webRequest : Cu.import('resource://gre/modules/WebRequest.jsm', {}), + + storage : { + local : { + get : function(query, callback) { + ExtensionStorage.get(extensionId, query).then(callback); + }, + set : function(data, callback) { + ExtensionStorage.set(extensionId, data).then(callback); + } + }, + + onChanged : { + addListener : function(listener) { + ExtensionStorage.addOnChangedListener(extensionId, listener); + }, + removeListener : function(listener) { + ExtensionStorage.removeOnChangedListener(extensionId, listener); + } + } + }, + + runtime : { + }, + + browserAction : { + setIcon : function(data, callback) { + + } + } +}; + +var pageMod = require("sdk/page-mod"); + +function attachedPage(worker) { + worker.port.on('message', function(message) { + console.info('background got message: ' + JSON.stringify(message)); + + if (message.messageType == 'storage.get') { + console.info('Getting from storage'); + chrome.storage.local.get(message.payload, function(data) { + var resultMsg = { messageId: message.messageId, payload: data }; + console.info('background sending message: ' + JSON.stringify(resultMsg)); + worker.port.emit('message', resultMsg); + }); + } else if (message.messageType == 'storage.set') { + chrome.storage.local.set(message.payload, function(data) { + var resultMsg = { messageId: message.messageId, payload: data }; + console.info('background sending message: ' + JSON.stringify(resultMsg)); + worker.port.emit('message', resultMsg); + }); + } + }); +} + +pageMod.PageMod({ + include: makeUrl('redirector.html'), + contentScriptFile: makeUrl('js/firefox/content-script-proxy.js'), + onAttach : attachedPage +}); + + +exports.chrome = chrome; + +//Get redirect.js, which is included in the background page in webextensions. +exports.Redirect = require('../redirect').Redirect; + |