From e8716657e43c46a97d80783593a8f90786a24558 Mon Sep 17 00:00:00 2001 From: hackademix Date: Tue, 28 Aug 2018 01:23:27 +0200 Subject: [PATCH] Reordered startup sequence to be more friendly with embedders like the Tor Browser. --- src/bg/defaults.js | 62 +++++++++++++++++++++++---------------------- src/bg/main.js | 30 ++++++++++------------ src/lib/Messages.js | 14 +++++++--- src/manifest.json | 5 +++- 4 files changed, 60 insertions(+), 51 deletions(-) diff --git a/src/bg/defaults.js b/src/bg/defaults.js index 4d071b4..7170743 100644 --- a/src/bg/defaults.js +++ b/src/bg/defaults.js @@ -1,36 +1,38 @@ 'use strict'; -ns.defaults = (async () => { - let defaults = { - local: { - debug: false, - showCtxMenuItem: true, - showCountBadge: true, - showFullAddresses: false, - }, - sync: { - "global": false, - "xss": true, - "clearclick": true +var Defaults = { + async init() { + let defaults = { + local: { + debug: false, + showCtxMenuItem: true, + showCountBadge: true, + showFullAddresses: false, + }, + sync: { + "global": false, + "xss": true, + "clearclick": true + } + }; + let defaultsClone = JSON.parse(JSON.stringify(defaults)); + + for (let [k, v] of Object.entries(defaults)) { + let store = await Storage.get(k, k); + if (k in store) { + Object.assign(v, store[k]); + } + v.storage = k; } - }; - let defaultsClone = JSON.parse(JSON.stringify(defaults)); - for (let [k, v] of Object.entries(defaults)) { - let store = await Storage.get(k, k); - if (k in store) { - Object.assign(v, store[k]); + Object.assign(ns, defaults); + + // dynamic settings + if (!ns.local.uuid) { + ns.local.uuid = uuid(); + await ns.save(ns.local); } - v.storage = k; + + return ns.defaults = defaultsClone; } - - Object.assign(ns, defaults); - - // dynamic settings - if (!ns.local.uuid) { - ns.local.uuid = uuid(); - await ns.save(ns.local); - } - - return ns.defaults = defaultsClone; -})(); +}; diff --git a/src/bg/main.js b/src/bg/main.js index 72ef5de..58e7aef 100644 --- a/src/bg/main.js +++ b/src/bg/main.js @@ -23,8 +23,7 @@ } async function init() { - await include("/bg/defaults.js"); - await ns.defaults; + await Defaults.init(); let policyData = (await Storage.get("sync", "policy")).policy; if (policyData && policyData.DEFAULT) { @@ -35,16 +34,22 @@ ns.policy = await Legacy.createOrMigratePolicy(); ns.savePolicy(); } - - - - await include("/bg/RequestGuard.js"); + await RequestGuard.start(); await XSS.start(); // we must start it anyway to initialize sub-objects if (!ns.sync.xss) { XSS.stop(); } - Commands.install(); + + Messages.addHandler(messageHandler); + + try { + await Messages.send("started"); + } catch (e) { + // no embedder to answer us + } + log("STARTED"); + }; let Commands = { @@ -65,8 +70,6 @@ togglePermissions() {}, install() { - - if ("command" in browser) { // keyboard shortcuts browser.commands.onCommand.addListener(cmd => { @@ -182,13 +185,8 @@ deferWebTraffic(init(), async () => { - - await include("/bg/Settings.js"); - Messages.addHandler(messageHandler); - - await Messages.send("started"); - log("STARTED"); - + Commands.install(); + this.devMode = (await browser.management.getSelf()).installType === "development"; if (this.local.debug) { if (this.devMode) { diff --git a/src/lib/Messages.js b/src/lib/Messages.js index a58598a..50639ef 100644 --- a/src/lib/Messages.js +++ b/src/lib/Messages.js @@ -1,17 +1,23 @@ "use strict"; { let handlers = new Set(); - - let forever = new Promise(resolve => {}); + let dispatch = async (msg, sender) => { let {_messageName} = msg; + let answers = []; for (let h of handlers) { let f = h[_messageName]; if (typeof f === "function") { - return await f(msg, sender); + answers.push(f(msg, sender)); } } - await forever; + if (answers.length) { + return await ( + answers.length === 1 ? answers.pop(): Promise.all(answers) + ); + } + console.log("Answering %s", _messageName); + return undefined; }; var Messages = { diff --git a/src/manifest.json b/src/manifest.json index 7a78bef..4351a1c 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -8,7 +8,7 @@ "strict_min_version": "59.0" } }, - "version": "10.1.9rc1", + "version": "10.1.9rc3", "description": "__MSG_Description__", "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'none'", @@ -54,6 +54,9 @@ "bg/ReportingCSP.js", "bg/deferWebTraffic.js", "bg/ChildPolicies.js", + "bg/Defaults.js", + "bg/RequestGuard.js", + "bg/Settings.js", "bg/main.js" ] },