commit b61c939ceef2ed8e5cfa788f495a978883c02404 Author: Richard Pospesel richard@torproject.org Date: Tue Jun 22 19:16:28 2021 +0200
fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- browser/components/BrowserGlue.jsm | 19 ++++++++++++++++++- .../onionservices/HttpsEverywhereControl.jsm | 17 ++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 2bd28ec1b04c..adc8e5edb07a 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -2506,7 +2506,24 @@ BrowserGlue.prototype = {
{ task: () => { - OnionAliasStore.init(); + if (Services.io.offline === false) { + // we will take this path when the user is using the legacy tor launcher + OnionAliasStore.init(); + } else { + // this path is taken when using about:torconnect, we start in offline mode + // and only switch to online after bootstrapping completes + const topic = "network:offline-status-changed"; + let offlineStatusChangedObserver = { + observe(aSubject, aTopic, aData) { + if (aTopic === topic && aData === "online") { + OnionAliasStore.init(); + // we only need to init once, so remove ourselves as an obvserver + Services.obs.removeObserver(this, topic); + } + } + }; + Services.obs.addObserver(offlineStatusChangedObserver, topic); + } }, },
diff --git a/browser/components/onionservices/HttpsEverywhereControl.jsm b/browser/components/onionservices/HttpsEverywhereControl.jsm index 60c3b5fca282..c91db3e8de87 100644 --- a/browser/components/onionservices/HttpsEverywhereControl.jsm +++ b/browser/components/onionservices/HttpsEverywhereControl.jsm @@ -27,6 +27,7 @@ const SECUREDROP_TOR_ONION_CHANNEL = { class HttpsEverywhereControl { constructor() { this._extensionMessaging = null; + this._init(); }
async _sendMessage(type, object) { @@ -47,7 +48,6 @@ class HttpsEverywhereControl { * Installs the .tor.onion update channel in https-everywhere */ async installTorOnionUpdateChannel(retries = 5) { - this._init();
// TODO: https-everywhere store is initialized asynchronously, so sending a message // immediately results in a `store.get is undefined` error. @@ -115,5 +115,20 @@ class HttpsEverywhereControl { if (!this._extensionMessaging) { this._extensionMessaging = new ExtensionMessaging(); } + + // update all of the existing https-everywhere channels + setTimeout(async () => { + let pinnedChannels = await this._sendMessage("get_pinned_update_channels"); + for(let channel of pinnedChannels.update_channels) { + this._sendMessage("update_update_channel", channel); + } + + let storedChannels = await this._sendMessage("get_stored_update_channels"); + for(let channel of storedChannels.update_channels) { + this._sendMessage("update_update_channel", channel); + } + }, 0); + + } }
tbb-commits@lists.torproject.org