commit a2581284372175491fbd55b5f44e4c681b9009dd
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Jul 5 17:07:23 2021 +0200
fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
---
browser/components/torconnect/TorConnectParent.jsm | 11 +----------
.../torconnect/content/aboutTorConnect.js | 21 +++++----------------
browser/modules/TorConnect.jsm | 19 +++++++++++++++++--
dom/base/nsGlobalWindowOuter.cpp | 2 ++
toolkit/modules/RemotePageAccessManager.jsm | 4 ----
5 files changed, 25 insertions(+), 32 deletions(-)
diff --git a/browser/components/torconnect/TorConnectParent.jsm b/browser/components/torconnect/TorConnectParent.jsm
index f775507a744f..54548891fbab 100644
--- a/browser/components/torconnect/TorConnectParent.jsm
+++ b/browser/components/torconnect/TorConnectParent.jsm
@@ -27,6 +27,7 @@ const gActiveTopics = [
kTorBootstrapStatusTopic,
kTorBootstrapErrorTopic,
kTorLogHasWarnOrErrTopic,
+ "torconnect:bootstrap-complete",
];
const gTorLauncherPrefs = {
@@ -69,9 +70,6 @@ class TorConnectParent extends JSWindowActorParent {
}
}
- get browser() {
- return this.browsingContext.top.embedderElement;
- }
_OpenTorAdvancedPreferences() {
const win = this.browsingContext.top.embedderElement.ownerGlobal;
@@ -93,11 +91,6 @@ class TorConnectParent extends JSWindowActorParent {
);
}
- _GoToBrowserHome() {
- const window = this.browser.ownerGlobal;
- window.BrowserHome();
- }
-
receiveMessage(message) {
switch (message.name) {
case "TorBootstrapErrorOccurred":
@@ -106,8 +99,6 @@ class TorConnectParent extends JSWindowActorParent {
return TorProtocolService.retrieveBootstrapStatus();
case "OpenTorAdvancedPreferences":
return this._OpenTorAdvancedPreferences();
- case "GoToBrowserHome":
- return this._GoToBrowserHome();
case "GetLocalizedBootstrapStatus":
const { status, keyword } = message.data;
return TorLauncherUtil.getLocalizedBootstrapStatus(status, keyword);
diff --git a/browser/components/torconnect/content/aboutTorConnect.js b/browser/components/torconnect/content/aboutTorConnect.js
index 11301fa10cab..19fd335ccd13 100644
--- a/browser/components/torconnect/content/aboutTorConnect.js
+++ b/browser/components/torconnect/content/aboutTorConnect.js
@@ -15,10 +15,6 @@ const TorLauncherPrefs = {
prompt_at_startup: "extensions.torlauncher.prompt_at_startup",
}
-const BrowserPrefs = {
- homepage: "browser.startup.homepage",
-}
-
class AboutTorConnect {
log(...args) {
console.log(...args);
@@ -133,14 +129,6 @@ class AboutTorConnect {
this.elemTitle.classList.add("error");
}
- goToBrowserHome() {
- this.hideElem(this.elemCancelButton);
-
- // redirect this about:torconnect to browser homepage
- const homepage = RPMGetStringPref(BrowserPrefs.homepage);
- window.location.replace(homepage);
- }
-
set state(state) {
const oldState = this.state;
if (oldState === state) {
@@ -158,7 +146,7 @@ class AboutTorConnect {
this.setBootstrapErrorUI();
break;
case AboutTorConnect.STATE_BOOTSTRAPPED:
- this.goToBrowserHome();
+ window.close();
break;
}
}
@@ -219,8 +207,6 @@ class AboutTorConnect {
// if bootstrap state is greater than 0.
this.state = AboutTorConnect.STATE_INITIAL;
return;
- } else if (percentComplete >= 100) {
- this.state = AboutTorConnect.STATE_BOOTSTRAPPED;
} else if (percentComplete > 0) {
this.state = AboutTorConnect.STATE_BOOTSTRAPPING;
}
@@ -306,7 +292,10 @@ class AboutTorConnect {
RPMAddMessageListener(kTorQuickstartPrefChanged, ({ data }) => {
// update checkbox with latest quickstart pref value
this.elemQuickstartCheckbox.checked = data;
- })
+ });
+ RPMAddMessageListener("torconnect:bootstrap-complete", () => {
+ this.state = AboutTorConnect.STATE_BOOTSTRAPPED;
+ });
}
initKeyboardShortcuts() {
diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm
index 2b8cd15e3b62..3125c84558db 100644
--- a/browser/modules/TorConnect.jsm
+++ b/browser/modules/TorConnect.jsm
@@ -3,11 +3,15 @@
var EXPORTED_SYMBOLS = ["TorConnect"];
const { Services } = ChromeUtils.import(
- "resource://gre/modules/Services.jsm"
+ "resource://gre/modules/Services.jsm"
+);
+
+const { BrowserWindowTracker } = ChromeUtils.import(
+ "resource:///modules/BrowserWindowTracker.jsm"
);
const { TorProtocolService } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
+ "resource:///modules/TorProtocolService.jsm"
);
// TODO: move the bootstrap state management out of each of the individual
@@ -29,6 +33,17 @@ var TorConnect = (() => {
case "TorBootstrapStatus":
const obj = subject?.wrappedJSObject;
if (obj?.PROGRESS === 100) {
+ // open home page(s) in new tabs
+ const win = BrowserWindowTracker.getTopWindow()
+ const urls = Services.prefs.getStringPref("browser.startup.homepage").split('|');
+
+ let location="tab";
+ for(const url of urls) {
+ win.openTrustedLinkIn(url, location);
+ // open subsequent tabs behind first tab
+ location = "tabshifted";
+ }
+
Services.obs.notifyObservers(null, "torconnect:bootstrap-complete");
}
break;
diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp
index abe1e56d9714..759060f131ff 100644
--- a/dom/base/nsGlobalWindowOuter.cpp
+++ b/dom/base/nsGlobalWindowOuter.cpp
@@ -6082,6 +6082,8 @@ void nsGlobalWindowOuter::CloseOuter(bool aTrustedCaller) {
NS_ENSURE_SUCCESS_VOID(rv);
if (!StringBeginsWith(url, NS_LITERAL_STRING("about:neterror")) &&
+ // we want about:torconnect pages to be able to close themselves after bootstrap
+ !StringBeginsWith(url, NS_LITERAL_STRING("about:torconnect")) &&
!HadOriginalOpener() && !aTrustedCaller) {
bool allowClose =
mAllowScriptsToClose ||
diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm
index 0c001e707096..0927391c2ba7 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -183,7 +183,6 @@ let RemotePageAccessManager = {
"about:torconnect": {
RPMAddMessageListener: ["*"],
RPMSendAsyncMessage: [
- "GoToBrowserHome",
"OpenTorAdvancedPreferences",
"TorRetrieveBootstrapStatus",
"TorStopBootstrap",
@@ -205,9 +204,6 @@ let RemotePageAccessManager = {
RPMSetBoolPref: [
"extensions.torlauncher.quickstart",
],
- RPMGetStringPref: [
- "browser.startup.homepage",
- ],
},
},