aboutsummaryrefslogtreecommitdiff
path: root/js/firefox/background-shim.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/firefox/background-shim.js')
-rw-r--r--js/firefox/background-shim.js108
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;
+