tbb-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 18685 discussions

[Git][tpo/applications/fenix] Pushed new tag tor-browser-99.0.0b3-11.5-1-build4
by Pier Angelo Vendrame (@pierov) 26 Aug '22
by Pier Angelo Vendrame (@pierov) 26 Aug '22
26 Aug '22
Pier Angelo Vendrame pushed new tag tor-browser-99.0.0b3-11.5-1-build4 at The Tor Project / Applications / fenix
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/tree/tor-browser-99.…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/android-components][android-components-102.0.14-12.0-1] fixup! Modify Addon support
by Pier Angelo Vendrame (@pierov) 26 Aug '22
by Pier Angelo Vendrame (@pierov) 26 Aug '22
26 Aug '22
Pier Angelo Vendrame pushed to branch android-components-102.0.14-12.0-1 at The Tor Project / Applications / android-components
Commits:
506721f0 by hackademix at 2022-08-26T10:06:25+02:00
fixup! Modify Addon support
- - - - -
1 changed file:
- components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
Changes:
=====================================
components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
=====================================
@@ -154,6 +154,7 @@ class AddonManager(
onSuccess = { ext ->
val installedAddon = addon.copy(installedState = ext.toInstalledState())
addonUpdater.registerForFutureUpdates(installedAddon.id)
+ setAddonAllowedInPrivateBrowsing(installedAddon, true)
completePendingAddonAction(pendingAction)
onSuccess(installedAddon)
},
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix][tor-browser-102.2.1-12.0-1] fixup! Modify Add-on support
by Pier Angelo Vendrame (@pierov) 26 Aug '22
by Pier Angelo Vendrame (@pierov) 26 Aug '22
26 Aug '22
Pier Angelo Vendrame pushed to branch tor-browser-102.2.1-12.0-1 at The Tor Project / Applications / fenix
Commits:
b3677ba2 by hackademix at 2022-08-26T10:03:30+02:00
fixup! Modify Add-on support
- - - - -
4 changed files:
- .gitignore
- app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- app/src/main/res/values/preference_keys.xml
Changes:
=====================================
.gitignore
=====================================
@@ -104,3 +104,7 @@ test_artifacts/
# Web extensions: manifest.json files are generated
manifest.json
+
+# Other files modified at build time
+.experimenter.json
+
=====================================
app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
=====================================
@@ -6,15 +6,19 @@
package org.mozilla.fenix.components
+import android.os.StrictMode
import android.content.Context
import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.concept.engine.webextension.WebExtensionRuntime
import mozilla.components.support.base.log.logger.Logger
+import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.tor.TorEvents
import java.io.IOException
object TorBrowserFeatures {
private val logger = Logger("torbrowser-features")
+ private const val NOSCRIPT_ID = "{73a6fe31-595d-460b-a920-fcc0f8843232}"
private fun installNoScript(
context: Context,
@@ -25,11 +29,15 @@ object TorBrowserFeatures {
/**
* Copy the xpi from assets to cacheDir, we do not care if the file is later deleted.
*/
- val addonPath =
- context.cacheDir.resolve("{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi")
+ val xpiName = "$NOSCRIPT_ID.xpi"
+ val addonPath = context.cacheDir.resolve(xpiName)
+ val policy = StrictMode.getThreadPolicy()
try {
- context.assets.open("extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi")
+ context.assets.open("extensions/$xpiName")
.use { inStream ->
+ // we don't want penaltyDeath() on disk write
+ StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX)
+
addonPath.outputStream().use { outStream ->
inStream.copyTo(outStream)
}
@@ -37,13 +45,15 @@ object TorBrowserFeatures {
} catch (throwable: IOException) {
onError(throwable)
return
+ } finally {
+ StrictMode.setThreadPolicy(policy)
}
/**
* Install with a file:// URI pointing to the temp location where the addon was copied to.
*/
runtime.installWebExtension(
- id = "{73a6fe31-595d-460b-a920-fcc0f8843232}",
+ id = NOSCRIPT_ID,
url = addonPath.toURI().toString(),
onSuccess = { extension ->
runtime.setAllowedInPrivateBrowsing(
@@ -89,8 +99,7 @@ object TorBrowserFeatures {
/**
* Install NoScript as a user WebExtension if we have not already done so.
- * AMO signature is checked, and AMO automatic updates will work. The extension should
- * behave as if the user had installed it manually.
+ * AMO signature is checked, but automatic updates still need to be enabled.
*/
if (!context.settings().noscriptInstalled) {
installNoScript(
@@ -105,5 +114,40 @@ object TorBrowserFeatures {
}
)
}
+
+ /**
+ * If we have not done it yet, enable automatic updates for NoScript and force a
+ * one-time immediate update check, in order to upgrade old profiles and ensure we've got
+ * the latest stable AMO version available on first startup.
+ * We will do it as soon as the Tor is connected, to prevent early addonUpdater activation
+ * causing automatic update checks failures (components.addonUpdater being a lazy prop).
+ * The extension, from then on, should behave as if the user had installed it manually.
+ */
+ if (context.settings().noscriptUpdated == 0) {
+ context.components.torController.registerTorListener(object : TorEvents {
+ override fun onTorConnected() {
+ context.components.torController.unregisterTorListener(this)
+ // Enable automatic updates
+ context.components.addonUpdater.registerForFutureUpdates(NOSCRIPT_ID)
+ // Force an immediate update check
+ context.components.addonUpdater.update(NOSCRIPT_ID)
+ context.settings().noscriptUpdated = 1
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorConnecting() {
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorStopped() {
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorStatusUpdate(entry: String?, status: String?) {
+ }
+ })
+ }
}
+
+
}
=====================================
app/src/main/java/org/mozilla/fenix/utils/Settings.kt
=====================================
@@ -1379,4 +1379,9 @@ class Settings(private val appContext: Context) : PreferencesHolder {
appContext.getPreferenceKey(R.string.pref_key_noscript_installed),
default = false
)
+
+ var noscriptUpdated by intPreference(
+ appContext.getPreferenceKey(R.string.pref_key_noscript_updated),
+ default = 0
+ )
}
=====================================
app/src/main/res/values/preference_keys.xml
=====================================
@@ -297,6 +297,7 @@
<string name="pref_key_show_unified_search" translatable="false">pref_key_show_unified_search</string>
<string name="pref_key_noscript_installed" translatable="false">pref_key_noscript_installed</string>
+ <string name="pref_key_noscript_updated" translatable="false">pref_key_noscript_updated</string>
<!-- Security Level Settings -->
<string name="pref_key_tor_security_level_settings" translatable="false">pref_key_tor_security_level_settings</string>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/b3677ba2ea06a…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/b3677ba2ea06a…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/android-components][android-components-99.0.3-11.5-1] fixup! Modify Addon support
by Richard Pospesel (@richard) 25 Aug '22
by Richard Pospesel (@richard) 25 Aug '22
25 Aug '22
Richard Pospesel pushed to branch android-components-99.0.3-11.5-1 at The Tor Project / Applications / android-components
Commits:
2ff416f6 by hackademix at 2022-08-24T23:30:09+02:00
fixup! Modify Addon support
- - - - -
1 changed file:
- components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
Changes:
=====================================
components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
=====================================
@@ -154,6 +154,7 @@ class AddonManager(
onSuccess = { ext ->
val installedAddon = addon.copy(installedState = ext.toInstalledState())
addonUpdater.registerForFutureUpdates(installedAddon.id)
+ setAddonAllowedInPrivateBrowsing(installedAddon, true)
completePendingAddonAction(pendingAction)
onSuccess(installedAddon)
},
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix][tor-browser-99.0.0b3-11.5-1] fixup! Modify Add-on support
by Richard Pospesel (@richard) 25 Aug '22
by Richard Pospesel (@richard) 25 Aug '22
25 Aug '22
Richard Pospesel pushed to branch tor-browser-99.0.0b3-11.5-1 at The Tor Project / Applications / fenix
Commits:
1f564fb6 by hackademix at 2022-08-25T21:38:50+00:00
fixup! Modify Add-on support
- - - - -
4 changed files:
- .gitignore
- app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- app/src/main/res/values/preference_keys.xml
Changes:
=====================================
.gitignore
=====================================
@@ -103,3 +103,7 @@ test_artifacts/
# Web extensions: manifest.json files are generated
manifest.json
+
+# Other files modified at build time
+.experimenter.json
+
=====================================
app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
=====================================
@@ -6,15 +6,19 @@
package org.mozilla.fenix.components
+import android.os.StrictMode
import android.content.Context
import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.concept.engine.webextension.WebExtensionRuntime
import mozilla.components.support.base.log.logger.Logger
+import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.tor.TorEvents
import java.io.IOException
object TorBrowserFeatures {
private val logger = Logger("torbrowser-features")
+ private const val NOSCRIPT_ID = "{73a6fe31-595d-460b-a920-fcc0f8843232}"
private fun installNoScript(
context: Context,
@@ -25,11 +29,15 @@ object TorBrowserFeatures {
/**
* Copy the xpi from assets to cacheDir, we do not care if the file is later deleted.
*/
- val addonPath =
- context.cacheDir.resolve("{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi")
+ val xpiName = "$NOSCRIPT_ID.xpi"
+ val addonPath = context.cacheDir.resolve(xpiName)
+ val policy = StrictMode.getThreadPolicy()
try {
- context.assets.open("extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi")
+ context.assets.open("extensions/$xpiName")
.use { inStream ->
+ // we don't want penaltyDeath() on disk write
+ StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX)
+
addonPath.outputStream().use { outStream ->
inStream.copyTo(outStream)
}
@@ -37,13 +45,15 @@ object TorBrowserFeatures {
} catch (throwable: IOException) {
onError(throwable)
return
+ } finally {
+ StrictMode.setThreadPolicy(policy)
}
/**
* Install with a file:// URI pointing to the temp location where the addon was copied to.
*/
runtime.installWebExtension(
- id = "{73a6fe31-595d-460b-a920-fcc0f8843232}",
+ id = NOSCRIPT_ID,
url = addonPath.toURI().toString(),
onSuccess = { extension ->
runtime.setAllowedInPrivateBrowsing(
@@ -89,8 +99,7 @@ object TorBrowserFeatures {
/**
* Install NoScript as a user WebExtension if we have not already done so.
- * AMO signature is checked, and AMO automatic updates will work. The extension should
- * behave as if the user had installed it manually.
+ * AMO signature is checked, but automatic updates still need to be enabled.
*/
if (!context.settings().noscriptInstalled) {
installNoScript(
@@ -105,5 +114,40 @@ object TorBrowserFeatures {
}
)
}
+
+ /**
+ * If we have not done it yet, enable automatic updates for NoScript and force a
+ * one-time immediate update check, in order to upgrade old profiles and ensure we've got
+ * the latest stable AMO version available on first startup.
+ * We will do it as soon as the Tor is connected, to prevent early addonUpdater activation
+ * causing automatic update checks failures (components.addonUpdater being a lazy prop).
+ * The extension, from then on, should behave as if the user had installed it manually.
+ */
+ if (context.settings().noscriptUpdated == 0) {
+ context.components.torController.registerTorListener(object : TorEvents {
+ override fun onTorConnected() {
+ context.components.torController.unregisterTorListener(this)
+ // Enable automatic updates
+ context.components.addonUpdater.registerForFutureUpdates(NOSCRIPT_ID)
+ // Force an immediate update check
+ context.components.addonUpdater.update(NOSCRIPT_ID)
+ context.settings().noscriptUpdated = 1
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorConnecting() {
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorStopped() {
+ }
+
+ @SuppressWarnings("EmptyFunctionBlock")
+ override fun onTorStatusUpdate(entry: String?, status: String?) {
+ }
+ })
+ }
}
+
+
}
=====================================
app/src/main/java/org/mozilla/fenix/utils/Settings.kt
=====================================
@@ -1370,4 +1370,9 @@ class Settings(private val appContext: Context) : PreferencesHolder {
appContext.getPreferenceKey(R.string.pref_key_noscript_installed),
default = false
)
+
+ var noscriptUpdated by intPreference(
+ appContext.getPreferenceKey(R.string.pref_key_noscript_updated),
+ default = 0
+ )
}
=====================================
app/src/main/res/values/preference_keys.xml
=====================================
@@ -291,6 +291,7 @@
<string name="pref_key_pocket_homescreen_recommendations" translatable="false">pref_key_pocket_homescreen_recommendations</string>
<string name="pref_key_noscript_installed" translatable="false">pref_key_noscript_installed</string>
+ <string name="pref_key_noscript_updated" translatable="false">pref_key_noscript_updated</string>
<!-- Security Level Settings -->
<string name="pref_key_tor_security_level_settings" translatable="false">pref_key_tor_security_level_settings</string>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/1f564fb657f87…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/1f564fb657f87…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser] branch tor-browser-102.2.0esr-12.0-1 updated: fixup! Bug 10760: Integrate TorButton to TorBrowser core
by gitolite role 25 Aug '22
by gitolite role 25 Aug '22
25 Aug '22
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.2.0esr-12.0-1
in repository tor-browser.
The following commit(s) were added to refs/heads/tor-browser-102.2.0esr-12.0-1 by this push:
new 3a79382bda2a4 fixup! Bug 10760: Integrate TorButton to TorBrowser core
3a79382bda2a4 is described below
commit 3a79382bda2a4fce7e4d1c502089d6dd8fa6dc0c
Author: Pier Angelo Vendrame <pierov(a)torproject.org>
AuthorDate: Thu Aug 25 18:34:34 2022 +0200
fixup! Bug 10760: Integrate TorButton to TorBrowser core
Updated to use the linted TorButton
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index e2a8255df7634..9f2e434a7f09d 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit e2a8255df763467afbf22cf596d56911e5b6f985
+Subproject commit 9f2e434a7f09d2f53c529e7293bf715c4a6b71e6
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch main
in repository torbutton.
The following commit(s) were added to refs/heads/main by this push:
new 9f2e434a Bug 40012: Linted torbutton
9f2e434a is described below
commit 9f2e434a7f09d2f53c529e7293bf715c4a6b71e6
Author: Pier Angelo Vendrame <pierov(a)torproject.org>
AuthorDate: Wed Aug 24 16:28:30 2022 +0200
Bug 40012: Linted torbutton
---
chrome/content/aboutTor/aboutTor-content.js | 64 +-
chrome/content/preferences-mobile.js | 49 +-
chrome/content/tor-circuit-display.js | 907 +++++++++-------
chrome/content/torbutton.js | 1561 ++++++++++++++-------------
components/domain-isolator.js | 98 +-
components/dragDropFilter.js | 39 +-
components/external-app-blocker.js | 75 +-
components/startup-observer.js | 270 ++---
components/torCheckService.js | 119 +-
components/torbutton-logger.js | 201 ++--
modules/tor-control-port.js | 457 ++++----
modules/utils.js | 238 ++--
12 files changed, 2217 insertions(+), 1861 deletions(-)
diff --git a/chrome/content/aboutTor/aboutTor-content.js b/chrome/content/aboutTor/aboutTor-content.js
index 601b817c..55bf4413 100644
--- a/chrome/content/aboutTor/aboutTor-content.js
+++ b/chrome/content/aboutTor/aboutTor-content.js
@@ -14,9 +14,14 @@
* AboutTor:ChromeData privileged data chrome -> content
*/
+/* globals content, addMessageListener, sendAsyncMessage,
+ removeMessageListener */
+
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-let { bindPrefAndInit, show_torbrowser_manual } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
+const { bindPrefAndInit, show_torbrowser_manual } = ChromeUtils.import(
+ "resource://torbutton/modules/utils.js"
+);
var AboutTorListener = {
kAboutTorLoadedMessage: "AboutTor:Loaded",
@@ -26,13 +31,14 @@ var AboutTorListener = {
return content.document.documentURI.toLowerCase() == "about:tor";
},
- init: function(aChromeGlobal) {
+ init(aChromeGlobal) {
aChromeGlobal.addEventListener("AboutTorLoad", this, false, true);
},
- handleEvent: function(aEvent) {
- if (!this.isAboutTor)
+ handleEvent(aEvent) {
+ if (!this.isAboutTor) {
return;
+ }
switch (aEvent.type) {
case "AboutTorLoad":
@@ -44,9 +50,10 @@ var AboutTorListener = {
}
},
- receiveMessage: function(aMessage) {
- if (!this.isAboutTor)
+ receiveMessage(aMessage) {
+ if (!this.isAboutTor) {
return;
+ }
switch (aMessage.name) {
case this.kAboutTorChromeDataMessage:
@@ -55,7 +62,7 @@ var AboutTorListener = {
}
},
- onPageLoad: function() {
+ onPageLoad() {
// Arrange to update localized text and links.
bindPrefAndInit("intl.locale.requested", () => {
const aNewVal = Services.locale.requestedLocale;
@@ -72,48 +79,53 @@ var AboutTorListener = {
sendAsyncMessage(this.kAboutTorLoadedMessage);
},
- onPageHide: function() {
+ onPageHide() {
removeEventListener("resize", this, false);
removeEventListener("pagehide", this, false);
removeMessageListener(this.kAboutTorChromeDataMessage, this);
},
- onChromeDataUpdate: function(aData) {
+ onChromeDataUpdate(aData) {
let body = content.document.body;
// Update status: tor on/off, Tor Browser manual shown.
- if (aData.torOn)
+ if (aData.torOn) {
body.setAttribute("toron", "yes");
- else
+ } else {
body.removeAttribute("toron");
+ }
- if (show_torbrowser_manual())
+ if (show_torbrowser_manual()) {
body.setAttribute("showmanual", "yes");
- else
+ } else {
body.removeAttribute("showmanual");
+ }
- if (aData.updateChannel)
+ if (aData.updateChannel) {
body.setAttribute("updatechannel", aData.updateChannel);
- else
+ } else {
body.removeAttribute("updatechannel");
+ }
if (aData.hasBeenUpdated) {
body.setAttribute("hasbeenupdated", "yes");
- content.document.getElementById("update-infolink").setAttribute("href",
- aData.updateMoreInfoURL);
+ content.document
+ .getElementById("update-infolink")
+ .setAttribute("href", aData.updateMoreInfoURL);
}
- if (aData.mobile)
+ if (aData.mobile) {
body.setAttribute("mobile", "yes");
+ }
// Setting body.initialized="yes" displays the body.
body.setAttribute("initialized", "yes");
},
- onLocaleChange: function(aLocale) {
+ onLocaleChange(aLocale) {
// Set localized "Get Involved" link.
content.document.getElementById("getInvolvedLink").href =
- "https://community.torproject.org/" + aLocale;
+ "https://community.torproject.org/" + aLocale;
// Display the Tor Browser product name and version.
try {
@@ -123,12 +135,14 @@ var AboutTorListener = {
let tbbVersion = Services.prefs.getCharPref("torbrowser.version");
let elem = content.document.getElementById("torbrowser-version");
- while (elem.firstChild)
- elem.removeChild(elem.firstChild);
- elem.appendChild(content.document.createTextNode(productName + ' '
- + tbbVersion));
+ while (elem.firstChild) {
+ elem.firstChild.remove();
+ }
+ elem.appendChild(
+ content.document.createTextNode(productName + " " + tbbVersion)
+ );
} catch (e) {}
- }
+ },
};
AboutTorListener.init(this);
diff --git a/chrome/content/preferences-mobile.js b/chrome/content/preferences-mobile.js
index fa79dce8..92564e90 100644
--- a/chrome/content/preferences-mobile.js
+++ b/chrome/content/preferences-mobile.js
@@ -2,26 +2,30 @@
// Utilities
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { getBoolPref, getIntPref, setBoolPref, setIntPref, getCharPref }
- = Services.prefs;
+const {
+ getBoolPref,
+ getIntPref,
+ setBoolPref,
+ setIntPref,
+ getCharPref,
+} = Services.prefs;
-let { getLocale, show_torbrowser_manual } =
- ChromeUtils.import("resource://torbutton/modules/utils.js", {});
+let { getLocale, show_torbrowser_manual } = ChromeUtils.import(
+ "resource://torbutton/modules/utils.js"
+);
// Description elements have the follow names.
-const descNames =
- [, "desc_standard", "desc_safer", "desc_safest"];
+const descNames = ["", "desc_standard", "desc_safer", "desc_safest"];
// "Learn-more"-elements have the follow names.
-const linkNames =
- [, "link_standard", "link_safer", "link_safest"];
+const linkNames = ["", "link_standard", "link_safer", "link_safest"];
// A single `state` object that reflects the user settings in this UI.
-let state = { slider : 0, custom : false};
+let state = { slider: 0, custom: false };
// Utility functions to convert between the legacy 4-value pref index
// and the 3-valued security slider.
-let sliderPositionToPrefSetting = pos => [, 4, 2, 1][pos];
-let prefSettingToSliderPosition = pref => [, 3, 2, 2, 1][pref];
+let sliderPositionToPrefSetting = pos => [0, 4, 2, 1][pos];
+let prefSettingToSliderPosition = pref => [0, 3, 2, 2, 1][pref];
// Set the desired slider value and update UI.
function torbutton_set_slider(sliderValue) {
@@ -31,9 +35,9 @@ function torbutton_set_slider(sliderValue) {
let descs = descNames.map(name => document.getElementById(name));
descs.forEach((desc, i) => {
if (state.slider !== i) {
- desc.style.display = 'none';
+ desc.style.display = "none";
} else {
- desc.style.display = 'block';
+ desc.style.display = "block";
}
});
torbutton_save_security_settings();
@@ -42,15 +46,20 @@ function torbutton_set_slider(sliderValue) {
// Read prefs 'extensions.torbutton.security_slider' and
// 'extensions.torbutton.security_custom', and initialize the UI.
function torbutton_init_security_ui() {
- torbutton_set_slider(prefSettingToSliderPosition(
- getIntPref("extensions.torbutton.security_slider")));
+ torbutton_set_slider(
+ prefSettingToSliderPosition(
+ getIntPref("extensions.torbutton.security_slider")
+ )
+ );
torbutton_set_learn_more_links();
}
// Write the two prefs from the current settings.
function torbutton_save_security_settings() {
- setIntPref("extensions.torbutton.security_slider",
- sliderPositionToPrefSetting(state.slider));
+ setIntPref(
+ "extensions.torbutton.security_slider",
+ sliderPositionToPrefSetting(state.slider)
+ );
setBoolPref("extensions.torbutton.security_custom", state.custom);
}
@@ -59,15 +68,15 @@ function torbutton_save_security_settings() {
// let's show the "Learn more"-link, otherwise hide it.
function torbutton_set_learn_more_links() {
let show_manual = show_torbrowser_manual();
- let locale = ""
+ let locale = "";
if (show_manual) {
locale = getLocale();
}
let links = linkNames.map(name => document.getElementById(name));
links.forEach(link => {
if (show_manual && locale != "") {
- link.href= "https:/tb-manual.torproject.org/" + locale +
- "/security-slider.html";
+ link.href =
+ "https:/tb-manual.torproject.org/" + locale + "/security-slider.html";
link.hidden = false;
} else {
link.hidden = true;
diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js
index 14e3da5b..e4b5ceea 100644
--- a/chrome/content/tor-circuit-display.js
+++ b/chrome/content/tor-circuit-display.js
@@ -21,28 +21,38 @@
// a previous call to configureControlPortModule(), and binds to a named
// bool pref whose value determines whether the circuit display is enabled
// or disabled.
-let createTorCircuitDisplay = (function () {
-
-"use strict";
-
-// Mozilla utilities
-const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-// Import the controller code.
-let { wait_for_controller } = ChromeUtils.import("resource://torbutton/modules/tor-control-port.js", {});
-
-// Utility functions
-let { bindPrefAndInit, observe, getLocale, getDomainForBrowser, torbutton_get_property_string } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
-
-// Make the TorButton logger available.
-let logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
-
-// ## Circuit/stream credentials and node monitoring
-
-// A mutable map that stores the current nodes for each
-// SOCKS username/password pair.
-let credentialsToNodeDataMap = new Map(),
+let createTorCircuitDisplay = (function() {
+ "use strict";
+
+ // Mozilla utilities
+ const { Services } = ChromeUtils.import(
+ "resource://gre/modules/Services.jsm"
+ );
+
+ // Import the controller code.
+ const { wait_for_controller } = ChromeUtils.import(
+ "resource://torbutton/modules/tor-control-port.js"
+ );
+
+ // Utility functions
+ let {
+ bindPrefAndInit,
+ observe,
+ getLocale,
+ getDomainForBrowser,
+ torbutton_get_property_string,
+ } = ChromeUtils.import("resource://torbutton/modules/utils.js");
+
+ // Make the TorButton logger available.
+ let logger = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+
+ // ## Circuit/stream credentials and node monitoring
+
+ // A mutable map that stores the current nodes for each
+ // SOCKS username/password pair.
+ let credentialsToNodeDataMap = new Map(),
// A mutable map that reports `true` for IDs of "mature" circuits
// (those that have conveyed a stream).
knownCircuitIDs = new Map(),
@@ -50,424 +60,477 @@ let credentialsToNodeDataMap = new Map(),
// latest channels for each browser + domain.
browserToCredentialsMap = new Map();
-// __trimQuotes(s)__.
-// Removes quotation marks around a quoted string.
-let trimQuotes = s => s ? s.match(/^"(.*)"$/)[1] : undefined;
-
-// __getBridge(id)__.
-// Gets the bridge parameters for a given node ID. If the node
-// is not currently used as a bridge, returns null.
-let getBridge = async function (controller, id) {
- let bridges = await controller.getConf("bridge");
- if (bridges) {
- for (let bridge of bridges) {
- if (bridge.ID && bridge.ID.toUpperCase() === id.toUpperCase()) {
- return bridge;
+ // __trimQuotes(s)__.
+ // Removes quotation marks around a quoted string.
+ let trimQuotes = s => (s ? s.match(/^"(.*)"$/)[1] : undefined);
+
+ // __getBridge(id)__.
+ // Gets the bridge parameters for a given node ID. If the node
+ // is not currently used as a bridge, returns null.
+ let getBridge = async function(controller, id) {
+ let bridges = await controller.getConf("bridge");
+ if (bridges) {
+ for (let bridge of bridges) {
+ if (bridge.ID && bridge.ID.toUpperCase() === id.toUpperCase()) {
+ return bridge;
+ }
}
}
- }
- return null;
-};
-
-// nodeDataForID(controller, id)__.
-// Returns the type, IP addresses and country code of a node with given ID.
-// Example: `nodeDataForID(controller, "20BC91DC525C3DC9974B29FBEAB51230DE024C44")`
-// => `{ type: "default", ipAddrs: ["12.23.34.45", "2001:db8::"], countryCode: "fr" }`
-let nodeDataForID = async function (controller, id) {
- let result = {ipAddrs: []};
- const bridge = await getBridge(controller, id); // type, ip, countryCode;
- const addrRe = /^\[?([^\]]+)\]?:\d+$/
- if (bridge) {
- result.type = "bridge";
- result.bridgeType = bridge.type;
- // Attempt to get an IP address from bridge address string.
- try {
- const ip = bridge.address.match(addrRe)[1];
- if (!ip.startsWith("0.")) {
- result.ipAddrs = [ip];
- }
- } catch (e) {
- }
- } else {
- // either dealing with a relay, or a bridge whose fingerprint is not saved in torrc
- try {
- const statusMap = await controller.getInfo("ns/id/" + id);
- result.type = "default";
- if (!statusMap.IP.startsWith("0.")) {
- result.ipAddrs.push(statusMap.IP);
- }
+ return null;
+ };
+
+ // nodeDataForID(controller, id)__.
+ // Returns the type, IP addresses and country code of a node with given ID.
+ // Example: `nodeDataForID(controller, "20BC91DC525C3DC9974B29FBEAB51230DE024C44")`
+ // => `{ type: "default", ipAddrs: ["12.23.34.45", "2001:db8::"], countryCode: "fr" }`
+ let nodeDataForID = async function(controller, id) {
+ let result = { ipAddrs: [] };
+ const bridge = await getBridge(controller, id); // type, ip, countryCode;
+ const addrRe = /^\[?([^\]]+)\]?:\d+$/;
+ if (bridge) {
+ result.type = "bridge";
+ result.bridgeType = bridge.type;
+ // Attempt to get an IP address from bridge address string.
+ try {
+ const ip = bridge.address.match(addrRe)[1];
+ if (!ip.startsWith("0.")) {
+ result.ipAddrs = [ip];
+ }
+ } catch (e) {}
+ } else {
+ // either dealing with a relay, or a bridge whose fingerprint is not saved in torrc
try {
- result.ipAddrs.push(statusMap.IPv6.match(addrRe)[1]);
+ const statusMap = await controller.getInfo("ns/id/" + id);
+ result.type = "default";
+ if (!statusMap.IP.startsWith("0.")) {
+ result.ipAddrs.push(statusMap.IP);
+ }
+ try {
+ result.ipAddrs.push(statusMap.IPv6.match(addrRe)[1]);
+ } catch (e) {}
} catch (e) {
+ // getInfo will throw if the given id is not a relay
+ // this probably means we are dealing with a user-provided bridge with no fingerprint
+ result.type = "bridge";
+ // we don't know the ip/ipv6 or type, so leave blank
+ result.ipAddrs = [];
+ result.bridgeType = "";
}
- } catch (e) {
- // getInfo will throw if the given id is not a relay
- // this probably means we are dealing with a user-provided bridge with no fingerprint
- result.type = "bridge";
- // we don't know the ip/ipv6 or type, so leave blank
- result.ipAddrs = [];
- result.bridgeType = "";
}
- }
- if (result.ipAddrs.length > 0) {
- // Get the country code for the node's IP address.
- try {
- const countryCode = await controller.getInfo("ip-to-country/" + result.ipAddrs[0]);
- result.countryCode = countryCode === "??" ? null : countryCode;
- } catch (e) { }
- }
- return result;
-};
-
-// __nodeDataForCircuit(controller, circuitEvent)__.
-// Gets the information for a circuit.
-let nodeDataForCircuit = async function (controller, circuitEvent) {
- let rawIDs = circuitEvent.circuit.map(circ => circ[0]),
+ if (result.ipAddrs.length) {
+ // Get the country code for the node's IP address.
+ try {
+ const countryCode = await controller.getInfo(
+ "ip-to-country/" + result.ipAddrs[0]
+ );
+ result.countryCode = countryCode === "??" ? null : countryCode;
+ } catch (e) {}
+ }
+ return result;
+ };
+
+ // __nodeDataForCircuit(controller, circuitEvent)__.
+ // Gets the information for a circuit.
+ let nodeDataForCircuit = async function(controller, circuitEvent) {
+ let rawIDs = circuitEvent.circuit.map(circ => circ[0]),
// Remove the leading '$' if present.
- ids = rawIDs.map(id => id[0] === "$" ? id.substring(1) : id);
- // Get the node data for all IDs in circuit.
- return Promise.all(ids.map(id => nodeDataForID(controller, id)));
-};
-
-// __getCircuitStatusByID(aController, circuitID)__
-// Returns the circuit status for the circuit with the given ID.
-let getCircuitStatusByID = async function (aController, circuitID) {
- let circuitStatuses = await aController.getInfo("circuit-status");
- if (circuitStatuses) {
- for (let circuitStatus of circuitStatuses) {
- if (circuitStatus.id === circuitID) {
- return circuitStatus;
+ ids = rawIDs.map(id => (id[0] === "$" ? id.substring(1) : id));
+ // Get the node data for all IDs in circuit.
+ return Promise.all(ids.map(id => nodeDataForID(controller, id)));
+ };
+
+ // __getCircuitStatusByID(aController, circuitID)__
+ // Returns the circuit status for the circuit with the given ID.
+ let getCircuitStatusByID = async function(aController, circuitID) {
+ let circuitStatuses = await aController.getInfo("circuit-status");
+ if (circuitStatuses) {
+ for (let circuitStatus of circuitStatuses) {
+ if (circuitStatus.id === circuitID) {
+ return circuitStatus;
+ }
}
}
- }
- return null;
-};
-
-// __collectIsolationData(aController, updateUI)__.
-// Watches for STREAM SENTCONNECT events. When a SENTCONNECT event occurs, then
-// we assume isolation settings (SOCKS username+password) are now fixed for the
-// corresponding circuit. Whenever the first stream on a new circuit is seen,
-// looks up u+p and records the node data in the credentialsToNodeDataMap.
-// We need to update the circuit display immediately after any new node data
-// is received. So the `updateUI` callback will be called at that point.
-// See https://trac.torproject.org/projects/tor/ticket/15493
-let collectIsolationData = function (aController, updateUI) {
- return aController.watchEvent(
- "STREAM",
- streamEvent => streamEvent.StreamStatus === "SENTCONNECT",
- async (streamEvent) => {
- if (!knownCircuitIDs.get(streamEvent.CircuitID)) {
- logger.eclog(3, "streamEvent.CircuitID: " + streamEvent.CircuitID);
- knownCircuitIDs.set(streamEvent.CircuitID, true);
- let circuitStatus = await getCircuitStatusByID(aController, streamEvent.CircuitID),
- credentials = circuitStatus ?
- (trimQuotes(circuitStatus.SOCKS_USERNAME) + "|" +
- trimQuotes(circuitStatus.SOCKS_PASSWORD)) :
- null;
- if (credentials) {
- let nodeData = await nodeDataForCircuit(aController, circuitStatus);
- credentialsToNodeDataMap.set(credentials, nodeData);
- updateUI();
+ return null;
+ };
+
+ // __collectIsolationData(aController, updateUI)__.
+ // Watches for STREAM SENTCONNECT events. When a SENTCONNECT event occurs, then
+ // we assume isolation settings (SOCKS username+password) are now fixed for the
+ // corresponding circuit. Whenever the first stream on a new circuit is seen,
+ // looks up u+p and records the node data in the credentialsToNodeDataMap.
+ // We need to update the circuit display immediately after any new node data
+ // is received. So the `updateUI` callback will be called at that point.
+ // See https://trac.torproject.org/projects/tor/ticket/15493
+ let collectIsolationData = function(aController, updateUI) {
+ return aController.watchEvent(
+ "STREAM",
+ streamEvent => streamEvent.StreamStatus === "SENTCONNECT",
+ async streamEvent => {
+ if (!knownCircuitIDs.get(streamEvent.CircuitID)) {
+ logger.eclog(3, "streamEvent.CircuitID: " + streamEvent.CircuitID);
+ knownCircuitIDs.set(streamEvent.CircuitID, true);
+ let circuitStatus = await getCircuitStatusByID(
+ aController,
+ streamEvent.CircuitID
+ ),
+ credentials = circuitStatus
+ ? trimQuotes(circuitStatus.SOCKS_USERNAME) +
+ "|" +
+ trimQuotes(circuitStatus.SOCKS_PASSWORD)
+ : null;
+ if (credentials) {
+ let nodeData = await nodeDataForCircuit(aController, circuitStatus);
+ credentialsToNodeDataMap.set(credentials, nodeData);
+ updateUI();
+ }
}
}
- });
-};
-
-// __browserForChannel(channel)__.
-// Returns the browser that loaded a given channel.
-let browserForChannel = function (channel) {
- if (!channel) return null;
- let chan = channel.QueryInterface(Ci.nsIChannel);
- let callbacks = chan.notificationCallbacks;
- if (!callbacks) return null;
- let loadContext;
- try {
- loadContext = callbacks.getInterface(Ci.nsILoadContext);
- } catch (e) {
- // Ignore
- return null;
- }
- if (!loadContext) return null;
- return loadContext.topFrameElement;
-};
-
-// __collectBrowserCredentials()__.
-// Starts observing http channels. Each channel's proxyInfo
-// username and password is recorded for the channel's browser.
-let collectBrowserCredentials = function () {
- return observe("http-on-modify-request", chan => {
+ );
+ };
+
+ // __browserForChannel(channel)__.
+ // Returns the browser that loaded a given channel.
+ let browserForChannel = function(channel) {
+ if (!channel) {
+ return null;
+ }
+ let chan = channel.QueryInterface(Ci.nsIChannel);
+ let callbacks = chan.notificationCallbacks;
+ if (!callbacks) {
+ return null;
+ }
+ let loadContext;
try {
- let proxyInfo = chan.QueryInterface(Ci.nsIProxiedChannel).proxyInfo;
- let browser = browserForChannel(chan);
- if (browser && proxyInfo) {
- if (!browserToCredentialsMap.has(browser)) {
- browserToCredentialsMap.set(browser, new Map());
+ loadContext = callbacks.getInterface(Ci.nsILoadContext);
+ } catch (e) {
+ // Ignore
+ return null;
+ }
+ if (!loadContext) {
+ return null;
+ }
+ return loadContext.topFrameElement;
+ };
+
+ // __collectBrowserCredentials()__.
+ // Starts observing http channels. Each channel's proxyInfo
+ // username and password is recorded for the channel's browser.
+ let collectBrowserCredentials = function() {
+ return observe("http-on-modify-request", chan => {
+ try {
+ let proxyInfo = chan.QueryInterface(Ci.nsIProxiedChannel).proxyInfo;
+ let browser = browserForChannel(chan);
+ if (browser && proxyInfo) {
+ if (!browserToCredentialsMap.has(browser)) {
+ browserToCredentialsMap.set(browser, new Map());
+ }
+ let domainMap = browserToCredentialsMap.get(browser);
+ domainMap.set(proxyInfo.username, [
+ proxyInfo.username,
+ proxyInfo.password,
+ ]);
}
- let domainMap = browserToCredentialsMap.get(browser);
- domainMap.set(proxyInfo.username, [proxyInfo.username,
- proxyInfo.password]);
+ } catch (e) {
+ logger.eclog(
+ 3,
+ `Error collecting browser credentials: ${e.message}, ${chan.URI.spec}`
+ );
}
+ });
+ };
+
+ // ## User interface
+
+ // __uiString__.
+ // Read the localized strings for this UI.
+ let uiString = function(shortName) {
+ return torbutton_get_property_string(
+ "torbutton.circuit_display." + shortName
+ );
+ };
+
+ // __localizedCountryNameFromCode(countryCode)__.
+ // Convert a country code to a localized country name.
+ // Example: `'de'` -> `'Deutschland'` in German locale.
+ let localizedCountryNameFromCode = function(countryCode) {
+ if (!countryCode) {
+ return uiString("unknown_country");
+ }
+ try {
+ return Services.intl.getRegionDisplayNames(undefined, [countryCode])[0];
} catch (e) {
- logger.eclog(3, `Error collecting browser credentials: ${e.message}, ${chan.URI.spec}`);
+ return countryCode.toUpperCase();
}
- });
-};
-
-// ## User interface
-
-// __uiString__.
-// Read the localized strings for this UI.
-let uiString = function (shortName) {
- return torbutton_get_property_string("torbutton.circuit_display." + shortName);
-};
-
-// __localizedCountryNameFromCode(countryCode)__.
-// Convert a country code to a localized country name.
-// Example: `'de'` -> `'Deutschland'` in German locale.
-let localizedCountryNameFromCode = function (countryCode) {
- if (!countryCode) return uiString("unknown_country");
- try {
- return Services.intl.getRegionDisplayNames(undefined, [countryCode])[0];
- } catch (e) {
- return countryCode.toUpperCase();
- }
-};
-
-// __showCircuitDisplay(show)__.
-// If show === true, makes the circuit display visible.
-let showCircuitDisplay = function (show) {
- document.getElementById("circuit-display-container").style.display = show ?
- 'block' : 'none';
-};
-
-// __xmlTree(ns, data)__.
-// Takes an xml namespace, ns, and a
-// data structure representing xml elements like
-// [tag, { attr-key: attr-value }, ...xml-children]
-// and returns nested xml element objects.
-let xmlTree = function xmlTree (ns, data) {
- let [type, attrs, ...children] = data;
- let element = type.startsWith("html:")
- ? document.createXULElement(type)
- : document.createElementNS(ns, type);
- for (let [key, val] of Object.entries(attrs)) {
- element.setAttribute(key, val);
- }
- for (let child of children) {
- if (child !== null && child !== undefined) {
- element.append(typeof child === "string" ? child : xmlTree(ns, child));
+ };
+
+ // __showCircuitDisplay(show)__.
+ // If show === true, makes the circuit display visible.
+ let showCircuitDisplay = function(show) {
+ document.getElementById("circuit-display-container").style.display = show
+ ? "block"
+ : "none";
+ };
+
+ // __xmlTree(ns, data)__.
+ // Takes an xml namespace, ns, and a
+ // data structure representing xml elements like
+ // [tag, { attr-key: attr-value }, ...xml-children]
+ // and returns nested xml element objects.
+ let xmlTree = function xmlTree(ns, data) {
+ let [type, attrs, ...children] = data;
+ let element = type.startsWith("html:")
+ ? document.createXULElement(type)
+ : document.createElementNS(ns, type);
+ for (let [key, val] of Object.entries(attrs)) {
+ element.setAttribute(key, val);
}
- }
- return element;
-};
-
-// __htmlTree(data)__.
-// Takes a data structure representing html elements like
-// [tag, { attr-key: attr-value }, ...html-children]
-// and returns nested html element objects.
-let htmlTree = data => xmlTree("http://www.w3.org/1999/xhtml", data);
-
-// __appendHtml(parent, data)__.
-// Takes a data structure representing html elements like
-// [tag, { attr-key: attr-value }, ...html-children]
-// and appends nested html element objects to the parent element.
-let appendHtml = (parent, data) => parent.appendChild(htmlTree(data));
-
-// __circuitCircuitData()__.
-// Obtains the circuit used by the given browser.
-let currentCircuitData = function (browser) {
- if (browser) {
- let firstPartyDomain = getDomainForBrowser(browser);
- let domain = firstPartyDomain || "--unknown--";
- let domainMap = browserToCredentialsMap.get(browser);
- let credentials = domainMap && domainMap.get(domain);
- if (credentials) {
- let [SOCKS_username, SOCKS_password] = credentials;
- let nodeData = credentialsToNodeDataMap.get(`${SOCKS_username}|${SOCKS_password}`);
- let domain = SOCKS_username;
- if (browser.documentURI.host.endsWith(".tor.onion")) {
- const service = Cc["@torproject.org/onion-alias-service;1"].getService(
- Ci.IOnionAliasService
- );
- domain = service.getOnionAlias(browser.documentURI.host);
+ for (let child of children) {
+ if (child !== null && child !== undefined) {
+ element.append(typeof child === "string" ? child : xmlTree(ns, child));
}
- return { domain, nodeData };
}
- }
- return { domain: null, nodeData: null };
-};
-
-// __updateCircuitDisplay()__.
-// Updates the Tor circuit display, showing the current domain
-// and the relay nodes for that domain.
-let updateCircuitDisplay = function () {
- let { domain, nodeData } = currentCircuitData(gBrowser.selectedBrowser);
- if (domain && nodeData) {
- // Update the displayed information for the relay nodes.
- let nodeHtmlList = document.getElementById("circuit-display-nodes");
- let li = (...data) => appendHtml(nodeHtmlList, ["li", {}, ...data]);
- nodeHtmlList.innerHTML = "";
- li(uiString("this_browser"));
- for (let i = 0; i < nodeData.length; ++i) {
- let relayText;
- if (nodeData[i].type === "bridge") {
- relayText = uiString("tor_bridge");
- let bridgeType = nodeData[i].bridgeType;
- if (bridgeType === "meek_lite") {
- relayText += ": meek";
- }
- else if (bridgeType !== "vanilla" && bridgeType !== "") {
- relayText += ": " + bridgeType;
+ return element;
+ };
+
+ // __htmlTree(data)__.
+ // Takes a data structure representing html elements like
+ // [tag, { attr-key: attr-value }, ...html-children]
+ // and returns nested html element objects.
+ let htmlTree = data => xmlTree("http://www.w3.org/1999/xhtml", data);
+
+ // __appendHtml(parent, data)__.
+ // Takes a data structure representing html elements like
+ // [tag, { attr-key: attr-value }, ...html-children]
+ // and appends nested html element objects to the parent element.
+ let appendHtml = (parent, data) => parent.appendChild(htmlTree(data));
+
+ // __circuitCircuitData()__.
+ // Obtains the circuit used by the given browser.
+ let currentCircuitData = function(browser) {
+ if (browser) {
+ let firstPartyDomain = getDomainForBrowser(browser);
+ let domain = firstPartyDomain || "--unknown--";
+ let domainMap = browserToCredentialsMap.get(browser);
+ let credentials = domainMap && domainMap.get(domain);
+ if (credentials) {
+ let [SOCKS_username, SOCKS_password] = credentials;
+ let nodeData = credentialsToNodeDataMap.get(
+ `${SOCKS_username}|${SOCKS_password}`
+ );
+ let domain = SOCKS_username;
+ if (browser.documentURI.host.endsWith(".tor.onion")) {
+ const service = Cc[
+ "@torproject.org/onion-alias-service;1"
+ ].getService(Ci.IOnionAliasService);
+ domain = service.getOnionAlias(browser.documentURI.host);
}
- } else if (nodeData[i].type == "default") {
- relayText = localizedCountryNameFromCode(nodeData[i].countryCode);
+ return { domain, nodeData };
}
- const ipAddrs = nodeData[i].ipAddrs.join(", ");
- li(relayText, " ", ["span", { class: "circuit-ip-address" }, ipAddrs], " ",
- (i === 0 && nodeData[0].type !== "bridge") ?
- ["span", { class: "circuit-guard-info" }, uiString("guard")] : null);
}
+ return { domain: null, nodeData: null };
+ };
- let domainParts = [];
- if (domain.endsWith(".onion")) {
- for (let i = 0; i < 3; ++i) {
- li(uiString("relay"));
+ // __updateCircuitDisplay()__.
+ // Updates the Tor circuit display, showing the current domain
+ // and the relay nodes for that domain.
+ let updateCircuitDisplay = function() {
+ let { domain, nodeData } = currentCircuitData(gBrowser.selectedBrowser);
+ if (domain && nodeData) {
+ // Update the displayed information for the relay nodes.
+ let nodeHtmlList = document.getElementById("circuit-display-nodes");
+ let li = (...data) => appendHtml(nodeHtmlList, ["li", {}, ...data]);
+ nodeHtmlList.innerHTML = "";
+ li(uiString("this_browser"));
+ for (let i = 0; i < nodeData.length; ++i) {
+ let relayText;
+ if (nodeData[i].type === "bridge") {
+ relayText = uiString("tor_bridge");
+ let bridgeType = nodeData[i].bridgeType;
+ if (bridgeType === "meek_lite") {
+ relayText += ": meek";
+ } else if (bridgeType !== "vanilla" && bridgeType !== "") {
+ relayText += ": " + bridgeType;
+ }
+ } else if (nodeData[i].type == "default") {
+ relayText = localizedCountryNameFromCode(nodeData[i].countryCode);
+ }
+ const ipAddrs = nodeData[i].ipAddrs.join(", ");
+ li(
+ relayText,
+ " ",
+ ["span", { class: "circuit-ip-address" }, ipAddrs],
+ " ",
+ i === 0 && nodeData[0].type !== "bridge"
+ ? ["span", { class: "circuit-guard-info" }, uiString("guard")]
+ : null
+ );
}
- if (domain.length > 22) {
- domainParts.push(domain.slice(0, 7), "…", domain.slice(-12));
+
+ let domainParts = [];
+ if (domain.endsWith(".onion")) {
+ for (let i = 0; i < 3; ++i) {
+ li(uiString("relay"));
+ }
+ if (domain.length > 22) {
+ domainParts.push(domain.slice(0, 7), "…", domain.slice(-12));
+ } else {
+ domainParts.push(domain);
+ }
} else {
domainParts.push(domain);
}
- } else {
- domainParts.push(domain);
- }
- // We use a XUL html:span element so that the tooltiptext is displayed.
- li([
- "html:span",
- {
- class: "circuit-onion",
- onclick: `
+ // We use a XUL html:span element so that the tooltiptext is displayed.
+ li([
+ "html:span",
+ {
+ class: "circuit-onion",
+ onclick: `
this.classList.add("circuit-onion-copied");
Cc[
"@mozilla.org/widget/clipboardhelper;1"
].getService(Ci.nsIClipboardHelper).copyString(this.getAttribute("data-onion"))
`,
- "data-onion": domain,
- "data-text-clicktocopy": torbutton_get_property_string("torbutton.circuit_display.click_to_copy"),
- "data-text-copied": torbutton_get_property_string("torbutton.circuit_display.copied"),
- tooltiptext: domain,
- },
- ...domainParts,
- ]);
-
- // Hide the note about guards if we are using a bridge.
- document.getElementById("circuit-guard-note-container").style.display =
- (nodeData[0].type === "bridge") ? "none" : "block";
- } else {
- // Only show the Tor circuit if we have credentials and node data.
- logger.eclog(4, "no SOCKS credentials found for current document.");
- }
- showCircuitDisplay(domain && nodeData);
-};
-
-// __syncDisplayWithSelectedTab(syncOn)__.
-// Whenever the user starts to open the popup menu, make sure the display
-// is the correct one for this tab. It's also possible that a new site
-// can be loaded while the popup menu is open.
-// Update the display if this happens.
-let syncDisplayWithSelectedTab = (function() {
- let listener = { onLocationChange : function (aBrowser) {
- if (aBrowser === gBrowser.selectedBrowser) {
- updateCircuitDisplay();
- }
- } };
- return function (syncOn) {
- let popupMenu = document.getElementById("identity-popup");
- if (syncOn) {
- // Update the circuit display just before the popup menu is shown.
- popupMenu.addEventListener("popupshowing", updateCircuitDisplay);
- // If the currently selected tab has been sent to a new location,
- // update the circuit to reflect that.
- gBrowser.addTabsProgressListener(listener);
+ "data-onion": domain,
+ "data-text-clicktocopy": torbutton_get_property_string(
+ "torbutton.circuit_display.click_to_copy"
+ ),
+ "data-text-copied": torbutton_get_property_string(
+ "torbutton.circuit_display.copied"
+ ),
+ tooltiptext: domain,
+ },
+ ...domainParts,
+ ]);
+
+ // Hide the note about guards if we are using a bridge.
+ document.getElementById("circuit-guard-note-container").style.display =
+ nodeData[0].type === "bridge" ? "none" : "block";
} else {
- // Stop syncing.
- gBrowser.removeTabsProgressListener(listener);
- popupMenu.removeEventListener("popupshowing", updateCircuitDisplay);
- // Hide the display.
- showCircuitDisplay(false);
+ // Only show the Tor circuit if we have credentials and node data.
+ logger.eclog(4, "no SOCKS credentials found for current document.");
}
+ showCircuitDisplay(domain && nodeData);
};
-})();
-// __setupGuardNote()__.
-// Call once to show the Guard note as intended.
-let setupGuardNote = function () {
- let guardNote = document.getElementById("circuit-guard-note-container");
- let guardNoteString = uiString("guard_note");
- let learnMoreString = uiString("learn_more");
- let [noteBefore, name, noteAfter] = guardNoteString.split(/[\[\]]/);
- let localeCode = getLocale();
- appendHtml(guardNote,
- ["div", {},
- noteBefore, ["span", {class: "circuit-guard-name"}, name],
- noteAfter, " ",
- ["span", {onclick: `gBrowser.selectedTab = gBrowser.addWebTab('https://support.torproject.org/${localeCode}/tbb/tbb-2/');`,
- class: "circuit-link"},
- learnMoreString]]);
-};
-
-// __ensureCorrectPopupDimensions()__.
-// Make sure the identity popup always displays with the correct height.
-let ensureCorrectPopupDimensions = function () {
- let setDimensions = () => {
- setTimeout(() => {
- let view = document.querySelector("#identity-popup-multiView .panel-viewcontainer");
- let stack = document.querySelector("#identity-popup-multiView .panel-viewstack");
+ // __syncDisplayWithSelectedTab(syncOn)__.
+ // Whenever the user starts to open the popup menu, make sure the display
+ // is the correct one for this tab. It's also possible that a new site
+ // can be loaded while the popup menu is open.
+ // Update the display if this happens.
+ let syncDisplayWithSelectedTab = (function() {
+ let listener = {
+ onLocationChange(aBrowser) {
+ if (aBrowser === gBrowser.selectedBrowser) {
+ updateCircuitDisplay();
+ }
+ },
+ };
+ return function(syncOn) {
+ let popupMenu = document.getElementById("identity-popup");
+ if (syncOn) {
+ // Update the circuit display just before the popup menu is shown.
+ popupMenu.addEventListener("popupshowing", updateCircuitDisplay);
+ // If the currently selected tab has been sent to a new location,
+ // update the circuit to reflect that.
+ gBrowser.addTabsProgressListener(listener);
+ } else {
+ // Stop syncing.
+ gBrowser.removeTabsProgressListener(listener);
+ popupMenu.removeEventListener("popupshowing", updateCircuitDisplay);
+ // Hide the display.
+ showCircuitDisplay(false);
+ }
+ };
+ })();
+
+ // __setupGuardNote()__.
+ // Call once to show the Guard note as intended.
+ let setupGuardNote = function() {
+ let guardNote = document.getElementById("circuit-guard-note-container");
+ let guardNoteString = uiString("guard_note");
+ let learnMoreString = uiString("learn_more");
+ let [noteBefore, name, noteAfter] = guardNoteString.split(/[\[\]]/);
+ let localeCode = getLocale();
+ appendHtml(guardNote, [
+ "div",
+ {},
+ noteBefore,
+ ["span", { class: "circuit-guard-name" }, name],
+ noteAfter,
+ " ",
+ [
+ "span",
+ {
+ onclick: `gBrowser.selectedTab = gBrowser.addWebTab('https://support.torproject.org/${localeCode}/tbb/tbb-2/');`,
+ class: "circuit-link",
+ },
+ learnMoreString,
+ ],
+ ]);
+ };
+
+ // __ensureCorrectPopupDimensions()__.
+ // Make sure the identity popup always displays with the correct height.
+ let ensureCorrectPopupDimensions = function() {
+ let setDimensions = () => {
+ setTimeout(() => {
+ let view = document.querySelector(
+ "#identity-popup-multiView .panel-viewcontainer"
+ );
+ let stack = document.querySelector(
+ "#identity-popup-multiView .panel-viewstack"
+ );
+ let view2 = document.getElementById("identity-popup-mainView");
+ if (view && stack && view2) {
+ let newWidth = Math.max(
+ ...[...view2.children].map(el => el.clientWidth)
+ );
+ let newHeight = stack.clientHeight;
+ stack.setAttribute("width", newWidth);
+ view2.style.minWidth = view2.style.maxWidth = newWidth + "px";
+ view.setAttribute("width", newWidth);
+ view.setAttribute("height", newHeight);
+ }
+ }, 0);
+ };
+ let removeDimensions = () => {
+ let view = document.querySelector(
+ "#identity-popup-multiView .panel-viewcontainer"
+ );
+ let stack = document.querySelector(
+ "#identity-popup-multiView .panel-viewstack"
+ );
let view2 = document.getElementById("identity-popup-mainView");
if (view && stack && view2) {
- let newWidth = Math.max(...[...view2.children].map(el => el.clientWidth));
- let newHeight = stack.clientHeight;
- stack.setAttribute("width", newWidth);
- view2.style.minWidth = view2.style.maxWidth = newWidth + "px";
- view.setAttribute("width", newWidth);
- view.setAttribute("height", newHeight);
+ view.removeAttribute("width");
+ view.removeAttribute("height");
+ stack.removeAttribute("width");
+ view2.style.minWidth = view2.style.maxWidth = "";
}
- }, 0);
+ };
+ let popupMenu = document.getElementById("identity-popup");
+ popupMenu.addEventListener("popupshowing", setDimensions);
+ popupMenu.addEventListener("popuphiding", removeDimensions);
+ return () => {
+ popupMenu.removeEventListener("popupshowing", setDimensions);
+ popupMenu.removeEventListener("popuphiding", removeDimensions);
+ };
};
- let removeDimensions = () => {
- let view = document.querySelector("#identity-popup-multiView .panel-viewcontainer");
- let stack = document.querySelector("#identity-popup-multiView .panel-viewstack");
- let view2 = document.getElementById("identity-popup-mainView");
- if (view && stack && view2) {
- view.removeAttribute("width");
- view.removeAttribute("height");
- stack.removeAttribute("width");
- view2.style.minWidth = view2.style.maxWidth = "";
+
+ // ## Main function
+
+ // __setupDisplay(enablePrefName)__.
+ // Once called, the Tor circuit display will be started whenever
+ // the "enablePref" is set to true, and stopped when it is set to false.
+ // A reference to this function (called createTorCircuitDisplay) is exported as a global.
+ let setupDisplay = function(enablePrefName) {
+ // From 79 on the identity popup is initialized lazily
+ if (gIdentityHandler._initializePopup) {
+ gIdentityHandler._initializePopup();
}
- };
- let popupMenu = document.getElementById("identity-popup");
- popupMenu.addEventListener("popupshowing", setDimensions);
- popupMenu.addEventListener("popuphiding", removeDimensions);
- return () => {
- popupMenu.removeEventListener("popupshowing", setDimensions);
- popupMenu.removeEventListener("popuphiding", removeDimensions);
- };
-};
-
-// ## Main function
-
-// __setupDisplay(enablePrefName)__.
-// Once called, the Tor circuit display will be started whenever
-// the "enablePref" is set to true, and stopped when it is set to false.
-// A reference to this function (called createTorCircuitDisplay) is exported as a global.
-let setupDisplay = function (enablePrefName) {
- // From 79 on the identity popup is initialized lazily
- if (gIdentityHandler._initializePopup) {
- gIdentityHandler._initializePopup();
- }
- setupGuardNote();
- let myController = null,
+ setupGuardNote();
+ let myController = null,
stopCollectingIsolationData = null,
stopCollectingBrowserCredentials = null,
stopEnsuringCorrectPopupDimensions = null,
@@ -486,35 +549,47 @@ let setupDisplay = function (enablePrefName) {
myController = null;
}
},
- start = async function () {
+ start = async function() {
if (!myController) {
try {
myController = await wait_for_controller();
syncDisplayWithSelectedTab(true);
- stopCollectingIsolationData = collectIsolationData(myController, updateCircuitDisplay);
+ stopCollectingIsolationData = collectIsolationData(
+ myController,
+ updateCircuitDisplay
+ );
stopCollectingBrowserCredentials = collectBrowserCredentials();
stopEnsuringCorrectPopupDimensions = ensureCorrectPopupDimensions();
} catch (err) {
logger.eclog(5, err);
- logger.eclog(5, "Disabling tor display circuit because of an error.");
+ logger.eclog(
+ 5,
+ "Disabling tor display circuit because of an error."
+ );
myController.close();
stop();
}
- }
- };
- try {
- let unbindPref = bindPrefAndInit(enablePrefName, on => { if (on) start(); else stop(); });
- // When this chrome window is unloaded, we need to unbind the pref.
- window.addEventListener("unload", function () {
- unbindPref();
- stop();
- });
- } catch (e) {
- logger.eclog(5, "Error: " + e.message + "\n" + e.stack);
- }
-};
+ }
+ };
+ try {
+ let unbindPref = bindPrefAndInit(enablePrefName, on => {
+ if (on) {
+ start();
+ } else {
+ stop();
+ }
+ });
+ // When this chrome window is unloaded, we need to unbind the pref.
+ window.addEventListener("unload", function() {
+ unbindPref();
+ stop();
+ });
+ } catch (e) {
+ logger.eclog(5, "Error: " + e.message + "\n" + e.stack);
+ }
+ };
-return setupDisplay;
+ return setupDisplay;
-// Finish createTorCircuitDisplay()
+ // Finish createTorCircuitDisplay()
})();
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index fde5e1fa..ec2680f2 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -3,121 +3,105 @@ var torbutton_init;
var torbutton_new_circuit;
(() => {
-// Bug 1506 P1-P5: This is the main Torbutton overlay file. Much needs to be
-// preserved here, but in an ideal world, most of this code should perhaps be
-// moved into an XPCOM service, and much can also be tossed. See also
-// individual 1506 comments for details.
+ // Bug 1506 P1-P5: This is the main Torbutton overlay file. Much needs to be
+ // preserved here, but in an ideal world, most of this code should perhaps be
+ // moved into an XPCOM service, and much can also be tossed. See also
+ // individual 1506 comments for details.
-// TODO: check for leaks: http://www.mozilla.org/scriptable/avoiding-leaks.html
-// TODO: Double-check there are no strange exploits to defeat:
-// http://kb.mozillazine.org/Links_to_local_pages_don%27t_work
+ // TODO: check for leaks: http://www.mozilla.org/scriptable/avoiding-leaks.html
+ // TODO: Double-check there are no strange exploits to defeat:
+ // http://kb.mozillazine.org/Links_to_local_pages_don%27t_work
-/* global gBrowser, CustomizableUI,
+ /* global gBrowser, CustomizableUI,
createTorCircuitDisplay, gFindBarInitialized,
gFindBar, OpenBrowserWindow, PrivateBrowsingUtils,
Services, AppConstants
*/
-let {
- show_torbrowser_manual,
- unescapeTorString,
- bindPrefAndInit,
- getDomainForBrowser,
- torbutton_safelog,
- torbutton_log,
- torbutton_get_property_string,
-} = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
-let { configureControlPortModule, wait_for_controller } = Cu.import("resource://torbutton/modules/tor-control-port.js", {});
-
-const k_tb_tor_check_failed_topic = "Torbutton:TorCheckFailed";
-
-var m_tb_prefs = Services.prefs;
-
-// status
-var m_tb_wasinited = false;
-var m_tb_is_main_window = false;
-
-var m_tb_control_ipc_file = null; // Set if using IPC (UNIX domain socket).
-var m_tb_control_port = null; // Set if using TCP.
-var m_tb_control_host = null; // Set if using TCP.
-var m_tb_control_pass = null;
-var m_tb_control_desc = null; // For logging.
-
-var m_tb_domWindowUtils = window.windowUtils;
-
-async function clearData(flags) {
- return new Promise((resolve, reject) => {
- Services.clearData.deleteData(flags, {
- onDataDeleted(code) {
- if (code === Cr.NS_OK) {
- resolve();
- } else {
- reject(new Error(`Error deleting data with flags ${flags}: ${code}`));
- }
- },
- });
- });
-}
-
-// Bug 1506 P2: This object keeps Firefox prefs in sync with Torbutton prefs.
-// It probably could stand some simplification (See #3100). It also belongs
-// in a component, not the XUL overlay.
-var torbutton_unique_pref_observer =
-{
- register: function()
- {
- this.forced_ua = false;
- m_tb_prefs.addObserver("extensions.torbutton", this, false);
- m_tb_prefs.addObserver("browser.privatebrowsing.autostart", this, false);
- m_tb_prefs.addObserver("javascript", this, false);
- m_tb_prefs.addObserver("privacy.resistFingerprinting", this, false);
- m_tb_prefs.addObserver("privacy.resistFingerprinting.letterboxing", this, false);
+ let {
+ show_torbrowser_manual,
+ unescapeTorString,
+ bindPrefAndInit,
+ getDomainForBrowser,
+ torbutton_log,
+ torbutton_get_property_string,
+ } = ChromeUtils.import("resource://torbutton/modules/utils.js");
+ let { configureControlPortModule, wait_for_controller } = ChromeUtils.import(
+ "resource://torbutton/modules/tor-control-port.js"
+ );
+
+ const k_tb_tor_check_failed_topic = "Torbutton:TorCheckFailed";
+
+ var m_tb_prefs = Services.prefs;
+
+ // status
+ var m_tb_wasinited = false;
+ var m_tb_is_main_window = false;
+
+ var m_tb_control_ipc_file = null; // Set if using IPC (UNIX domain socket).
+ var m_tb_control_port = null; // Set if using TCP.
+ var m_tb_control_host = null; // Set if using TCP.
+ var m_tb_control_pass = null;
+
+ // Bug 1506 P2: This object keeps Firefox prefs in sync with Torbutton prefs.
+ // It probably could stand some simplification (See #3100). It also belongs
+ // in a component, not the XUL overlay.
+ var torbutton_unique_pref_observer = {
+ register() {
+ this.forced_ua = false;
+ m_tb_prefs.addObserver("extensions.torbutton", this);
+ m_tb_prefs.addObserver("browser.privatebrowsing.autostart", this);
+ m_tb_prefs.addObserver("javascript", this);
+ m_tb_prefs.addObserver("privacy.resistFingerprinting", this);
+ m_tb_prefs.addObserver("privacy.resistFingerprinting.letterboxing", this);
},
- unregister: function()
- {
- m_tb_prefs.removeObserver("extensions.torbutton", this);
- m_tb_prefs.removeObserver("browser.privatebrowsing.autostart", this);
- m_tb_prefs.removeObserver("javascript", this);
- m_tb_prefs.removeObserver("privacy.resistFingerprinting", this);
- m_tb_prefs.removeObserver("privacy.resistFingerprinting.letterboxing", this);
+ unregister() {
+ m_tb_prefs.removeObserver("extensions.torbutton", this);
+ m_tb_prefs.removeObserver("browser.privatebrowsing.autostart", this);
+ m_tb_prefs.removeObserver("javascript", this);
+ m_tb_prefs.removeObserver("privacy.resistFingerprinting", this);
+ m_tb_prefs.removeObserver(
+ "privacy.resistFingerprinting.letterboxing",
+ this
+ );
},
// topic: what event occurred
// subject: what nsIPrefBranch we're observing
// data: which pref has been changed (relative to subject)
- observe: function(subject, topic, data)
- {
- if (topic !== "nsPref:changed") return;
- switch (data) {
- case "browser.privatebrowsing.autostart":
- torbutton_update_disk_prefs();
- break;
- case "extensions.torbutton.use_nontor_proxy":
- torbutton_use_nontor_proxy();
- break;
- case "privacy.resistFingerprinting":
- case "privacy.resistFingerprinting.letterboxing":
- torbutton_update_fingerprinting_prefs();
- break;
- }
- }
-}
+ observe(subject, topic, data) {
+ if (topic !== "nsPref:changed") {
+ return;
+ }
+ switch (data) {
+ case "browser.privatebrowsing.autostart":
+ torbutton_update_disk_prefs();
+ break;
+ case "extensions.torbutton.use_nontor_proxy":
+ torbutton_use_nontor_proxy();
+ break;
+ case "privacy.resistFingerprinting":
+ case "privacy.resistFingerprinting.letterboxing":
+ torbutton_update_fingerprinting_prefs();
+ break;
+ }
+ },
+ };
-var torbutton_tor_check_observer = {
+ var torbutton_tor_check_observer = {
register() {
- this._obsSvc = Services.obs;
- this._obsSvc.addObserver(this, k_tb_tor_check_failed_topic);
+ this._obsSvc = Services.obs;
+ this._obsSvc.addObserver(this, k_tb_tor_check_failed_topic);
},
- unregister: function()
- {
- if (this._obsSvc)
- this._obsSvc.removeObserver(this, k_tb_tor_check_failed_topic);
+ unregister() {
+ if (this._obsSvc) {
+ this._obsSvc.removeObserver(this, k_tb_tor_check_failed_topic);
+ }
},
- observe: function(subject, topic, data)
- {
+ observe(subject, topic, data) {
if (topic === k_tb_tor_check_failed_topic) {
// Update all open about:tor pages.
torbutton_abouttor_message_handler.updateAllOpenPages();
@@ -129,9 +113,9 @@ var torbutton_tor_check_observer = {
if (win == window) {
let foundTab = false;
let tabBrowser = top.gBrowser;
- for (let i = 0; !foundTab && (i < tabBrowser.browsers.length); ++i) {
+ for (let i = 0; !foundTab && i < tabBrowser.browsers.length; ++i) {
let b = tabBrowser.getBrowserAtIndex(i);
- foundTab = (b.currentURI.spec.toLowerCase() == "about:tor");
+ foundTab = b.currentURI.spec.toLowerCase() == "about:tor";
}
if (!foundTab) {
@@ -140,82 +124,102 @@ var torbutton_tor_check_observer = {
}
}
},
-};
+ };
-var torbutton_new_identity_observers = {
- register() {
- Services.obs.addObserver(this, "new-identity-requested");
- },
+ var torbutton_new_identity_observers = {
+ register() {
+ Services.obs.addObserver(this, "new-identity-requested");
+ },
- observe(aSubject, aTopic, aData) {
- if (aTopic !== "new-identity-requested") {
- return;
- }
+ observe(aSubject, aTopic, aData) {
+ if (aTopic !== "new-identity-requested") {
+ return;
+ }
- // Clear the domain isolation state.
- torbutton_log(3, "Clearing domain isolator");
- const domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService(
- Ci.nsISupports
- ).wrappedJSObject;
- domainIsolator.clearIsolation();
-
- torbutton_log(3, "New Identity: Sending NEWNYM");
- // We only support TBB for newnym.
- if (!m_tb_control_pass || (!m_tb_control_ipc_file && !m_tb_control_port)) {
- var warning = torbutton_get_property_string("torbutton.popup.no_newnym");
- torbutton_log(5, "Torbutton cannot safely newnym. It does not have access to the Tor Control Port.");
- window.alert(warning);
- } else {
- var warning = torbutton_get_property_string("torbutton.popup.no_newnym");
- torbutton_send_ctrl_cmd("SIGNAL NEWNYM").then(res => {
- if (!res) {
- torbutton_log(5, "Torbutton was unable to request a new circuit from Tor");
- window.alert(warning);
- }
- }).catch(e => {
- torbutton_log(5, "Torbutton was unable to request a new circuit from Tor " + e);
+ // Clear the domain isolation state.
+ torbutton_log(3, "Clearing domain isolator");
+ const domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ domainIsolator.clearIsolation();
+
+ torbutton_log(3, "New Identity: Sending NEWNYM");
+ // We only support TBB for newnym.
+ if (
+ !m_tb_control_pass ||
+ (!m_tb_control_ipc_file && !m_tb_control_port)
+ ) {
+ const warning = torbutton_get_property_string(
+ "torbutton.popup.no_newnym"
+ );
+ torbutton_log(
+ 5,
+ "Torbutton cannot safely newnym. It does not have access to the Tor Control Port."
+ );
window.alert(warning);
- });
- }
- },
-}
+ } else {
+ const warning = torbutton_get_property_string(
+ "torbutton.popup.no_newnym"
+ );
+ torbutton_send_ctrl_cmd("SIGNAL NEWNYM")
+ .then(res => {
+ if (!res) {
+ torbutton_log(
+ 5,
+ "Torbutton was unable to request a new circuit from Tor"
+ );
+ window.alert(warning);
+ }
+ })
+ .catch(e => {
+ torbutton_log(
+ 5,
+ "Torbutton was unable to request a new circuit from Tor " + e
+ );
+ window.alert(warning);
+ });
+ }
+ },
+ };
-function torbutton_is_mobile() {
+ function torbutton_is_mobile() {
return Services.appinfo.OS === "Android";
-}
+ }
-// Bug 1506 P2-P4: This code sets some version variables that are irrelevant.
-// It does read out some important environment variables, though. It is
-// called once per browser window.. This might belong in a component.
-torbutton_init = function() {
- torbutton_log(3, 'called init()');
+ // Bug 1506 P2-P4: This code sets some version variables that are irrelevant.
+ // It does read out some important environment variables, though. It is
+ // called once per browser window.. This might belong in a component.
+ torbutton_init = function() {
+ torbutton_log(3, "called init()");
if (m_tb_wasinited) {
- return;
+ return;
}
m_tb_wasinited = true;
let tlps;
try {
- tlps = Cc["@torproject.org/torlauncher-protocol-service;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
- } catch(e) {}
+ tlps = Cc["@torproject.org/torlauncher-protocol-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ } catch (e) {}
// Bug 1506 P4: These vars are very important for New Identity
- var environ = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
+ var environ = Cc["@mozilla.org/process/environment;1"].getService(
+ Ci.nsIEnvironment
+ );
if (environ.exists("TOR_CONTROL_PASSWD")) {
- m_tb_control_pass = environ.get("TOR_CONTROL_PASSWD");
+ m_tb_control_pass = environ.get("TOR_CONTROL_PASSWD");
} else if (environ.exists("TOR_CONTROL_COOKIE_AUTH_FILE")) {
- var cookie_path = environ.get("TOR_CONTROL_COOKIE_AUTH_FILE");
- try {
- if ("" != cookie_path) {
- m_tb_control_pass = torbutton_read_authentication_cookie(cookie_path);
- }
- } catch(e) {
- torbutton_log(4, 'unable to read authentication cookie');
+ var cookie_path = environ.get("TOR_CONTROL_COOKIE_AUTH_FILE");
+ try {
+ if ("" != cookie_path) {
+ m_tb_control_pass = torbutton_read_authentication_cookie(cookie_path);
}
+ } catch (e) {
+ torbutton_log(4, "unable to read authentication cookie");
+ }
} else {
try {
// Try to get password from Tor Launcher.
@@ -227,47 +231,47 @@ torbutton_init = function() {
// since Tor Launcher knows how to handle its own preferences and how to
// resolve relative paths.
try {
- m_tb_control_ipc_file = tlps.TorGetControlIPCFile();
- } catch(e) {}
-
- if (m_tb_control_ipc_file) {
- m_tb_control_desc = m_tb_control_ipc_file.path;
- } else {
- if (environ.exists("TOR_CONTROL_PORT")) {
- m_tb_control_port = environ.get("TOR_CONTROL_PORT");
- } else {
- try {
- const kTLControlPortPref = "extensions.torlauncher.control_port";
- m_tb_control_port = m_tb_prefs.getIntPref(kTLControlPortPref);
- } catch(e) {
- // Since we want to disable some features when Tor Launcher is
- // not installed (e.g., New Identity), we do not set a default
- // port value here.
- }
- }
+ m_tb_control_ipc_file = tlps.TorGetControlIPCFile();
+ } catch (e) {}
- if (m_tb_control_port) {
- m_tb_control_desc = "" + m_tb_control_port;
+ if (!m_tb_control_ipc_file) {
+ if (environ.exists("TOR_CONTROL_PORT")) {
+ m_tb_control_port = environ.get("TOR_CONTROL_PORT");
+ } else {
+ try {
+ const kTLControlPortPref = "extensions.torlauncher.control_port";
+ m_tb_control_port = m_tb_prefs.getIntPref(kTLControlPortPref);
+ } catch (e) {
+ // Since we want to disable some features when Tor Launcher is
+ // not installed (e.g., New Identity), we do not set a default
+ // port value here.
}
+ }
- if (environ.exists("TOR_CONTROL_HOST")) {
- m_tb_control_host = environ.get("TOR_CONTROL_HOST");
- } else {
- try {
- const kTLControlHostPref = "extensions.torlauncher.control_host";
- m_tb_control_host = m_tb_prefs.getCharPref(kTLControlHostPref);
- } catch(e) {
- m_tb_control_host = "127.0.0.1";
- }
+ if (environ.exists("TOR_CONTROL_HOST")) {
+ m_tb_control_host = environ.get("TOR_CONTROL_HOST");
+ } else {
+ try {
+ const kTLControlHostPref = "extensions.torlauncher.control_host";
+ m_tb_control_host = m_tb_prefs.getCharPref(kTLControlHostPref);
+ } catch (e) {
+ m_tb_control_host = "127.0.0.1";
}
+ }
}
- configureControlPortModule(m_tb_control_ipc_file, m_tb_control_host,
- m_tb_control_port, m_tb_control_pass);
+ configureControlPortModule(
+ m_tb_control_ipc_file,
+ m_tb_control_host,
+ m_tb_control_port,
+ m_tb_control_pass
+ );
// Add about:tor IPC message listener.
- window.messageManager.addMessageListener("AboutTor:Loaded",
- torbutton_abouttor_message_handler);
+ window.messageManager.addMessageListener(
+ "AboutTor:Loaded",
+ torbutton_abouttor_message_handler
+ );
setupPreferencesForMobile();
@@ -275,361 +279,387 @@ torbutton_init = function() {
torbutton_tor_check_observer.register();
try {
- createTorCircuitDisplay("extensions.torbutton.display_circuit");
- } catch(e) {
- torbutton_log(4, "Error creating the tor circuit display " + e);
+ createTorCircuitDisplay("extensions.torbutton.display_circuit");
+ } catch (e) {
+ torbutton_log(4, "Error creating the tor circuit display " + e);
}
try {
- torbutton_init_user_manual_links();
- } catch(e) {
- torbutton_log(4, "Error loading the user manual " + e);
+ torbutton_init_user_manual_links();
+ } catch (e) {
+ torbutton_log(4, "Error loading the user manual " + e);
}
// Arrange for our about:tor content script to be loaded in each frame.
window.messageManager.loadFrameScript(
- "chrome://torbutton/content/aboutTor/aboutTor-content.js", true);
+ "chrome://torbutton/content/aboutTor/aboutTor-content.js",
+ true
+ );
torbutton_new_identity_observers.register();
- torbutton_log(3, 'init completed');
-}
-
-var torbutton_abouttor_message_handler = {
- // Receive IPC messages from the about:tor content script.
- receiveMessage: async function(aMessage) {
- switch(aMessage.name) {
- case "AboutTor:Loaded":
- aMessage.target.messageManager.sendAsyncMessage("AboutTor:ChromeData",
- await this.getChromeData(true));
- break;
- }
- },
-
- // Send privileged data to all of the about:tor content scripts.
- updateAllOpenPages: async function() {
- window.messageManager.broadcastAsyncMessage("AboutTor:ChromeData",
- await this.getChromeData(false));
- },
-
- // The chrome data contains all of the data needed by the about:tor
- // content process that is only available here (in the chrome process).
- // It is sent to the content process when an about:tor window is opened
- // and in response to events such as the browser noticing that Tor is
- // not working.
- getChromeData: async function(aIsRespondingToPageLoad) {
- let dataObj = {
- mobile: torbutton_is_mobile(),
- updateChannel: AppConstants.MOZ_UPDATE_CHANNEL,
- torOn: await torbutton_tor_check_ok()
- };
-
- if (aIsRespondingToPageLoad) {
- const kShouldNotifyPref = "torbrowser.post_update.shouldNotify";
- if (m_tb_prefs.getBoolPref(kShouldNotifyPref, false)) {
- m_tb_prefs.clearUserPref(kShouldNotifyPref);
- dataObj.hasBeenUpdated = true;
- dataObj.updateMoreInfoURL = this.getUpdateMoreInfoURL();
+ torbutton_log(3, "init completed");
+ };
+
+ var torbutton_abouttor_message_handler = {
+ // Receive IPC messages from the about:tor content script.
+ async receiveMessage(aMessage) {
+ switch (aMessage.name) {
+ case "AboutTor:Loaded":
+ aMessage.target.messageManager.sendAsyncMessage(
+ "AboutTor:ChromeData",
+ await this.getChromeData(true)
+ );
+ break;
}
- }
+ },
- return dataObj;
- },
+ // Send privileged data to all of the about:tor content scripts.
+ async updateAllOpenPages() {
+ window.messageManager.broadcastAsyncMessage(
+ "AboutTor:ChromeData",
+ await this.getChromeData(false)
+ );
+ },
- getUpdateMoreInfoURL: function() {
- try {
- return Services.prefs.getCharPref("torbrowser.post_update.url");
- } catch (e) {}
+ // The chrome data contains all of the data needed by the about:tor
+ // content process that is only available here (in the chrome process).
+ // It is sent to the content process when an about:tor window is opened
+ // and in response to events such as the browser noticing that Tor is
+ // not working.
+ async getChromeData(aIsRespondingToPageLoad) {
+ let dataObj = {
+ mobile: torbutton_is_mobile(),
+ updateChannel: AppConstants.MOZ_UPDATE_CHANNEL,
+ torOn: await torbutton_tor_check_ok(),
+ };
+
+ if (aIsRespondingToPageLoad) {
+ const kShouldNotifyPref = "torbrowser.post_update.shouldNotify";
+ if (m_tb_prefs.getBoolPref(kShouldNotifyPref, false)) {
+ m_tb_prefs.clearUserPref(kShouldNotifyPref);
+ dataObj.hasBeenUpdated = true;
+ dataObj.updateMoreInfoURL = this.getUpdateMoreInfoURL();
+ }
+ }
+
+ return dataObj;
+ },
- // Use the default URL as a fallback.
- return Services.urlFormatter.formatURLPref("startup.homepage_override_url");
+ getUpdateMoreInfoURL() {
+ try {
+ return Services.prefs.getCharPref("torbrowser.post_update.url");
+ } catch (e) {}
+
+ // Use the default URL as a fallback.
+ return Services.urlFormatter.formatURLPref(
+ "startup.homepage_override_url"
+ );
+ },
+ };
+
+ // Bug 1506 P4: Control port interaction. Needed for New Identity.
+ function torbutton_read_authentication_cookie(path) {
+ var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+ file.initWithPath(path);
+ var fileStream = Cc[
+ "@mozilla.org/network/file-input-stream;1"
+ ].createInstance(Ci.nsIFileInputStream);
+ fileStream.init(file, 1, 0, false);
+ var binaryStream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(
+ Ci.nsIBinaryInputStream
+ );
+ binaryStream.setInputStream(fileStream);
+ var array = binaryStream.readByteArray(fileStream.available());
+ binaryStream.close();
+ fileStream.close();
+ return torbutton_array_to_hexdigits(array);
}
-};
-
-// Bug 1506 P4: Control port interaction. Needed for New Identity.
-function torbutton_socket_readline(input) {
- var str = "";
- var bytes;
- while((bytes = input.readBytes(1)) != "\n") {
- if (bytes != '\r')
- str += bytes;
+
+ // Bug 1506 P4: Control port interaction. Needed for New Identity.
+ function torbutton_array_to_hexdigits(array) {
+ return array
+ .map(function(c) {
+ return String("0" + c.toString(16)).slice(-2);
+ })
+ .join("");
}
- return str;
-}
-
-// Bug 1506 P4: Control port interaction. Needed for New Identity.
-function torbutton_read_authentication_cookie(path) {
- var file = Cc["@mozilla.org/file/local;1"]
- .createInstance(Ci.nsIFile);
- file.initWithPath(path);
- var fileStream = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream);
- fileStream.init(file, 1, 0, false);
- var binaryStream = Cc["@mozilla.org/binaryinputstream;1"]
- .createInstance(Ci.nsIBinaryInputStream);
- binaryStream.setInputStream(fileStream);
- var array = binaryStream.readByteArray(fileStream.available());
- binaryStream.close();
- fileStream.close();
- return torbutton_array_to_hexdigits(array);
-}
-
-// Bug 1506 P4: Control port interaction. Needed for New Identity.
-function torbutton_array_to_hexdigits(array) {
- return array.map(function(c) {
- return String("0" + c.toString(16)).slice(-2)
- }).join('');
-};
-
-// Bug 1506 P4: Control port interaction. Needed for New Identity.
-//
-// Asynchronously executes a command on the control port.
-// returns the response as a string, or null on error
-async function torbutton_send_ctrl_cmd(command) {
- const getErrorMessage = e => (e && (e.torMessage || e.message)) || "";
- let response = null;
- try {
- const avoidCache = true;
- let torController = await wait_for_controller(avoidCache);
-
- let bytes = await torController.sendCommand(command);
- if (!bytes.startsWith("250")) {
- throw `Unexpected command response on control port '${bytes}'`;
- }
- response = bytes.slice(4);
- torController.close();
- } catch(err) {
- let msg = getErrorMessage(err);
- torbutton_log(4, `Error: ${msg}`);
+ // Bug 1506 P4: Control port interaction. Needed for New Identity.
+ //
+ // Asynchronously executes a command on the control port.
+ // returns the response as a string, or null on error
+ async function torbutton_send_ctrl_cmd(command) {
+ const getErrorMessage = e => (e && (e.torMessage || e.message)) || "";
+ let response = null;
+ try {
+ const avoidCache = true;
+ let torController = await wait_for_controller(avoidCache);
+
+ let bytes = await torController.sendCommand(command);
+ if (!bytes.startsWith("250")) {
+ throw new Error(
+ `Unexpected command response on control port '${bytes}'`
+ );
+ }
+ response = bytes.slice(4);
+
+ torController.close();
+ } catch (err) {
+ let msg = getErrorMessage(err);
+ torbutton_log(4, `Error: ${msg}`);
+ }
+ return response;
}
- return response;
-}
-// Bug 1506 P4: Needed for New IP Address
-torbutton_new_circuit = function() {
- let firstPartyDomain = getDomainForBrowser(gBrowser.selectedBrowser);
+ // Bug 1506 P4: Needed for New IP Address
+ torbutton_new_circuit = function() {
+ let firstPartyDomain = getDomainForBrowser(gBrowser.selectedBrowser);
- let domainIsolator = Cc["@torproject.org/domain-isolator;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+ let domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
- domainIsolator.newCircuitForDomain(firstPartyDomain);
+ domainIsolator.newCircuitForDomain(firstPartyDomain);
- gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
-}
+ gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
+ };
-/* Called when we switch the use_nontor_proxy pref in either direction.
- *
- * Enables/disables domain isolation and then does new identity
- */
-function torbutton_use_nontor_proxy()
-{
- let domainIsolator = Cc["@torproject.org/domain-isolator;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
-
- if (m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy")) {
- // Disable domain isolation
- domainIsolator.disableIsolation();
- } else {
- domainIsolator.enableIsolation();
+ /* Called when we switch the use_nontor_proxy pref in either direction.
+ *
+ * Enables/disables domain isolation and then does new identity
+ */
+ function torbutton_use_nontor_proxy() {
+ let domainIsolator = Cc["@torproject.org/domain-isolator;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+
+ if (m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy")) {
+ // Disable domain isolation
+ domainIsolator.disableIsolation();
+ } else {
+ domainIsolator.enableIsolation();
+ }
}
-}
-
-async function torbutton_do_tor_check()
-{
- let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
- if (m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy") ||
- !m_tb_prefs.getBoolPref("extensions.torbutton.test_enabled"))
- return; // Only do the check once.
-
- // If we have a tor control port and transparent torification is off,
- // perform a check via the control port.
- const kEnvSkipControlPortTest = "TOR_SKIP_CONTROLPORTTEST";
- const kEnvUseTransparentProxy = "TOR_TRANSPROXY";
- var env = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
- if ((m_tb_control_ipc_file || m_tb_control_port) &&
+
+ async function torbutton_do_tor_check() {
+ let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ if (
+ m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy") ||
+ !m_tb_prefs.getBoolPref("extensions.torbutton.test_enabled")
+ ) {
+ return;
+ } // Only do the check once.
+
+ // If we have a tor control port and transparent torification is off,
+ // perform a check via the control port.
+ const kEnvSkipControlPortTest = "TOR_SKIP_CONTROLPORTTEST";
+ const kEnvUseTransparentProxy = "TOR_TRANSPROXY";
+ var env = Cc["@mozilla.org/process/environment;1"].getService(
+ Ci.nsIEnvironment
+ );
+ if (
+ (m_tb_control_ipc_file || m_tb_control_port) &&
!env.exists(kEnvUseTransparentProxy) &&
!env.exists(kEnvSkipControlPortTest) &&
- m_tb_prefs.getBoolPref("extensions.torbutton.local_tor_check")) {
- if (await torbutton_local_tor_check())
- checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful;
- else {
- // The check failed. Update toolbar icon and tooltip.
- checkSvc.statusOfTorCheck = checkSvc.kCheckFailed;
+ m_tb_prefs.getBoolPref("extensions.torbutton.local_tor_check")
+ ) {
+ if (await torbutton_local_tor_check()) {
+ checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful;
+ } else {
+ // The check failed. Update toolbar icon and tooltip.
+ checkSvc.statusOfTorCheck = checkSvc.kCheckFailed;
+ }
+ } else {
+ // A local check is not possible, so perform a remote check.
+ torbutton_initiate_remote_tor_check();
}
}
- else {
- // A local check is not possible, so perform a remote check.
- torbutton_initiate_remote_tor_check();
- }
-}
-
-async function torbutton_local_tor_check()
-{
- let didLogError = false;
-
- let proxyType = m_tb_prefs.getIntPref("network.proxy.type");
- if (0 == proxyType)
- return false;
-
- // Ask tor for its SOCKS listener address and port and compare to the
- // browser preferences.
- const kCmdArg = "net/listeners/socks";
- let resp = await torbutton_send_ctrl_cmd("GETINFO " + kCmdArg);
- if (!resp)
- return false;
-
- function logUnexpectedResponse()
- {
- if (!didLogError) {
- didLogError = true;
- torbutton_log(5, "Local Tor check: unexpected GETINFO response: " + resp);
+
+ async function torbutton_local_tor_check() {
+ let didLogError = false;
+
+ let proxyType = m_tb_prefs.getIntPref("network.proxy.type");
+ if (0 == proxyType) {
+ return false;
}
- }
- function removeBrackets(aStr)
- {
- // Remove enclosing square brackets if present.
- if (aStr.startsWith('[') && aStr.endsWith(']'))
- return aStr.substr(1, aStr.length - 2);
+ // Ask tor for its SOCKS listener address and port and compare to the
+ // browser preferences.
+ const kCmdArg = "net/listeners/socks";
+ let resp = await torbutton_send_ctrl_cmd("GETINFO " + kCmdArg);
+ if (!resp) {
+ return false;
+ }
- return aStr;
- }
+ function logUnexpectedResponse() {
+ if (!didLogError) {
+ didLogError = true;
+ torbutton_log(
+ 5,
+ "Local Tor check: unexpected GETINFO response: " + resp
+ );
+ }
+ }
- // Sample response: net/listeners/socks="127.0.0.1:9149" "127.0.0.1:9150"
- // First, check for and remove the command argument prefix.
- if (0 != resp.indexOf(kCmdArg + '=')) {
- logUnexpectedResponse();
- return false;
- }
- resp = resp.substr(kCmdArg.length + 1);
-
- // Retrieve configured proxy settings and check each listener against them.
- // When the SOCKS prefs are set to use IPC (e.g., a Unix domain socket), a
- // file URL should be present in network.proxy.socks.
- // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1211567
- let socksAddr = m_tb_prefs.getCharPref("network.proxy.socks");
- let socksPort = m_tb_prefs.getIntPref("network.proxy.socks_port");
- let socksIPCPath;
- if (socksAddr && socksAddr.startsWith("file:")) {
- // Convert the file URL to a file path.
- try {
- let ioService = Services.io;
- let fph = ioService.getProtocolHandler("file")
- .QueryInterface(Ci.nsIFileProtocolHandler);
- socksIPCPath = fph.getFileFromURLSpec(socksAddr).path;
- } catch (e) {
- torbutton_log(5, "Local Tor check: IPC file error: " + e);
+ function removeBrackets(aStr) {
+ // Remove enclosing square brackets if present.
+ if (aStr.startsWith("[") && aStr.endsWith("]")) {
+ return aStr.substr(1, aStr.length - 2);
+ }
+
+ return aStr;
+ }
+
+ // Sample response: net/listeners/socks="127.0.0.1:9149" "127.0.0.1:9150"
+ // First, check for and remove the command argument prefix.
+ if (0 != resp.indexOf(kCmdArg + "=")) {
+ logUnexpectedResponse();
return false;
}
- } else {
- socksAddr = removeBrackets(socksAddr);
- }
+ resp = resp.substr(kCmdArg.length + 1);
+
+ // Retrieve configured proxy settings and check each listener against them.
+ // When the SOCKS prefs are set to use IPC (e.g., a Unix domain socket), a
+ // file URL should be present in network.proxy.socks.
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1211567
+ let socksAddr = m_tb_prefs.getCharPref("network.proxy.socks");
+ let socksPort = m_tb_prefs.getIntPref("network.proxy.socks_port");
+ let socksIPCPath;
+ if (socksAddr && socksAddr.startsWith("file:")) {
+ // Convert the file URL to a file path.
+ try {
+ let ioService = Services.io;
+ let fph = ioService
+ .getProtocolHandler("file")
+ .QueryInterface(Ci.nsIFileProtocolHandler);
+ socksIPCPath = fph.getFileFromURLSpec(socksAddr).path;
+ } catch (e) {
+ torbutton_log(5, "Local Tor check: IPC file error: " + e);
+ return false;
+ }
+ } else {
+ socksAddr = removeBrackets(socksAddr);
+ }
+
+ // Split into quoted strings. This code is adapted from utils.splitAtSpaces()
+ // within tor-control-port.js; someday this code should use the entire
+ // tor-control-port.js framework.
+ let addrArray = [];
+ resp.replace(/((\S*?"(.*?)")+\S*|\S+)/g, function(a, captured) {
+ addrArray.push(captured);
+ });
- // Split into quoted strings. This code is adapted from utils.splitAtSpaces()
- // within tor-control-port.js; someday this code should use the entire
- // tor-control-port.js framework.
- let addrArray = [];
- resp.replace(/((\S*?"(.*?)")+\S*|\S+)/g, function (a, captured) {
- addrArray.push(captured);
- });
-
- let foundSocksListener = false;
- for (let i = 0; !foundSocksListener && (i < addrArray.length); ++i) {
- let addr;
- try { addr = unescapeTorString(addrArray[i]); } catch (e) {}
- if (!addr)
- continue;
-
- // Remove double quotes if present.
- let len = addr.length;
- if ((len > 2) && ('"' == addr.charAt(0)) && ('"' == addr.charAt(len - 1)))
- addr = addr.substring(1, len - 1);
-
- if (addr.startsWith("unix:")) {
- if (!socksIPCPath)
+ let foundSocksListener = false;
+ for (let i = 0; !foundSocksListener && i < addrArray.length; ++i) {
+ let addr;
+ try {
+ addr = unescapeTorString(addrArray[i]);
+ } catch (e) {}
+ if (!addr) {
continue;
+ }
- // Check against the configured UNIX domain socket proxy.
- let path = addr.substring(5);
- torbutton_log(2, "Tor socks listener (Unix domain socket): " + path);
- foundSocksListener = (socksIPCPath === path);
- } else if (!socksIPCPath) {
- // Check against the configured TCP proxy. We expect addr:port where addr
- // may be an IPv6 address; that is, it may contain colon characters.
- // Also, we remove enclosing square brackets before comparing addresses
- // because tor requires them but Firefox does not.
- let idx = addr.lastIndexOf(':');
- if (idx < 0) {
- logUnexpectedResponse();
- } else {
- let torSocksAddr = removeBrackets(addr.substring(0, idx));
- let torSocksPort = parseInt(addr.substring(idx + 1), 10);
- if ((torSocksAddr.length < 1) || isNaN(torSocksPort)) {
+ // Remove double quotes if present.
+ let len = addr.length;
+ if (len > 2 && '"' == addr.charAt(0) && '"' == addr.charAt(len - 1)) {
+ addr = addr.substring(1, len - 1);
+ }
+
+ if (addr.startsWith("unix:")) {
+ if (!socksIPCPath) {
+ continue;
+ }
+
+ // Check against the configured UNIX domain socket proxy.
+ let path = addr.substring(5);
+ torbutton_log(2, "Tor socks listener (Unix domain socket): " + path);
+ foundSocksListener = socksIPCPath === path;
+ } else if (!socksIPCPath) {
+ // Check against the configured TCP proxy. We expect addr:port where addr
+ // may be an IPv6 address; that is, it may contain colon characters.
+ // Also, we remove enclosing square brackets before comparing addresses
+ // because tor requires them but Firefox does not.
+ let idx = addr.lastIndexOf(":");
+ if (idx < 0) {
logUnexpectedResponse();
} else {
- torbutton_log(2, "Tor socks listener: " + torSocksAddr + ':'
- + torSocksPort);
- foundSocksListener = ((socksAddr === torSocksAddr) &&
- (socksPort === torSocksPort));
+ let torSocksAddr = removeBrackets(addr.substring(0, idx));
+ let torSocksPort = parseInt(addr.substring(idx + 1), 10);
+ if (torSocksAddr.length < 1 || isNaN(torSocksPort)) {
+ logUnexpectedResponse();
+ } else {
+ torbutton_log(
+ 2,
+ "Tor socks listener: " + torSocksAddr + ":" + torSocksPort
+ );
+ foundSocksListener =
+ socksAddr === torSocksAddr && socksPort === torSocksPort;
+ }
}
}
}
- }
-
- return foundSocksListener;
-} // torbutton_local_tor_check
+ return foundSocksListener;
+ } // torbutton_local_tor_check
-function torbutton_initiate_remote_tor_check() {
- let obsSvc = Services.obs;
- try {
- let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+ function torbutton_initiate_remote_tor_check() {
+ let obsSvc = Services.obs;
+ try {
+ let checkSvc = Cc[
+ "@torproject.org/torbutton-torCheckService;1"
+ ].getService(Ci.nsISupports).wrappedJSObject;
let req = checkSvc.createCheckRequest(true); // async
- req.onreadystatechange = function (aEvent) {
- if (req.readyState === 4) {
- let ret = checkSvc.parseCheckResponse(req);
-
- // If we received an error response from check.torproject.org,
- // set the status of the tor check to failure (we don't want
- // to indicate failure if we didn't receive a response).
- if (ret == 2 || ret == 3 || ret == 5 || ret == 6
- || ret == 7 || ret == 8) {
- checkSvc.statusOfTorCheck = checkSvc.kCheckFailed;
- obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic, null);
- } else if (ret == 4) {
- checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful;
- } // Otherwise, redo the check later
-
- torbutton_log(3, "Tor remote check done. Result: " + ret);
- }
+ req.onreadystatechange = function(aEvent) {
+ if (req.readyState === 4) {
+ let ret = checkSvc.parseCheckResponse(req);
+
+ // If we received an error response from check.torproject.org,
+ // set the status of the tor check to failure (we don't want
+ // to indicate failure if we didn't receive a response).
+ if (
+ ret == 2 ||
+ ret == 3 ||
+ ret == 5 ||
+ ret == 6 ||
+ ret == 7 ||
+ ret == 8
+ ) {
+ checkSvc.statusOfTorCheck = checkSvc.kCheckFailed;
+ obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic);
+ } else if (ret == 4) {
+ checkSvc.statusOfTorCheck = checkSvc.kCheckSuccessful;
+ } // Otherwise, redo the check later
+
+ torbutton_log(3, "Tor remote check done. Result: " + ret);
+ }
};
torbutton_log(3, "Sending async Tor remote check");
req.send(null);
- } catch(e) {
- if (e.result == 0x80004005) // NS_ERROR_FAILURE
- torbutton_log(5, "Tor check failed! Is tor running?");
- else
- torbutton_log(5, "Tor check failed! Tor internal error: "+e);
-
- checkSvc.statusOfTorCheck = checkSvc.kCheckFailed;
- obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic, null);
- }
-} // torbutton_initiate_remote_tor_check()
+ } catch (e) {
+ if (e.result == 0x80004005) {
+ // NS_ERROR_FAILURE
+ torbutton_log(5, "Tor check failed! Is tor running?");
+ } else {
+ torbutton_log(5, "Tor check failed! Tor internal error: " + e);
+ }
-async function torbutton_tor_check_ok()
-{
- await torbutton_do_tor_check();
- let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
- return (checkSvc.kCheckFailed != checkSvc.statusOfTorCheck);
-}
+ obsSvc.notifyObservers(null, k_tb_tor_check_failed_topic);
+ }
+ } // torbutton_initiate_remote_tor_check()
-function torbutton_update_disk_prefs() {
+ async function torbutton_tor_check_ok() {
+ await torbutton_do_tor_check();
+ let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ return checkSvc.kCheckFailed != checkSvc.statusOfTorCheck;
+ }
+
+ function torbutton_update_disk_prefs() {
var mode = m_tb_prefs.getBoolPref("browser.privatebrowsing.autostart");
m_tb_prefs.setBoolPref("browser.cache.disk.enable", !mode);
@@ -647,184 +677,205 @@ function torbutton_update_disk_prefs() {
// Force prefs to be synced to disk
Services.prefs.savePrefFile(null);
-}
+ }
-function torbutton_update_fingerprinting_prefs() {
+ function torbutton_update_fingerprinting_prefs() {
var mode = m_tb_prefs.getBoolPref("privacy.resistFingerprinting");
- var letterboxing = m_tb_prefs.getBoolPref("privacy.resistFingerprinting.letterboxing", false);
- m_tb_prefs.setBoolPref("extensions.torbutton.resize_new_windows", mode && !letterboxing);
+ var letterboxing = m_tb_prefs.getBoolPref(
+ "privacy.resistFingerprinting.letterboxing",
+ false
+ );
+ m_tb_prefs.setBoolPref(
+ "extensions.torbutton.resize_new_windows",
+ mode && !letterboxing
+ );
// Force prefs to be synced to disk
Services.prefs.savePrefFile(null);
-}
-
-// Bug 1506 P1: This function just cleans up prefs that got set badly in previous releases
-function torbutton_fixup_old_prefs()
-{
- if(m_tb_prefs.getIntPref('extensions.torbutton.pref_fixup_version') < 1) {
- // TBB 5.0a3 had bad Firefox code that silently flipped this pref on us
- if (m_tb_prefs.prefHasUserValue("browser.newtabpage.enhanced")) {
- m_tb_prefs.clearUserPref("browser.newtabpage.enhanced");
- // TBB 5.0a3 users had all the necessary data cached in
- // directoryLinks.json. This meant that resetting the pref above
- // alone was not sufficient as the tiles features uses the cache
- // even if the pref indicates that feature should be disabled.
- // We flip the preference below as this forces a refetching which
- // effectively results in an empty JSON file due to our spoofed
- // URLs.
- let matchOS = m_tb_prefs.getBoolPref("intl.locale.matchOS");
- m_tb_prefs.setBoolPref("intl.locale.matchOS", !matchOS);
- m_tb_prefs.setBoolPref("intl.locale.matchOS", matchOS);
- }
+ }
- // For some reason, the Share This Page button also survived the
- // TBB 5.0a4 update's attempt to remove it.
- if (m_tb_prefs.prefHasUserValue("browser.uiCustomization.state")) {
- m_tb_prefs.clearUserPref("browser.uiCustomization.state");
- }
+ // Bug 1506 P1: This function just cleans up prefs that got set badly in previous releases
+ function torbutton_fixup_old_prefs() {
+ if (m_tb_prefs.getIntPref("extensions.torbutton.pref_fixup_version") < 1) {
+ // TBB 5.0a3 had bad Firefox code that silently flipped this pref on us
+ if (m_tb_prefs.prefHasUserValue("browser.newtabpage.enhanced")) {
+ m_tb_prefs.clearUserPref("browser.newtabpage.enhanced");
+ // TBB 5.0a3 users had all the necessary data cached in
+ // directoryLinks.json. This meant that resetting the pref above
+ // alone was not sufficient as the tiles features uses the cache
+ // even if the pref indicates that feature should be disabled.
+ // We flip the preference below as this forces a refetching which
+ // effectively results in an empty JSON file due to our spoofed
+ // URLs.
+ let matchOS = m_tb_prefs.getBoolPref("intl.locale.matchOS");
+ m_tb_prefs.setBoolPref("intl.locale.matchOS", !matchOS);
+ m_tb_prefs.setBoolPref("intl.locale.matchOS", matchOS);
+ }
- m_tb_prefs.setIntPref('extensions.torbutton.pref_fixup_version', 1);
+ // For some reason, the Share This Page button also survived the
+ // TBB 5.0a4 update's attempt to remove it.
+ if (m_tb_prefs.prefHasUserValue("browser.uiCustomization.state")) {
+ m_tb_prefs.clearUserPref("browser.uiCustomization.state");
+ }
+
+ m_tb_prefs.setIntPref("extensions.torbutton.pref_fixup_version", 1);
}
-}
+ }
-// ---------------------- Event handlers -----------------
+ // ---------------------- Event handlers -----------------
-// Bug 1506 P1-P3: Most of these observers aren't very important.
-// See their comments for details
-function torbutton_do_main_window_startup()
-{
+ // Bug 1506 P1-P3: Most of these observers aren't very important.
+ // See their comments for details
+ function torbutton_do_main_window_startup() {
torbutton_log(3, "Torbutton main window startup");
m_tb_is_main_window = true;
torbutton_unique_pref_observer.register();
-}
+ }
-// Bug 1506 P4: Most of this function is now useless, save
-// for the very important SOCKS environment vars at the end.
-// Those could probably be rolled into a function with the
-// control port vars, though. See 1506 comments inside.
-function torbutton_do_startup()
-{
- if(m_tb_prefs.getBoolPref("extensions.torbutton.startup")) {
- // Bug 1506: Should probably be moved to an XPCOM component
- torbutton_do_main_window_startup();
+ // Bug 1506 P4: Most of this function is now useless, save
+ // for the very important SOCKS environment vars at the end.
+ // Those could probably be rolled into a function with the
+ // control port vars, though. See 1506 comments inside.
+ function torbutton_do_startup() {
+ if (m_tb_prefs.getBoolPref("extensions.torbutton.startup")) {
+ // Bug 1506: Should probably be moved to an XPCOM component
+ torbutton_do_main_window_startup();
- // For charsets
- torbutton_update_fingerprinting_prefs();
+ // For charsets
+ torbutton_update_fingerprinting_prefs();
- // Bug 30565: sync browser.privatebrowsing.autostart with security.nocertdb
- torbutton_update_disk_prefs();
+ // Bug 30565: sync browser.privatebrowsing.autostart with security.nocertdb
+ torbutton_update_disk_prefs();
- // For general pref fixups to handle pref damage in older versions
- torbutton_fixup_old_prefs();
+ // For general pref fixups to handle pref damage in older versions
+ torbutton_fixup_old_prefs();
- m_tb_prefs.setBoolPref("extensions.torbutton.startup", false);
+ m_tb_prefs.setBoolPref("extensions.torbutton.startup", false);
}
-}
-
-// Bug 1506 P3: Used to decide if we should resize the window.
-//
-// Returns true if the window wind is neither maximized, full screen,
-// ratpoisioned/evilwmed, nor minimized.
-function torbutton_is_windowed(wind) {
- torbutton_log(3, "Window: (" + wind.outerWidth + "," + wind.outerHeight + ") ?= ("
- + wind.screen.availWidth + "," + wind.screen.availHeight + ")");
- if (wind.windowState == Ci.nsIDOMChromeWindow.STATE_MINIMIZED
- || wind.windowState == Ci.nsIDOMChromeWindow.STATE_MAXIMIZED) {
- torbutton_log(2, "Window is minimized/maximized");
- return false;
+ }
+
+ // Bug 1506 P3: Used to decide if we should resize the window.
+ //
+ // Returns true if the window wind is neither maximized, full screen,
+ // ratpoisioned/evilwmed, nor minimized.
+ function torbutton_is_windowed(wind) {
+ torbutton_log(
+ 3,
+ "Window: (" +
+ wind.outerWidth +
+ "," +
+ wind.outerHeight +
+ ") ?= (" +
+ wind.screen.availWidth +
+ "," +
+ wind.screen.availHeight +
+ ")"
+ );
+ if (
+ wind.windowState == Ci.nsIDOMChromeWindow.STATE_MINIMIZED ||
+ wind.windowState == Ci.nsIDOMChromeWindow.STATE_MAXIMIZED
+ ) {
+ torbutton_log(2, "Window is minimized/maximized");
+ return false;
}
if ("fullScreen" in wind && wind.fullScreen) {
- torbutton_log(2, "Window is fullScreen");
- return false;
+ torbutton_log(2, "Window is fullScreen");
+ return false;
}
- if(wind.outerHeight == wind.screen.availHeight
- && wind.outerWidth == wind.screen.availWidth) {
- torbutton_log(3, "Window is ratpoisoned/evilwm'ed");
- return false;
+ if (
+ wind.outerHeight == wind.screen.availHeight &&
+ wind.outerWidth == wind.screen.availWidth
+ ) {
+ torbutton_log(3, "Window is ratpoisoned/evilwm'ed");
+ return false;
}
torbutton_log(2, "Window is normal");
return true;
-}
+ }
-function showSecurityPreferencesPanel(chromeWindow) {
- const tabBrowser = chromeWindow.BrowserApp;
- let settingsTab = null;
+ function showSecurityPreferencesPanel(chromeWindow) {
+ const tabBrowser = chromeWindow.BrowserApp;
+ let settingsTab = null;
- const SECURITY_PREFERENCES_URI = 'chrome://torbutton/content/preferences.xhtml';
+ const SECURITY_PREFERENCES_URI =
+ "chrome://torbutton/content/preferences.xhtml";
- tabBrowser.tabs.some(function (tab) {
+ tabBrowser.tabs.some(function(tab) {
// If the security prefs tab is opened, send the user to it
if (tab.browser.currentURI.spec === SECURITY_PREFERENCES_URI) {
- settingsTab = tab;
- return true;
+ settingsTab = tab;
+ return true;
}
return false;
- });
+ });
- if (settingsTab === null) {
+ if (settingsTab === null) {
// Open up the settings panel in a new tab.
tabBrowser.addTab(SECURITY_PREFERENCES_URI, {
- "selected": true,
- "parentId": tabBrowser.selectedTab.id,
- triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
+ selected: true,
+ parentId: tabBrowser.selectedTab.id,
+ triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
- } else {
+ } else {
// Activate an existing settings panel tab.
tabBrowser.selectTab(settingsTab);
+ }
}
-}
-function setupPreferencesForMobile() {
- if (!torbutton_is_mobile()) {
- return;
- }
+ function setupPreferencesForMobile() {
+ if (!torbutton_is_mobile()) {
+ return;
+ }
- torbutton_log(4, "Setting up settings preferences for Android.");
+ torbutton_log(4, "Setting up settings preferences for Android.");
- const chromeWindow = Services.wm.getMostRecentWindow('navigator:browser');
+ const chromeWindow = Services.wm.getMostRecentWindow("navigator:browser");
- // Add the extension's chrome menu item to the main browser menu.
- chromeWindow.NativeWindow.menu.add({
- 'name': torbutton_get_property_string("torbutton.security_settings.menu.title"),
- 'callback': showSecurityPreferencesPanel.bind(this, chromeWindow)
- });
-}
+ // Add the extension's chrome menu item to the main browser menu.
+ chromeWindow.NativeWindow.menu.add({
+ name: torbutton_get_property_string(
+ "torbutton.security_settings.menu.title"
+ ),
+ callback: showSecurityPreferencesPanel.bind(this, chromeWindow),
+ });
+ }
-// Bug 1506 P3: This is needed pretty much only for the window resizing.
-// See comments for individual functions for details
-function torbutton_new_window(event)
-{
+ // Bug 1506 P3: This is needed pretty much only for the window resizing.
+ // See comments for individual functions for details
+ function torbutton_new_window(event) {
torbutton_log(3, "New window");
var browser = window.gBrowser;
- if(!browser) {
+ if (!browser) {
torbutton_log(5, "No browser for new window.");
return;
}
if (!m_tb_wasinited) {
- torbutton_init();
+ torbutton_init();
}
torbutton_do_startup();
- let progress = Cc["@mozilla.org/docloaderservice;1"]
- .getService(Ci.nsIWebProgress);
+ let progress = Cc["@mozilla.org/docloaderservice;1"].getService(
+ Ci.nsIWebProgress
+ );
if (torbutton_is_windowed(window)) {
- progress.addProgressListener(torbutton_resizelistener,
- Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
+ progress.addProgressListener(
+ torbutton_resizelistener,
+ Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT
+ );
}
-}
+ }
-// Bug 1506 P2: This is only needed because we have observers
-// in XUL that should be in an XPCOM component
-function torbutton_close_window(event) {
+ // Bug 1506 P2: This is only needed because we have observers
+ // in XUL that should be in an XPCOM component
+ function torbutton_close_window(event) {
torbutton_tor_check_observer.unregister();
- window.removeEventListener("sizemodechange", m_tb_resize_handler,
- false);
+ window.removeEventListener("sizemodechange", m_tb_resize_handler);
// TODO: This is a real ghetto hack.. When the original window
// closes, we need to find another window to handle observing
@@ -832,151 +883,179 @@ function torbutton_close_window(event) {
// majority of torbutton functionality into a XPCOM component..
// But that is a major overhaul..
if (m_tb_is_main_window) {
- torbutton_log(3, "Original window closed. Searching for another");
- var wm = Services.wm;
- var enumerator = wm.getEnumerator("navigator:browser");
- while(enumerator.hasMoreElements()) {
- var win = enumerator.getNext();
- // For some reason, when New Identity is called from a pref
- // observer (ex: torbutton_use_nontor_proxy) on an ASAN build,
- // we sometimes don't have this symbol set in the new window yet.
- // However, the new window will run this init later in that case,
- // as it does in the OSX case.
- if(win != window && "torbutton_do_main_window_startup" in win) {
- torbutton_log(3, "Found another window");
- win.torbutton_do_main_window_startup();
- m_tb_is_main_window = false;
- break;
- }
+ torbutton_log(3, "Original window closed. Searching for another");
+ var wm = Services.wm;
+ var enumerator = wm.getEnumerator("navigator:browser");
+ while (enumerator.hasMoreElements()) {
+ var win = enumerator.getNext();
+ // For some reason, when New Identity is called from a pref
+ // observer (ex: torbutton_use_nontor_proxy) on an ASAN build,
+ // we sometimes don't have this symbol set in the new window yet.
+ // However, the new window will run this init later in that case,
+ // as it does in the OSX case.
+ if (win != window && "torbutton_do_main_window_startup" in win) {
+ torbutton_log(3, "Found another window");
+ win.torbutton_do_main_window_startup();
+ m_tb_is_main_window = false;
+ break;
}
+ }
- torbutton_unique_pref_observer.unregister();
+ torbutton_unique_pref_observer.unregister();
- if(m_tb_is_main_window) { // main window not reset above
- // This happens on Mac OS because they allow firefox
- // to still persist without a navigator window
- torbutton_log(3, "Last window closed. None remain.");
- m_tb_prefs.setBoolPref("extensions.torbutton.startup", true);
- m_tb_is_main_window = false;
- }
+ if (m_tb_is_main_window) {
+ // main window not reset above
+ // This happens on Mac OS because they allow firefox
+ // to still persist without a navigator window
+ torbutton_log(3, "Last window closed. None remain.");
+ m_tb_prefs.setBoolPref("extensions.torbutton.startup", true);
+ m_tb_is_main_window = false;
+ }
}
-}
-
-window.addEventListener('load',torbutton_new_window,false);
-window.addEventListener('unload', torbutton_close_window, false);
-
-var m_tb_resize_handler = null;
-var m_tb_resize_date = null;
-
-// Bug 1506 P1/P3: Setting a fixed window size is important, but
-// probably not for android.
-var torbutton_resizelistener =
-{
- QueryInterface: ChromeUtils.generateQI(["nsIWebProgressListener", "nsISupportsWeakReference"]),
-
- onLocationChange: function(aProgress, aRequest, aURI) {},
- onStateChange: function(aProgress, aRequest, aFlag, aStatus) {
- if (aFlag & Ci.nsIWebProgressListener.STATE_STOP) {
- m_tb_resize_handler = async function() {
- // Wait for end of execution queue to ensure we have correct windowState.
- await new Promise(resolve => setTimeout(resolve, 0));
- if (window.windowState === window.STATE_MAXIMIZED ||
- window.windowState === window.STATE_FULLSCREEN) {
- if (m_tb_prefs.getBoolPref("extensions.torbutton.resize_new_windows") &&
- m_tb_prefs.getIntPref("extensions.torbutton.maximize_warnings_remaining") > 0) {
-
- // Do not add another notification if one is already showing.
- const kNotificationName = "torbutton-maximize-notification";
- let box = gBrowser.getNotificationBox();
- if (box.getNotificationWithValue(kNotificationName))
- return;
-
- // Rate-limit showing our notification if needed.
- if (m_tb_resize_date === null) {
- m_tb_resize_date = Date.now();
- } else {
- // We wait at least another second before we show a new
- // notification. Should be enough to rule out OSes that call our
- // handler rapidly due to internal workings.
- if (Date.now() - m_tb_resize_date < 1000) {
+ }
+
+ window.addEventListener("load", torbutton_new_window);
+ window.addEventListener("unload", torbutton_close_window);
+
+ var m_tb_resize_handler = null;
+ var m_tb_resize_date = null;
+
+ // Bug 1506 P1/P3: Setting a fixed window size is important, but
+ // probably not for android.
+ var torbutton_resizelistener = {
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIWebProgressListener",
+ "nsISupportsWeakReference",
+ ]),
+
+ onLocationChange(aProgress, aRequest, aURI) {},
+ onStateChange(aProgress, aRequest, aFlag, aStatus) {
+ if (aFlag & Ci.nsIWebProgressListener.STATE_STOP) {
+ m_tb_resize_handler = async function() {
+ // Wait for end of execution queue to ensure we have correct windowState.
+ await new Promise(resolve => setTimeout(resolve, 0));
+ if (
+ window.windowState === window.STATE_MAXIMIZED ||
+ window.windowState === window.STATE_FULLSCREEN
+ ) {
+ if (
+ m_tb_prefs.getBoolPref(
+ "extensions.torbutton.resize_new_windows"
+ ) &&
+ m_tb_prefs.getIntPref(
+ "extensions.torbutton.maximize_warnings_remaining"
+ ) > 0
+ ) {
+ // Do not add another notification if one is already showing.
+ const kNotificationName = "torbutton-maximize-notification";
+ let box = gBrowser.getNotificationBox();
+ if (box.getNotificationWithValue(kNotificationName)) {
return;
}
- // Resizing but we need to reset |m_tb_resize_date| now.
- m_tb_resize_date = Date.now();
- }
- // No need to get "OK" translated again.
- let sbSvc = Services.strings;
- let bundle = sbSvc.
- createBundle("chrome://global/locale/commonDialogs.properties");
- let button_label = bundle.GetStringFromName("OK");
-
- let buttons = [{
- label: button_label,
- accessKey: 'O',
- popup: null,
- callback:
- function() {
- m_tb_prefs.setIntPref("extensions.torbutton.maximize_warnings_remaining",
- m_tb_prefs.getIntPref("extensions.torbutton.maximize_warnings_remaining") - 1);
+ // Rate-limit showing our notification if needed.
+ if (m_tb_resize_date === null) {
+ m_tb_resize_date = Date.now();
+ } else {
+ // We wait at least another second before we show a new
+ // notification. Should be enough to rule out OSes that call our
+ // handler rapidly due to internal workings.
+ if (Date.now() - m_tb_resize_date < 1000) {
+ return;
}
- }];
-
- let priority = box.PRIORITY_WARNING_LOW;
- let message =
- torbutton_get_property_string("torbutton.maximize_warning");
+ // Resizing but we need to reset |m_tb_resize_date| now.
+ m_tb_resize_date = Date.now();
+ }
- box.appendNotification(message, kNotificationName, null,
- priority, buttons);
- return;
+ // No need to get "OK" translated again.
+ let sbSvc = Services.strings;
+ let bundle = sbSvc.createBundle(
+ "chrome://global/locale/commonDialogs.properties"
+ );
+ let button_label = bundle.GetStringFromName("OK");
+
+ let buttons = [
+ {
+ label: button_label,
+ accessKey: "O",
+ popup: null,
+ callback() {
+ m_tb_prefs.setIntPref(
+ "extensions.torbutton.maximize_warnings_remaining",
+ m_tb_prefs.getIntPref(
+ "extensions.torbutton.maximize_warnings_remaining"
+ ) - 1
+ );
+ },
+ },
+ ];
+
+ let priority = box.PRIORITY_WARNING_LOW;
+ let message = torbutton_get_property_string(
+ "torbutton.maximize_warning"
+ );
+
+ box.appendNotification(
+ message,
+ kNotificationName,
+ null,
+ priority,
+ buttons
+ );
+ }
}
- }
- }; // m_tb_resize_handler
-
- // We need to handle OSes that auto-maximize windows depending on user
- // settings and/or screen resolution in the start-up phase and users that
- // try to shoot themselves in the foot by maximizing the window manually.
- // We add a listener which is triggerred as soon as the window gets
- // maximized (windowState = 1). We are resizing during start-up but not
- // later as the user should see only a warning there as a stopgap before
- // #14229 lands.
- // Alas, the Firefox window code is handling the event not itself:
- // "// Note the current implementation of SetSizeMode just stores
- // // the new state; it doesn't actually resize. So here we store
- // // the state and pass the event on to the OS."
- // (See: https://mxr.mozilla.org/mozilla-esr31/source/xpfe/appshell/src/
- // nsWebShellWindow.cpp#348)
- // This means we have to cope with race conditions and resizing in the
- // sizemodechange listener is likely to fail. Thus, we add a specific
- // resize listener that is doing the work for us. It seems (at least on
- // Ubuntu) to be the case that maximizing (and then again normalizing) of
- // the window triggers more than one resize event the first being not the
- // one we need. Thus we can't remove the listener after the first resize
- // event got fired. Thus, we have the rather klunky setTimeout() call.
- window.addEventListener("sizemodechange", m_tb_resize_handler, false);
-
- let progress = Cc["@mozilla.org/docloaderservice;1"]
- .getService(Ci.nsIWebProgress);
- progress.removeProgressListener(this);
- }
- }, // onStateChange
-
- onProgressChange: function(aProgress, aRequest, curSelfProgress,
- maxSelfProgress, curTotalProgress,
- maxTotalProgress) {},
- onStatusChange: function(aProgress, aRequest, stat, message) {},
- onSecurityChange: function() {}
-};
-
-// Makes sure the item in the Help Menu and the link in about:tor
-// for the Tor Browser User Manual are only visible when
-// show_torbrowser_manual() returns true.
-function torbutton_init_user_manual_links() {
- let menuitem = document.getElementById("torBrowserUserManual");
- bindPrefAndInit("intl.locale.requested", val => {
- menuitem.hidden = !show_torbrowser_manual();
- torbutton_abouttor_message_handler.updateAllOpenPages();
- });
-}
+ }; // m_tb_resize_handler
+
+ // We need to handle OSes that auto-maximize windows depending on user
+ // settings and/or screen resolution in the start-up phase and users that
+ // try to shoot themselves in the foot by maximizing the window manually.
+ // We add a listener which is triggerred as soon as the window gets
+ // maximized (windowState = 1). We are resizing during start-up but not
+ // later as the user should see only a warning there as a stopgap before
+ // #14229 lands.
+ // Alas, the Firefox window code is handling the event not itself:
+ // "// Note the current implementation of SetSizeMode just stores
+ // // the new state; it doesn't actually resize. So here we store
+ // // the state and pass the event on to the OS."
+ // (See: https://mxr.mozilla.org/mozilla-esr31/source/xpfe/appshell/src/
+ // nsWebShellWindow.cpp#348)
+ // This means we have to cope with race conditions and resizing in the
+ // sizemodechange listener is likely to fail. Thus, we add a specific
+ // resize listener that is doing the work for us. It seems (at least on
+ // Ubuntu) to be the case that maximizing (and then again normalizing) of
+ // the window triggers more than one resize event the first being not the
+ // one we need. Thus we can't remove the listener after the first resize
+ // event got fired. Thus, we have the rather klunky setTimeout() call.
+ window.addEventListener("sizemodechange", m_tb_resize_handler);
+
+ let progress = Cc["@mozilla.org/docloaderservice;1"].getService(
+ Ci.nsIWebProgress
+ );
+ progress.removeProgressListener(this);
+ }
+ }, // onStateChange
+
+ onProgressChange(
+ aProgress,
+ aRequest,
+ curSelfProgress,
+ maxSelfProgress,
+ curTotalProgress,
+ maxTotalProgress
+ ) {},
+ onStatusChange(aProgress, aRequest, stat, message) {},
+ onSecurityChange() {},
+ };
+
+ // Makes sure the item in the Help Menu and the link in about:tor
+ // for the Tor Browser User Manual are only visible when
+ // show_torbrowser_manual() returns true.
+ function torbutton_init_user_manual_links() {
+ let menuitem = document.getElementById("torBrowserUserManual");
+ bindPrefAndInit("intl.locale.requested", val => {
+ menuitem.hidden = !show_torbrowser_manual();
+ torbutton_abouttor_message_handler.updateAllOpenPages();
+ });
+ }
})();
//vim:set ts=4
diff --git a/components/domain-isolator.js b/components/domain-isolator.js
index 06fe1e2e..1c77b577 100644
--- a/components/domain-isolator.js
+++ b/components/domain-isolator.js
@@ -9,15 +9,17 @@
// ### Abbreviations
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
XPCOMUtils.defineLazyModuleGetters(this, {
ComponentUtils: "resource://gre/modules/ComponentUtils.jsm",
});
// Make the logger available.
-let logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+let logger = Cc["@torproject.org/torbutton-logger;1"].getService(Ci.nsISupports)
+ .wrappedJSObject;
// Import crypto object (FF 37+).
Cu.importGlobalProperties(["crypto"]);
@@ -29,8 +31,9 @@ let mozilla = {};
// __mozilla.protocolProxyService__.
// Mozilla's protocol proxy service, useful for managing proxy connections made
// by the browser.
-mozilla.protocolProxyService = Cc["@mozilla.org/network/protocol-proxy-service;1"]
- .getService(Ci.nsIProtocolProxyService);
+mozilla.protocolProxyService = Cc[
+ "@mozilla.org/network/protocol-proxy-service;1"
+].getService(Ci.nsIProtocolProxyService);
// __mozilla.registerProxyChannelFilter(filterFunction, positionIndex)__.
// Registers a proxy channel filter with the Mozilla Protocol Proxy Service,
@@ -38,13 +41,16 @@ mozilla.protocolProxyService = Cc["@mozilla.org/network/protocol-proxy-service;1
// The filterFunction should expect two arguments, (aChannel, aProxy),
// where aProxy is the proxy or list of proxies that would be used by default
// for the given channel, and should return a new Proxy or list of Proxies.
-mozilla.registerProxyChannelFilter = function (filterFunction, positionIndex) {
+mozilla.registerProxyChannelFilter = function(filterFunction, positionIndex) {
let proxyFilter = {
- applyFilter : function (aChannel, aProxy, aCallback) {
+ applyFilter(aChannel, aProxy, aCallback) {
aCallback.onProxyFilterResult(filterFunction(aChannel, aProxy));
- }
+ },
};
- mozilla.protocolProxyService.registerChannelFilter(proxyFilter, positionIndex);
+ mozilla.protocolProxyService.registerChannelFilter(
+ proxyFilter,
+ positionIndex
+ );
};
// ## tor functionality.
@@ -66,24 +72,25 @@ tor.unknownDirtySince = Date.now();
// Takes a proxyInfo object (originalProxy) and returns a new proxyInfo
// object with the same properties, except the username is set to the
// the domain, and the password is a nonce.
-tor.socksProxyCredentials = function (originalProxy, domain) {
+tor.socksProxyCredentials = function(originalProxy, domain) {
// Check if we already have a nonce. If not, create
// one for this domain.
if (!tor.noncesForDomains.hasOwnProperty(domain)) {
tor.noncesForDomains[domain] = tor.nonce();
}
let proxy = originalProxy.QueryInterface(Ci.nsIProxyInfo);
- return mozilla.protocolProxyService
- .newProxyInfoWithAuth("socks",
- proxy.host,
- proxy.port,
- domain, // username
- tor.noncesForDomains[domain], // password
- "", // aProxyAuthorizationHeader
- "", // aConnectionIsolationKey
- proxy.flags,
- proxy.failoverTimeout,
- proxy.failoverProxy);
+ return mozilla.protocolProxyService.newProxyInfoWithAuth(
+ "socks",
+ proxy.host,
+ proxy.port,
+ domain, // username
+ tor.noncesForDomains[domain], // password
+ "", // aProxyAuthorizationHeader
+ "", // aConnectionIsolationKey
+ proxy.flags,
+ proxy.failoverTimeout,
+ proxy.failoverProxy
+ );
};
tor.nonce = function() {
@@ -98,7 +105,7 @@ tor.nonce = function() {
let tagStr = "";
for (let i = 0; i < tag.length; i++) {
tagStr += (tag[i] >>> 4).toString(16);
- tagStr += (tag[i] & 0x0F).toString(16);
+ tagStr += (tag[i] & 0x0f).toString(16);
}
return tagStr;
@@ -110,13 +117,16 @@ tor.newCircuitForDomain = function(domain) {
domain = "--unknown--";
}
tor.noncesForDomains[domain] = tor.nonce();
- logger.eclog(3, "New domain isolation for " + domain + ": " + tor.noncesForDomains[domain]);
+ logger.eclog(
+ 3,
+ "New domain isolation for " + domain + ": " + tor.noncesForDomains[domain]
+ );
};
// __tor.clearIsolation()_.
// Clear the isolation state cache, forcing new circuits to be used for all
// subsequent requests.
-tor.clearIsolation = function () {
+tor.clearIsolation = function() {
// Per-domain nonces are stored in a map, so simply re-initialize the map.
tor.noncesForDomains = {};
@@ -130,28 +140,38 @@ tor.clearIsolation = function () {
// to the SOCKS server (the tor client process) with a username (the first party domain)
// and a nonce password. Tor provides a separate circuit for each username+password
// combination.
-tor.isolateCircuitsByDomain = function () {
- mozilla.registerProxyChannelFilter(function (aChannel, aProxy) {
+tor.isolateCircuitsByDomain = function() {
+ mozilla.registerProxyChannelFilter(function(aChannel, aProxy) {
if (!tor.isolationEnabled) {
return aProxy;
}
try {
let channel = aChannel.QueryInterface(Ci.nsIChannel),
- firstPartyDomain = channel.loadInfo.originAttributes.firstPartyDomain;
+ firstPartyDomain = channel.loadInfo.originAttributes.firstPartyDomain;
if (firstPartyDomain === "") {
firstPartyDomain = "--unknown--";
- if (Date.now() - tor.unknownDirtySince > 1000*10*60) {
- logger.eclog(3, "tor catchall circuit has been dirty for over 10 minutes. Rotating.");
+ if (Date.now() - tor.unknownDirtySince > 1000 * 10 * 60) {
+ logger.eclog(
+ 3,
+ "tor catchall circuit has been dirty for over 10 minutes. Rotating."
+ );
tor.newCircuitForDomain("--unknown--");
tor.unknownDirtySince = Date.now();
}
}
- let replacementProxy = tor.socksProxyCredentials(aProxy, firstPartyDomain);
- logger.eclog(3, `tor SOCKS: ${channel.URI.spec} via
- ${replacementProxy.username}:${replacementProxy.password}`);
+ let replacementProxy = tor.socksProxyCredentials(
+ aProxy,
+ firstPartyDomain
+ );
+ logger.eclog(
+ 3,
+ `tor SOCKS: ${channel.URI.spec} via
+ ${replacementProxy.username}:${replacementProxy.password}`
+ );
return replacementProxy;
} catch (e) {
logger.eclog(4, `tor domain isolator error: ${e.message}`);
+ return null;
}
}, 0);
};
@@ -164,7 +184,7 @@ const kMODULE_CID = Components.ID("e33fd6d4-270f-475f-a96f-ff3140279f68");
// DomainIsolator object.
function DomainIsolator() {
- this.wrappedJSObject = this;
+ this.wrappedJSObject = this;
}
// Firefox component requirements
@@ -173,7 +193,7 @@ DomainIsolator.prototype = {
classDescription: kMODULE_NAME,
classID: kMODULE_CID,
contractID: kMODULE_CONTRACTID,
- observe: function (subject, topic, data) {
+ observe(subject, topic, data) {
if (topic === "profile-after-change") {
logger.eclog(3, "domain isolator: set up isolating circuits by domain");
@@ -183,23 +203,23 @@ DomainIsolator.prototype = {
tor.isolateCircuitsByDomain();
}
},
- newCircuitForDomain: function (domain) {
+ newCircuitForDomain(domain) {
tor.newCircuitForDomain(domain);
},
- enableIsolation: function() {
+ enableIsolation() {
tor.isolationEnabled = true;
},
- disableIsolation: function() {
+ disableIsolation() {
tor.isolationEnabled = false;
},
- clearIsolation: function() {
+ clearIsolation() {
tor.clearIsolation();
},
- wrappedJSObject: null
+ wrappedJSObject: null,
};
// Assign factory to global object.
diff --git a/components/dragDropFilter.js b/components/dragDropFilter.js
index 361424d1..4b76bd10 100644
--- a/components/dragDropFilter.js
+++ b/components/dragDropFilter.js
@@ -5,8 +5,9 @@
* access to URLs (a potential proxy bypass vector).
*************************************************************************/
-
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
@@ -21,8 +22,9 @@ const kMODULE_CID = Components.ID("f605ec27-d867-44b5-ad97-2a29276642c3");
const kInterfaces = [Ci.nsIObserver, Ci.nsIClassInfo];
function DragDropFilter() {
- this.logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+ this.logger = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
this.logger.log(3, "Component Load 0: New DragDropFilter.");
try {
@@ -32,8 +34,7 @@ function DragDropFilter() {
}
}
-DragDropFilter.prototype =
-{
+DragDropFilter.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver]),
// make this an nsIClassInfo object
@@ -43,23 +44,25 @@ DragDropFilter.prototype =
classID: kMODULE_CID,
// method of nsIClassInfo
- getInterfaces: function(count) {
+ getInterfaces(count) {
count.value = kInterfaces.length;
return kInterfaces;
},
// method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
+ getHelperForLanguage(count) {
+ return null;
+ },
// method of nsIObserver
- observe: function(subject, topic, data) {
- if (topic == "on-datatransfer-available") {
+ observe(subject, topic, data) {
+ if (topic === "on-datatransfer-available") {
this.logger.log(3, "The DataTransfer is available");
- return this.filterDataTransferURLs(subject);
+ this.filterDataTransferURLs(subject);
}
},
- filterDataTransferURLs: function(aDataTransfer) {
+ filterDataTransferURLs(aDataTransfer) {
var types = null;
var type = "";
var count = aDataTransfer.mozItemCount;
@@ -71,16 +74,18 @@ DragDropFilter.prototype =
for (var j = 0; j < len; ++j) {
type = types[j];
this.logger.log(3, "Type is: " + type);
- if (type == "text/x-moz-url" ||
- type == "text/x-moz-url-data" ||
- type == "text/uri-list" ||
- type == "application/x-moz-file-promise-url") {
+ if (
+ type == "text/x-moz-url" ||
+ type == "text/x-moz-url-data" ||
+ type == "text/uri-list" ||
+ type == "application/x-moz-file-promise-url"
+ ) {
aDataTransfer.clearData(type);
this.logger.log(3, "Removing " + type);
}
}
}
- }
+ },
};
// Assign factory to global object.
diff --git a/components/external-app-blocker.js b/components/external-app-blocker.js
index 2fa80d9d..6a53fc01 100644
--- a/components/external-app-blocker.js
+++ b/components/external-app-blocker.js
@@ -12,15 +12,21 @@
* handle an URL (e.g., when the user clicks on a mailto: URL).
*************************************************************************/
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { PromptUtils } = ChromeUtils.import("resource://gre/modules/SharedPromptUtils.jsm");
+const { PromptUtils } = ChromeUtils.import(
+ "resource://gre/modules/SharedPromptUtils.jsm"
+);
XPCOMUtils.defineLazyModuleGetters(this, {
ComponentUtils: "resource://gre/modules/ComponentUtils.jsm",
});
-let { torbutton_get_property_string } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
+let { torbutton_get_property_string } = ChromeUtils.import(
+ "resource://torbutton/modules/utils.js"
+);
// Module specific constants
const kMODULE_NAME = "Torbutton External App Handler";
@@ -30,16 +36,19 @@ const kMODULE_CID = Components.ID("3da0269f-fc29-4e9e-a678-c3b1cafcf13f");
const kInterfaces = [Ci.nsIObserver, Ci.nsIClassInfo];
function ExternalAppBlocker() {
- this.logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+ this.logger = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
this.logger.log(3, "Component Load 0: New ExternalAppBlocker.");
}
-ExternalAppBlocker.prototype =
-{
+ExternalAppBlocker.prototype = {
_helperAppLauncher: undefined,
- QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver, Ci.nsIHelperAppWarningDialog]),
+ QueryInterface: ChromeUtils.generateQI([
+ Ci.nsIObserver,
+ Ci.nsIHelperAppWarningDialog,
+ ]),
// make this an nsIClassInfo object
flags: Ci.nsIClassInfo.DOM_OBJECT,
@@ -48,17 +57,18 @@ ExternalAppBlocker.prototype =
classID: kMODULE_CID,
// method of nsIClassInfo
- getInterfaces: function(count) {
+ getInterfaces(count) {
count.value = kInterfaces.length;
return kInterfaces;
},
// method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
+ getHelperForLanguage(count) {
+ return null;
+ },
// method of nsIHelperAppWarningDialog
- maybeShow: function(aLauncher, aWindowContext)
- {
+ maybeShow(aLauncher, aWindowContext) {
// Hold a reference to the object that called this component. This is
// important not just because we need to later invoke the
// continueRequest() or cancelRequest() callback on aLauncher, but also
@@ -80,7 +90,7 @@ ExternalAppBlocker.prototype =
* on chrome://global/content/commonDialog.xhtml as well as some of the code
* in resource://gre/modules/SharedPromptUtils.jsm.
*/
- _showPrompt: function(aWindowContext) {
+ _showPrompt(aWindowContext) {
let parentWin;
try {
parentWin = aWindowContext.getInterface(Ci.nsIDOMWindow);
@@ -91,20 +101,22 @@ ExternalAppBlocker.prototype =
let title = torbutton_get_property_string("torbutton.popup.external.title");
let app = torbutton_get_property_string("torbutton.popup.external.app");
let note = torbutton_get_property_string("torbutton.popup.external.note");
- let suggest = torbutton_get_property_string("torbutton.popup.external.suggest");
+ let suggest = torbutton_get_property_string(
+ "torbutton.popup.external.suggest"
+ );
let launch = torbutton_get_property_string("torbutton.popup.launch");
let cancel = torbutton_get_property_string("torbutton.popup.cancel");
let dontask = torbutton_get_property_string("torbutton.popup.dontask");
let args = {
- promptType: "confirmEx",
- title: title,
- text: app+note+suggest+" ",
- checkLabel: dontask,
- checked: false,
- ok: false,
- button0Label: launch,
- button1Label: cancel,
+ promptType: "confirmEx",
+ title,
+ text: app + note + suggest + " ",
+ checkLabel: dontask,
+ checked: false,
+ ok: false,
+ button0Label: launch,
+ button1Label: cancel,
defaultButtonNum: 1, // Cancel
buttonNumClicked: 1, // Cancel
enableDelay: true,
@@ -112,8 +124,13 @@ ExternalAppBlocker.prototype =
let propBag = PromptUtils.objectToPropBag(args);
let uri = "chrome://global/content/commonDialog.xhtml";
- let promptWin = Services.ww.openWindow(parentWin, uri, "_blank",
- "centerscreen,chrome,titlebar", propBag);
+ let promptWin = Services.ww.openWindow(
+ parentWin,
+ uri,
+ "_blank",
+ "centerscreen,chrome,titlebar",
+ propBag
+ );
promptWin.addEventListener("load", aEvent => {
promptWin.addEventListener("unload", aEvent => {
PromptUtils.propBagToObject(propBag, args);
@@ -122,16 +139,18 @@ ExternalAppBlocker.prototype =
// Save the checkbox value and tell the browser's external helper app
// module about the user's choice.
if (args.checked) {
- Services.prefs.setBoolPref("extensions.torbutton.launch_warning",
- false);
+ Services.prefs.setBoolPref(
+ "extensions.torbutton.launch_warning",
+ false
+ );
}
this._helperAppLauncher.continueRequest();
} else {
this._helperAppLauncher.cancelRequest(Cr.NS_BINDING_ABORTED);
}
- }, false);
- }, false);
+ });
+ });
},
};
diff --git a/components/startup-observer.js b/components/startup-observer.js
index 164c9219..77df172a 100644
--- a/components/startup-observer.js
+++ b/components/startup-observer.js
@@ -13,7 +13,9 @@
*************************************************************************/
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
XPCOMUtils.defineLazyModuleGetters(this, {
ComponentUtils: "resource://gre/modules/ComponentUtils.jsm",
@@ -47,155 +49,163 @@ function cleanupCookies() {
}
function StartupObserver() {
- this.logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
- this._prefs = Services.prefs;
- this.logger.log(3, "Startup Observer created");
-
- var env = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
- var prefName = "browser.startup.homepage";
- if (env.exists("TOR_DEFAULT_HOMEPAGE")) {
- // if the user has set this value in a previous installation, don't override it
- if (!this._prefs.prefHasUserValue(prefName)) {
- this._prefs.setCharPref(prefName, env.get("TOR_DEFAULT_HOMEPAGE"));
- }
- }
-
- try {
- var test = this._prefs.getCharPref("torbrowser.version");
- this.is_tbb = true;
- this.logger.log(3, "This is a Tor Browser's XPCOM");
- } catch(e) {
- this.logger.log(3, "This is not a Tor Browser's XPCOM");
- }
-
- try {
- // XXX: We're in a race with HTTPS-Everywhere to update our proxy settings
- // before the initial SSL-Observatory test... If we lose the race, Firefox
- // caches the old proxy settings for check.tp.o somehwere, and it never loads :(
- this.setProxySettings();
- } catch(e) {
- this.logger.log(4, "Early proxy change failed. Will try again at profile load. Error: "+e);
+ this.logger = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ this._prefs = Services.prefs;
+ this.logger.log(3, "Startup Observer created");
+
+ var env = Cc["@mozilla.org/process/environment;1"].getService(
+ Ci.nsIEnvironment
+ );
+ var prefName = "browser.startup.homepage";
+ if (env.exists("TOR_DEFAULT_HOMEPAGE")) {
+ // if the user has set this value in a previous installation, don't override it
+ if (!this._prefs.prefHasUserValue(prefName)) {
+ this._prefs.setCharPref(prefName, env.get("TOR_DEFAULT_HOMEPAGE"));
}
+ }
- cleanupCookies();
-
- // Using all possible locales so that we do not have to change this list every time we support
- // a new one.
- const allLocales = [
- "en-US", "ach", "af", "an", "ar", "ast", "az", "be", "bg", "bn", "br", "bs", "ca", "cak",
- "crh", "cs", "cy", "da", "de", "dsb", "el", "en-CA", "en-GB", "eo", "es-AR", "es-CL",
- "es-ES", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy-NL", "ga-IE", "gd", "gl", "gn",
- "gu-IN", "he", "hi-IN", "hr", "hsb", "hu", "hy-AM", "ia", "id", "is", "it", "ja",
- "ja-JP-mac", "ka", "kab", "kk", "km", "kn", "ko", "lij", "lo", "lt", "ltg", "lv", "mk", "mr",
- "ms", "my", "nb-NO", "ne-NP", "nl", "nn-NO", "oc", "pa-IN", "pl", "pt-BR", "pt-PT", "rm",
- "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sv-SE", "ta", "te", "th", "tl", "tr",
- "trs", "uk", "ur", "uz", "vi", "wo", "xh", "zh-CN", "zh-TW"
- ];
- let torSource = new FileSource(
- "torbutton",
- allLocales,
- "resource://torbutton/locale/{locale}/",
- true, // skip this FileSource locales when computing Services.locale.availableLocales
+ this.is_tbb = true;
+
+ try {
+ // XXX: We're in a race with HTTPS-Everywhere to update our proxy settings
+ // before the initial SSL-Observatory test... If we lose the race, Firefox
+ // caches the old proxy settings for check.tp.o somehwere, and it never loads :(
+ this.setProxySettings();
+ } catch (e) {
+ this.logger.log(
+ 4,
+ "Early proxy change failed. Will try again at profile load. Error: " + e
);
- if (L10nRegistry.registerSources) {
- L10nRegistry.registerSources([torSource]);
- } else {
- L10nRegistry.registerSource(torSource);
- }
+ }
+
+ cleanupCookies();
+
+ // Using all possible locales so that we do not have to change this list every time we support
+ // a new one.
+ /* eslint-disable */
+ const allLocales = [
+ "en-US", "ach", "af", "an", "ar", "ast", "az", "be", "bg", "bn", "br", "bs", "ca", "cak",
+ "crh", "cs", "cy", "da", "de", "dsb", "el", "en-CA", "en-GB", "eo", "es-AR", "es-CL",
+ "es-ES", "es-MX", "et", "eu", "fa", "ff", "fi", "fr", "fy-NL", "ga-IE", "gd", "gl", "gn",
+ "gu-IN", "he", "hi-IN", "hr", "hsb", "hu", "hy-AM", "ia", "id", "is", "it", "ja",
+ "ja-JP-mac", "ka", "kab", "kk", "km", "kn", "ko", "lij", "lo", "lt", "ltg", "lv", "mk", "mr",
+ "ms", "my", "nb-NO", "ne-NP", "nl", "nn-NO", "oc", "pa-IN", "pl", "pt-BR", "pt-PT", "rm",
+ "ro", "ru", "si", "sk", "sl", "son", "sq", "sr", "sv-SE", "ta", "te", "th", "tl", "tr",
+ "trs", "uk", "ur", "uz", "vi", "wo", "xh", "zh-CN", "zh-TW"
+ ];
+ /* eslint-enable */
+ let torSource = new FileSource(
+ "torbutton",
+ allLocales,
+ "resource://torbutton/locale/{locale}/",
+ true // skip this FileSource locales when computing Services.locale.availableLocales
+ );
+ if (L10nRegistry.registerSources) {
+ L10nRegistry.registerSources([torSource]);
+ } else {
+ L10nRegistry.registerSource(torSource);
+ }
}
StartupObserver.prototype = {
- // Bug 6803: We need to get the env vars early due to
- // some weird proxy caching code that showed up in FF15.
- // Otherwise, homepage domain loads fail forever.
- setProxySettings: function() {
- if (!this.is_tbb)
- return;
-
- // Bug 1506: Still want to get these env vars
- let environ = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
- if (environ.exists("TOR_TRANSPROXY")) {
- this.logger.log(3, "Resetting Tor settings to transproxy");
- this._prefs.setBoolPref("network.proxy.socks_remote_dns", false);
- this._prefs.setIntPref("network.proxy.type", 0);
- this._prefs.setIntPref("network.proxy.socks_port", 0);
- this._prefs.setCharPref("network.proxy.socks", "");
- } else {
- // Try to retrieve SOCKS proxy settings from Tor Launcher.
- let socksPortInfo;
- try {
- let tlps = Cc["@torproject.org/torlauncher-protocol-service;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
- socksPortInfo = tlps.TorGetSOCKSPortInfo();
- } catch(e) {
- this.logger.log(3, "tor launcher failed " + e);
- }
+ // Bug 6803: We need to get the env vars early due to
+ // some weird proxy caching code that showed up in FF15.
+ // Otherwise, homepage domain loads fail forever.
+ setProxySettings() {
+ if (!this.is_tbb) {
+ return;
+ }
- // If Tor Launcher is not available, check environment variables.
- if (!socksPortInfo) {
- socksPortInfo = { ipcFile: undefined, host: undefined, port: 0 };
+ // Bug 1506: Still want to get these env vars
+ let environ = Cc["@mozilla.org/process/environment;1"].getService(
+ Ci.nsIEnvironment
+ );
+ if (environ.exists("TOR_TRANSPROXY")) {
+ this.logger.log(3, "Resetting Tor settings to transproxy");
+ this._prefs.setBoolPref("network.proxy.socks_remote_dns", false);
+ this._prefs.setIntPref("network.proxy.type", 0);
+ this._prefs.setIntPref("network.proxy.socks_port", 0);
+ this._prefs.setCharPref("network.proxy.socks", "");
+ } else {
+ // Try to retrieve SOCKS proxy settings from Tor Launcher.
+ let socksPortInfo;
+ try {
+ let tlps = Cc[
+ "@torproject.org/torlauncher-protocol-service;1"
+ ].getService(Ci.nsISupports).wrappedJSObject;
+ socksPortInfo = tlps.TorGetSOCKSPortInfo();
+ } catch (e) {
+ this.logger.log(3, "tor launcher failed " + e);
+ }
- let isWindows = Services.appinfo.OS === "WINNT";
- if (!isWindows && environ.exists("TOR_SOCKS_IPC_PATH")) {
- socksPortInfo.ipcFile = new FileUtils.File(
- environ.get("TOR_SOCKS_IPC_PATH"));
- }
- else
- {
- if (environ.exists("TOR_SOCKS_HOST"))
- socksPortInfo.host = environ.get("TOR_SOCKS_HOST");
- if (environ.exists("TOR_SOCKS_PORT"))
- socksPortInfo.port = parseInt(environ.get("TOR_SOCKS_PORT"));
- }
- }
+ // If Tor Launcher is not available, check environment variables.
+ if (!socksPortInfo) {
+ socksPortInfo = { ipcFile: undefined, host: undefined, port: 0 };
- // Adjust network.proxy prefs.
- if (socksPortInfo.ipcFile) {
- let fph = Services.io.getProtocolHandler("file")
- .QueryInterface(Ci.nsIFileProtocolHandler);
- let fileURI = fph.newFileURI(socksPortInfo.ipcFile);
- this.logger.log(3, "Reset socks to "+fileURI.spec);
- this._prefs.setCharPref("network.proxy.socks", fileURI.spec);
- this._prefs.setIntPref("network.proxy.socks_port", 0);
+ let isWindows = Services.appinfo.OS === "WINNT";
+ if (!isWindows && environ.exists("TOR_SOCKS_IPC_PATH")) {
+ socksPortInfo.ipcFile = new FileUtils.File(
+ environ.get("TOR_SOCKS_IPC_PATH")
+ );
} else {
- if (socksPortInfo.host) {
- this._prefs.setCharPref("network.proxy.socks", socksPortInfo.host);
- this.logger.log(3, "Reset socks host to "+socksPortInfo.host);
+ if (environ.exists("TOR_SOCKS_HOST")) {
+ socksPortInfo.host = environ.get("TOR_SOCKS_HOST");
}
- if (socksPortInfo.port) {
- this._prefs.setIntPref("network.proxy.socks_port",
- socksPortInfo.port);
- this.logger.log(3, "Reset socks port to "+socksPortInfo.port);
+ if (environ.exists("TOR_SOCKS_PORT")) {
+ socksPortInfo.port = parseInt(environ.get("TOR_SOCKS_PORT"));
}
}
+ }
- if (socksPortInfo.ipcFile || socksPortInfo.host || socksPortInfo.port) {
- this._prefs.setBoolPref("network.proxy.socks_remote_dns", true);
- this._prefs.setIntPref("network.proxy.type", 1);
+ // Adjust network.proxy prefs.
+ if (socksPortInfo.ipcFile) {
+ let fph = Services.io
+ .getProtocolHandler("file")
+ .QueryInterface(Ci.nsIFileProtocolHandler);
+ let fileURI = fph.newFileURI(socksPortInfo.ipcFile);
+ this.logger.log(3, "Reset socks to " + fileURI.spec);
+ this._prefs.setCharPref("network.proxy.socks", fileURI.spec);
+ this._prefs.setIntPref("network.proxy.socks_port", 0);
+ } else {
+ if (socksPortInfo.host) {
+ this._prefs.setCharPref("network.proxy.socks", socksPortInfo.host);
+ this.logger.log(3, "Reset socks host to " + socksPortInfo.host);
+ }
+ if (socksPortInfo.port) {
+ this._prefs.setIntPref(
+ "network.proxy.socks_port",
+ socksPortInfo.port
+ );
+ this.logger.log(3, "Reset socks port to " + socksPortInfo.port);
}
}
- // Force prefs to be synced to disk
- Services.prefs.savePrefFile(null);
+ if (socksPortInfo.ipcFile || socksPortInfo.host || socksPortInfo.port) {
+ this._prefs.setBoolPref("network.proxy.socks_remote_dns", true);
+ this._prefs.setIntPref("network.proxy.type", 1);
+ }
+ }
+
+ // Force prefs to be synced to disk
+ Services.prefs.savePrefFile(null);
- this.logger.log(3, "Synced network settings to environment.");
- },
+ this.logger.log(3, "Synced network settings to environment.");
+ },
- observe: function(subject, topic, data) {
- if(topic == "profile-after-change") {
- // Bug 1506 P1: We listen to these prefs as signals for startup,
- // but only for hackish reasons.
- this._prefs.setBoolPref("extensions.torbutton.startup", true);
+ observe(subject, topic, data) {
+ if (topic == "profile-after-change") {
+ // Bug 1506 P1: We listen to these prefs as signals for startup,
+ // but only for hackish reasons.
+ this._prefs.setBoolPref("extensions.torbutton.startup", true);
- this.setProxySettings();
- }
+ this.setProxySettings();
+ }
- // In all cases, force prefs to be synced to disk
- Services.prefs.savePrefFile(null);
- },
+ // In all cases, force prefs to be synced to disk
+ Services.prefs.savePrefFile(null);
+ },
QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]),
@@ -205,7 +215,7 @@ StartupObserver.prototype = {
contractID: kMODULE_CONTRACTID,
// Hack to get us registered early to observe recovery
- _xpcom_categories: [{category:"profile-after-change"}],
+ _xpcom_categories: [{ category: "profile-after-change" }],
};
// Assign factory to global object.
diff --git a/components/torCheckService.js b/components/torCheckService.js
index 07b1aa99..41d716ff 100644
--- a/components/torCheckService.js
+++ b/components/torCheckService.js
@@ -3,12 +3,14 @@
* See LICENSE for licensing information.
*
* vim: set sw=2 sts=2 ts=8 et syntax=javascript:
- *
+ *
* Tor check service
*************************************************************************/
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
XPCOMUtils.defineLazyModuleGetters(this, {
ComponentUtils: "resource://gre/modules/ComponentUtils.jsm",
@@ -20,16 +22,16 @@ const kMODULE_CONTRACTID = "@torproject.org/torbutton-torCheckService;1";
const kMODULE_CID = Components.ID("5d57312b-5d8c-4169-b4af-e80d6a28a72e");
function TBTorCheckService() {
- this._logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+ this._logger = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
this._logger.log(3, "Torbutton Tor Check Service initialized");
this._statusOfTorCheck = this.kCheckNotInitiated;
this.wrappedJSObject = this;
}
-TBTorCheckService.prototype =
-{
+TBTorCheckService.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]),
kCheckNotInitiated: 0, // Possible values for statusOfTorCheck.
@@ -49,87 +51,84 @@ TBTorCheckService.prototype =
contractID: kMODULE_CONTRACTID,
// method of nsIClassInfo
- getInterfaces: function(count) {
+ getInterfaces(count) {
var interfaceList = [Ci.nsIClassInfo];
count.value = interfaceList.length;
return interfaceList;
},
// method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
+ getHelperForLanguage(count) {
+ return null;
+ },
// Public methods.
- get statusOfTorCheck()
- {
+ get statusOfTorCheck() {
return this._statusOfTorCheck;
},
- set statusOfTorCheck(aStatus)
- {
+ set statusOfTorCheck(aStatus) {
this._statusOfTorCheck = aStatus;
},
- createCheckRequest: function(aAsync)
- {
- Cu.importGlobalProperties(["XMLHttpRequest"]);
+ createCheckRequest(aAsync) {
let req = new XMLHttpRequest();
let url = Services.prefs.getCharPref("extensions.torbutton.test_url");
req.open("GET", url, aAsync);
req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE;
req.overrideMimeType("text/xml");
- req.timeout = 120000; // Wait at most two minutes for a response.
+ req.timeout = 120000; // Wait at most two minutes for a response.
return req;
},
- parseCheckResponse: function(aReq)
- {
+ parseCheckResponse(aReq) {
let ret = 0;
- if(aReq.status == 200) {
- if(!aReq.responseXML) {
- this._logger.log(5, "Check failed! Not text/xml!");
- ret = 1;
- } else {
- let result = aReq.responseXML.getElementById('TorCheckResult');
-
- if(result===null) {
- this._logger.log(5, "Test failed! No TorCheckResult element");
- ret = 2;
- } else if(typeof(result.target) == 'undefined'
- || result.target === null) {
- this._logger.log(5, "Test failed! No target");
- ret = 3;
- } else if(result.target === "success") {
- this._logger.log(3, "Test Successful");
- ret = 4;
- } else if(result.target === "failure") {
- this._logger.log(5, "Tor test failed!");
- ret = 5;
- } else if(result.target === "unknown") {
- this._logger.log(5, "Tor test failed. TorDNSEL Failure?");
- ret = 6;
- } else {
- this._logger.log(5, "Tor test failed. Strange target.");
- ret = 7;
- }
- }
+ if (aReq.status == 200) {
+ if (!aReq.responseXML) {
+ this._logger.log(5, "Check failed! Not text/xml!");
+ ret = 1;
} else {
- if (0 == aReq.status) {
- try {
- var req = aReq.channel.QueryInterface(Ci.nsIRequest);
- if (req.status == Cr.NS_ERROR_PROXY_CONNECTION_REFUSED)
- {
- this._logger.log(5, "Tor test failed. Proxy connection refused");
- ret = 8;
- }
- } catch (e) {}
+ let result = aReq.responseXML.getElementById("TorCheckResult");
+
+ if (result === null) {
+ this._logger.log(5, "Test failed! No TorCheckResult element");
+ ret = 2;
+ } else if (
+ typeof result.target == "undefined" ||
+ result.target === null
+ ) {
+ this._logger.log(5, "Test failed! No target");
+ ret = 3;
+ } else if (result.target === "success") {
+ this._logger.log(3, "Test Successful");
+ ret = 4;
+ } else if (result.target === "failure") {
+ this._logger.log(5, "Tor test failed!");
+ ret = 5;
+ } else if (result.target === "unknown") {
+ this._logger.log(5, "Tor test failed. TorDNSEL Failure?");
+ ret = 6;
+ } else {
+ this._logger.log(5, "Tor test failed. Strange target.");
+ ret = 7;
}
+ }
+ } else {
+ if (0 == aReq.status) {
+ try {
+ var req = aReq.channel.QueryInterface(Ci.nsIRequest);
+ if (req.status == Cr.NS_ERROR_PROXY_CONNECTION_REFUSED) {
+ this._logger.log(5, "Tor test failed. Proxy connection refused");
+ ret = 8;
+ }
+ } catch (e) {}
+ }
- if (ret == 0)
- {
- this._logger.log(5, "Tor test failed. HTTP Error: "+aReq.status);
- ret = -aReq.status;
- }
+ if (ret == 0) {
+ this._logger.log(5, "Tor test failed. HTTP Error: " + aReq.status);
+ ret = -aReq.status;
}
+ }
return ret;
},
diff --git a/components/torbutton-logger.js b/components/torbutton-logger.js
index d80d13c4..2fdcd7e6 100644
--- a/components/torbutton-logger.js
+++ b/components/torbutton-logger.js
@@ -14,31 +14,34 @@ const kMODULE_CONTRACTID = "@torproject.org/torbutton-logger;1";
const kMODULE_CID = Components.ID("f36d72c9-9718-4134-b550-e109638331d7");
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
XPCOMUtils.defineLazyModuleGetters(this, {
ComponentUtils: "resource://gre/modules/ComponentUtils.jsm",
});
function TorbuttonLogger() {
- // Register observer
- Services.prefs.addObserver("extensions.torbutton", this);
-
- this.loglevel = Services.prefs.getIntPref("extensions.torbutton.loglevel");
- this.logmethod = Services.prefs.getIntPref("extensions.torbutton.logmethod");
-
- try {
- var logMngr = Cc["@mozmonkey.com/debuglogger/manager;1"]
- .getService(Ci.nsIDebugLoggerManager);
- this._debuglog = logMngr.registerLogger("torbutton");
- } catch (exErr) {
- this._debuglog = false;
- }
- this._console = Services.console;
+ // Register observer
+ Services.prefs.addObserver("extensions.torbutton", this);
+
+ this.loglevel = Services.prefs.getIntPref("extensions.torbutton.loglevel");
+ this.logmethod = Services.prefs.getIntPref("extensions.torbutton.logmethod");
+
+ try {
+ var logMngr = Cc["@mozmonkey.com/debuglogger/manager;1"].getService(
+ Ci.nsIDebugLoggerManager
+ );
+ this._debuglog = logMngr.registerLogger("torbutton");
+ } catch (exErr) {
+ this._debuglog = false;
+ }
+ this._console = Services.console;
- // This JSObject is exported directly to chrome
- this.wrappedJSObject = this;
- this.log(3, "Torbutton debug output ready");
+ // This JSObject is exported directly to chrome
+ this.wrappedJSObject = this;
+ this.log(3, "Torbutton debug output ready");
}
/**
@@ -49,18 +52,16 @@ function TorbuttonLogger() {
const nsIClassInfo = Ci.nsIClassInfo;
-const logString = { 1:"VERB", 2:"DBUG", 3: "INFO", 4:"NOTE", 5:"WARN" };
+const logString = { 1: "VERB", 2: "DBUG", 3: "INFO", 4: "NOTE", 5: "WARN" };
-function padInt(i)
-{
- return (i < 10) ? '0' + i : i;
+function padInt(i) {
+ return i < 10 ? "0" + i : i;
}
-TorbuttonLogger.prototype =
-{
+TorbuttonLogger.prototype = {
QueryInterface: ChromeUtils.generateQI([Ci.nsIClassInfo]),
- wrappedJSObject: null, // Initialized by constructor
+ wrappedJSObject: null, // Initialized by constructor
// make this an nsIClassInfo object
flags: nsIClassInfo.DOM_OBJECT,
@@ -71,62 +72,78 @@ TorbuttonLogger.prototype =
contractID: kMODULE_CONTRACTID,
// method of nsIClassInfo
- getInterfaces: function(count) {
+ getInterfaces(count) {
var interfaceList = [nsIClassInfo];
count.value = interfaceList.length;
return interfaceList;
},
// method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
+ getHelperForLanguage(count) {
+ return null;
+ },
- formatLog: function(str, level) {
- var d = new Date();
- var now = padInt(d.getUTCMonth()+1)+"-"+padInt(d.getUTCDate())+" "+padInt(d.getUTCHours())+":"+padInt(d.getUTCMinutes())+":"+padInt(d.getUTCSeconds());
- return "["+now+"] Torbutton "+logString[level]+": "+str;
+ formatLog(str, level) {
+ var d = new Date();
+ var now =
+ padInt(d.getUTCMonth() + 1) +
+ "-" +
+ padInt(d.getUTCDate()) +
+ " " +
+ padInt(d.getUTCHours()) +
+ ":" +
+ padInt(d.getUTCMinutes()) +
+ ":" +
+ padInt(d.getUTCSeconds());
+ return "[" + now + "] Torbutton " + logString[level] + ": " + str;
},
// error console log
- eclog: function(level, str) {
- switch(this.logmethod) {
- case 0: // stderr
- if(this.loglevel <= level)
- dump(this.formatLog(str, level)+"\n");
- break;
- default: // errorconsole
- if(this.loglevel <= level)
- this._console.logStringMessage(this.formatLog(str,level));
- break;
- }
+ eclog(level, str) {
+ switch (this.logmethod) {
+ case 0: // stderr
+ if (this.loglevel <= level) {
+ dump(this.formatLog(str, level) + "\n");
+ }
+ break;
+ default:
+ // errorconsole
+ if (this.loglevel <= level) {
+ this._console.logStringMessage(this.formatLog(str, level));
+ }
+ break;
+ }
},
- safe_log: function(level, str, scrub) {
- if (this.loglevel < 4) {
- this.eclog(level, str+scrub);
- } else {
- this.eclog(level, str+" [scrubbed]");
- }
+ safe_log(level, str, scrub) {
+ if (this.loglevel < 4) {
+ this.eclog(level, str + scrub);
+ } else {
+ this.eclog(level, str + " [scrubbed]");
+ }
},
- log: function(level, str) {
- switch(this.logmethod) {
- case 2: // debuglogger
- if(this._debuglog) {
- this._debuglog.log((6-level), this.formatLog(str,level));
- break;
- }
- // fallthrough
- case 0: // stderr
- if(this.loglevel <= level)
- dump(this.formatLog(str,level)+"\n");
- break;
- default:
- dump("Bad log method: "+this.logmethod);
- case 1: // errorconsole
- if(this.loglevel <= level)
- this._console.logStringMessage(this.formatLog(str,level));
- break;
- }
+ log(level, str) {
+ switch (this.logmethod) {
+ case 2: // debuglogger
+ if (this._debuglog) {
+ this._debuglog.log(6 - level, this.formatLog(str, level));
+ break;
+ }
+ // fallthrough
+ case 0: // stderr
+ if (this.loglevel <= level) {
+ dump(this.formatLog(str, level) + "\n");
+ }
+ break;
+ case 1: // errorconsole
+ if (this.loglevel <= level) {
+ this._console.logStringMessage(this.formatLog(str, level));
+ }
+ break;
+ default:
+ dump("Bad log method: " + this.logmethod);
+ }
},
// Pref observer interface implementation
@@ -134,29 +151,33 @@ TorbuttonLogger.prototype =
// topic: what event occurred
// subject: what nsIPrefBranch we're observing
// data: which pref has been changed (relative to subject)
- observe: function(subject, topic, data)
- {
- if (topic != "nsPref:changed") return;
- switch (data) {
- case "extensions.torbutton.logmethod":
- this.logmethod = Services.prefs.getIntPref("extensions.torbutton.logmethod");
- if (this.logmethod === 0) {
- Services.prefs.setBoolPref("browser.dom.window.dump.enabled",
- true);
- } else if (Services.prefs.
- getIntPref("extensions.torlauncher.logmethod", 3) !== 0) {
- // If Tor Launcher is not available or its log method is not 0
- // then let's reset the dump pref.
- Services.prefs.setBoolPref("browser.dom.window.dump.enabled",
- false);
- }
- break;
- case "extensions.torbutton.loglevel":
- this.loglevel = Services.prefs.getIntPref("extensions.torbutton.loglevel");
- break;
- }
- }
-}
+ observe(subject, topic, data) {
+ if (topic != "nsPref:changed") {
+ return;
+ }
+ switch (data) {
+ case "extensions.torbutton.logmethod":
+ this.logmethod = Services.prefs.getIntPref(
+ "extensions.torbutton.logmethod"
+ );
+ if (this.logmethod === 0) {
+ Services.prefs.setBoolPref("browser.dom.window.dump.enabled", true);
+ } else if (
+ Services.prefs.getIntPref("extensions.torlauncher.logmethod", 3) !== 0
+ ) {
+ // If Tor Launcher is not available or its log method is not 0
+ // then let's reset the dump pref.
+ Services.prefs.setBoolPref("browser.dom.window.dump.enabled", false);
+ }
+ break;
+ case "extensions.torbutton.loglevel":
+ this.loglevel = Services.prefs.getIntPref(
+ "extensions.torbutton.loglevel"
+ );
+ break;
+ }
+ },
+};
// Assign factory to global object.
const NSGetFactory = XPCOMUtils.generateNSGetFactory
diff --git a/modules/tor-control-port.js b/modules/tor-control-port.js
index 51ac8ac0..dc59c8da 100644
--- a/modules/tor-control-port.js
+++ b/modules/tor-control-port.js
@@ -20,27 +20,24 @@
/* jshint esnext: true */
/* jshint -W097 */
-/* global Components, console, Services */
+/* global console */
"use strict";
-// ### Mozilla Abbreviations
-let { Constructor: CC } = Components;
-
// ### Import Mozilla Services
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { TorProtocolService, TorProcessStatus } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
+ "resource:///modules/TorProtocolService.jsm"
);
// tor-launcher observer topics
const TorTopics = Object.freeze({
- ProcessIsReady: "TorProcessIsReady",
+ ProcessIsReady: "TorProcessIsReady",
});
// __log__.
// Logging function
-let logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
+let logger = Cc["@torproject.org/torbutton-logger;1"].getService(Ci.nsISupports)
+ .wrappedJSObject;
let log = x => logger.eclog(3, x.trimRight().replace(/\r\n/g, "\n"));
// ### announce this file
@@ -48,19 +45,26 @@ log("Loading tor-control-port.js\n");
class AsyncSocket {
constructor(ipcFile, host, port) {
- let sts = Cc["@mozilla.org/network/socket-transport-service;1"].getService(Ci.nsISocketTransportService);
+ let sts = Cc["@mozilla.org/network/socket-transport-service;1"].getService(
+ Ci.nsISocketTransportService
+ );
const OPEN_UNBUFFERED = Ci.nsITransport.OPEN_UNBUFFERED;
- let socketTransport = ipcFile ?
- sts.createUnixDomainTransport(ipcFile) :
- sts.createTransport([], host, port, null, null);
-
+ let socketTransport = ipcFile
+ ? sts.createUnixDomainTransport(ipcFile)
+ : sts.createTransport([], host, port, null, null);
- this.outputStream = socketTransport.openOutputStream(OPEN_UNBUFFERED, 1, 1).QueryInterface(Ci.nsIAsyncOutputStream);
+ this.outputStream = socketTransport
+ .openOutputStream(OPEN_UNBUFFERED, 1, 1)
+ .QueryInterface(Ci.nsIAsyncOutputStream);
this.outputQueue = [];
- this.inputStream = socketTransport.openInputStream(OPEN_UNBUFFERED, 1, 1).QueryInterface(Ci.nsIAsyncInputStream);
- this.scriptableInputStream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
+ this.inputStream = socketTransport
+ .openInputStream(OPEN_UNBUFFERED, 1, 1)
+ .QueryInterface(Ci.nsIAsyncInputStream);
+ this.scriptableInputStream = Cc[
+ "@mozilla.org/scriptableinputstream;1"
+ ].createInstance(Ci.nsIScriptableInputStream);
this.scriptableInputStream.init(this.inputStream);
this.inputQueue = [];
}
@@ -68,13 +72,15 @@ class AsyncSocket {
// asynchronously write string to underlying socket and return number of bytes written
async write(str) {
return new Promise((resolve, reject) => {
-
// asyncWait next write request
const tryAsyncWait = () => {
- if (this.outputQueue.length > 0) {
+ if (this.outputQueue.length) {
this.outputStream.asyncWait(
this.outputQueue.at(0), // next request
- 0, 0, Services.tm.currentThread);
+ 0,
+ 0,
+ Services.tm.currentThread
+ );
}
};
@@ -98,7 +104,7 @@ class AsyncSocket {
// reject promise on error
reject(err);
}
- }
+ },
});
// length 1 imples that there is no in-flight asyncWait, so we may immediately
@@ -112,20 +118,24 @@ class AsyncSocket {
// asynchronously read string from underlying socket and return it
async read() {
return new Promise((resolve, reject) => {
-
const tryAsyncWait = () => {
- if (this.inputQueue.length > 0) {
+ if (this.inputQueue.length) {
this.inputStream.asyncWait(
- this.inputQueue.at(0), // next input request
- 0, 0, Services.tm.currentThread);
+ this.inputQueue.at(0), // next input request
+ 0,
+ 0,
+ Services.tm.currentThread
+ );
}
};
this.inputQueue.push({
- onInputStreamReady: (stream) => {
+ onInputStreamReady: stream => {
try {
// read our string from input stream
- let str = this.scriptableInputStream.read(this.scriptableInputStream.available());
+ let str = this.scriptableInputStream.read(
+ this.scriptableInputStream.available()
+ );
// remove this callback object from queue now that we have read
this.inputQueue.shift();
@@ -138,7 +148,7 @@ class AsyncSocket {
} catch (err) {
reject(err);
}
- }
+ },
});
// length 1 imples that there is no in-flight asyncWait, so we may immediately
@@ -153,7 +163,7 @@ class AsyncSocket {
this.outputStream.close();
this.inputStream.close();
}
-};
+}
class ControlSocket {
constructor(asyncSocket) {
@@ -165,9 +175,15 @@ class ControlSocket {
this.mainDispatcher = io.callbackDispatcher();
this.notificationDispatcher = io.callbackDispatcher();
// mainDispatcher pushes only async notifications (650) to notificationDispatcher
- this.mainDispatcher.addCallback(/^650/, this._handleNotification.bind(this));
+ this.mainDispatcher.addCallback(
+ /^650/,
+ this._handleNotification.bind(this)
+ );
// callback for handling responses and errors
- this.mainDispatcher.addCallback(/^[245]\d\d/, this._handleCommandReply.bind(this) );
+ this.mainDispatcher.addCallback(
+ /^[245]\d\d/,
+ this._handleCommandReply.bind(this)
+ );
this.commandQueue = [];
@@ -178,7 +194,7 @@ class ControlSocket {
// immediately returns next line in queue (pendingLines) if present
async _readLine() {
// keep reading from socket until we have a full line to return
- while(this.pendingLines.length == 0) {
+ while (!this.pendingLines.length) {
// read data from our socket and spit on newline tokens
this.pendingData += await this.socket.read();
let lines = this.pendingData.split("\r\n");
@@ -189,7 +205,6 @@ class ControlSocket {
// copy remaining full lines to our pendingLines list
this.pendingLines = this.pendingLines.concat(lines);
-
}
return this.pendingLines.shift();
}
@@ -216,23 +231,24 @@ class ControlSocket {
// and waiting for a terminating "." on its own line.
// (See control-spec section 3.9 and https://trac.torproject.org/16990#comment:28
// Ensure this is the first line of a new message
+ // eslint-disable-next-line no-lonely-if
if (message.length === 1 && line.match(/^\d\d\d\+.+?=$/)) {
handlingMultlineValue = true;
}
// look for end of message (note the space character at end of the regex)
- else if(line.match(/^\d\d\d /)) {
+ else if (line.match(/^\d\d\d /)) {
if (message.length == 1) {
endOfMessageFound = true;
} else {
- let firstReplyCode = message[0].substring(0,3);
- let lastReplyCode = line.substring(0,3);
+ let firstReplyCode = message[0].substring(0, 3);
+ let lastReplyCode = line.substring(0, 3);
if (firstReplyCode == lastReplyCode) {
endOfMessageFound = true;
}
}
}
}
- } while(!endOfMessageFound);
+ } while (!endOfMessageFound);
// join our lines back together to form one message
return message.join("\r\n");
@@ -240,14 +256,14 @@ class ControlSocket {
async _startMessagePump() {
try {
- while(true) {
+ while (true) {
let message = await this._readMessage();
log("controlPort >> " + message);
this.mainDispatcher.pushMessage(message);
}
} catch (err) {
this._isOpen = false;
- for(const cmd of this.commandQueue) {
+ for (const cmd of this.commandQueue) {
cmd.reject(err);
}
this.commandQueue = [];
@@ -269,9 +285,9 @@ class ControlSocket {
// in _startMessagePump (on stream error)
return new Promise((resolve, reject) => {
let command = {
- commandString: commandString,
- resolve: resolve,
- reject: reject,
+ commandString,
+ resolve,
+ reject,
};
this.commandQueue.push(command);
@@ -288,7 +304,7 @@ class ControlSocket {
} else if (message.match(/^[45]/)) {
let myErr = new Error(cmd.commandString + " -> " + message);
// Add Tor-specific information to the Error object.
- let idx = message.indexOf(' ');
+ let idx = message.indexOf(" ");
if (idx > 0) {
myErr.torStatusCode = message.substring(0, idx);
myErr.torMessage = message.substring(idx);
@@ -297,11 +313,15 @@ class ControlSocket {
}
cmd.reject(myErr);
} else {
- cmd.reject(new Error(`ControlSocket::_handleCommandReply received unexpected message:\n----\n${message}\n----`));
+ cmd.reject(
+ new Error(
+ `ControlSocket::_handleCommandReply received unexpected message:\n----\n${message}\n----`
+ )
+ );
}
// send next command if one is available
- if (this.commandQueue.length > 0) {
+ if (this.commandQueue.length) {
this._writeNextCommand();
}
}
@@ -322,7 +342,7 @@ class ControlSocket {
isOpen() {
return this._isOpen;
}
-};
+}
// ## io
// I/O utilities namespace
@@ -336,28 +356,33 @@ let io = {};
// Pass pushMessage to another function that needs a callback with a single string
// argument. Whenever dispatcher.pushMessage receives a string, the dispatcher will
// check for any regex matches and pass the string on to the corresponding callback(s).
-io.callbackDispatcher = function () {
+io.callbackDispatcher = function() {
let callbackPairs = [],
- removeCallback = function (aCallback) {
- callbackPairs = callbackPairs.filter(function ([regex, callback]) {
- return callback !== aCallback;
- });
- },
- addCallback = function (regex, callback) {
- if (callback) {
- callbackPairs.push([regex, callback]);
- }
- return function () { removeCallback(callback); };
- },
- pushMessage = function (message) {
- for (let [regex, callback] of callbackPairs) {
- if (message.match(regex)) {
- callback(message);
- }
- }
+ removeCallback = function(aCallback) {
+ callbackPairs = callbackPairs.filter(function([regex, callback]) {
+ return callback !== aCallback;
+ });
+ },
+ addCallback = function(regex, callback) {
+ if (callback) {
+ callbackPairs.push([regex, callback]);
+ }
+ return function() {
+ removeCallback(callback);
};
- return { pushMessage : pushMessage, removeCallback : removeCallback,
- addCallback : addCallback };
+ },
+ pushMessage = function(message) {
+ for (let [regex, callback] of callbackPairs) {
+ if (message.match(regex)) {
+ callback(message);
+ }
+ }
+ };
+ return {
+ pushMessage,
+ removeCallback,
+ addCallback,
+ };
};
// __io.controlSocket(ipcFile, host, port, password)__.
@@ -374,7 +399,7 @@ io.callbackDispatcher = function () {
// socket.removeNotificationCallback(callback);
// // Close the socket permanently
// socket.close();
-io.controlSocket = async function (ipcFile, host, port, password) {
+io.controlSocket = async function(ipcFile, host, port, password) {
let socket = new AsyncSocket(ipcFile, host, port);
let controlSocket = new ControlSocket(socket);
@@ -392,21 +417,23 @@ let utils = {};
// __utils.identity(x)__.
// Returns its argument unchanged.
-utils.identity = function (x) { return x; };
+utils.identity = function(x) {
+ return x;
+};
// __utils.isString(x)__.
// Returns true iff x is a string.
-utils.isString = function (x) {
- return typeof(x) === 'string' || x instanceof String;
+utils.isString = function(x) {
+ return typeof x === "string" || x instanceof String;
};
// __utils.capture(string, regex)__.
// Takes a string and returns an array of capture items, where regex must have a single
// capturing group and use the suffix /.../g to specify a global search.
-utils.capture = function (string, regex) {
+utils.capture = function(string, regex) {
let matches = [];
// Special trick to use string.replace for capturing multiple matches.
- string.replace(regex, function (a, captured) {
+ string.replace(regex, function(a, captured) {
matches.push(captured);
});
return matches;
@@ -415,15 +442,17 @@ utils.capture = function (string, regex) {
// __utils.extractor(regex)__.
// Returns a function that takes a string and returns an array of regex matches. The
// regex must use the suffix /.../g to specify a global search.
-utils.extractor = function (regex) {
- return function (text) {
+utils.extractor = function(regex) {
+ return function(text) {
return utils.capture(text, regex);
};
};
// __utils.splitLines(string)__.
// Splits a string into an array of strings, each corresponding to a line.
-utils.splitLines = function (string) { return string.split(/\r?\n/); };
+utils.splitLines = function(string) {
+ return string.split(/\r?\n/);
+};
// __utils.splitAtSpaces(string)__.
// Splits a string into chunks between spaces. Does not split at spaces
@@ -433,11 +462,14 @@ utils.splitAtSpaces = utils.extractor(/((\S*?"(.*?)")+\S*|\S+)/g);
// __utils.splitAtFirst(string, regex)__.
// Splits a string at the first instance of regex match. If no match is
// found, returns the whole string.
-utils.splitAtFirst = function (string, regex) {
+utils.splitAtFirst = function(string, regex) {
let match = string.match(regex);
- return match ? [ string.substring(0, match.index),
- string.substring(match.index + match[0].length) ]
- : string;
+ return match
+ ? [
+ string.substring(0, match.index),
+ string.substring(match.index + match[0].length),
+ ]
+ : string;
};
// __utils.splitAtEquals(string)__.
@@ -448,7 +480,7 @@ utils.splitAtEquals = utils.extractor(/(([^=]*?"(.*?)")+[^=]*|[^=]+)/g);
// __utils.mergeObjects(arrayOfObjects)__.
// Takes an array of objects like [{"a":"b"},{"c":"d"}] and merges to a single object.
// Pure function.
-utils.mergeObjects = function (arrayOfObjects) {
+utils.mergeObjects = function(arrayOfObjects) {
let result = {};
for (let obj of arrayOfObjects) {
for (let key in obj) {
@@ -468,10 +500,10 @@ utils.mergeObjects = function (arrayOfObjects) {
// ["streamID", "event", "circuitID", "IP"])
// // --> {"streamID" : "40", "event" : "FAILED", "circuitID" : "0",
// // "address" : "95.78.59.36:80", "REASON" : "CANT_ATTACH"}"
-utils.listMapData = function (parameterString, listNames) {
+utils.listMapData = function(parameterString, listNames) {
// Split out the space-delimited parameters.
let parameters = utils.splitAtSpaces(parameterString),
- dataMap = {};
+ dataMap = {};
// Assign listNames to the first n = listNames.length parameters.
for (let i = 0; i < listNames.length; ++i) {
dataMap[listNames[i]] = parameters[i];
@@ -506,13 +538,15 @@ let info = {};
// or single-line (with a `250-` or `250 ` prefix):
//
// 250-version=0.2.6.0-alpha-dev (git-b408125288ad6943)
-info.keyValueStringsFromMessage = utils.extractor(/^(250\+[\s\S]+?^\.|250[- ].+?)$/gmi);
+info.keyValueStringsFromMessage = utils.extractor(
+ /^(250\+[\s\S]+?^\.|250[- ].+?)$/gim
+);
// __info.applyPerLine(transformFunction)__.
// Returns a function that splits text into lines,
// and applies transformFunction to each line.
-info.applyPerLine = function (transformFunction) {
- return function (text) {
+info.applyPerLine = function(transformFunction) {
+ return function(text) {
return utils.splitLines(text.trim()).map(transformFunction);
};
};
@@ -521,23 +555,31 @@ info.applyPerLine = function (transformFunction) {
// Parses a router status entry as, described in
// https://gitweb.torproject.org/torspec.git/tree/dir-spec.txt
// (search for "router status entry")
-info.routerStatusParser = function (valueString) {
+info.routerStatusParser = function(valueString) {
let lines = utils.splitLines(valueString),
- objects = [];
+ objects = [];
for (let line of lines) {
// Drop first character and grab data following it.
let myData = line.substring(2),
- // Accumulate more maps with data, depending on the first character in the line.
- dataFun = {
- "r" : data => utils.listMapData(data, ["nickname", "identity", "digest",
- "publicationDate", "publicationTime",
- "IP", "ORPort", "DirPort"]),
- "a" : data => ({ "IPv6" : data }),
- "s" : data => ({ "statusFlags" : utils.splitAtSpaces(data) }),
- "v" : data => ({ "version" : data }),
- "w" : data => utils.listMapData(data, []),
- "p" : data => ({ "portList" : data.split(",") }),
- }[line.charAt(0)];
+ // Accumulate more maps with data, depending on the first character in the line.
+ dataFun = {
+ r: data =>
+ utils.listMapData(data, [
+ "nickname",
+ "identity",
+ "digest",
+ "publicationDate",
+ "publicationTime",
+ "IP",
+ "ORPort",
+ "DirPort",
+ ]),
+ a: data => ({ IPv6: data }),
+ s: data => ({ statusFlags: utils.splitAtSpaces(data) }),
+ v: data => ({ version: data }),
+ w: data => utils.listMapData(data, []),
+ p: data => ({ portList: data.split(",") }),
+ }[line.charAt(0)];
if (dataFun !== undefined) {
objects.push(dataFun(myData));
}
@@ -547,12 +589,12 @@ info.routerStatusParser = function (valueString) {
// __info.circuitStatusParser(line)__.
// Parse the output of a circuit status line.
-info.circuitStatusParser = function (line) {
- let data = utils.listMapData(line, ["id","status","circuit"]),
- circuit = data.circuit;
+info.circuitStatusParser = function(line) {
+ let data = utils.listMapData(line, ["id", "status", "circuit"]),
+ circuit = data.circuit;
// Parse out the individual circuit IDs and names.
if (circuit) {
- data.circuit = circuit.split(",").map(function (x) {
+ data.circuit = circuit.split(",").map(function(x) {
return x.split(/~|=/);
});
}
@@ -561,12 +603,15 @@ info.circuitStatusParser = function (line) {
// __info.streamStatusParser(line)__.
// Parse the output of a stream status line.
-info.streamStatusParser = function (text) {
- return utils.listMapData(text, ["StreamID", "StreamStatus",
- "CircuitID", "Target"]);
+info.streamStatusParser = function(text) {
+ return utils.listMapData(text, [
+ "StreamID",
+ "StreamStatus",
+ "CircuitID",
+ "Target",
+ ]);
};
-
// TODO: fix this parsing logic to handle bridgeLine correctly
// fingerprint/id is an optional parameter
// __info.bridgeParser(bridgeLine)__.
@@ -574,16 +619,26 @@ info.streamStatusParser = function (text) {
// a map containing the bridge's type, address, and ID.
info.bridgeParser = function(bridgeLine) {
let result = {},
- tokens = bridgeLine.split(/\s+/);
+ tokens = bridgeLine.split(/\s+/);
// First check if we have a "vanilla" bridge:
if (tokens[0].match(/^\d+\.\d+\.\d+\.\d+/)) {
result.type = "vanilla";
[result.address, result.ID] = tokens;
- // Several bridge types have a similar format:
+ // Several bridge types have a similar format:
} else {
result.type = tokens[0];
- if (["flashproxy", "fte", "meek", "meek_lite", "obfs3", "obfs4", "scramblesuit",
- "snowflake"].indexOf(result.type) >= 0) {
+ if (
+ [
+ "flashproxy",
+ "fte",
+ "meek",
+ "meek_lite",
+ "obfs3",
+ "obfs4",
+ "scramblesuit",
+ "snowflake",
+ ].includes(result.type)
+ ) {
[result.address, result.ID] = tokens.slice(1);
}
}
@@ -594,10 +649,10 @@ info.bridgeParser = function(bridgeLine) {
// A map of GETINFO and GETCONF keys to parsing function, which convert
// result strings to JavaScript data.
info.parsers = {
- "ns/id/" : info.routerStatusParser,
- "ip-to-country/" : utils.identity,
- "circuit-status" : info.applyPerLine(info.circuitStatusParser),
- "bridge" : info.bridgeParser,
+ "ns/id/": info.routerStatusParser,
+ "ip-to-country/": utils.identity,
+ "circuit-status": info.applyPerLine(info.circuitStatusParser),
+ bridge: info.bridgeParser,
// Currently unused parsers:
// "ns/name/" : info.routerStatusParser,
// "stream-status" : info.applyPerLine(info.streamStatusParser),
@@ -609,26 +664,31 @@ info.parsers = {
// Takes a key and determines the parser function that should be used to
// convert its corresponding valueString to JavaScript data.
info.getParser = function(key) {
- return info.parsers[key] ||
- info.parsers[key.substring(0, key.lastIndexOf("/") + 1)];
+ return (
+ info.parsers[key] ||
+ info.parsers[key.substring(0, key.lastIndexOf("/") + 1)]
+ );
};
// __info.stringToValue(string)__.
// Converts a key-value string as from GETINFO or GETCONF to a value.
-info.stringToValue = function (string) {
+info.stringToValue = function(string) {
// key should look something like `250+circuit-status=` or `250-circuit-status=...`
// or `250 circuit-status=...`
let matchForKey = string.match(/^250[ +-](.+?)=/),
- key = matchForKey ? matchForKey[1] : null;
- if (key === null) return null;
+ key = matchForKey ? matchForKey[1] : null;
+ if (key === null) {
+ return null;
+ }
// matchResult finds a single-line result for `250-` or `250 `,
// or a multi-line one for `250+`.
- let matchResult = string.match(/^250[ -].+?=(.*)$/) ||
- string.match(/^250\+.+?=([\s\S]*?)^\.$/m),
- // Retrieve the captured group (the text of the value in the key-value pair)
- valueString = matchResult ? matchResult[1] : null,
- // Get the parser function for the key found.
- parse = info.getParser(key.toLowerCase());
+ let matchResult =
+ string.match(/^250[ -].+?=(.*)$/) ||
+ string.match(/^250\+.+?=([\s\S]*?)^\.$/m),
+ // Retrieve the captured group (the text of the value in the key-value pair)
+ valueString = matchResult ? matchResult[1] : null,
+ // Get the parser function for the key found.
+ parse = info.getParser(key.toLowerCase());
if (parse === undefined) {
throw new Error("No parser found for '" + key + "'");
}
@@ -638,15 +698,16 @@ info.stringToValue = function (string) {
// __info.getMultipleResponseValues(message)__.
// Process multiple responses to a GETINFO or GETCONF request.
-info.getMultipleResponseValues = function (message) {
- return info.keyValueStringsFromMessage(message)
- .map(info.stringToValue)
- .filter(utils.identity);
+info.getMultipleResponseValues = function(message) {
+ return info
+ .keyValueStringsFromMessage(message)
+ .map(info.stringToValue)
+ .filter(utils.identity);
};
// __info.getInfo(controlSocket, key)__.
// Sends GETINFO for a single key. Returns a promise with the result.
-info.getInfo = function (aControlSocket, key) {
+info.getInfo = function(aControlSocket, key) {
if (!utils.isString(key)) {
return utils.rejectPromise("key argument should be a string");
}
@@ -657,7 +718,7 @@ info.getInfo = function (aControlSocket, key) {
// __info.getConf(aControlSocket, key)__.
// Sends GETCONF for a single key. Returns a promise with the result.
-info.getConf = function (aControlSocket, key) {
+info.getConf = function(aControlSocket, key) {
// GETCONF with a single argument returns results with
// one or more lines that look like `250[- ]key=value`.
// Any GETCONF lines that contain a single keyword only are currently dropped.
@@ -665,21 +726,23 @@ info.getConf = function (aControlSocket, key) {
if (!utils.isString(key)) {
return utils.rejectPromise("key argument should be a string");
}
- return aControlSocket.sendCommand("getconf " + key)
- .then(info.getMultipleResponseValues);
+ return aControlSocket
+ .sendCommand("getconf " + key)
+ .then(info.getMultipleResponseValues);
};
// ## onionAuth
// A namespace for functions related to tor's ONION_CLIENT_AUTH_* commands.
let onionAuth = {};
-onionAuth.keyInfoStringsFromMessage = utils.extractor(/^250-CLIENT\s+(.+)$/gmi);
+onionAuth.keyInfoStringsFromMessage = utils.extractor(/^250-CLIENT\s+(.+)$/gim);
onionAuth.keyInfoObjectsFromMessage = function(message) {
let keyInfoStrings = onionAuth.keyInfoStringsFromMessage(message);
- return keyInfoStrings.map(infoStr => utils.listMapData(infoStr,
- ["hsAddress", "typeAndKey"]));
-}
+ return keyInfoStrings.map(infoStr =>
+ utils.listMapData(infoStr, ["hsAddress", "typeAndKey"])
+ );
+};
// __onionAuth.viewKeys()__.
// Sends a ONION_CLIENT_AUTH_VIEW command to retrieve the list of private keys.
@@ -688,16 +751,22 @@ onionAuth.keyInfoObjectsFromMessage = function(message) {
// hsAddress
// typeAndKey
// Flags (e.g., "Permanent")
-onionAuth.viewKeys = function (aControlSocket) {
+onionAuth.viewKeys = function(aControlSocket) {
let cmd = "onion_client_auth_view";
- return aControlSocket.sendCommand(cmd).then(onionAuth.keyInfoObjectsFromMessage);
+ return aControlSocket
+ .sendCommand(cmd)
+ .then(onionAuth.keyInfoObjectsFromMessage);
};
// __onionAuth.add(controlSocket, hsAddress, b64PrivateKey, isPermanent)__.
// Sends a ONION_CLIENT_AUTH_ADD command to add a private key to the
// Tor configuration.
-onionAuth.add = function (aControlSocket, hsAddress, b64PrivateKey,
- isPermanent) {
+onionAuth.add = function(
+ aControlSocket,
+ hsAddress,
+ b64PrivateKey,
+ isPermanent
+) {
if (!utils.isString(hsAddress)) {
return utils.rejectPromise("hsAddress argument should be a string");
}
@@ -708,15 +777,16 @@ onionAuth.add = function (aControlSocket, hsAddress, b64PrivateKey,
const keyType = "x25519";
let cmd = `onion_client_auth_add ${hsAddress} ${keyType}:${b64PrivateKey}`;
- if (isPermanent)
+ if (isPermanent) {
cmd += " Flags=Permanent";
+ }
return aControlSocket.sendCommand(cmd);
};
// __onionAuth.remove(controlSocket, hsAddress)__.
// Sends a ONION_CLIENT_AUTH_REMOVE command to remove a private key from the
// Tor configuration.
-onionAuth.remove = function (aControlSocket, hsAddress) {
+onionAuth.remove = function(aControlSocket, hsAddress) {
if (!utils.isString(hsAddress)) {
return utils.rejectPromise("hsAddress argument should be a string");
}
@@ -725,7 +795,6 @@ onionAuth.remove = function (aControlSocket, hsAddress) {
return aControlSocket.sendCommand(cmd);
};
-
// ## event
// Handlers for events
@@ -735,7 +804,7 @@ let event = {};
// A map of EVENT keys to parsing functions, which convert result strings to JavaScript
// data.
event.parsers = {
- "stream" : info.streamStatusParser,
+ stream: info.streamStatusParser,
// Currently unused:
// "circ" : info.circuitStatusParser,
};
@@ -743,9 +812,11 @@ event.parsers = {
// __event.messageToData(type, message)__.
// Extract the data from an event. Note, at present
// we only extract streams that look like `"650" SP...`
-event.messageToData = function (type, message) {
+event.messageToData = function(type, message) {
let dataText = message.match(/^650 \S+?\s(.*)/m)[1];
- return (dataText && type.toLowerCase() in event.parsers) ? event.parsers[type.toLowerCase()](dataText) : null;
+ return dataText && type.toLowerCase() in event.parsers
+ ? event.parsers[type.toLowerCase()](dataText)
+ : null;
};
// __event.watchEvent(controlSocket, type, filter, onData)__.
@@ -753,17 +824,20 @@ event.messageToData = function (type, message) {
// data is passed to the onData callback. Returns a zero arg function that
// stops watching the event. Note: we only observe `"650" SP...` events
// currently (no `650+...` or `650-...` events).
-event.watchEvent = function (controlSocket, type, filter, onData, raw=false) {
- return controlSocket.addNotificationCallback(new RegExp("^650 " + type),
- function (message) {
+event.watchEvent = function(controlSocket, type, filter, onData, raw = false) {
+ return controlSocket.addNotificationCallback(
+ new RegExp("^650 " + type),
+ function(message) {
let data = event.messageToData(type, message);
if (filter === null || filter(data)) {
if (raw || !data) {
- return onData(message);
+ onData(message);
+ return;
}
onData(data);
}
- });
+ }
+ );
};
// ## tor
@@ -778,22 +852,23 @@ tor.controllerCache = new Map();
// __tor.controller(ipcFile, host, port, password)__.
// Creates a tor controller at the given ipcFile or host and port, with the
// given password.
-tor.controller = async function (ipcFile, host, port, password) {
+tor.controller = async function(ipcFile, host, port, password) {
let socket = await io.controlSocket(ipcFile, host, port, password);
- return { getInfo : key => info.getInfo(socket, key),
- getConf : key => info.getConf(socket, key),
- onionAuthViewKeys : () => onionAuth.viewKeys(socket),
- onionAuthAdd : (hsAddress, b64PrivateKey, isPermanent) =>
- onionAuth.add(socket, hsAddress, b64PrivateKey,
- isPermanent),
- onionAuthRemove : (hsAddress) =>
- onionAuth.remove(socket, hsAddress),
- watchEvent : (type, filter, onData, raw=false) =>
- event.watchEvent(socket, type, filter, onData, raw),
- isOpen : () => socket.isOpen(),
- close : () => { socket.close(); },
- sendCommand: cmd => socket.sendCommand(cmd),
- };
+ return {
+ getInfo: key => info.getInfo(socket, key),
+ getConf: key => info.getConf(socket, key),
+ onionAuthViewKeys: () => onionAuth.viewKeys(socket),
+ onionAuthAdd: (hsAddress, b64PrivateKey, isPermanent) =>
+ onionAuth.add(socket, hsAddress, b64PrivateKey, isPermanent),
+ onionAuthRemove: hsAddress => onionAuth.remove(socket, hsAddress),
+ watchEvent: (type, filter, onData, raw = false) =>
+ event.watchEvent(socket, type, filter, onData, raw),
+ isOpen: () => socket.isOpen(),
+ close: () => {
+ socket.close();
+ },
+ sendCommand: cmd => socket.sendCommand(cmd),
+ };
};
// ## Export
@@ -804,7 +879,7 @@ let controlPortInfo = {};
// Sets Tor control port connection parameters to be used in future calls to
// the controller() function. Example:
// configureControlPortModule(undefined, "127.0.0.1", 9151, "MyPassw0rd");
-var configureControlPortModule = function (ipcFile, host, port, password) {
+var configureControlPortModule = function(ipcFile, host, port, password) {
controlPortInfo.ipcFile = ipcFile;
controlPortInfo.host = host;
controlPortInfo.port = port || 9151;
@@ -827,28 +902,28 @@ var configureControlPortModule = function (ipcFile, host, port, password) {
// let replyPromise = c.getInfo("ip-to-country/16.16.16.16");
// // Close the controller permanently
// c.close();
-var controller = async function (avoidCache) {
-
- if (!controlPortInfo.ipcFile && !controlPortInfo.host)
+var controller = async function(avoidCache) {
+ if (!controlPortInfo.ipcFile && !controlPortInfo.host) {
throw new Error("Please call configureControlPortModule first");
+ }
- const dest = (controlPortInfo.ipcFile)
- ? `unix:${controlPortInfo.ipcFile.path}`
- : `${controlPortInfo.host}:${controlPortInfo.port}`;
+ const dest = controlPortInfo.ipcFile
+ ? `unix:${controlPortInfo.ipcFile.path}`
+ : `${controlPortInfo.host}:${controlPortInfo.port}`;
// constructor shorthand
- const newTorController =
- async () => {
- return await tor.controller(
- controlPortInfo.ipcFile,
- controlPortInfo.host,
- controlPortInfo.port,
- controlPortInfo.password);
- };
+ const newTorController = async () => {
+ return tor.controller(
+ controlPortInfo.ipcFile,
+ controlPortInfo.host,
+ controlPortInfo.port,
+ controlPortInfo.password
+ );
+ };
// avoid cache so always return a new controller
if (avoidCache) {
- return await newTorController();
+ return newTorController();
}
// first check our cache and see if we already have one
@@ -872,17 +947,19 @@ var controller = async function (avoidCache) {
// Same as controller() function, but explicitly waits until there is a tor daemon
// to connect to (either launched by tor-launcher, or if we have an existing system
// tor daemon)
-var wait_for_controller = async function(avoidCache) {
+var wait_for_controller = function(avoidCache) {
// if tor process is running (either ours or system) immediately return controller
- if (!TorProtocolService.ownsTorDaemon ||
- TorProtocolService.torProcessStatus == TorProcessStatus.Running) {
- return await controller(avoidCache);
+ if (
+ !TorProtocolService.ownsTorDaemon ||
+ TorProtocolService.torProcessStatus == TorProcessStatus.Running
+ ) {
+ return controller(avoidCache);
}
// otherwise we must wait for tor to finish launching before resolving
return new Promise((resolve, reject) => {
let observer = {
- observe : async (subject, topic, data) => {
+ observe: async (subject, topic, data) => {
if (topic === TorTopics.ProcessIsReady) {
try {
resolve(await controller(avoidCache));
@@ -898,4 +975,8 @@ var wait_for_controller = async function(avoidCache) {
};
// Export functions for external use.
-var EXPORTED_SYMBOLS = ["configureControlPortModule", "controller", "wait_for_controller"];
+var EXPORTED_SYMBOLS = [
+ "configureControlPortModule",
+ "controller",
+ "wait_for_controller",
+];
diff --git a/modules/utils.js b/modules/utils.js
index b726342b..7ccd2da1 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -11,12 +11,16 @@ let prefs = Services.prefs;
// __getPrefValue(prefName)__
// Returns the current value of a preference, regardless of its type.
-var getPrefValue = function (prefName) {
- switch(prefs.getPrefType(prefName)) {
- case prefs.PREF_BOOL: return prefs.getBoolPref(prefName);
- case prefs.PREF_INT: return prefs.getIntPref(prefName);
- case prefs.PREF_STRING: return prefs.getCharPref(prefName);
- default: return null;
+var getPrefValue = function(prefName) {
+ switch (prefs.getPrefType(prefName)) {
+ case prefs.PREF_BOOL:
+ return prefs.getBoolPref(prefName);
+ case prefs.PREF_INT:
+ return prefs.getIntPref(prefName);
+ case prefs.PREF_STRING:
+ return prefs.getCharPref(prefName);
+ default:
+ return null;
}
};
@@ -24,18 +28,24 @@ var getPrefValue = function (prefName) {
// Applies prefHandler whenever the value of the pref changes.
// If init is true, applies prefHandler to the current value.
// Returns a zero-arg function that unbinds the pref.
-var bindPref = function (prefName, prefHandler, init = false) {
- let update = () => { prefHandler(getPrefValue(prefName)); },
- observer = { observe : function (subject, topic, data) {
- if (data === prefName) {
- update();
- }
- } };
- prefs.addObserver(prefName, observer, false);
+var bindPref = function(prefName, prefHandler, init = false) {
+ let update = () => {
+ prefHandler(getPrefValue(prefName));
+ },
+ observer = {
+ observe(subject, topic, data) {
+ if (data === prefName) {
+ update();
+ }
+ },
+ };
+ prefs.addObserver(prefName, observer);
if (init) {
update();
}
- return () => { prefs.removeObserver(prefName, observer); };
+ return () => {
+ prefs.removeObserver(prefName, observer);
+ };
};
// __bindPrefAndInit(prefName, prefHandler)__
@@ -43,7 +53,7 @@ var bindPref = function (prefName, prefHandler, init = false) {
// Re-applies prefHandler whenever the value of the pref changes.
// Returns a zero-arg function that unbinds the pref.
var bindPrefAndInit = (prefName, prefHandler) =>
- bindPref(prefName, prefHandler, true);
+ bindPref(prefName, prefHandler, true);
// ## Observers
@@ -51,15 +61,15 @@ var bindPrefAndInit = (prefName, prefHandler) =>
// Observe the given topic. When notification of that topic
// occurs, calls callback(subject, data). Returns a zero-arg
// function that stops observing.
-var observe = function (topic, callback) {
+var observe = function(topic, callback) {
let observer = {
- observe: function (aSubject, aTopic, aData) {
+ observe(aSubject, aTopic, aData) {
if (topic === aTopic) {
callback(aSubject, aData);
}
},
};
- Services.obs.addObserver(observer, topic, false);
+ Services.obs.addObserver(observer, topic);
return () => Services.obs.removeObserver(observer, topic);
};
@@ -67,12 +77,13 @@ var observe = function (topic, callback) {
// __env__.
// Provides access to process environment variables.
-let env = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
+let env = Cc["@mozilla.org/process/environment;1"].getService(
+ Ci.nsIEnvironment
+);
// __getEnv(name)__.
// Reads the environment variable of the given name.
-var getEnv = function (name) {
+var getEnv = function(name) {
return env.exists(name) ? env.get(name) : undefined;
};
@@ -91,17 +102,15 @@ let dialogsByName = {};
// __showDialog(parent, url, name, features, arg1, arg2, ...)__.
// Like window.openDialog, but if the window is already
// open, just focuses it instead of opening a new one.
-var showDialog = function (parent, url, name, features) {
+var showDialog = function(parent, url, name, features) {
let existingDialog = dialogsByName[name];
if (existingDialog && !existingDialog.closed) {
existingDialog.focus();
return existingDialog;
- } else {
- let newDialog = parent.openDialog.apply(parent,
- Array.slice(arguments, 1));
- dialogsByName[name] = newDialog;
- return newDialog;
}
+ let newDialog = parent.openDialog.apply(parent, Array.slice(arguments, 1));
+ dialogsByName[name] = newDialog;
+ return newDialog;
};
// ## Tor control protocol utility functions
@@ -112,71 +121,69 @@ let _torControl = {
// Returns the unescaped string. Throws upon failure.
// Within Tor Launcher, the file components/tl-protocol.js also contains a
// copy of _strUnescape().
- _strUnescape: function(aStr)
- {
- if (!aStr)
+ _strUnescape(aStr) {
+ if (!aStr) {
return aStr;
+ }
var len = aStr.length;
- if ((len < 2) || ('"' != aStr.charAt(0)) || ('"' != aStr.charAt(len - 1)))
+ if (len < 2 || '"' != aStr.charAt(0) || '"' != aStr.charAt(len - 1)) {
return aStr;
+ }
const kHexRE = /[0-9A-Fa-f]{2}/;
const kOctalRE = /[0-7]{3}/;
var rv = "";
var i = 1;
var lastCharIndex = len - 2;
- while (i <= lastCharIndex)
- {
+ while (i <= lastCharIndex) {
var c = aStr.charAt(i);
- if ('\\' == c)
- {
- if (++i > lastCharIndex)
+ if ("\\" == c) {
+ if (++i > lastCharIndex) {
throw new Error("missing character after \\");
+ }
c = aStr.charAt(i);
- if ('n' == c)
- rv += '\n';
- else if ('r' == c)
- rv += '\r';
- else if ('t' == c)
- rv += '\t';
- else if ('x' == c)
- {
- if ((i + 2) > lastCharIndex)
+ if ("n" == c) {
+ rv += "\n";
+ } else if ("r" == c) {
+ rv += "\r";
+ } else if ("t" == c) {
+ rv += "\t";
+ } else if ("x" == c) {
+ if (i + 2 > lastCharIndex) {
throw new Error("not enough hex characters");
+ }
let s = aStr.substr(i + 1, 2);
- if (!kHexRE.test(s))
+ if (!kHexRE.test(s)) {
throw new Error("invalid hex characters");
+ }
let val = parseInt(s, 16);
rv += String.fromCharCode(val);
i += 3;
- }
- else if (this._isDigit(c))
- {
+ } else if (this._isDigit(c)) {
let s = aStr.substr(i, 3);
- if ((i + 2) > lastCharIndex)
+ if (i + 2 > lastCharIndex) {
throw new Error("not enough octal characters");
+ }
- if (!kOctalRE.test(s))
+ if (!kOctalRE.test(s)) {
throw new Error("invalid octal characters");
+ }
let val = parseInt(s, 8);
rv += String.fromCharCode(val);
i += 3;
- }
- else // "\\" and others
- {
+ } // "\\" and others
+ else {
rv += c;
++i;
}
- }
- else if ('"' == c)
- throw new Error("unescaped \" within string");
- else
- {
+ } else if ('"' == c) {
+ throw new Error('unescaped " within string');
+ } else {
rv += c;
++i;
}
@@ -188,8 +195,7 @@ let _torControl = {
// Within Tor Launcher, the file components/tl-protocol.js also contains a
// copy of _isDigit().
- _isDigit: function(aChar)
- {
+ _isDigit(aChar) {
const kRE = /^\d$/;
return aChar && kRE.test(aChar);
},
@@ -206,30 +212,35 @@ var unescapeTorString = function(str) {
var show_torbrowser_manual = () => {
let availableLocales = ["de", "en", "es", "fr", "nl", "pt", "tr", "vi", "zh"];
let shortLocale = getLocale().substring(0, 2);
- return availableLocales.indexOf(shortLocale) >= 0;
-}
+ return availableLocales.includes(shortLocale);
+};
-var getFPDFromHost = (hostname) => {
+var getFPDFromHost = hostname => {
try {
return Services.eTLD.getBaseDomainFromHost(hostname);
} catch (e) {
- if (e.result == Cr.NS_ERROR_HOST_IS_IP_ADDRESS ||
- e.result == Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS) {
+ if (
+ e.result == Cr.NS_ERROR_HOST_IS_IP_ADDRESS ||
+ e.result == Cr.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS
+ ) {
return hostname;
}
}
return null;
-}
+};
// Assuming this is called with gBrowser.selectedBrowser
-var getDomainForBrowser = (browser) => {
+var getDomainForBrowser = browser => {
let fpd = browser.contentPrincipal.originAttributes.firstPartyDomain;
// Bug 31562: For neterror or certerror, get the original URL from
// browser.currentURI and use it to calculate the firstPartyDomain.
let knownErrors = ["about:neterror", "about:certerror"];
let documentURI = browser.documentURI;
- if (documentURI && documentURI.schemeIs('about') &&
- knownErrors.some(x => documentURI.spec.startsWith(x))) {
+ if (
+ documentURI &&
+ documentURI.schemeIs("about") &&
+ knownErrors.some(x => documentURI.spec.startsWith(x))
+ ) {
let knownSchemes = ["http", "https", "ftp"];
let currentURI = browser.currentURI;
if (currentURI && knownSchemes.some(x => currentURI.schemeIs(x))) {
@@ -239,58 +250,71 @@ var getDomainForBrowser = (browser) => {
return fpd;
};
-var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"]
-.getService(Ci.nsISupports).wrappedJSObject;
+var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"].getService(
+ Ci.nsISupports
+).wrappedJSObject;
var m_tb_string_bundle = torbutton_get_stringbundle();
function torbutton_safelog(nLevel, sMsg, scrub) {
- m_tb_torlog.safe_log(nLevel, sMsg, scrub);
- return true;
+ m_tb_torlog.safe_log(nLevel, sMsg, scrub);
+ return true;
}
function torbutton_log(nLevel, sMsg) {
- m_tb_torlog.log(nLevel, sMsg);
+ m_tb_torlog.log(nLevel, sMsg);
- // So we can use it in boolean expressions to determine where the
- // short-circuit is..
- return true;
+ // So we can use it in boolean expressions to determine where the
+ // short-circuit is..
+ return true;
}
// load localization strings
-function torbutton_get_stringbundle()
-{
- var o_stringbundle = false;
-
- try {
- var oBundle = Services.strings;
- o_stringbundle = oBundle.createBundle("chrome://torbutton/locale/torbutton.properties");
- } catch(err) {
- o_stringbundle = false;
- }
- if (!o_stringbundle) {
- torbutton_log(5, 'ERROR (init): failed to find torbutton-bundle');
- }
+function torbutton_get_stringbundle() {
+ var o_stringbundle = false;
- return o_stringbundle;
-}
+ try {
+ var oBundle = Services.strings;
+ o_stringbundle = oBundle.createBundle(
+ "chrome://torbutton/locale/torbutton.properties"
+ );
+ } catch (err) {
+ o_stringbundle = false;
+ }
+ if (!o_stringbundle) {
+ torbutton_log(5, "ERROR (init): failed to find torbutton-bundle");
+ }
-function torbutton_get_property_string(propertyname)
-{
- try {
- if (!m_tb_string_bundle) {
- m_tb_string_bundle = torbutton_get_stringbundle();
- }
+ return o_stringbundle;
+}
- return m_tb_string_bundle.GetStringFromName(propertyname);
- } catch(e) {
- torbutton_log(4, "Unlocalized string "+propertyname);
+function torbutton_get_property_string(propertyname) {
+ try {
+ if (!m_tb_string_bundle) {
+ m_tb_string_bundle = torbutton_get_stringbundle();
}
- return propertyname;
+ return m_tb_string_bundle.GetStringFromName(propertyname);
+ } catch (e) {
+ torbutton_log(4, "Unlocalized string " + propertyname);
+ }
+
+ return propertyname;
}
// Export utility functions for external use.
-let EXPORTED_SYMBOLS = ["bindPref", "bindPrefAndInit", "getEnv", "getLocale", "getDomainForBrowser",
- "getPrefValue", "observe", "showDialog", "show_torbrowser_manual", "unescapeTorString",
- "torbutton_safelog", "torbutton_log", "torbutton_get_property_string"];
+let EXPORTED_SYMBOLS = [
+ "bindPref",
+ "bindPrefAndInit",
+ "getEnv",
+ "getLocale",
+ "getDomainForBrowser",
+ "getPrefValue",
+ "observe",
+ "showDialog",
+ "show_torbrowser_manual",
+ "unescapeTorString",
+ "torbutton_safelog",
+ "torbutton_log",
+ "torbutton_get_property_string",
+];
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[Git][tpo/applications/fenix] Deleted branch 40225-bundled-extensions-don-t-get-updated-with-android-tor-browser-updates-they-stay-stuck-at-the
by ma1 (@ma1) 24 Aug '22
by ma1 (@ma1) 24 Aug '22
24 Aug '22
ma1 deleted branch 40225-bundled-extensions-don-t-get-updated-with-android-tor-browser-updates-they-stay-stuck-at-the at The Tor Project / Applications / fenix
--
You're receiving this email because of your account on gitlab.torproject.org.
1
0
ma1 deleted branch bug_40225 at The Tor Project / Applications / fenix
--
You're receiving this email because of your account on gitlab.torproject.org.
1
0
ma1 pushed new branch bug_40225 at The Tor Project / Applications / fenix
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/tree/bug_40225
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix] Pushed new branch 40225-bundled-extensions-don-t-get-updated-with-android-tor-browser-updates-they-stay-stuck-at-the
by ma1 (@ma1) 24 Aug '22
by ma1 (@ma1) 24 Aug '22
24 Aug '22
ma1 pushed new branch 40225-bundled-extensions-don-t-get-updated-with-android-tor-browser-updates-they-stay-stuck-at-the at The Tor Project / Applications / fenix
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/tree/40225-bundled-e…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[builders/tor-browser-build] branch main updated: Bug 40605: Reworked the macOS toolchain creation.
by gitolite role 24 Aug '22
by gitolite role 24 Aug '22
24 Aug '22
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch main
in repository builders/tor-browser-build.
The following commit(s) were added to refs/heads/main by this push:
new a155d0e Bug 40605: Reworked the macOS toolchain creation.
a155d0e is described below
commit a155d0e4a249089d1fe51bcfd621b699df2bca85
Author: Pier Angelo Vendrame <pierov(a)torproject.org>
AuthorDate: Tue Aug 16 22:03:02 2022 +0200
Bug 40605: Reworked the macOS toolchain creation.
We were compiling another Clang with the macOS toolchain, but we did not
really need to, so I have removed that step.
However, compiling compiler-rt was failing in this way, so I have
disabled a pair of components we should not need. Probably, only the
built-ins are actually needed.
Finally, we now compile libc++ in the way LLVM currently suggests.
---
projects/clang/build | 2 +-
projects/macosx-toolchain/build | 105 +++++++++++++++++----------------------
projects/macosx-toolchain/config | 2 -
3 files changed, 47 insertions(+), 62 deletions(-)
diff --git a/projects/clang/build b/projects/clang/build
index 48cddec..8449070 100644
--- a/projects/clang/build
+++ b/projects/clang/build
@@ -25,7 +25,7 @@ mkdir build
cd build
cmake ../llvm -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$distdir \
-DCMAKE_BUILD_TYPE=Release \
- [% IF c("var/android") -%]
+ [% IF c("var/android") || c("var/osx") -%]
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
[% END -%]
[% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly[% END %] \
diff --git a/projects/macosx-toolchain/build b/projects/macosx-toolchain/build
index c4d1937..228d02d 100644
--- a/projects/macosx-toolchain/build
+++ b/projects/macosx-toolchain/build
@@ -5,78 +5,77 @@ mkdir $builddir
distdir=/var/tmp/dist/[% project %]
mkdir -p "$distdir"
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
-tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
-tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
+tar -C $distdir -xf [% c('input_files_by_name/clang') %]
tar -C $distdir -xf [% c('input_files_by_name/SDK') %]
tar -C $distdir -xf [% c('input_files_by_name/cctools') %]
tar -C $builddir -xf [% c('input_files_by_name/llvm-project') %]
arch=x86_64
-clangdir=/var/tmp/dist/clang/bin
+clangdir=$distdir/clang/bin
cctoolsdir=$distdir/cctools/bin
sysrootdir=$distdir/MacOSX[% c("version") %].sdk/
target=x86_64-apple-darwin
# We still need to put the cctoolsdir on the path. That's because of `lipo`. See
# the respective comment in the cctools build script.
-export PATH="/var/tmp/dist/ninja:/var/tmp/dist/cmake/bin:$cctoolsdir:$PATH"
+export PATH="/var/tmp/dist/cmake/bin:$cctoolsdir:$PATH"
export MACOSX_DEPLOYMENT_TARGET=[% c("var/macosx_deployment_target") %]
-export MACH_USE_SYSTEM_PYTHON=1
cd $builddir/clang-source
patch -p1 < $rootdir/compiler-rt-cross-compile.patch
patch -p1 < $rootdir/compiler-rt-no-codesign.patch
cd ..
-mkdir build_clang
-pushd build_clang
-# We follow quite closely Mozilla's build/build-clang/build-clang.py with the
-# clang-macosx64.json flavor.
-cmake -GNinja \
+
+mkdir build_compiler_rt
+cd build_compiler_rt
+
+# And we build compiler-rt by following taskcluster/scripts/misc/build-compiler-rt.sh.
+cmake -G "Unix Makefiles" \
-DCMAKE_C_COMPILER=$clangdir/clang \
-DCMAKE_CXX_COMPILER=$clangdir/clang++ \
- -DCMAKE_ASM_COMPILER=$clangdir/clang \
- -DCMAKE_LINKER=$clangdir/clang \
- -DCMAKE_AR=$cctoolsdir/$target-ar \
+ -DCMAKE_C_COMPILER_TARGET=$target \
+ -DCMAKE_CXX_COMPILER_TARGET=$target \
+ -DCMAKE_ASM_COMPILER_TARGET=$target \
+ -DCMAKE_AR=$clangdir/llvm-ar \
+ -DCMAKE_RANLIB=$clangdir/llvm-ranlib \
-DCMAKE_C_FLAGS="[% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
-DCMAKE_CXX_FLAGS="-stdlib=libc++ [% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
-DCMAKE_ASM_FLAGS="[% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
-DCMAKE_EXE_LINKER_FLAGS="[% c('var/LDFLAGS') %]" \
-DCMAKE_SHARED_LINKER_FLAGS="[% c('var/LDFLAGS') %]" \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=$distdir/clang \
- -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
-DLLVM_ENABLE_ASSERTIONS=OFF \
- -DPYTHON_EXECUTABLE=/usr/bin/python3 \
- -DLLVM_TOOL_LIBCXX_BUILD=ON \
- -DLLVM_ENABLE_BINDINGS=OFF \
- -DLLVM_ENABLE_LIBXML2=FORCE_ON \
- -DLLVM_LINK_LLVM_DYLIB=ON \
- -DCMAKE_RANLIB=$cctoolsdir/$target-ranlib \
- -DCMAKE_LIBTOOL=$cctoolsdir/$target-libtool \
+ -DCMAKE_INSTALL_PREFIX=$distdir/clang/lib/clang/[% pc("clang", "version") %]/ \
+ -DLLVM_CONFIG_PATH=$clangdir/llvm-config \
+ -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
+ -DCOMPILER_RT_ENABLE_IOS=OFF \
+ -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
+ -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
+ -DCOMPILER_RT_ENABLE_TVOS=OFF \
+ -DCOMPILER_RT_ENABLE_WATCHOS=OFF \
+ -DCOMPILER_RT_BUILD_XRAY=OFF \
+ -DCMAKE_LINKER=$cctoolsdir/$target-ld \
+ -DCMAKE_LIPO=$cctoolsdir/lipo \
-DCMAKE_SYSTEM_NAME=Darwin \
-DCMAKE_SYSTEM_VERSION=$MACOSX_DEPLOYMENT_TARGET \
- -DLLVM_ENABLE_THREADS=OFF \
- -DCOMPILER_RT_BUILD_XRAY=OFF \
- -DLIBCXXABI_LIBCXX_INCLUDES=$builddir/clang-source/projects/libcxx/include \
+ -DDARWIN_macosx_OVERRIDE_SDK_VERSION=$MACOSX_DEPLOYMENT_TARGET \
+ -DDARWIN_osx_ARCHS=$arch \
+ -DDARWIN_osx_SYSROOT=$sysrootdir \
+ -DDARWIN_osx_BUILTIN_ARCHS=$arch \
-DCMAKE_OSX_SYSROOT=$sysrootdir \
-DCMAKE_FIND_ROOT_PATH=$sysrootdir \
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
- -DCMAKE_MACOSX_RPATH=ON \
- -DCMAKE_OSX_ARCHITECTURES=$arch \
- -DDARWIN_macosx_OVERRIDE_SDK_VERSION=$MACOSX_DEPLOYMENT_TARGET \
- -DDARWIN_osx_ARCHS=$arch \
- -DDARWIN_osx_SYSROOT=$sysrootdir \
- -DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-apple-darwin $builddir/clang-source/llvm
+ -DDARWIN_osx_BUILTIN_ARCHS=$arch \
+ $builddir/clang-source/compiler-rt
-ninja install -v
+make -j[% c("num_procs") %]
+make install
-popd
-mkdir build_compiler_rt
-pushd build_compiler_rt
+cd $builddir/clang-source
-# And we build compiler-rt by following taskcluster/scripts/misc/build-compiler-rt.sh.
-cmake -GNinja \
+cmake -G "Unix Makefiles" -S runtimes -B build \
+ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
-DCMAKE_C_COMPILER=$clangdir/clang \
-DCMAKE_CXX_COMPILER=$clangdir/clang++ \
-DCMAKE_C_COMPILER_TARGET=$target \
@@ -84,23 +83,19 @@ cmake -GNinja \
-DCMAKE_ASM_COMPILER_TARGET=$target \
-DCMAKE_AR=$clangdir/llvm-ar \
-DCMAKE_RANLIB=$clangdir/llvm-ranlib \
- -DCMAKE_C_FLAGS="[% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
- -DCMAKE_CXX_FLAGS="-stdlib=libc++ [% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
- -DCMAKE_ASM_FLAGS="[% c('var/FLAGS') %] -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
- -DCMAKE_EXE_LINKER_FLAGS="[% c('var/LDFLAGS') %]" \
- -DCMAKE_SHARED_LINKER_FLAGS="[% c('var/LDFLAGS') %]" \
+ -DCMAKE_C_FLAGS="-target x86_64-apple-darwin -B $cctoolsdir -isysroot $sysrootdir -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
+ -DCMAKE_CXX_FLAGS="-stdlib=libc++ -target x86_64-apple-darwin -B $cctoolsdir -isysroot $sysrootdir -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
+ -DCMAKE_ASM_FLAGS="-target x86_64-apple-darwin -B $cctoolsdir -isysroot $sysrootdir -I$sysrootdir/usr/include -iframework $sysrootdir/System/Library/Frameworks" \
+ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-syslibroot,$sysrootdir -Wl,-dead_strip -Wl,-pie" \
+ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-syslibroot,$sysrootdir -Wl,-dead_strip -Wl,-pie" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=OFF \
- -DCMAKE_INSTALL_PREFIX=$distdir/clang/lib/clang/[% pc("clang", "version") %]/ \
- -DLLVM_CONFIG_PATH=$clangdir/llvm-config \
- -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
+ -DCMAKE_INSTALL_PREFIX=$distdir/clang \
-DCMAKE_LINKER=$cctoolsdir/$target-ld \
- -DCMAKE_LIPO=$cctoolsdir/lipo \
-DCMAKE_SYSTEM_NAME=Darwin \
-DCMAKE_SYSTEM_VERSION=$MACOSX_DEPLOYMENT_TARGET \
-DDARWIN_macosx_OVERRIDE_SDK_VERSION=$MACOSX_DEPLOYMENT_TARGET \
-DDARWIN_osx_ARCHS=$arch \
- -DDARWIN_osx_SYSROOT=$sysrootdir \
-DDARWIN_osx_BUILTIN_ARCHS=$arch \
-DCMAKE_OSX_SYSROOT=$sysrootdir \
-DCMAKE_FIND_ROOT_PATH=$sysrootdir \
@@ -108,20 +103,12 @@ cmake -GNinja \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
-DDARWIN_osx_BUILTIN_ARCHS=$arch \
- $builddir/clang-source/compiler-rt
-
-ninja install -v
-# We now have a native macosx64 toolchain.
-# What we want is a native linux64 toolchain which can target macosx64.
-# Overlay the linux64 toolchain that we used for this build. Note: we don't do
-# any ASan builds for macOS (yet). Once we do that we need to preserve at least
-# `llvm-symbolizer` as that one seems to get shipped with sanitizer builds (at
-# least that's what Mozilla claims).
-cd $distdir
-cp --remove-destination -lr /var/tmp/dist/clang/* clang/
+cd build
+make -j[% c("num_procs") %]
+make install
-cd cctools/bin
+cd $distdir/cctools/bin
ln -s ../../clang/bin/clang x86_64-apple-darwin-clang
ln -s ../../clang/bin/clang++ x86_64-apple-darwin-clang++
diff --git a/projects/macosx-toolchain/config b/projects/macosx-toolchain/config
index 0afe1d9..cd66b0f 100644
--- a/projects/macosx-toolchain/config
+++ b/projects/macosx-toolchain/config
@@ -24,8 +24,6 @@ input_files:
project: cctools
- name: cmake
project: cmake
- - name: ninja
- project: ninja
# Instructions on how to create the SDK tarball can be found at:
# build/macosx/cross-mozconfig.common
- name: SDK
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[tor-browser-bundle-testsuite] branch main updated: Bug 40063: Remove aguestuser from nightly build emails
by gitolite role 24 Aug '22
by gitolite role 24 Aug '22
24 Aug '22
This is an automated email from the git hooks/post-receive script.
boklm pushed a commit to branch main
in repository tor-browser-bundle-testsuite.
The following commit(s) were added to refs/heads/main by this push:
new ef7c3fc Bug 40063: Remove aguestuser from nightly build emails
ef7c3fc is described below
commit ef7c3fc43f5b5479ee40ecee2f09a55838a8801a
Author: Nicolas Vigier <boklm(a)torproject.org>
AuthorDate: Wed Aug 24 15:06:00 2022 +0200
Bug 40063: Remove aguestuser from nightly build emails
---
config/tb-build-01.torproject.org | 1 -
1 file changed, 1 deletion(-)
diff --git a/config/tb-build-01.torproject.org b/config/tb-build-01.torproject.org
index 39be9e3..05ce43d 100644
--- a/config/tb-build-01.torproject.org
+++ b/config/tb-build-01.torproject.org
@@ -49,7 +49,6 @@ my %res = (
'email-subject' => '[build result: [% success ? "ok" : "failed" %]] [% options.name %]',
'email-report' => 1,
'email-to' => [
- 'aguestuser(a)torproject.org',
'boklm(a)torproject.org',
'pierov(a)torproject.org',
'richard(a)torproject.org',
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[builders/tor-browser-build] annotated tag tbb-11.5.2-build1 created (now 28d0676)
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to annotated tag tbb-11.5.2-build1
in repository builders/tor-browser-build.
at 28d0676 (tag)
tagging e4ab9334f7d6da57bc8a0a6eeeecfe62d9ab7a6f (commit)
replaces tbb-11.5.1-build1
by Richard Pospesel
on Tue Aug 23 20:03:08 2022 +0000
- Log -----------------------------------------------------------------
Tagging build1 for 11.5.2
-----BEGIN PGP SIGNATURE-----
iQJLBAABCAA1FiEEvnyRTMkiztnZPSO33kc2A2PzSywFAmMFMnwXHHJpY2hhcmRA
dG9ycHJvamVjdC5vcmcACgkQ3kc2A2PzSyxGMw/9GVFpZsXrdqofeqEBOBrYXBBh
v5bWj1IVcuaXGNzeiQDW0M/TmHjbgUdqf9iC4MpORVZUaL5HB/vW0bQinn4H8b25
7e51yPb1bkWMfMPy47am7mXEaOlcO7m/Bejyiw2U7u79cBfTSkVp9YQoy3FFuN3q
JjgK2BVHNdhSCfuR7H93lQlchvXv1N6+WtT2TXJcOA9MXCEQwVyjTWWoWUVGJ+/m
/ea0WWxUksA4sAzL0gosarT93JkW71p1KA8kjeUFv00KJ7l8GmZ3uB+FgW5uuqBA
AysRD2YcZMDr2PN8OkljiqWntmiMw3SvAEr8aHzJmo1kf45hMLik3aN0f5nTcWHk
fnCH6/STeqQ9EN3ByIMJWkOq0bXSGJ0VCkEle+vrChWPvvLq332IAhpg1QTht5jQ
9fR3ZgdwNAU01xcOy0EZfQLgPe71DrCUiKDCL3T9jsvIJe7YuwOLhh9aVuqJvAww
pimrocSGYykFTNk8YhewAwSQ9jJOrUQ2ZwR2kkhLJsTq0FbAl+1K46CAw8iEfFM5
eWK6SwbW9O88WDG1oX2LrGdNplXso4B5DzuDfn+Rq27Zub7y2y3otd8LnKOlrOjq
mSqSCm7K3uNJhnVmf4KofsW3FTbNFLugAnhsFqEXqTN1Ou4Qm4q2Fr3TvMPZF8tT
kVHvn48TDpmRVH5leoE=
=zwk9
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
No new revisions were added by this update.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[builders/tor-browser-build] branch maint-11.5 updated (3c65894 -> e4ab933)
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch maint-11.5
in repository builders/tor-browser-build.
from 3c65894 Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
new 083a492 Revert "Bug 40610: Fix copying of src tarballs"
new e4ab933 Bug 40484: Prepare stable release 11.5.2
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
projects/firefox/config | 4 +-
projects/go/config | 8 +-
projects/release/build | 2 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 63 +++++++
projects/tor-browser/allowed_addons.json | 209 +++++++++++----------
projects/tor-browser/config | 4 +-
projects/tor/config | 2 +-
rbm.conf | 4 +-
8 files changed, 180 insertions(+), 116 deletions(-)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
2

[builders/tor-browser-build] branch maint-11.5 updated: Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch maint-11.5
in repository builders/tor-browser-build.
The following commit(s) were added to refs/heads/maint-11.5 by this push:
new 3c65894 Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
3c65894 is described below
commit 3c65894ad11f07aff569e90da53a25d4186e9990
Author: Richard Pospesel <richard(a)torproject.org>
AuthorDate: Mon Aug 22 21:40:13 2022 +0000
Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
---
projects/common/bridges_list.obfs4.txt | 1 -
1 file changed, 1 deletion(-)
diff --git a/projects/common/bridges_list.obfs4.txt b/projects/common/bridges_list.obfs4.txt
index 123e99d..238a1a8 100644
--- a/projects/common/bridges_list.obfs4.txt
+++ b/projects/common/bridges_list.obfs4.txt
@@ -10,5 +10,4 @@ obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW
obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0
obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0
obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0
-obfs4 [2a0c:4d80:42:702::1]:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0
obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[builders/tor-browser-build] branch main updated: Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch main
in repository builders/tor-browser-build.
The following commit(s) were added to refs/heads/main by this push:
new 6747def Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
6747def is described below
commit 6747defb2d3b7928eb62bf9aab2b5d342344c7d9
Author: Richard Pospesel <richard(a)torproject.org>
AuthorDate: Mon Aug 22 21:40:13 2022 +0000
Bug 40242: Tor Browser has two default bridges that share a fingerprint, and Tor ignores one
---
projects/common/bridges_list.obfs4.txt | 1 -
1 file changed, 1 deletion(-)
diff --git a/projects/common/bridges_list.obfs4.txt b/projects/common/bridges_list.obfs4.txt
index 123e99d..238a1a8 100644
--- a/projects/common/bridges_list.obfs4.txt
+++ b/projects/common/bridges_list.obfs4.txt
@@ -10,5 +10,4 @@ obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW
obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0
obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0
obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0
-obfs4 [2a0c:4d80:42:702::1]:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0
obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[tor-browser] annotated tag tor-browser-91.13.0esr-11.5-1-build2 created (now 5d39e829a7b7a)
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to annotated tag tor-browser-91.13.0esr-11.5-1-build2
in repository tor-browser.
at 5d39e829a7b7a (tag)
tagging a4c279e9f8e5e1ce82c32d4973622b1911f83a2a (commit)
replaces tor-browser-91.13.0esr-11.5-1-build1
by Richard Pospesel
on Tue Aug 23 15:53:29 2022 +0000
- Log -----------------------------------------------------------------
Tagging build2 for 91.13esr-based stable
-----BEGIN PGP SIGNATURE-----
iQJLBAABCAA1FiEEvnyRTMkiztnZPSO33kc2A2PzSywFAmME+AgXHHJpY2hhcmRA
dG9ycHJvamVjdC5vcmcACgkQ3kc2A2PzSyzwbQ/+MPHs5DDgvtUgFn5J+Ikz5/eO
a8sMx0QdvfmkkNIq+niiUb9Ojnq+0XwWdW5yKvsTWxbp5fLVYJJ4sXwpqx7/8o0E
gwaUO5veULraqgWoXWNuyh88FaEWCDJbVtawlBYavcohtTCz6iF4SNYq+ebax2bD
Sj6ylyOkb89M3dME/MpwtVym8nUEhDHiMlO/7PlheUVrqzUIBWC0ewGRq5oyJYUr
sYxF37wvh533ZZI+ldbimgRF/MoQ2ijq/tI8EwMCwb8xNtWoENsyXblpgxlL24Wp
F8NKeigxIOosA9Ba3wgKW0quPyaQYVbblWIIWrv0L2g2xdPkTofRiC0s16Jno0BR
KA7M7nluQsz+wpR5aAjvj2hNMY9HIhQTHUai/ZtEj93gpDv1kHMyuBw49Adf6cBU
8qetya/hT2QuYPvHmKSZm0Yrin8Ub2XZNf0SdpkOyY/S7Znv3vzO87aTOKIJV3kJ
mDpswXswJWtmb1qx6pXok7SHCvAmSV2lHTcAY73jrmjzDRpn6eSoTmSr0rfEsMbD
GcOxcJRQJXnP1UdcqfbfrTHlcSEsM//8KU7SLMsiShrwxGsWPOZEHhSevmkx1S90
ZiRMgiXcal7LT75yYvLTrH68+0g8U7ek7k9dqPj7lN2Ql0IO4lYojNSp4f+Rodc4
uvMUMjqPSEv7QI9BE1I=
=D/HM
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
No new revisions were added by this update.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[tor-browser] branch tor-browser-91.13.0esr-11.5-1 updated (01085f53eece2 -> a4c279e9f8e5e)
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch tor-browser-91.13.0esr-11.5-1
in repository tor-browser.
from 01085f53eece2 Bug 11698: Incorporate Tor Browser Manual pages into Tor Browser
new 5eba1842a0124 fixup! Firefox preference overrides.
new 59ba109bb0c8a Bug 1722489 - Evaluate HSTS before https-only in NS_ShouldSecureUpgrade. r=ckerschb,necko-reviewers,kershaw
new 6886d4968b891 Bug 1724080: Have https-first and https-only rules apply to speculative connections r=kershaw
new b8f5ec1fdc68d fixup! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
new 0db9a71fed279 Bug 41089: Add tor-browser build scripts + Makefile to tor-browser
new f1d4307fb949d fixup! Bug 41089: Add tor-browser build scripts + Makefile to tor-browser
new 25dea5a6c3e74 fixup! Bug 26961: New user onboarding.
new a4c279e9f8e5e fixup! Bug 23247: Communicating security expectations for .onion
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.gitignore | 3 +
browser/app/profile/001-base-profile.js | 12 +
browser/base/content/browser-siteIdentity.js | 6 +-
.../google/_locales/region-by/messages.json | 20 --
.../google/_locales/region-kz/messages.json | 20 --
.../google/_locales/region-ru/messages.json | 20 --
.../google/_locales/region-tr/messages.json | 20 --
.../extensions/onboarding/content/Onboarding.jsm | 2 +-
.../en-US/chrome/security/security.properties | 6 +
dom/security/nsHTTPSOnlyUtils.cpp | 24 +-
dom/security/test/https-first/browser.ini | 2 +
.../browser_httpsfirst_speculative_connect.js | 69 ++++
.../https-first/browser_mixed_content_console.js | 2 +-
.../file_httpsfirst_speculative_connect.html | 1 +
dom/security/test/https-only/browser.ini | 5 +
dom/security/test/https-only/browser_hsts_host.js | 111 +++++++
.../browser_httpsonly_speculative_connect.js | 69 ++++
.../file_httpsonly_speculative_connect.html | 1 +
dom/security/test/https-only/hsts_headers.sjs | 24 ++
netwerk/base/nsIOService.cpp | 22 ++
netwerk/base/nsNetUtil.cpp | 354 ++++++++++++---------
security/certverifier/CertVerifier.cpp | 22 +-
security/manager/ssl/SSLServerCertVerification.cpp | 15 +-
security/manager/ssl/nsNSSIOLayer.cpp | 13 +-
security/nss/lib/mozpkix/include/pkix/Result.h | 2 +
security/nss/lib/mozpkix/include/pkix/pkixnss.h | 1 +
tools/torbrowser/Makefile | 44 +++
tools/torbrowser/bridges.js | 77 +++++
tools/torbrowser/build.sh | 7 +
tools/torbrowser/clobber.sh | 6 +
tools/torbrowser/config.sh | 6 +
tools/torbrowser/deploy.sh | 23 ++
tools/torbrowser/fetch.sh | 30 ++
tools/torbrowser/ide.sh | 8 +
tools/torbrowser/jslint.sh | 8 +
35 files changed, 799 insertions(+), 256 deletions(-)
delete mode 100644 browser/components/search/extensions/google/_locales/region-by/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-kz/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-ru/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-tr/messages.json
create mode 100644 dom/security/test/https-first/browser_httpsfirst_speculative_connect.js
create mode 100644 dom/security/test/https-first/file_httpsfirst_speculative_connect.html
create mode 100644 dom/security/test/https-only/browser_hsts_host.js
create mode 100644 dom/security/test/https-only/browser_httpsonly_speculative_connect.js
create mode 100644 dom/security/test/https-only/file_httpsonly_speculative_connect.html
create mode 100644 dom/security/test/https-only/hsts_headers.sjs
create mode 100644 tools/torbrowser/Makefile
create mode 100644 tools/torbrowser/bridges.js
create mode 100755 tools/torbrowser/build.sh
create mode 100755 tools/torbrowser/clobber.sh
create mode 100755 tools/torbrowser/config.sh
create mode 100755 tools/torbrowser/deploy.sh
create mode 100755 tools/torbrowser/fetch.sh
create mode 100755 tools/torbrowser/ide.sh
create mode 100755 tools/torbrowser/jslint.sh
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
8

[tor-browser] branch tor-browser-102.2.0esr-12.0-1 updated (be437c77825e6 -> 7a5f625a1268e)
by gitolite role 23 Aug '22
by gitolite role 23 Aug '22
23 Aug '22
This is an automated email from the git hooks/post-receive script.
pierov pushed a change to branch tor-browser-102.2.0esr-12.0-1
in repository tor-browser.
from be437c77825e6 Bug 1785788 - Gracefully handle null nickname in CERT_GetCertNicknameWithValidity. r=rrelyea, a=RyanVM UPGRADE_NSS_RELEASE
new 0263cdea8399d Bug 1774413: Bundled fonts are not picked up on macOS r=jfkthame
new e0bdba0a4cbc5 Bug 1769030: Add a configure flag to load policies only from the local policies.json file r=mkaply,glandium
new 925d9f55f3330 Revert "Bug 1724777, optimize suppressed MicroTask handling, r=mccr8 a=RyanVM"
new f760b1fa0f315 Bug 40857: Modified the fat .aar creation file
new f7a6b0d27e152 Adding issue template for bugs.
new 06c71203222a8 Base Browser's .mozconfigs.
new 528b2482da189 Bug 24796: Comment out excess permissions from GeckoView
new 79cac622e03b7 Bug 25741: TBA: Disable GeckoNetworkManager
new a6ef10fc218f9 Bug 28125: Prevent non-Necko network connections
new 3d11ac70c1983 Bug 12974: Disable NTLM and Negotiate HTTP Auth
new dc7b61ab44b18 Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
new 3069471056420 Bug 16285: Exclude ClearKey system for now
new 36acb5f2d501d Bug 21431: Clean-up system extensions shipped in Firefox
new 9d87a40cea43b Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
new 614750b5acc47 Bug 40025: Remove Mozilla add-on install permissions
new 2a263de6ef6ec Bug 40002: Remove about:ion
new 0d4d0407672d5 Bug 26353: Prevent speculative connect that violated FPI.
new 2d24229055dce Bug 31740: Remove some unnecessary RemoteSettings instances
new 3b5d8ffb63921 Bug 30541: Disable WebGL readPixel() for web content
new 5cbd6783f9e94 Bug 28369: Stop shipping pingsender executable
new 07f8367508bf6 Bug 40073: Disable remote Public Suffix List fetching
new 4f478673ac5d2 Firefox preference overrides.
new 678808b5720e7 Bug 41043: Hardcode the UI font on Linux
new 1ce5efdfc0725 Bug 30605: Honor privacy.spoof_english in Android
new 90d19bc162e0d Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView
new ec56d827b3961 Bug 40171: Make WebRequest and GeckoWebExecutor First-Party aware
new f30ac7519d7d5 Bug 26345: Hide tracking protection UI
new cd910b14e5103 Bug 9173: Change the default Firefox profile directory to be relative.
new ca967e47a0332 Bug 18800: Remove localhost DNS lookup in nsProfileLock.cpp
new ae963c29ade9e Bug 27604: Fix addon issues when moving the profile directory
new 76d90701aa883 Bug 13028: Prevent potential proxy bypass cases.
new 910c627024fcc Bug 11641: Disable remoting by default.
new c02e032f03ac3 Bug 21830: Copying large text from web console leaks to /tmp
new 4e095a9cdc548 Bug 23104: Add a default line height compensation
new 600ef39e0242c Bug 40309: Avoid using regional OS locales
new 19e9ff76e679f Bug 40432: Prevent probing installed applications
new 21daaeac0743b Bug 32220: Improve the letterboxing experience
new a8be860217b38 Bug 40069: Add helpers for message passing with extensions
new 736545af69410 Bug 40253: Explicitly allow NoScript in Private Browsing mode.
new 1e94388c58cde Bug 40925: Implemented the Security Level component
new 84b269178e400 Bug 40926: Implemented the New Identity feature
new 2b5d749bb745f Bug 41089: Add tor-browser build scripts + Makefile to tor-browser
new a213c00667be1 Bug 2176: Rebrand Firefox to TorBrowser
new 1c800e4ddf3e1 Bring back old Firefox onboarding
new 82d69c1106307 Bug 26961: New user onboarding.
new cde9c84ce7586 TB3: Tor Browser's official .mozconfigs.
new 507cf264178ec Bug 40562: Added Tor-related preferences to 000-tor-browser.js
new 3f66d17ee6c60 Bug 13252: Do not store data in the app bundle
new 0e0a8207a7bc0 Bug 40597: Implement TorSettings module
new b374011a9aef5 Bug 10760: Integrate TorButton to TorBrowser core
new 1180f9ebc069f Bug 28044: Integrate Tor Launcher into tor-browser
new 9bcbb4f1cf290 Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
new f38145386a13e Add TorStrings module for localization
new 3ea7eb6821279 Bug 14631: Improve profile access error messages.
new abc53e21f7558 Bug 40209: Implement Basic Crypto Safety
new d58aa16073250 Bug 19273: Avoid JavaScript patching of the external app helper dialog.
new 6f0b607721b07 Bug 40807: Added QRCode.js to toolkit/modules
new 89cb6dc3bc6af Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
new adb5a76860b9e Bug 27476: Implement about:torconnect captive portal within Tor Browser
new 53fbd30e3d9e6 Bug 12620: TorBrowser regression tests
new 1aa5ea3a274cc Bug 4234: Use the Firefox Update Process for Tor Browser.
new 32a1407d85cce Bug 13379: Sign our MAR files.
new eedc5cd68a997 Bug 16940: After update, load local change notes.
new ad2172201155a Bug 32658: Create a new MAR signing key
new 43751e7bedb65 Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
new 53160ee14cf06 Bug 23247: Communicating security expectations for .onion
new 69120f75d9d08 Bug 30237: Add v3 onion services client authentication prompt
new 05c27e1e12a81 Bug 21952: Implement Onion-Location
new ef1316052475d Bug 40458: Implement .tor.onion aliases
new 7a5f625a1268e Bug 11698: Incorporate Tor Browser Manual pages into Tor Browser
The 70 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.eslintignore | 3 +
.gitignore | 3 +
.gitlab/issue_templates/UXBug.md | 29 +
.gitlab/issue_templates/bug.md | 32 +
.gitmodules | 3 +
browser/actors/AboutTBUpdateChild.jsm | 12 +
browser/actors/AboutTBUpdateParent.jsm | 120 +
browser/actors/CryptoSafetyChild.jsm | 87 +
browser/actors/CryptoSafetyParent.jsm | 142 +
browser/actors/NetErrorChild.jsm | 7 +
browser/actors/NetErrorParent.jsm | 6 +
browser/actors/moz.build | 8 +
browser/app/Makefile.in | 4 +-
browser/app/macbuild/Contents/Info.plist.in | 2 +-
browser/app/macbuild/Contents/MacOS-files.in | 1 -
browser/app/permissions | 16 +-
browser/app/profile/000-tor-browser.js | 92 +
browser/app/profile/001-base-profile.js | 672 ++
browser/app/profile/firefox.js | 32 +-
browser/base/content/aboutDialog-appUpdater.js | 2 +-
browser/base/content/aboutDialog.js | 14 +-
browser/base/content/aboutDialog.xhtml | 40 +-
.../base/content/abouttbupdate/aboutTBUpdate.css | 74 +
.../base/content/abouttbupdate/aboutTBUpdate.js | 27 +
.../base/content/abouttbupdate/aboutTBUpdate.xhtml | 39 +
browser/base/content/appmenu-viewcache.inc.xhtml | 15 +-
browser/base/content/browser-doctype.inc | 8 +
browser/base/content/browser-menubar.inc | 48 +-
browser/base/content/browser-sets.inc | 2 +
browser/base/content/browser-siteIdentity.js | 65 +-
browser/base/content/browser.css | 7 +
browser/base/content/browser.js | 113 +-
browser/base/content/browser.xhtml | 18 +
browser/base/content/certerror/aboutNetError.js | 22 +-
browser/base/content/certerror/aboutNetError.xhtml | 1 +
browser/base/content/main-popupset.inc.xhtml | 3 +
browser/base/content/navigator-toolbox.inc.xhtml | 14 +
browser/base/content/pageinfo/security.js | 49 +-
browser/base/content/popup-notifications.inc | 14 +
browser/base/content/tabbrowser-tab.js | 9 +
browser/base/content/utilityOverlay.js | 20 +
browser/base/jar.mn | 5 +
browser/base/moz.build | 3 +
browser/branding/alpha/VisualElements_150.png | Bin 0 -> 8412 bytes
browser/branding/alpha/VisualElements_70.png | Bin 0 -> 3496 bytes
browser/branding/alpha/background.png | Bin 0 -> 33362 bytes
browser/branding/alpha/bgstub.jpg | Bin 0 -> 12506 bytes
browser/branding/alpha/bgstub_2x.jpg | Bin 0 -> 49771 bytes
browser/branding/{nightly => alpha}/branding.nsi | 0
browser/branding/alpha/configure.sh | 5 +
browser/branding/alpha/content/about-logo.png | Bin 0 -> 21173 bytes
.../{nightly => alpha}/content/about-logo.svg | 0
browser/branding/alpha/content/about-logo(a)2x.png | Bin 0 -> 51309 bytes
browser/branding/alpha/content/about-wordmark.svg | 36 +
browser/branding/alpha/content/about.png | Bin 0 -> 18520 bytes
browser/branding/alpha/content/aboutDialog.css | 49 +
browser/branding/alpha/content/aboutlogins.svg | 59 +
.../content/firefox-wordmark.svg | 0
.../alpha/content/identity-icons-brand.svg | 8 +
browser/branding/alpha/content/jar.mn | 23 +
.../branding/{aurora => alpha}/content/moz.build | 0
browser/branding/alpha/content/tor-styles.css | 13 +
browser/branding/alpha/default128.png | Bin 0 -> 9397 bytes
browser/branding/alpha/default16.png | Bin 0 -> 811 bytes
browser/branding/alpha/default22.png | Bin 0 -> 1240 bytes
browser/branding/alpha/default24.png | Bin 0 -> 1368 bytes
browser/branding/alpha/default256.png | Bin 0 -> 20481 bytes
browser/branding/alpha/default32.png | Bin 0 -> 1956 bytes
browser/branding/alpha/default48.png | Bin 0 -> 3067 bytes
browser/branding/alpha/default512.png | Bin 0 -> 44907 bytes
browser/branding/alpha/default64.png | Bin 0 -> 4318 bytes
browser/branding/alpha/disk.icns | Bin 0 -> 1548786 bytes
browser/branding/alpha/document.icns | Bin 0 -> 564054 bytes
browser/branding/alpha/document.ico | Bin 0 -> 119671 bytes
browser/branding/{nightly => alpha}/dsstore | Bin
.../alpha/firefox.VisualElementsManifest.xml | 12 +
browser/branding/alpha/firefox.icns | Bin 0 -> 291096 bytes
browser/branding/alpha/firefox.ico | Bin 0 -> 119941 bytes
browser/branding/alpha/firefox.svg | 25 +
browser/branding/alpha/firefox64.ico | Bin 0 -> 119941 bytes
browser/branding/alpha/locales/en-US/brand.dtd | 11 +
browser/branding/alpha/locales/en-US/brand.ftl | 26 +
.../branding/alpha/locales/en-US/brand.properties | 14 +
.../branding/{official => alpha}/locales/jar.mn | 0
.../{aurora/content => alpha/locales}/moz.build | 0
browser/branding/{aurora => alpha}/moz.build | 0
browser/branding/{aurora => alpha}/newtab.ico | Bin
browser/branding/{aurora => alpha}/newwindow.ico | Bin
browser/branding/{aurora => alpha}/pbmode.ico | Bin
browser/branding/alpha/pref/firefox-branding.js | 34 +
.../{nightly => alpha}/stubinstaller/bgstub.jpg | Bin
.../stubinstaller/installing_page.css | 0
.../stubinstaller/profile_cleanup_page.css | 0
browser/branding/alpha/wizHeader.bmp | Bin 0 -> 34254 bytes
browser/branding/alpha/wizHeaderRTL.bmp | Bin 0 -> 34254 bytes
browser/branding/alpha/wizWatermark.bmp | Bin 0 -> 206038 bytes
browser/branding/branding-common.mozbuild | 2 +
browser/branding/nightly/VisualElements_150.png | Bin 25470 -> 11666 bytes
browser/branding/nightly/VisualElements_70.png | Bin 9590 -> 4273 bytes
browser/branding/nightly/configure.sh | 8 +-
.../nightly/content/identity-icons-brand.svg | 8 +
browser/branding/nightly/content/jar.mn | 4 +
browser/branding/nightly/content/tor-styles.css | 13 +
browser/branding/nightly/default128.png | Bin 12392 -> 13686 bytes
browser/branding/nightly/default16.png | Bin 756 -> 891 bytes
browser/branding/nightly/default22.png | Bin 1146 -> 1377 bytes
browser/branding/nightly/default24.png | Bin 1281 -> 1509 bytes
browser/branding/nightly/default256.png | Bin 30546 -> 33587 bytes
browser/branding/nightly/default32.png | Bin 1910 -> 2254 bytes
browser/branding/nightly/default48.png | Bin 3606 -> 3789 bytes
browser/branding/nightly/default512.png | Bin 0 -> 87830 bytes
browser/branding/nightly/default64.png | Bin 4826 -> 5426 bytes
browser/branding/nightly/document.icns | Bin 517716 -> 689723 bytes
browser/branding/nightly/document.ico | Bin 47042 -> 124422 bytes
.../nightly/firefox.VisualElementsManifest.xml | 2 +-
browser/branding/nightly/firefox.icns | Bin 1014680 -> 642308 bytes
browser/branding/nightly/firefox.ico | Bin 66730 -> 131711 bytes
browser/branding/nightly/firefox.svg | 29 +
browser/branding/nightly/firefox64.ico | Bin 38630 -> 131711 bytes
browser/branding/nightly/locales/en-US/brand.dtd | 2 +-
browser/branding/nightly/locales/en-US/brand.ftl | 2 +-
.../nightly/locales/en-US/brand.properties | 6 +-
browser/branding/nightly/locales/jar.mn | 7 +-
browser/branding/nightly/locales/moz.build | 2 -
browser/branding/nightly/wizHeader.bmp | Bin 25820 -> 34254 bytes
browser/branding/nightly/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes
browser/branding/nightly/wizWatermark.bmp | Bin 154544 -> 206038 bytes
browser/branding/official/VisualElements_150.png | Bin 23037 -> 7949 bytes
browser/branding/official/VisualElements_70.png | Bin 8763 -> 3374 bytes
browser/branding/official/configure.sh | 16 +-
.../official/content/identity-icons-brand.svg | 8 +
browser/branding/official/content/jar.mn | 4 +
browser/branding/official/content/tor-styles.css | 13 +
browser/branding/official/default128.png | Bin 13513 -> 9007 bytes
browser/branding/official/default16.png | Bin 722 -> 839 bytes
browser/branding/official/default22.png | Bin 1134 -> 1250 bytes
browser/branding/official/default24.png | Bin 1312 -> 1405 bytes
browser/branding/official/default256.png | Bin 32441 -> 19136 bytes
browser/branding/official/default32.png | Bin 1948 -> 1965 bytes
browser/branding/official/default48.png | Bin 3448 -> 3074 bytes
browser/branding/official/default512.png | Bin 0 -> 40438 bytes
browser/branding/official/default64.png | Bin 5459 -> 4196 bytes
browser/branding/official/disk.icns | Bin 1525764 -> 172073 bytes
browser/branding/official/document.icns | Bin 501145 -> 509227 bytes
browser/branding/official/document.ico | Bin 45478 -> 119916 bytes
.../official/firefox.VisualElementsManifest.xml | 2 +-
browser/branding/official/firefox.icns | Bin 1021785 -> 259709 bytes
browser/branding/official/firefox.ico | Bin 68328 -> 118595 bytes
browser/branding/official/firefox.svg | 31 +
browser/branding/official/firefox64.ico | Bin 38630 -> 118595 bytes
browser/branding/official/locales/en-US/brand.dtd | 2 +-
.../official/locales/en-US/brand.properties | 6 +-
browser/branding/official/wizHeader.bmp | Bin 25820 -> 34254 bytes
browser/branding/official/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes
browser/branding/official/wizWatermark.bmp | Bin 154544 -> 206038 bytes
browser/branding/tor-styles.inc.css | 87 +
browser/components/BrowserContentHandler.jsm | 90 +-
browser/components/BrowserGlue.jsm | 189 +-
browser/components/about/AboutRedirector.cpp | 81 +-
browser/components/about/components.conf | 8 +-
.../components/aboutlogins/AboutLoginsParent.jsm | 2 +
.../components/aboutlogins/content/aboutLogins.css | 5 +
.../components/aboutlogins/content/aboutLogins.js | 6 +
.../content/components/fxaccounts-button.css | 5 +
.../controlcenter/content/identityPanel.inc.xhtml | 22 +
.../customizableui/content/panelUI.inc.xhtml | 2 +-
browser/components/moz.build | 13 +-
.../components/newidentity/content/newidentity.js | 567 ++
browser/components/newidentity/jar.mn | 13 +
.../locale/en-US/newIdentity.properties | 8 +
browser/components/newidentity/moz.build | 1 +
browser/components/newtab/AboutNewTabService.jsm | 15 +-
.../components/onionservices/OnionAliasStore.jsm | 563 ++
.../onionservices/OnionLocationChild.jsm | 48 +
.../onionservices/OnionLocationParent.jsm | 169 +
.../content/authNotificationIcon.inc.xhtml | 6 +
.../onionservices/content/authPopup.inc.xhtml | 16 +
.../onionservices/content/authPreferences.css | 20 +
.../content/authPreferences.inc.xhtml | 19 +
.../onionservices/content/authPreferences.js | 68 +
.../components/onionservices/content/authPrompt.js | 359 +
.../components/onionservices/content/authUtil.jsm | 46 +
.../onionservices/content/netError/browser.svg | 3 +
.../onionservices/content/netError/network.svg | 3 +
.../content/netError/onionNetError.css | 70 +
.../content/netError/onionNetError.js | 241 +
.../onionservices/content/netError/onionsite.svg | 8 +
.../content/onionlocation-urlbar.inc.xhtml | 10 +
.../onionservices/content/onionlocation.css | 46 +
.../onionservices/content/onionlocation.svg | 3 +
.../content/onionlocationPreferences.inc.xhtml | 11 +
.../content/onionlocationPreferences.js | 34 +
.../onionservices/content/onionservices.css | 69 +
.../onionservices/content/savedKeysDialog.js | 259 +
.../onionservices/content/savedKeysDialog.xhtml | 42 +
browser/components/onionservices/jar.mn | 12 +
browser/components/onionservices/moz.build | 7 +
browser/components/preferences/home.inc.xhtml | 4 +-
browser/components/preferences/main.inc.xhtml | 54 -
browser/components/preferences/main.js | 14 -
browser/components/preferences/preferences.js | 14 +-
browser/components/preferences/preferences.xhtml | 12 +-
browser/components/preferences/privacy.inc.xhtml | 6 +
browser/components/preferences/privacy.js | 44 +
browser/components/rulesets/RulesetsChild.jsm | 11 +
browser/components/rulesets/RulesetsParent.jsm | 79 +
.../components/rulesets/content/aboutRulesets.css | 319 +
.../components/rulesets/content/aboutRulesets.html | 110 +
.../components/rulesets/content/aboutRulesets.js | 531 ++
browser/components/rulesets/content/securedrop.svg | 173 +
browser/components/rulesets/jar.mn | 5 +
browser/components/rulesets/moz.build | 6 +
browser/components/search/SearchSERPTelemetry.jsm | 6 -
.../search/extensions/blockchair-onion/favicon.png | Bin 0 -> 3116 bytes
.../extensions/blockchair-onion/manifest.json | 26 +
.../search/extensions/blockchair/favicon.png | Bin 0 -> 2898 bytes
.../search/extensions/blockchair/manifest.json | 26 +
.../search/extensions/ddg-onion/favicon.ico | Bin 0 -> 973 bytes
.../search/extensions/ddg-onion/manifest.json | 26 +
.../components/search/extensions/ddg/favicon.ico | Bin 5430 -> 0 bytes
.../components/search/extensions/ddg/favicon.png | Bin 0 -> 1150 bytes
.../components/search/extensions/ddg/manifest.json | 38 +-
.../extensions/google/_locales/b-1-d/messages.json | 23 -
.../extensions/google/_locales/b-1-e/messages.json | 23 -
.../extensions/google/_locales/b-d/messages.json | 23 -
.../extensions/google/_locales/b-e/messages.json | 23 -
.../extensions/google/_locales/en/messages.json | 24 -
.../google/_locales/region-by/messages.json | 20 -
.../google/_locales/region-kz/messages.json | 20 -
.../google/_locales/region-ru/messages.json | 20 -
.../google/_locales/region-tr/messages.json | 20 -
.../search/extensions/google/manifest.json | 17 +-
.../search/extensions/startpage/favicon.png | Bin 0 -> 1150 bytes
.../search/extensions/startpage/manifest.json | 26 +
.../extensions/twitter/favicon.ico} | Bin
.../search/extensions/twitter/manifest.json | 26 +
.../extensions/wikipedia/_locales/NN/messages.json | 20 -
.../extensions/wikipedia/_locales/NO/messages.json | 20 -
.../extensions/wikipedia/_locales/af/messages.json | 20 -
.../extensions/wikipedia/_locales/an/messages.json | 20 -
.../extensions/wikipedia/_locales/ar/messages.json | 20 -
.../wikipedia/_locales/ast/messages.json | 20 -
.../extensions/wikipedia/_locales/az/messages.json | 20 -
.../wikipedia/_locales/be-tarask/messages.json | 20 -
.../extensions/wikipedia/_locales/be/messages.json | 20 -
.../extensions/wikipedia/_locales/bg/messages.json | 20 -
.../extensions/wikipedia/_locales/bn/messages.json | 20 -
.../extensions/wikipedia/_locales/br/messages.json | 20 -
.../extensions/wikipedia/_locales/bs/messages.json | 20 -
.../extensions/wikipedia/_locales/ca/messages.json | 20 -
.../extensions/wikipedia/_locales/cy/messages.json | 20 -
.../extensions/wikipedia/_locales/cz/messages.json | 20 -
.../extensions/wikipedia/_locales/da/messages.json | 20 -
.../extensions/wikipedia/_locales/de/messages.json | 20 -
.../wikipedia/_locales/dsb/messages.json | 20 -
.../extensions/wikipedia/_locales/el/messages.json | 20 -
.../extensions/wikipedia/_locales/en/messages.json | 20 -
.../extensions/wikipedia/_locales/eo/messages.json | 20 -
.../extensions/wikipedia/_locales/es/messages.json | 20 -
.../extensions/wikipedia/_locales/et/messages.json | 20 -
.../extensions/wikipedia/_locales/eu/messages.json | 20 -
.../extensions/wikipedia/_locales/fa/messages.json | 20 -
.../extensions/wikipedia/_locales/fi/messages.json | 20 -
.../extensions/wikipedia/_locales/fr/messages.json | 20 -
.../wikipedia/_locales/fy-NL/messages.json | 20 -
.../wikipedia/_locales/ga-IE/messages.json | 20 -
.../extensions/wikipedia/_locales/gd/messages.json | 20 -
.../extensions/wikipedia/_locales/gl/messages.json | 20 -
.../extensions/wikipedia/_locales/gn/messages.json | 20 -
.../extensions/wikipedia/_locales/gu/messages.json | 20 -
.../extensions/wikipedia/_locales/he/messages.json | 20 -
.../extensions/wikipedia/_locales/hi/messages.json | 20 -
.../extensions/wikipedia/_locales/hr/messages.json | 20 -
.../wikipedia/_locales/hsb/messages.json | 20 -
.../extensions/wikipedia/_locales/hu/messages.json | 20 -
.../extensions/wikipedia/_locales/hy/messages.json | 20 -
.../extensions/wikipedia/_locales/ia/messages.json | 20 -
.../extensions/wikipedia/_locales/id/messages.json | 20 -
.../extensions/wikipedia/_locales/is/messages.json | 20 -
.../extensions/wikipedia/_locales/it/messages.json | 20 -
.../extensions/wikipedia/_locales/ja/messages.json | 20 -
.../extensions/wikipedia/_locales/ka/messages.json | 20 -
.../wikipedia/_locales/kab/messages.json | 20 -
.../extensions/wikipedia/_locales/kk/messages.json | 20 -
.../extensions/wikipedia/_locales/km/messages.json | 20 -
.../extensions/wikipedia/_locales/kn/messages.json | 20 -
.../extensions/wikipedia/_locales/kr/messages.json | 20 -
.../wikipedia/_locales/lij/messages.json | 20 -
.../extensions/wikipedia/_locales/lo/messages.json | 20 -
.../extensions/wikipedia/_locales/lt/messages.json | 20 -
.../wikipedia/_locales/ltg/messages.json | 20 -
.../extensions/wikipedia/_locales/lv/messages.json | 20 -
.../extensions/wikipedia/_locales/mk/messages.json | 20 -
.../extensions/wikipedia/_locales/mr/messages.json | 20 -
.../extensions/wikipedia/_locales/ms/messages.json | 20 -
.../extensions/wikipedia/_locales/my/messages.json | 20 -
.../extensions/wikipedia/_locales/ne/messages.json | 20 -
.../extensions/wikipedia/_locales/nl/messages.json | 20 -
.../extensions/wikipedia/_locales/oc/messages.json | 20 -
.../extensions/wikipedia/_locales/pa/messages.json | 20 -
.../extensions/wikipedia/_locales/pl/messages.json | 20 -
.../extensions/wikipedia/_locales/pt/messages.json | 20 -
.../extensions/wikipedia/_locales/rm/messages.json | 20 -
.../extensions/wikipedia/_locales/ro/messages.json | 20 -
.../extensions/wikipedia/_locales/ru/messages.json | 20 -
.../extensions/wikipedia/_locales/si/messages.json | 20 -
.../extensions/wikipedia/_locales/sk/messages.json | 20 -
.../extensions/wikipedia/_locales/sl/messages.json | 20 -
.../extensions/wikipedia/_locales/sq/messages.json | 20 -
.../extensions/wikipedia/_locales/sr/messages.json | 20 -
.../wikipedia/_locales/sv-SE/messages.json | 20 -
.../extensions/wikipedia/_locales/ta/messages.json | 20 -
.../extensions/wikipedia/_locales/te/messages.json | 20 -
.../extensions/wikipedia/_locales/th/messages.json | 20 -
.../extensions/wikipedia/_locales/tl/messages.json | 20 -
.../extensions/wikipedia/_locales/tr/messages.json | 20 -
.../extensions/wikipedia/_locales/uk/messages.json | 20 -
.../extensions/wikipedia/_locales/ur/messages.json | 20 -
.../extensions/wikipedia/_locales/uz/messages.json | 20 -
.../extensions/wikipedia/_locales/vi/messages.json | 20 -
.../extensions/wikipedia/_locales/wo/messages.json | 20 -
.../wikipedia/_locales/zh-CN/messages.json | 20 -
.../wikipedia/_locales/zh-TW/messages.json | 20 -
.../search/extensions/wikipedia/manifest.json | 15 +-
.../components/search/extensions/yahoo/favicon.ico | Bin 0 -> 5430 bytes
.../search/extensions/yahoo/manifest.json | 28 +
.../search/extensions/youtube/favicon.ico | Bin 0 -> 1150 bytes
.../search/extensions/youtube/manifest.json | 26 +
browser/components/securitylevel/SecurityLevel.jsm | 421 +
.../securitylevel/SecurityLevel.manifest | 1 +
browser/components/securitylevel/components.conf | 10 +
.../securitylevel/content/securityLevel.js | 615 ++
.../securitylevel/content/securityLevelButton.css | 18 +
.../content/securityLevelButton.inc.xhtml | 9 +
.../securitylevel/content/securityLevelIcon.svg | 40 +
.../securitylevel/content/securityLevelPanel.css | 71 +
.../content/securityLevelPanel.inc.xhtml | 46 +
.../content/securityLevelPreferences.css | 51 +
.../content/securityLevelPreferences.inc.xhtml | 62 +
browser/components/securitylevel/jar.mn | 11 +
.../locale/en-US/securityLevel.properties | 30 +
browser/components/securitylevel/moz.build | 13 +
browser/components/sessionstore/SessionStore.jsm | 10 +
browser/components/torconnect/TorConnectChild.jsm | 9 +
browser/components/torconnect/TorConnectParent.jsm | 202 +
.../torconnect/content/aboutTorConnect.css | 324 +
.../torconnect/content/aboutTorConnect.js | 843 ++
.../torconnect/content/aboutTorConnect.xhtml | 68 +
.../components/torconnect/content/arrow-right.svg | 4 +
browser/components/torconnect/content/bridge.svg | 5 +
.../torconnect/content/connection-failure.svg | 5 +
.../torconnect/content/connection-location.svg | 5 +
.../torconnect/content/onion-slash-fillable.svg | 5 +
.../components/torconnect/content/onion-slash.svg | 5 +
browser/components/torconnect/content/onion.svg | 4 +
.../torconnect/content/torBootstrapUrlbar.js | 95 +
.../torconnect/content/torconnect-urlbar.css | 37 +
.../torconnect/content/torconnect-urlbar.inc.xhtml | 10 +
browser/components/torconnect/jar.mn | 13 +
browser/components/torconnect/moz.build | 6 +
.../torpreferences/content/bridgeQrDialog.jsm | 51 +
.../torpreferences/content/bridgeQrDialog.xhtml | 25 +
.../content/bridgemoji-annotations.json | 9032 ++++++++++++++++++++
.../torpreferences/content/bridgemoji/1f300.svg | 1 +
.../torpreferences/content/bridgemoji/1f308.svg | 1 +
.../torpreferences/content/bridgemoji/1f30a.svg | 1 +
.../torpreferences/content/bridgemoji/1f30b.svg | 1 +
.../torpreferences/content/bridgemoji/1f319.svg | 1 +
.../torpreferences/content/bridgemoji/1f31f.svg | 1 +
.../torpreferences/content/bridgemoji/1f321.svg | 1 +
.../torpreferences/content/bridgemoji/1f32d.svg | 1 +
.../torpreferences/content/bridgemoji/1f32e.svg | 1 +
.../torpreferences/content/bridgemoji/1f332.svg | 1 +
.../torpreferences/content/bridgemoji/1f333.svg | 1 +
.../torpreferences/content/bridgemoji/1f334.svg | 1 +
.../torpreferences/content/bridgemoji/1f335.svg | 1 +
.../torpreferences/content/bridgemoji/1f336.svg | 1 +
.../torpreferences/content/bridgemoji/1f337.svg | 1 +
.../torpreferences/content/bridgemoji/1f339.svg | 1 +
.../torpreferences/content/bridgemoji/1f33a.svg | 1 +
.../torpreferences/content/bridgemoji/1f33b.svg | 1 +
.../torpreferences/content/bridgemoji/1f33d.svg | 1 +
.../torpreferences/content/bridgemoji/1f33f.svg | 1 +
.../torpreferences/content/bridgemoji/1f341.svg | 1 +
.../torpreferences/content/bridgemoji/1f344.svg | 1 +
.../torpreferences/content/bridgemoji/1f345.svg | 1 +
.../torpreferences/content/bridgemoji/1f346.svg | 1 +
.../torpreferences/content/bridgemoji/1f347.svg | 1 +
.../torpreferences/content/bridgemoji/1f348.svg | 1 +
.../torpreferences/content/bridgemoji/1f349.svg | 1 +
.../torpreferences/content/bridgemoji/1f34a.svg | 1 +
.../torpreferences/content/bridgemoji/1f34b.svg | 1 +
.../torpreferences/content/bridgemoji/1f34c.svg | 1 +
.../torpreferences/content/bridgemoji/1f34d.svg | 1 +
.../torpreferences/content/bridgemoji/1f34f.svg | 1 +
.../torpreferences/content/bridgemoji/1f350.svg | 1 +
.../torpreferences/content/bridgemoji/1f351.svg | 1 +
.../torpreferences/content/bridgemoji/1f352.svg | 1 +
.../torpreferences/content/bridgemoji/1f353.svg | 1 +
.../torpreferences/content/bridgemoji/1f354.svg | 1 +
.../torpreferences/content/bridgemoji/1f355.svg | 1 +
.../torpreferences/content/bridgemoji/1f368.svg | 1 +
.../torpreferences/content/bridgemoji/1f369.svg | 1 +
.../torpreferences/content/bridgemoji/1f36a.svg | 1 +
.../torpreferences/content/bridgemoji/1f36b.svg | 1 +
.../torpreferences/content/bridgemoji/1f36c.svg | 1 +
.../torpreferences/content/bridgemoji/1f36d.svg | 1 +
.../torpreferences/content/bridgemoji/1f37f.svg | 1 +
.../torpreferences/content/bridgemoji/1f380.svg | 1 +
.../torpreferences/content/bridgemoji/1f381.svg | 1 +
.../torpreferences/content/bridgemoji/1f382.svg | 1 +
.../torpreferences/content/bridgemoji/1f383.svg | 1 +
.../torpreferences/content/bridgemoji/1f388.svg | 1 +
.../torpreferences/content/bridgemoji/1f389.svg | 1 +
.../torpreferences/content/bridgemoji/1f38f.svg | 1 +
.../torpreferences/content/bridgemoji/1f392.svg | 1 +
.../torpreferences/content/bridgemoji/1f399.svg | 1 +
.../torpreferences/content/bridgemoji/1f39f.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ac.svg | 1 +
.../torpreferences/content/bridgemoji/1f3af.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ba.svg | 1 +
.../torpreferences/content/bridgemoji/1f3bb.svg | 1 +
.../torpreferences/content/bridgemoji/1f3be.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d3.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d4.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f3dd.svg | 1 +
.../torpreferences/content/bridgemoji/1f3e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f40a.svg | 1 +
.../torpreferences/content/bridgemoji/1f40c.svg | 1 +
.../torpreferences/content/bridgemoji/1f40d.svg | 1 +
.../torpreferences/content/bridgemoji/1f417.svg | 1 +
.../torpreferences/content/bridgemoji/1f418.svg | 1 +
.../torpreferences/content/bridgemoji/1f419.svg | 1 +
.../torpreferences/content/bridgemoji/1f41a.svg | 1 +
.../torpreferences/content/bridgemoji/1f41b.svg | 1 +
.../torpreferences/content/bridgemoji/1f41d.svg | 1 +
.../torpreferences/content/bridgemoji/1f41e.svg | 1 +
.../torpreferences/content/bridgemoji/1f41f.svg | 1 +
.../torpreferences/content/bridgemoji/1f420.svg | 1 +
.../torpreferences/content/bridgemoji/1f422.svg | 1 +
.../torpreferences/content/bridgemoji/1f425.svg | 1 +
.../torpreferences/content/bridgemoji/1f426.svg | 1 +
.../torpreferences/content/bridgemoji/1f428.svg | 1 +
.../torpreferences/content/bridgemoji/1f42a.svg | 1 +
.../torpreferences/content/bridgemoji/1f42c.svg | 1 +
.../torpreferences/content/bridgemoji/1f42d.svg | 1 +
.../torpreferences/content/bridgemoji/1f42e.svg | 1 +
.../torpreferences/content/bridgemoji/1f42f.svg | 1 +
.../torpreferences/content/bridgemoji/1f430.svg | 1 +
.../torpreferences/content/bridgemoji/1f431.svg | 1 +
.../torpreferences/content/bridgemoji/1f432.svg | 1 +
.../torpreferences/content/bridgemoji/1f433.svg | 1 +
.../torpreferences/content/bridgemoji/1f434.svg | 1 +
.../torpreferences/content/bridgemoji/1f435.svg | 1 +
.../torpreferences/content/bridgemoji/1f436.svg | 1 +
.../torpreferences/content/bridgemoji/1f437.svg | 1 +
.../torpreferences/content/bridgemoji/1f43a.svg | 1 +
.../torpreferences/content/bridgemoji/1f43b.svg | 1 +
.../torpreferences/content/bridgemoji/1f43f.svg | 1 +
.../torpreferences/content/bridgemoji/1f441.svg | 1 +
.../torpreferences/content/bridgemoji/1f451.svg | 1 +
.../torpreferences/content/bridgemoji/1f455.svg | 1 +
.../torpreferences/content/bridgemoji/1f457.svg | 1 +
.../torpreferences/content/bridgemoji/1f45f.svg | 1 +
.../torpreferences/content/bridgemoji/1f47d.svg | 1 +
.../torpreferences/content/bridgemoji/1f484.svg | 1 +
.../torpreferences/content/bridgemoji/1f488.svg | 1 +
.../torpreferences/content/bridgemoji/1f48d.svg | 1 +
.../torpreferences/content/bridgemoji/1f48e.svg | 1 +
.../torpreferences/content/bridgemoji/1f490.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f4b3.svg | 1 +
.../torpreferences/content/bridgemoji/1f4bf.svg | 1 +
.../torpreferences/content/bridgemoji/1f4cc.svg | 1 +
.../torpreferences/content/bridgemoji/1f4ce.svg | 1 +
.../torpreferences/content/bridgemoji/1f4d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f4fb.svg | 1 +
.../torpreferences/content/bridgemoji/1f50b.svg | 1 +
.../torpreferences/content/bridgemoji/1f511.svg | 1 +
.../torpreferences/content/bridgemoji/1f525.svg | 1 +
.../torpreferences/content/bridgemoji/1f526.svg | 1 +
.../torpreferences/content/bridgemoji/1f52c.svg | 1 +
.../torpreferences/content/bridgemoji/1f52d.svg | 1 +
.../torpreferences/content/bridgemoji/1f52e.svg | 1 +
.../torpreferences/content/bridgemoji/1f54a.svg | 1 +
.../torpreferences/content/bridgemoji/1f58c.svg | 1 +
.../torpreferences/content/bridgemoji/1f58d.svg | 1 +
.../torpreferences/content/bridgemoji/1f5ff.svg | 1 +
.../torpreferences/content/bridgemoji/1f680.svg | 1 +
.../torpreferences/content/bridgemoji/1f681.svg | 1 +
.../torpreferences/content/bridgemoji/1f686.svg | 1 +
.../torpreferences/content/bridgemoji/1f68b.svg | 1 +
.../torpreferences/content/bridgemoji/1f68d.svg | 1 +
.../torpreferences/content/bridgemoji/1f695.svg | 1 +
.../torpreferences/content/bridgemoji/1f697.svg | 1 +
.../torpreferences/content/bridgemoji/1f69a.svg | 1 +
.../torpreferences/content/bridgemoji/1f69c.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f6.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fa.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fc.svg | 1 +
.../torpreferences/content/bridgemoji/1f916.svg | 1 +
.../torpreferences/content/bridgemoji/1f93f.svg | 1 +
.../torpreferences/content/bridgemoji/1f941.svg | 1 +
.../torpreferences/content/bridgemoji/1f94c.svg | 1 +
.../torpreferences/content/bridgemoji/1f94f.svg | 1 +
.../torpreferences/content/bridgemoji/1f950.svg | 1 +
.../torpreferences/content/bridgemoji/1f951.svg | 1 +
.../torpreferences/content/bridgemoji/1f955.svg | 1 +
.../torpreferences/content/bridgemoji/1f956.svg | 1 +
.../torpreferences/content/bridgemoji/1f95c.svg | 1 +
.../torpreferences/content/bridgemoji/1f95d.svg | 1 +
.../torpreferences/content/bridgemoji/1f95e.svg | 1 +
.../torpreferences/content/bridgemoji/1f965.svg | 1 +
.../torpreferences/content/bridgemoji/1f966.svg | 1 +
.../torpreferences/content/bridgemoji/1f968.svg | 1 +
.../torpreferences/content/bridgemoji/1f96c.svg | 1 +
.../torpreferences/content/bridgemoji/1f96d.svg | 1 +
.../torpreferences/content/bridgemoji/1f96f.svg | 1 +
.../torpreferences/content/bridgemoji/1f980.svg | 1 +
.../torpreferences/content/bridgemoji/1f981.svg | 1 +
.../torpreferences/content/bridgemoji/1f984.svg | 1 +
.../torpreferences/content/bridgemoji/1f986.svg | 1 +
.../torpreferences/content/bridgemoji/1f987.svg | 1 +
.../torpreferences/content/bridgemoji/1f988.svg | 1 +
.../torpreferences/content/bridgemoji/1f989.svg | 1 +
.../torpreferences/content/bridgemoji/1f98a.svg | 1 +
.../torpreferences/content/bridgemoji/1f98b.svg | 1 +
.../torpreferences/content/bridgemoji/1f98c.svg | 1 +
.../torpreferences/content/bridgemoji/1f98e.svg | 1 +
.../torpreferences/content/bridgemoji/1f98f.svg | 1 +
.../torpreferences/content/bridgemoji/1f992.svg | 1 +
.../torpreferences/content/bridgemoji/1f993.svg | 1 +
.../torpreferences/content/bridgemoji/1f994.svg | 1 +
.../torpreferences/content/bridgemoji/1f995.svg | 1 +
.../torpreferences/content/bridgemoji/1f998.svg | 1 +
.../torpreferences/content/bridgemoji/1f999.svg | 1 +
.../torpreferences/content/bridgemoji/1f99a.svg | 1 +
.../torpreferences/content/bridgemoji/1f99c.svg | 1 +
.../torpreferences/content/bridgemoji/1f99d.svg | 1 +
.../torpreferences/content/bridgemoji/1f99e.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ad.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c1.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9d9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9da.svg | 1 +
.../torpreferences/content/bridgemoji/1f9dc.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e0.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ea.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ec.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ed.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f9.svg | 1 +
.../torpreferences/content/bridgemoji/1fa73.svg | 1 +
.../torpreferences/content/bridgemoji/1fa80.svg | 1 +
.../torpreferences/content/bridgemoji/1fa81.svg | 1 +
.../torpreferences/content/bridgemoji/1fa83.svg | 1 +
.../torpreferences/content/bridgemoji/1fa90.svg | 1 +
.../torpreferences/content/bridgemoji/1fa91.svg | 1 +
.../torpreferences/content/bridgemoji/1fa95.svg | 1 +
.../torpreferences/content/bridgemoji/1fa97.svg | 1 +
.../torpreferences/content/bridgemoji/1fab6.svg | 1 +
.../torpreferences/content/bridgemoji/1fad0.svg | 1 +
.../torpreferences/content/bridgemoji/1fad2.svg | 1 +
.../torpreferences/content/bridgemoji/1fad6.svg | 1 +
.../torpreferences/content/bridgemoji/23f0.svg | 1 +
.../torpreferences/content/bridgemoji/2600.svg | 1 +
.../torpreferences/content/bridgemoji/2602.svg | 1 +
.../torpreferences/content/bridgemoji/2604.svg | 1 +
.../torpreferences/content/bridgemoji/260e.svg | 1 +
.../torpreferences/content/bridgemoji/2693.svg | 1 +
.../torpreferences/content/bridgemoji/2696.svg | 1 +
.../torpreferences/content/bridgemoji/26bd.svg | 1 +
.../torpreferences/content/bridgemoji/26f2.svg | 1 +
.../torpreferences/content/bridgemoji/26f5.svg | 1 +
.../torpreferences/content/bridgemoji/2708.svg | 1 +
.../torpreferences/content/bridgemoji/270f.svg | 1 +
.../torpreferences/content/bridgemoji/2728.svg | 1 +
.../torpreferences/content/bridgemoji/2744.svg | 1 +
.../torpreferences/content/builtinBridgeDialog.jsm | 113 +
.../content/builtinBridgeDialog.xhtml | 31 +
.../components/torpreferences/content/check.svg | 3 +
.../content/connectionCategory.inc.xhtml | 9 +
.../torpreferences/content/connectionPane.js | 1158 +++
.../torpreferences/content/connectionPane.xhtml | 194 +
.../content/connectionSettingsDialog.jsm | 397 +
.../content/connectionSettingsDialog.xhtml | 60 +
.../components/torpreferences/content/network.svg | 0
.../torpreferences/content/provideBridgeDialog.jsm | 67 +
.../content/provideBridgeDialog.xhtml | 21 +
.../torpreferences/content/requestBridgeDialog.jsm | 206 +
.../content/requestBridgeDialog.xhtml | 35 +
.../torpreferences/content/torLogDialog.jsm | 84 +
.../torpreferences/content/torLogDialog.xhtml | 23 +
.../torpreferences/content/torPreferences.css | 714 ++
.../torpreferences/content/torPreferencesIcon.svg | 8 +
browser/components/torpreferences/jar.mn | 22 +
browser/components/torpreferences/moz.build | 1 +
browser/components/uitour/UITour-lib.js | 7 +
browser/components/uitour/UITour.jsm | 130 +-
browser/components/uitour/UITourChild.jsm | 33 +-
browser/components/urlbar/UrlbarInput.jsm | 37 +
browser/config/mozconfigs/base-browser | 34 +
browser/config/mozconfigs/tor-browser | 10 +
browser/confvars.sh | 35 +-
browser/extensions/moz.build | 13 +-
.../extensions/onboarding/OnboardingTelemetry.jsm | 610 ++
.../extensions/onboarding/OnboardingTourType.jsm | 56 +
browser/extensions/onboarding/README.md | 87 +
browser/extensions/onboarding/api.js | 275 +
browser/extensions/onboarding/background.js | 8 +
.../extensions/onboarding/content/Onboarding.jsm | 1920 +++++
.../extensions/onboarding/content/img/close.png | Bin 0 -> 798 bytes
.../content/img/figure_tor-circuit-display.png | Bin 0 -> 26334 bytes
.../content/img/figure_tor-expect-differences.png | Bin 0 -> 22290 bytes
.../onboarding/content/img/figure_tor-network.png | Bin 0 -> 11982 bytes
.../content/img/figure_tor-onion-services.png | Bin 0 -> 40968 bytes
.../onboarding/content/img/figure_tor-privacy.png | Bin 0 -> 35527 bytes
.../content/img/figure_tor-security-level.png | Bin 0 -> 11263 bytes
.../onboarding/content/img/figure_tor-security.png | Bin 0 -> 24554 bytes
.../content/img/figure_tor-toolbar-layout.png | Bin 0 -> 13269 bytes
.../onboarding/content/img/figure_tor-welcome.png | Bin 0 -> 48405 bytes
.../onboarding/content/img/icons_no-icon.png | Bin 0 -> 673 bytes
.../onboarding/content/img/icons_tour-complete.png | Bin 0 -> 694 bytes
.../onboarding/content/img/icons_tour-complete.svg | 17 +
.../content/onboarding-tor-circuit-display.js | 324 +
.../onboarding/content/onboarding-tour-agent.js | 107 +
.../extensions/onboarding/content/onboarding.css | 664 ++
.../extensions/onboarding/content/onboarding.js | 46 +
browser/extensions/onboarding/data_events.md | 154 +
browser/extensions/onboarding/jar.mn | 19 +
.../onboarding/locales/en-US/onboarding.properties | 126 +
browser/extensions/onboarding/locales/jar.mn | 8 +
.../onboarding/locales}/moz.build | 0
browser/extensions/onboarding/manifest.json | 26 +
browser/extensions/onboarding/moz.build | 29 +
.../{formautofill => onboarding}/schema.json | 0
.../onboarding/test/browser}/.eslintrc.js | 0
.../extensions/onboarding/test/browser/browser.ini | 18 +
.../browser/browser_onboarding_accessibility.js | 121 +
.../test/browser/browser_onboarding_keyboard.js | 205 +
.../browser/browser_onboarding_notification.js | 79 +
.../browser/browser_onboarding_notification_2.js | 114 +
.../browser/browser_onboarding_notification_3.js | 135 +
.../browser/browser_onboarding_notification_4.js | 114 +
.../browser/browser_onboarding_notification_5.js | 32 +
...arding_notification_click_auto_complete_tour.js | 62 +
.../browser_onboarding_select_default_tour.js | 112 +
.../test/browser/browser_onboarding_skip_tour.js | 65 +
.../test/browser/browser_onboarding_tours.js | 163 +
.../test/browser/browser_onboarding_tourset.js | 102 +
.../test/browser/browser_onboarding_uitour.js | 247 +
browser/extensions/onboarding/test/browser/head.js | 387 +
.../extensions/onboarding/test/unit}/.eslintrc.js | 0
browser/extensions/onboarding/test/unit/head.js | 58 +
.../test/unit/test-onboarding-tour-type.js | 155 +
.../extensions/onboarding/test/unit/xpcshell.ini | 5 +
browser/installer/Makefile.in | 8 +
browser/installer/package-manifest.in | 25 +-
browser/installer/windows/nsis/shared.nsh | 1 -
browser/locales/Makefile.in | 10 +-
.../locales/en-US/chrome/browser/aboutTBUpdate.dtd | 8 +
browser/locales/filter.py | 1 +
browser/locales/jar.mn | 10 +-
browser/locales/l10n.ini | 1 +
browser/locales/l10n.toml | 4 +
browser/modules/BridgeDB.jsm | 61 +
browser/modules/HomePage.jsm | 2 +-
browser/modules/Moat.jsm | 814 ++
browser/modules/TorConnect.jsm | 1081 +++
browser/modules/TorProcessService.jsm | 12 +
browser/modules/TorProtocolService.jsm | 510 ++
browser/modules/TorSettings.jsm | 788 ++
browser/modules/TorStrings.jsm | 978 +++
browser/modules/moz.build | 7 +
browser/moz.build | 1 +
browser/moz.configure | 8 +-
browser/themes/linux/browser.css | 9 -
browser/themes/shared/UITour.css | 56 +-
browser/themes/shared/browser-shared.css | 7 +
browser/themes/shared/controlcenter/panel.css | 4 +-
.../shared/customizableui/panelUI-shared.css | 3 +-
browser/themes/shared/icons/new_circuit.svg | 6 +
browser/themes/shared/icons/new_identity.svg | 9 +
.../shared/identity-block/identity-block.css | 32 +-
.../themes/shared/identity-block/onion-slash.svg | 5 +
.../themes/shared/identity-block/onion-warning.svg | 4 +
browser/themes/shared/identity-block/onion.svg | 4 +
browser/themes/shared/jar.inc.mn | 9 +
browser/themes/shared/notification-icons.css | 2 +
browser/themes/shared/onionPattern.css | 31 +
browser/themes/shared/onionPattern.inc.xhtml | 12 +
browser/themes/shared/onionPattern.svg | 22 +
browser/themes/shared/preferences/privacy.css | 4 +
browser/themes/shared/tabs.css | 6 +
browser/themes/shared/toolbarbutton-icons.css | 8 +
browser/themes/windows/browser.css | 9 -
build/application.ini.in | 2 +-
build/moz.configure/init.configure | 3 +-
config/createprecomplete.py | 18 +-
.../client/aboutdebugging/src/actions/runtimes.js | 5 +
.../images/aboutdebugging-firefox-aurora.svg | 35 +-
.../themes/images/aboutdebugging-firefox-beta.svg | 35 +-
.../themes/images/aboutdebugging-firefox-logo.svg | 11 +-
.../images/aboutdebugging-firefox-nightly.svg | 35 +-
.../images/aboutdebugging-firefox-release.svg | 35 +-
docshell/base/nsAboutRedirector.cpp | 6 +-
docshell/base/nsDocShell.cpp | 81 +-
docshell/build/components.conf | 1 +
dom/base/Document.cpp | 95 +-
dom/base/Document.h | 10 +-
dom/base/nsContentUtils.cpp | 19 +
dom/base/nsContentUtils.h | 5 +
dom/base/nsGlobalWindowOuter.cpp | 5 +-
dom/base/test/mochitest.ini | 2 -
dom/base/test/test_suppressed_microtasks.html | 62 -
dom/canvas/ClientWebGLContext.cpp | 8 +
dom/ipc/BrowserParent.cpp | 21 +
dom/ipc/BrowserParent.h | 3 +
dom/ipc/PBrowser.ipdl | 9 +
dom/ipc/WindowGlobalActor.cpp | 4 +-
dom/ipc/WindowGlobalChild.cpp | 6 +-
dom/security/nsMixedContentBlocker.cpp | 16 +-
dom/webidl/Document.webidl | 8 +
dom/workers/RuntimeService.cpp | 4 +-
dom/workers/WorkerPrivate.cpp | 2 +-
dom/worklet/WorkletThread.cpp | 2 +-
extensions/auth/nsHttpNegotiateAuth.cpp | 4 +
extensions/permissions/PermissionManager.cpp | 6 +-
gfx/thebes/gfxFcPlatformFontList.cpp | 8 +-
gfx/thebes/gfxMacPlatformFontList.h | 12 +
gfx/thebes/gfxMacPlatformFontList.mm | 83 +
gfx/thebes/gfxPlatformFontList.cpp | 4 +-
gfx/thebes/gfxPlatformMac.cpp | 73 +-
gfx/thebes/gfxPlatformMac.h | 2 +
intl/locale/LocaleService.cpp | 6 +
intl/strres/nsStringBundle.cpp | 1 +
js/xpconnect/src/xpc.msg | 10 +
layout/generic/ReflowInput.cpp | 19 +-
layout/generic/test/mochitest.ini | 1 +
layout/generic/test/test_tor_bug23104.html | 50 +
mobile/android/app/000-tor-browser-android.js | 47 +
mobile/android/app/geckoview-prefs.js | 2 +
mobile/android/app/mobile.js | 4 +
mobile/android/app/moz.build | 1 +
.../components/geckoview/GeckoViewStartup.jsm | 5 +
mobile/android/confvars.sh | 8 +
.../exoplayer2/upstream/DefaultHttpDataSource.java | 46 +-
mobile/android/geckoview/api.txt | 6 +
mobile/android/geckoview/build.gradle | 1 +
.../android/geckoview/src/main/AndroidManifest.xml | 14 +
.../gecko/media/GeckoMediaDrmBridgeV21.java | 50 +-
.../java/org/mozilla/gecko/util/ProxySelector.java | 25 +-
.../java/org/mozilla/geckoview/GeckoRuntime.java | 8 +-
.../mozilla/geckoview/GeckoRuntimeSettings.java | 50 +-
.../java/org/mozilla/geckoview/WebRequest.java | 18 +
mobile/android/gradle/with_gecko_binaries.gradle | 6 +-
mobile/android/installer/package-manifest.in | 4 +
.../modules/geckoview/GeckoViewProgress.jsm | 4 +
mobile/android/moz.configure | 21 +-
mobile/android/torbrowser.configure | 30 +
modules/libmar/tool/mar.c | 6 +-
modules/libmar/tool/moz.build | 12 +-
modules/libmar/verify/moz.build | 14 +-
modules/libpref/init/StaticPrefList.yaml | 10 +
moz.configure | 100 +
mozconfig-android-armv7 | 37 +
mozconfig-linux-i686 | 9 +
mozconfig-linux-x86_64 | 9 +
mozconfig-linux-x86_64-asan | 22 +
mozconfig-linux-x86_64-dev | 14 +
mozconfig-macos-x86_64 | 5 +
mozconfig-windows-i686 | 11 +
mozconfig-windows-x86_64 | 11 +
netwerk/base/nsSocketTransport2.cpp | 6 +
netwerk/build/components.conf | 11 +
netwerk/build/nsNetCID.h | 10 +
netwerk/dns/IOnionAliasService.idl | 34 +
netwerk/dns/OnionAliasService.cpp | 100 +
netwerk/dns/OnionAliasService.h | 40 +
netwerk/dns/effective_tld_names.dat | 2 +
netwerk/dns/moz.build | 4 +
netwerk/protocol/http/nsHttpNTLMAuth.cpp | 3 +
netwerk/socket/nsSOCKSIOLayer.cpp | 73 +-
.../url-classifier/UrlClassifierFeatureBase.cpp | 2 +-
netwerk/url-classifier/components.conf | 6 -
python/mozbuild/mozbuild/artifacts.py | 2 -
run-tbb-tests | 66 +
security/certverifier/CertVerifier.cpp | 22 +-
security/manager/ssl/RemoteSecuritySettings.jsm | 23 +
security/manager/ssl/SSLServerCertVerification.cpp | 23 +-
security/manager/ssl/SSLServerCertVerification.h | 4 +-
security/manager/ssl/nsNSSIOLayer.cpp | 13 +-
security/manager/ssl/nsSecureBrowserUI.cpp | 12 +
security/moz.build | 2 +-
security/nss/lib/certhigh/ocsp.c | 4 +
.../libpkix/pkix_pl_nss/module/pkix_pl_socket.c | 12 +
security/nss/lib/mozpkix/include/pkix/Result.h | 2 +
security/nss/lib/mozpkix/include/pkix/pkixnss.h | 1 +
security/nss/lib/ssl/Makefile | 2 +-
services/settings/IDBHelpers.jsm | 4 +
services/settings/dumps/blocklists/moz.build | 14 +-
services/settings/dumps/main/moz.build | 8 -
services/settings/dumps/security-state/moz.build | 1 -
taskcluster/ci/source-test/mozlint.yml | 1 +
tbb-tests-ignore.txt | 13 +
tbb-tests/browser.ini | 5 +
tbb-tests/browser_tor_TB4.js | 35 +
tbb-tests/browser_tor_bug2950.js | 74 +
tbb-tests/browser_tor_omnibox.js | 20 +
tbb-tests/mochitest.ini | 3 +
tbb-tests/moz.build | 9 +
tbb-tests/test_tor_bug2874.html | 25 +
toolkit/actors/AboutHttpsOnlyErrorParent.jsm | 5 +
.../components/antitracking/antitracking.manifest | 2 +-
toolkit/components/antitracking/components.conf | 7 -
.../EnterprisePoliciesParent.jsm | 9 +-
toolkit/components/extensions/Extension.jsm | 9 +
toolkit/components/extensions/ExtensionParent.jsm | 47 +
.../components/httpsonlyerror/content/errorpage.js | 19 +-
.../processsingleton/MainProcessSingleton.jsm | 4 +
.../remotebrowserutils/RemoteWebNavigation.jsm | 4 +
.../components/resistfingerprinting/RFPHelper.jsm | 97 +-
toolkit/components/search/SearchService.jsm | 46 +-
toolkit/components/telemetry/app/TelemetrySend.jsm | 28 +-
toolkit/components/telemetry/moz.build | 4 -
toolkit/content/license.html | 65 +
.../mozapps/profile/profileSelection.properties | 5 +
toolkit/modules/AppConstants.jsm | 29 +
toolkit/modules/Bech32Decode.jsm | 103 +
toolkit/modules/PopupNotifications.jsm | 6 +
toolkit/modules/QRCode.jsm | 1241 +++
toolkit/modules/RemotePageAccessManager.jsm | 41 +
toolkit/modules/UpdateUtils.jsm | 31 +-
toolkit/modules/moz.build | 6 +
toolkit/moz.build | 1 +
toolkit/moz.configure | 10 +
toolkit/mozapps/extensions/AddonManager.jsm | 25 +
.../mozapps/extensions/internal/XPIProvider.jsm | 14 +-
toolkit/mozapps/extensions/test/browser/head.js | 1 +
.../extensions/test/xpcshell/head_addons.js | 1 +
toolkit/mozapps/update/UpdateService.jsm | 275 +-
toolkit/mozapps/update/UpdateServiceStub.jsm | 4 +
toolkit/mozapps/update/UpdateTelemetry.jsm | 1 +
toolkit/mozapps/update/common/updatehelper.cpp | 8 +
toolkit/mozapps/update/nsIUpdateService.idl | 11 +
toolkit/mozapps/update/updater/launchchild_osx.mm | 2 +
toolkit/mozapps/update/updater/moz.build | 2 +-
.../updater/nightly_aurora_level3_primary.der | Bin 1225 -> 1245 bytes
.../updater/nightly_aurora_level3_secondary.der | Bin 1225 -> 1245 bytes
toolkit/mozapps/update/updater/release_primary.der | Bin 1225 -> 1229 bytes
.../mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes
.../mozapps/update/updater/updater-common.build | 24 +-
toolkit/mozapps/update/updater/updater.cpp | 350 +-
toolkit/profile/nsProfileLock.cpp | 11 +
toolkit/profile/nsToolkitProfileService.cpp | 57 +-
toolkit/profile/nsToolkitProfileService.h | 13 +-
toolkit/toolkit.mozbuild | 3 +-
toolkit/torproject/torbutton | 1 +
toolkit/xre/MacLaunchHelper.h | 2 +
toolkit/xre/MacLaunchHelper.mm | 2 +
toolkit/xre/MacRunFromDmgUtils.mm | 4 +-
toolkit/xre/moz.build | 3 +
toolkit/xre/nsAppRunner.cpp | 270 +-
toolkit/xre/nsUpdateDriver.cpp | 180 +-
toolkit/xre/nsXREDirProvider.cpp | 144 +-
toolkit/xre/nsXREDirProvider.h | 14 +
tools/lint/codespell.yml | 1 +
.../lib/environments/browser-window.js | 10 +-
.../lib/environments/frame-script.js | 1 +
tools/torbrowser/Makefile | 44 +
tools/torbrowser/bridges.js | 77 +
tools/torbrowser/build.sh | 7 +
tools/torbrowser/clobber.sh | 6 +
tools/torbrowser/config.sh | 6 +
tools/torbrowser/deploy.sh | 23 +
tools/torbrowser/fetch.sh | 30 +
tools/torbrowser/ide.sh | 7 +
tools/torbrowser/jslint.sh | 7 +
tools/torbrowser/update_bridgemoiji.py | 115 +
tools/update-packaging/common.sh | 64 +-
tools/update-packaging/make_full_update.sh | 25 +
tools/update-packaging/make_incremental_update.sh | 71 +-
.../exthandler/nsExternalHelperAppService.cpp | 222 +-
uriloader/exthandler/nsExternalHelperAppService.h | 3 +
.../exthandler/nsIExternalHelperAppService.idl | 47 +
widget/android/WebExecutorSupport.cpp | 9 +
widget/nsTransferable.cpp | 6 +
xpcom/base/CycleCollectedJSContext.cpp | 51 +-
xpcom/base/CycleCollectedJSContext.h | 29 +-
xpcom/base/ErrorList.py | 22 +
xpcom/ds/StaticAtoms.py | 1 +
xpcom/io/TorFileUtils.cpp | 96 +
xpcom/io/TorFileUtils.h | 32 +
xpcom/io/moz.build | 5 +
xpcom/io/nsAppFileLocationProvider.cpp | 72 +-
936 files changed, 39441 insertions(+), 3285 deletions(-)
create mode 100644 .gitlab/issue_templates/UXBug.md
create mode 100644 .gitlab/issue_templates/bug.md
create mode 100644 .gitmodules
create mode 100644 browser/actors/AboutTBUpdateChild.jsm
create mode 100644 browser/actors/AboutTBUpdateParent.jsm
create mode 100644 browser/actors/CryptoSafetyChild.jsm
create mode 100644 browser/actors/CryptoSafetyParent.jsm
create mode 100644 browser/app/profile/000-tor-browser.js
create mode 100644 browser/app/profile/001-base-profile.js
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.css
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.js
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.xhtml
create mode 100644 browser/base/content/browser-doctype.inc
create mode 100644 browser/branding/alpha/VisualElements_150.png
create mode 100644 browser/branding/alpha/VisualElements_70.png
create mode 100644 browser/branding/alpha/background.png
create mode 100644 browser/branding/alpha/bgstub.jpg
create mode 100644 browser/branding/alpha/bgstub_2x.jpg
copy browser/branding/{nightly => alpha}/branding.nsi (100%)
create mode 100644 browser/branding/alpha/configure.sh
create mode 100644 browser/branding/alpha/content/about-logo.png
copy browser/branding/{nightly => alpha}/content/about-logo.svg (100%)
create mode 100644 browser/branding/alpha/content/about-logo(a)2x.png
create mode 100644 browser/branding/alpha/content/about-wordmark.svg
create mode 100644 browser/branding/alpha/content/about.png
create mode 100644 browser/branding/alpha/content/aboutDialog.css
create mode 100644 browser/branding/alpha/content/aboutlogins.svg
copy browser/branding/{nightly => alpha}/content/firefox-wordmark.svg (100%)
create mode 100644 browser/branding/alpha/content/identity-icons-brand.svg
create mode 100644 browser/branding/alpha/content/jar.mn
copy browser/branding/{aurora => alpha}/content/moz.build (100%)
create mode 100644 browser/branding/alpha/content/tor-styles.css
create mode 100644 browser/branding/alpha/default128.png
create mode 100644 browser/branding/alpha/default16.png
create mode 100644 browser/branding/alpha/default22.png
create mode 100644 browser/branding/alpha/default24.png
create mode 100644 browser/branding/alpha/default256.png
create mode 100644 browser/branding/alpha/default32.png
create mode 100644 browser/branding/alpha/default48.png
create mode 100644 browser/branding/alpha/default512.png
create mode 100644 browser/branding/alpha/default64.png
create mode 100644 browser/branding/alpha/disk.icns
create mode 100644 browser/branding/alpha/document.icns
create mode 100644 browser/branding/alpha/document.ico
copy browser/branding/{nightly => alpha}/dsstore (100%)
create mode 100644 browser/branding/alpha/firefox.VisualElementsManifest.xml
create mode 100644 browser/branding/alpha/firefox.icns
create mode 100644 browser/branding/alpha/firefox.ico
create mode 100644 browser/branding/alpha/firefox.svg
create mode 100644 browser/branding/alpha/firefox64.ico
create mode 100644 browser/branding/alpha/locales/en-US/brand.dtd
create mode 100644 browser/branding/alpha/locales/en-US/brand.ftl
create mode 100644 browser/branding/alpha/locales/en-US/brand.properties
copy browser/branding/{official => alpha}/locales/jar.mn (100%)
copy browser/branding/{aurora/content => alpha/locales}/moz.build (100%)
copy browser/branding/{aurora => alpha}/moz.build (100%)
copy browser/branding/{aurora => alpha}/newtab.ico (100%)
copy browser/branding/{aurora => alpha}/newwindow.ico (100%)
copy browser/branding/{aurora => alpha}/pbmode.ico (100%)
create mode 100644 browser/branding/alpha/pref/firefox-branding.js
copy browser/branding/{nightly => alpha}/stubinstaller/bgstub.jpg (100%)
copy browser/branding/{nightly => alpha}/stubinstaller/installing_page.css (100%)
copy browser/branding/{aurora => alpha}/stubinstaller/profile_cleanup_page.css (100%)
create mode 100644 browser/branding/alpha/wizHeader.bmp
create mode 100644 browser/branding/alpha/wizHeaderRTL.bmp
create mode 100644 browser/branding/alpha/wizWatermark.bmp
create mode 100644 browser/branding/nightly/content/identity-icons-brand.svg
create mode 100644 browser/branding/nightly/content/tor-styles.css
create mode 100644 browser/branding/nightly/default512.png
create mode 100644 browser/branding/nightly/firefox.svg
create mode 100644 browser/branding/official/content/identity-icons-brand.svg
create mode 100644 browser/branding/official/content/tor-styles.css
create mode 100644 browser/branding/official/default512.png
create mode 100644 browser/branding/official/firefox.svg
create mode 100644 browser/branding/tor-styles.inc.css
create mode 100644 browser/components/newidentity/content/newidentity.js
create mode 100644 browser/components/newidentity/jar.mn
create mode 100644 browser/components/newidentity/locale/en-US/newIdentity.properties
create mode 100644 browser/components/newidentity/moz.build
create mode 100644 browser/components/onionservices/OnionAliasStore.jsm
create mode 100644 browser/components/onionservices/OnionLocationChild.jsm
create mode 100644 browser/components/onionservices/OnionLocationParent.jsm
create mode 100644 browser/components/onionservices/content/authNotificationIcon.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPopup.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPreferences.css
create mode 100644 browser/components/onionservices/content/authPreferences.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPreferences.js
create mode 100644 browser/components/onionservices/content/authPrompt.js
create mode 100644 browser/components/onionservices/content/authUtil.jsm
create mode 100644 browser/components/onionservices/content/netError/browser.svg
create mode 100644 browser/components/onionservices/content/netError/network.svg
create mode 100644 browser/components/onionservices/content/netError/onionNetError.css
create mode 100644 browser/components/onionservices/content/netError/onionNetError.js
create mode 100644 browser/components/onionservices/content/netError/onionsite.svg
create mode 100644 browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
create mode 100644 browser/components/onionservices/content/onionlocation.css
create mode 100644 browser/components/onionservices/content/onionlocation.svg
create mode 100644 browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
create mode 100644 browser/components/onionservices/content/onionlocationPreferences.js
create mode 100644 browser/components/onionservices/content/onionservices.css
create mode 100644 browser/components/onionservices/content/savedKeysDialog.js
create mode 100644 browser/components/onionservices/content/savedKeysDialog.xhtml
create mode 100644 browser/components/onionservices/jar.mn
create mode 100644 browser/components/onionservices/moz.build
create mode 100644 browser/components/rulesets/RulesetsChild.jsm
create mode 100644 browser/components/rulesets/RulesetsParent.jsm
create mode 100644 browser/components/rulesets/content/aboutRulesets.css
create mode 100644 browser/components/rulesets/content/aboutRulesets.html
create mode 100644 browser/components/rulesets/content/aboutRulesets.js
create mode 100644 browser/components/rulesets/content/securedrop.svg
create mode 100644 browser/components/rulesets/jar.mn
create mode 100644 browser/components/rulesets/moz.build
create mode 100644 browser/components/search/extensions/blockchair-onion/favicon.png
create mode 100644 browser/components/search/extensions/blockchair-onion/manifest.json
create mode 100644 browser/components/search/extensions/blockchair/favicon.png
create mode 100644 browser/components/search/extensions/blockchair/manifest.json
create mode 100644 browser/components/search/extensions/ddg-onion/favicon.ico
create mode 100644 browser/components/search/extensions/ddg-onion/manifest.json
delete mode 100644 browser/components/search/extensions/ddg/favicon.ico
create mode 100644 browser/components/search/extensions/ddg/favicon.png
delete mode 100644 browser/components/search/extensions/google/_locales/b-1-d/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-1-e/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-d/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-e/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/en/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-by/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-kz/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-ru/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/region-tr/messages.json
create mode 100644 browser/components/search/extensions/startpage/favicon.png
create mode 100644 browser/components/search/extensions/startpage/manifest.json
copy browser/components/{newtab/data/content/tippytop/favicons/twitter-com.ico => search/extensions/twitter/favicon.ico} (100%)
create mode 100644 browser/components/search/extensions/twitter/manifest.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NN/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NO/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/af/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/an/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ar/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ast/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/az/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bg/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/br/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bs/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ca/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cy/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cz/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/da/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/de/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/dsb/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/el/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/en/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/es/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/et/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fa/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gd/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/he/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hsb/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hy/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ia/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/id/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/is/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/it/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ja/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ka/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kab/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/km/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lij/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lt/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ltg/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lv/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ms/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/my/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ne/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/nl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/oc/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pa/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pt/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/rm/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ro/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ru/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/si/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sq/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ta/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/te/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/th/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ur/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uz/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/vi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/wo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json
create mode 100644 browser/components/search/extensions/yahoo/favicon.ico
create mode 100644 browser/components/search/extensions/yahoo/manifest.json
create mode 100644 browser/components/search/extensions/youtube/favicon.ico
create mode 100644 browser/components/search/extensions/youtube/manifest.json
create mode 100644 browser/components/securitylevel/SecurityLevel.jsm
create mode 100644 browser/components/securitylevel/SecurityLevel.manifest
create mode 100644 browser/components/securitylevel/components.conf
create mode 100644 browser/components/securitylevel/content/securityLevel.js
create mode 100644 browser/components/securitylevel/content/securityLevelButton.css
create mode 100644 browser/components/securitylevel/content/securityLevelButton.inc.xhtml
create mode 100644 browser/components/securitylevel/content/securityLevelIcon.svg
create mode 100644 browser/components/securitylevel/content/securityLevelPanel.css
create mode 100644 browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.css
create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
create mode 100644 browser/components/securitylevel/jar.mn
create mode 100644 browser/components/securitylevel/locale/en-US/securityLevel.properties
create mode 100644 browser/components/securitylevel/moz.build
create mode 100644 browser/components/torconnect/TorConnectChild.jsm
create mode 100644 browser/components/torconnect/TorConnectParent.jsm
create mode 100644 browser/components/torconnect/content/aboutTorConnect.css
create mode 100644 browser/components/torconnect/content/aboutTorConnect.js
create mode 100644 browser/components/torconnect/content/aboutTorConnect.xhtml
create mode 100644 browser/components/torconnect/content/arrow-right.svg
create mode 100644 browser/components/torconnect/content/bridge.svg
create mode 100644 browser/components/torconnect/content/connection-failure.svg
create mode 100644 browser/components/torconnect/content/connection-location.svg
create mode 100644 browser/components/torconnect/content/onion-slash-fillable.svg
create mode 100644 browser/components/torconnect/content/onion-slash.svg
create mode 100644 browser/components/torconnect/content/onion.svg
create mode 100644 browser/components/torconnect/content/torBootstrapUrlbar.js
create mode 100644 browser/components/torconnect/content/torconnect-urlbar.css
create mode 100644 browser/components/torconnect/content/torconnect-urlbar.inc.xhtml
create mode 100644 browser/components/torconnect/jar.mn
create mode 100644 browser/components/torconnect/moz.build
create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.jsm
create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.xhtml
create mode 100644 browser/components/torpreferences/content/bridgemoji-annotations.json
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f300.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f308.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f319.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f31f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f321.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f332.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f333.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f334.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f335.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f336.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f337.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f339.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f341.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f344.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f345.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f346.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f347.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f348.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f349.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f350.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f351.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f352.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f353.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f354.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f355.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f368.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f369.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f37f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f380.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f381.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f382.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f383.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f388.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f389.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f38f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f392.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f399.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f39f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ac.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3af.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ba.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3bb.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3be.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3dd.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3e1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ee.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f417.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f418.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f419.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f420.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f422.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f425.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f426.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f428.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f430.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f431.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f432.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f433.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f434.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f435.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f436.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f437.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f441.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f451.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f455.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f457.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f45f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f47d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f484.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f488.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f490.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4b3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4bf.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4cc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4ce.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4d5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4fb.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f50b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f511.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f525.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f526.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f54a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f5ff.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f680.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f681.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f686.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f695.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f697.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fa.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f916.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f93f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f941.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f950.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f951.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f955.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f956.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f965.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f966.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f968.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f980.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f981.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f984.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f986.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f987.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f988.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f989.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f992.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f993.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f994.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f995.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f998.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f999.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ad.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9d9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9da.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9dc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ea.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ec.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ed.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ee.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa73.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa80.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa81.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa83.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa90.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa91.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa95.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa97.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fab6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/23f0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2600.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2602.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2604.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/260e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2693.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2696.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26bd.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26f2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2708.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/270f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2728.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2744.svg
create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/check.svg
create mode 100644 browser/components/torpreferences/content/connectionCategory.inc.xhtml
create mode 100644 browser/components/torpreferences/content/connectionPane.js
create mode 100644 browser/components/torpreferences/content/connectionPane.xhtml
create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.jsm
create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.xhtml
copy toolkit/themes/shared/icons/defaultFavicon.svg => browser/components/torpreferences/content/network.svg (100%)
create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/torLogDialog.jsm
create mode 100644 browser/components/torpreferences/content/torLogDialog.xhtml
create mode 100644 browser/components/torpreferences/content/torPreferences.css
create mode 100644 browser/components/torpreferences/content/torPreferencesIcon.svg
create mode 100644 browser/components/torpreferences/jar.mn
create mode 100644 browser/components/torpreferences/moz.build
create mode 100644 browser/config/mozconfigs/base-browser
create mode 100644 browser/config/mozconfigs/tor-browser
create mode 100644 browser/extensions/onboarding/OnboardingTelemetry.jsm
create mode 100644 browser/extensions/onboarding/OnboardingTourType.jsm
create mode 100644 browser/extensions/onboarding/README.md
create mode 100644 browser/extensions/onboarding/api.js
create mode 100644 browser/extensions/onboarding/background.js
create mode 100644 browser/extensions/onboarding/content/Onboarding.jsm
create mode 100644 browser/extensions/onboarding/content/img/close.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-circuit-display.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-expect-differences.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-network.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-onion-services.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-privacy.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security-level.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-toolbar-layout.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-welcome.png
create mode 100644 browser/extensions/onboarding/content/img/icons_no-icon.png
create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.png
create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.svg
create mode 100644 browser/extensions/onboarding/content/onboarding-tor-circuit-display.js
create mode 100644 browser/extensions/onboarding/content/onboarding-tour-agent.js
create mode 100644 browser/extensions/onboarding/content/onboarding.css
create mode 100644 browser/extensions/onboarding/content/onboarding.js
create mode 100644 browser/extensions/onboarding/data_events.md
create mode 100644 browser/extensions/onboarding/jar.mn
create mode 100644 browser/extensions/onboarding/locales/en-US/onboarding.properties
create mode 100644 browser/extensions/onboarding/locales/jar.mn
copy browser/{branding/aurora/content => extensions/onboarding/locales}/moz.build (100%)
create mode 100644 browser/extensions/onboarding/manifest.json
create mode 100644 browser/extensions/onboarding/moz.build
copy browser/extensions/{formautofill => onboarding}/schema.json (100%)
copy browser/{base/content/test/about => extensions/onboarding/test/browser}/.eslintrc.js (100%)
create mode 100644 browser/extensions/onboarding/test/browser/browser.ini
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_accessibility.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_keyboard.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_2.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_3.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_4.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_5.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_click_auto_complete_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_select_default_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_skip_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js
create mode 100644 browser/extensions/onboarding/test/browser/head.js
copy {ipc/testshell/tests => browser/extensions/onboarding/test/unit}/.eslintrc.js (100%)
create mode 100644 browser/extensions/onboarding/test/unit/head.js
create mode 100644 browser/extensions/onboarding/test/unit/test-onboarding-tour-type.js
create mode 100644 browser/extensions/onboarding/test/unit/xpcshell.ini
create mode 100644 browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd
create mode 100644 browser/modules/BridgeDB.jsm
create mode 100644 browser/modules/Moat.jsm
create mode 100644 browser/modules/TorConnect.jsm
create mode 100644 browser/modules/TorProcessService.jsm
create mode 100644 browser/modules/TorProtocolService.jsm
create mode 100644 browser/modules/TorSettings.jsm
create mode 100644 browser/modules/TorStrings.jsm
create mode 100644 browser/themes/shared/icons/new_circuit.svg
create mode 100644 browser/themes/shared/icons/new_identity.svg
create mode 100644 browser/themes/shared/identity-block/onion-slash.svg
create mode 100644 browser/themes/shared/identity-block/onion-warning.svg
create mode 100644 browser/themes/shared/identity-block/onion.svg
create mode 100644 browser/themes/shared/onionPattern.css
create mode 100644 browser/themes/shared/onionPattern.inc.xhtml
create mode 100644 browser/themes/shared/onionPattern.svg
delete mode 100644 dom/base/test/test_suppressed_microtasks.html
create mode 100644 layout/generic/test/test_tor_bug23104.html
create mode 100644 mobile/android/app/000-tor-browser-android.js
create mode 100644 mobile/android/torbrowser.configure
create mode 100644 mozconfig-android-armv7
create mode 100644 mozconfig-linux-i686
create mode 100644 mozconfig-linux-x86_64
create mode 100644 mozconfig-linux-x86_64-asan
create mode 100644 mozconfig-linux-x86_64-dev
create mode 100644 mozconfig-macos-x86_64
create mode 100644 mozconfig-windows-i686
create mode 100644 mozconfig-windows-x86_64
create mode 100644 netwerk/dns/IOnionAliasService.idl
create mode 100644 netwerk/dns/OnionAliasService.cpp
create mode 100644 netwerk/dns/OnionAliasService.h
create mode 100755 run-tbb-tests
create mode 100644 tbb-tests-ignore.txt
create mode 100644 tbb-tests/browser.ini
create mode 100644 tbb-tests/browser_tor_TB4.js
create mode 100644 tbb-tests/browser_tor_bug2950.js
create mode 100644 tbb-tests/browser_tor_omnibox.js
create mode 100644 tbb-tests/mochitest.ini
create mode 100644 tbb-tests/moz.build
create mode 100644 tbb-tests/test_tor_bug2874.html
create mode 100644 toolkit/modules/Bech32Decode.jsm
create mode 100644 toolkit/modules/QRCode.jsm
create mode 160000 toolkit/torproject/torbutton
create mode 100644 tools/torbrowser/Makefile
create mode 100644 tools/torbrowser/bridges.js
create mode 100755 tools/torbrowser/build.sh
create mode 100755 tools/torbrowser/clobber.sh
create mode 100755 tools/torbrowser/config.sh
create mode 100755 tools/torbrowser/deploy.sh
create mode 100755 tools/torbrowser/fetch.sh
create mode 100755 tools/torbrowser/ide.sh
create mode 100755 tools/torbrowser/jslint.sh
create mode 100755 tools/torbrowser/update_bridgemoiji.py
create mode 100644 xpcom/io/TorFileUtils.cpp
create mode 100644 xpcom/io/TorFileUtils.h
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
70

[tor-browser] annotated tag tor-browser-91.13.0esr-11.5-1-build1 created (now 2e38d87dbc5d3)
by gitolite role 22 Aug '22
by gitolite role 22 Aug '22
22 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to annotated tag tor-browser-91.13.0esr-11.5-1-build1
in repository tor-browser.
at 2e38d87dbc5d3 (tag)
tagging 01085f53eece2cbb7ec9f38a7bc43f9a20a72fc8 (commit)
replaces FIREFOX_91_13_0esr_BUILD1
by Richard Pospesel
on Mon Aug 22 20:44:39 2022 +0000
- Log -----------------------------------------------------------------
Tagging build1 for 91.13esr-based stable
-----BEGIN PGP SIGNATURE-----
iQJLBAABCAA1FiEEvnyRTMkiztnZPSO33kc2A2PzSywFAmMD6sQXHHJpY2hhcmRA
dG9ycHJvamVjdC5vcmcACgkQ3kc2A2PzSyxhCw//bMt02QUemKR/WTCCtEbitxje
KEAoNRqjWfstDLxM6AS8Hr5lzXx0KFGIwT6kKo5KWRX/VDOUQIeDtH9K5SJeWDZr
7n8h3b7LrJC2ONXyej2gAtzGI1/Ze+DvONq+2DBSN4DdBpLMHm0wToZQfeOkpD3a
w4t8QwCSP/WVo/7bhKYPryjY+wBD3u+dMMPGmGYzcr+zFR1qdIUjhZZjY++TKCE2
O5QMEBoonVDA8trsKGRxq6sJBYOJtOelSFFcnHs/vPVlK1/a0SVjFLAgZU/tqmTy
Ji1+VtICf1a3n1AF4M9fXzb8HouRY9sMoTy8QFh/iqWpe62kg8B8Yuz0eUT17HN/
fbSMS+OWm3Bl8R6MdcKCcwc6tS1eU/46diRml3QsHbxmbRywDg1NUNWSZFtiPE0l
bI+lWhZOZMuOhBoKYv7jtS6iUkr0eUdZVh6CeuWVg/5Rfq/gsICy6SZX0D0TYuhG
W3lS9eK8dK3ZH49GPGPGgQRIyIIwh+b8awmZCd0GKibp8UwXdAVKMlehoBeujJ9W
Av0/WSB2GsC33s3S2vII8GIlW1UoNE/UI+lopXpBbzv2z3ypgM3ZtfRlSZKc6AkM
EVx28vb90HJB7pXETuEuwU+stv9JsOI842iVj7PUdFpEO+xOabdU6nnf8S7/L4PK
ycUJKTYpkXTxaqSFBWY=
=kUQ/
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
No new revisions were added by this update.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[tor-browser] branch tor-browser-91.13.0esr-11.5-1 updated (d85bbabbb0375 -> 01085f53eece2)
by gitolite role 22 Aug '22
by gitolite role 22 Aug '22
22 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch tor-browser-91.13.0esr-11.5-1
in repository tor-browser.
from d85bbabbb0375 No bug - Tagging 4caf887c1172a3c246c71982cb79c8a3828406cb with FIREFOX_91_13_0esr_BUILD1 a=release CLOSED TREE DONTBUILD
new 9901c162bd7c4 Fixed a Firefox include problem
new 8a441b15c88e2 Bug 41050: HTTPS-Only Mode Alert's "Continue to HTTP Site" button doesn't work on IP addresses
new 2dba6080d9a8f Revert "Bug 1724777, optimize suppressed MicroTask handling, r=mccr8 a=RyanVM"
new e53b42f187e91 Bug 41004: Bundled fonts are not picked up on macOS
new 467263e239e94 Adding issue template for bugs.
new 855deaf5b99fc Base Browser's .mozconfigs.
new 3d7d885ad8163 Bug 24796 - Comment out excess permissions from GeckoView
new a0633443a2bf3 Bug 25741 - TBA: Disable GeckoNetworkManager
new 728d34e5faeef Bug 28125 - Prevent non-Necko network connections
new 6181d02d5e52e Bug 12974: Disable NTLM and Negotiate HTTP Auth
new 1fd1e7273dddb Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
new bd93a26f27567 Bug 16285: Exclude ClearKey system for now
new b2e39a2845060 Bug 21431: Clean-up system extensions shipped in Firefox
new f5d6f2e4bfaec Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
new 64693392e2e95 Bug 40025: Remove Mozilla add-on install permissions
new 2ad6cdd902ec8 Bug 40002: Remove about:ion
new 8e4c2fac71ee0 Bug 18821: Disable libmdns for Android and Desktop
new a075a3a0802eb Bug 26353: Prevent speculative connect that violated FPI.
new 4d92627291100 Bug 31740: Remove some unnecessary RemoteSettings instances
new 6208f35896aef Bug 30541: Disable WebGL readPixel() for web content
new 5463ca2de3d9a Bug 28369: Stop shipping pingsender executable
new 8b815ea8679a2 Bug 40073: Disable remote Public Suffix List fetching
new 30836c6a49a09 Firefox preference overrides.
new 14a8f67e3e5de Bug 41043: Hardcode the UI font on Linux
new b4c26a4276076 Bug 40125: Expose Security Level pref in GeckoView
new 77e419fa01d61 Bug 30605: Honor privacy.spoof_english in Android
new d56aa37292bb7 Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView
new d8b0fedb1091c Bug 40198: Expose privacy.spoof_english pref in GeckoView
new d840ea94702ca Bug 40171: Make WebRequest and GeckoWebExecutor First-Party aware
new d6c7bd56a5b39 Bug 26345: Hide tracking protection UI
new f780ad5a22ad8 Bug 9173: Change the default Firefox profile directory to be relative.
new 02b1b6c205c5b Bug 18800: Remove localhost DNS lookup in nsProfileLock.cpp
new 68960fad06683 Bug 27604: Fix addon issues when moving the profile directory
new 8175dd7fcedb1 Bug 32418: Add a configure flag to load policies only from the local policies.json
new 341052aa680c4 Bug 13028: Prevent potential proxy bypass cases.
new ddda515779974 Bug 11641: Disable remoting by default.
new 253eb5763a39b Bug 21830: Copying large text from web console leaks to /tmp
new 021d315777e3f Bug 23104: Add a default line height compensation
new a7a28b7059f1f Bug 40309: Avoid using regional OS locales
new dacee9da27e95 Bug 40432: Prevent probing installed applications
new 30ddf9a89933a Bug 32220: Improve the letterboxing experience
new b6f5b79cd36e4 Bug 2176: Rebrand Firefox to TorBrowser
new a35eaf4a106c6 Bring back old Firefox onboarding
new 2d36c8f20b5c3 Bug 26961: New user onboarding.
new 5fc5962d7d4c2 Bug 40069: Add helpers for message passing with extensions
new 666ee95c3662c TB3: Tor Browser's official .mozconfigs.
new c134935dd4e5b Bug 40562: Added Tor-related preferences to 000-tor-browser.js
new 6b003dfe3c310 Bug 13252: Do not store data in the app bundle
new b360fce71c351 Bug 40597: Implement TorSettings module
new 68d6ba5377843 Bug 10760: Integrate TorButton to TorBrowser core
new c8b871e2acd53 Bug 28044: Integrate Tor Launcher into tor-browser
new 5f39767a76368 Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
new be1e913c20120 Add TorStrings module for localization
new 3f9cc62477d29 Bug 14631: Improve profile access error messages.
new 7b2fde7ef8129 40209: Implement Basic Crypto Safety
new a9c4a6b15288e Bug 19273: Avoid JavaScript patching of the external app helper dialog.
new 63176f2520e6d Bug 40807: Added QRCode.js to toolkit/modules
new b238da7a84042 Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
new 88629b06706da Bug 27476: Implement about:torconnect captive portal within Tor Browser
new f1736372b94e4 Bug 12620: TorBrowser regression tests
new 79f5819b5db1b Bug 40253: Explicitly allow NoScript in Private Browsing mode.
new 2da1f62db392b Bug 25658: Replace security slider with security level UI
new 34d8f9cfdb3af Bug 27511: Add new identity button to toolbar
new 96d7b81d812da Bug 4234: Use the Firefox Update Process for Tor Browser.
new 13f19afbe9a18 Bug 13379: Sign our MAR files.
new 45a0dae28bd7e Bug 16940: After update, load local change notes.
new 440e379d5657f Bug 32658: Create a new MAR signing key
new 113d625c71803 Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
new 0e1c61dc390a7 Bug 23247: Communicating security expectations for .onion
new 8a19ce7b9059d Bug 30237: Add v3 onion services client authentication prompt
new 22657d19d89f9 Bug 21952: Implement Onion-Location
new 3506d3dffb6c0 Bug 40458: Implement .tor.onion aliases
new 01085f53eece2 Bug 11698: Incorporate Tor Browser Manual pages into Tor Browser
The 73 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.eslintignore | 3 +
.gitlab/issue_templates/UXBug.md | 29 +
.gitlab/issue_templates/bug.md | 32 +
.gitmodules | 3 +
browser/actors/AboutTBUpdateChild.jsm | 12 +
browser/actors/AboutTBUpdateParent.jsm | 120 +
browser/actors/CryptoSafetyChild.jsm | 87 +
browser/actors/CryptoSafetyParent.jsm | 142 +
browser/actors/NetErrorChild.jsm | 7 +
browser/actors/NetErrorParent.jsm | 8 +
browser/actors/moz.build | 8 +
browser/app/Makefile.in | 4 +-
browser/app/macbuild/Contents/Info.plist.in | 2 +-
browser/app/macbuild/Contents/MacOS-files.in | 1 -
browser/app/permissions | 15 +-
browser/app/profile/000-tor-browser.js | 93 +
browser/app/profile/001-base-profile.js | 660 ++
browser/app/profile/firefox.js | 32 +-
browser/base/content/aboutDialog-appUpdater.js | 2 +-
browser/base/content/aboutDialog.js | 12 +-
browser/base/content/aboutDialog.xhtml | 38 +-
.../base/content/abouttbupdate/aboutTBUpdate.css | 74 +
.../base/content/abouttbupdate/aboutTBUpdate.js | 27 +
.../base/content/abouttbupdate/aboutTBUpdate.xhtml | 39 +
browser/base/content/appmenu-viewcache.inc.xhtml | 32 +-
browser/base/content/browser-doctype.inc | 6 +
browser/base/content/browser-menubar.inc | 45 +-
browser/base/content/browser-sets.inc | 2 +
browser/base/content/browser-siteIdentity.js | 47 +-
browser/base/content/browser.css | 7 +
browser/base/content/browser.js | 103 +-
browser/base/content/browser.xhtml | 14 +
browser/base/content/certerror/aboutNetError.js | 22 +-
browser/base/content/certerror/aboutNetError.xhtml | 1 +
browser/base/content/main-popupset.inc.xhtml | 3 +
browser/base/content/navigator-toolbox.inc.xhtml | 17 +
browser/base/content/pageinfo/security.js | 64 +-
browser/base/content/popup-notifications.inc | 14 +
browser/base/content/tab-content.js | 6 +
browser/base/content/tabbrowser-tab.js | 9 +
browser/base/content/utilityOverlay.js | 17 +
browser/base/jar.mn | 5 +
browser/base/moz.build | 3 +
browser/branding/alpha/VisualElements_150.png | Bin 0 -> 8412 bytes
browser/branding/alpha/VisualElements_70.png | Bin 0 -> 3496 bytes
browser/branding/alpha/background.png | Bin 0 -> 33362 bytes
browser/branding/alpha/bgstub.jpg | Bin 0 -> 12506 bytes
browser/branding/alpha/bgstub_2x.jpg | Bin 0 -> 49771 bytes
browser/branding/{nightly => alpha}/branding.nsi | 0
browser/branding/alpha/configure.sh | 5 +
browser/branding/alpha/content/about-logo.png | Bin 0 -> 21173 bytes
.../{nightly => alpha}/content/about-logo.svg | 0
browser/branding/alpha/content/about-logo(a)2x.png | Bin 0 -> 51309 bytes
browser/branding/alpha/content/about-wordmark.svg | 36 +
browser/branding/alpha/content/about.png | Bin 0 -> 18520 bytes
.../{nightly => alpha}/content/aboutDialog.css | 0
browser/branding/alpha/content/aboutlogins.svg | 59 +
.../content/firefox-wordmark.svg | 0
.../alpha/content/identity-icons-brand.svg | 8 +
browser/branding/alpha/content/jar.mn | 23 +
.../branding/{aurora => alpha}/content/moz.build | 0
browser/branding/alpha/content/tor-styles.css | 13 +
browser/branding/alpha/default128.png | Bin 0 -> 9397 bytes
browser/branding/alpha/default16.png | Bin 0 -> 811 bytes
browser/branding/alpha/default22.png | Bin 0 -> 1240 bytes
browser/branding/alpha/default24.png | Bin 0 -> 1368 bytes
browser/branding/alpha/default256.png | Bin 0 -> 20481 bytes
browser/branding/alpha/default32.png | Bin 0 -> 1956 bytes
browser/branding/alpha/default48.png | Bin 0 -> 3067 bytes
browser/branding/alpha/default512.png | Bin 0 -> 44907 bytes
browser/branding/alpha/default64.png | Bin 0 -> 4318 bytes
browser/branding/alpha/disk.icns | Bin 0 -> 1548786 bytes
browser/branding/alpha/document.icns | Bin 0 -> 564054 bytes
browser/branding/alpha/document.ico | Bin 0 -> 119671 bytes
browser/branding/{nightly => alpha}/dsstore | Bin
.../alpha/firefox.VisualElementsManifest.xml | 12 +
browser/branding/alpha/firefox.icns | Bin 0 -> 291096 bytes
browser/branding/alpha/firefox.ico | Bin 0 -> 119941 bytes
browser/branding/alpha/firefox.svg | 25 +
browser/branding/alpha/firefox64.ico | Bin 0 -> 119941 bytes
browser/branding/alpha/locales/en-US/brand.dtd | 11 +
browser/branding/alpha/locales/en-US/brand.ftl | 26 +
.../branding/alpha/locales/en-US/brand.properties | 14 +
.../branding/{official => alpha}/locales/jar.mn | 0
.../{aurora/content => alpha/locales}/moz.build | 0
browser/branding/{aurora => alpha}/moz.build | 0
browser/branding/{aurora => alpha}/newtab.ico | Bin
browser/branding/{aurora => alpha}/newwindow.ico | Bin
browser/branding/{aurora => alpha}/pbmode.ico | Bin
browser/branding/alpha/pref/firefox-branding.js | 34 +
.../{nightly => alpha}/stubinstaller/bgstub.jpg | Bin
.../stubinstaller/installing_page.css | 0
.../stubinstaller/profile_cleanup_page.css | 0
browser/branding/alpha/wizHeader.bmp | Bin 0 -> 34254 bytes
browser/branding/alpha/wizHeaderRTL.bmp | Bin 0 -> 34254 bytes
browser/branding/alpha/wizWatermark.bmp | Bin 0 -> 206038 bytes
browser/branding/branding-common.mozbuild | 2 +
browser/branding/nightly/VisualElements_150.png | Bin 25470 -> 11666 bytes
browser/branding/nightly/VisualElements_70.png | Bin 9590 -> 4273 bytes
browser/branding/nightly/configure.sh | 8 +-
.../nightly/content/identity-icons-brand.svg | 8 +
browser/branding/nightly/content/jar.mn | 4 +
browser/branding/nightly/content/tor-styles.css | 13 +
browser/branding/nightly/default128.png | Bin 12392 -> 13686 bytes
browser/branding/nightly/default16.png | Bin 756 -> 891 bytes
browser/branding/nightly/default22.png | Bin 1146 -> 1377 bytes
browser/branding/nightly/default24.png | Bin 1281 -> 1509 bytes
browser/branding/nightly/default256.png | Bin 30546 -> 33587 bytes
browser/branding/nightly/default32.png | Bin 1910 -> 2254 bytes
browser/branding/nightly/default48.png | Bin 3606 -> 3789 bytes
browser/branding/nightly/default512.png | Bin 0 -> 87830 bytes
browser/branding/nightly/default64.png | Bin 4826 -> 5426 bytes
browser/branding/nightly/document.icns | Bin 517716 -> 689723 bytes
browser/branding/nightly/document.ico | Bin 47042 -> 124422 bytes
.../nightly/firefox.VisualElementsManifest.xml | 2 +-
browser/branding/nightly/firefox.icns | Bin 1014680 -> 642308 bytes
browser/branding/nightly/firefox.ico | Bin 66730 -> 131711 bytes
browser/branding/nightly/firefox.svg | 29 +
browser/branding/nightly/firefox64.ico | Bin 38630 -> 131711 bytes
browser/branding/nightly/locales/en-US/brand.dtd | 8 +-
browser/branding/nightly/locales/en-US/brand.ftl | 2 +-
.../nightly/locales/en-US/brand.properties | 10 +-
browser/branding/nightly/locales/jar.mn | 7 +-
browser/branding/nightly/locales/moz.build | 2 -
browser/branding/nightly/wizHeader.bmp | Bin 25820 -> 34254 bytes
browser/branding/nightly/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes
browser/branding/nightly/wizWatermark.bmp | Bin 154544 -> 206038 bytes
browser/branding/official/VisualElements_150.png | Bin 23037 -> 7949 bytes
browser/branding/official/VisualElements_70.png | Bin 8763 -> 3374 bytes
browser/branding/official/configure.sh | 16 +-
.../official/content/identity-icons-brand.svg | 8 +
browser/branding/official/content/jar.mn | 4 +
browser/branding/official/content/tor-styles.css | 14 +
browser/branding/official/default128.png | Bin 13513 -> 9007 bytes
browser/branding/official/default16.png | Bin 722 -> 839 bytes
browser/branding/official/default22.png | Bin 1134 -> 1250 bytes
browser/branding/official/default24.png | Bin 1312 -> 1405 bytes
browser/branding/official/default256.png | Bin 32441 -> 19136 bytes
browser/branding/official/default32.png | Bin 1948 -> 1965 bytes
browser/branding/official/default48.png | Bin 3448 -> 3074 bytes
browser/branding/official/default512.png | Bin 0 -> 40438 bytes
browser/branding/official/default64.png | Bin 5459 -> 4196 bytes
browser/branding/official/disk.icns | Bin 1525764 -> 172073 bytes
browser/branding/official/document.icns | Bin 501145 -> 509227 bytes
browser/branding/official/document.ico | Bin 45478 -> 119916 bytes
.../official/firefox.VisualElementsManifest.xml | 2 +-
browser/branding/official/firefox.icns | Bin 1021785 -> 259709 bytes
browser/branding/official/firefox.ico | Bin 68328 -> 118595 bytes
browser/branding/official/firefox.svg | 31 +
browser/branding/official/firefox64.ico | Bin 38630 -> 118595 bytes
browser/branding/official/locales/en-US/brand.dtd | 8 +-
.../official/locales/en-US/brand.properties | 10 +-
browser/branding/official/wizHeader.bmp | Bin 25820 -> 34254 bytes
browser/branding/official/wizHeaderRTL.bmp | Bin 25820 -> 34254 bytes
browser/branding/official/wizWatermark.bmp | Bin 154544 -> 206038 bytes
browser/branding/tor-styles.inc.css | 87 +
browser/components/BrowserContentHandler.jsm | 94 +-
browser/components/BrowserGlue.jsm | 171 +-
browser/components/about/AboutRedirector.cpp | 77 +-
browser/components/about/components.conf | 8 +-
.../components/aboutlogins/AboutLoginsParent.jsm | 2 +
.../components/aboutlogins/content/aboutLogins.css | 8 +-
.../components/aboutlogins/content/aboutLogins.js | 6 +
.../content/components/fxaccounts-button.css | 5 +
.../aboutlogins/content/components/menu-button.css | 10 +
.../controlcenter/content/identityPanel.inc.xhtml | 22 +
.../components/customizableui/CustomizableUI.jsm | 21 +
.../customizableui/content/panelUI.inc.xhtml | 2 +-
browser/components/moz.build | 11 +-
browser/components/newtab/AboutNewTabService.jsm | 15 +-
.../components/onionservices/OnionAliasStore.jsm | 562 ++
.../onionservices/OnionLocationChild.jsm | 48 +
.../onionservices/OnionLocationParent.jsm | 169 +
.../content/authNotificationIcon.inc.xhtml | 6 +
.../onionservices/content/authPopup.inc.xhtml | 16 +
.../onionservices/content/authPreferences.css | 20 +
.../content/authPreferences.inc.xhtml | 19 +
.../onionservices/content/authPreferences.js | 66 +
.../components/onionservices/content/authPrompt.js | 320 +
.../components/onionservices/content/authUtil.jsm | 47 +
.../onionservices/content/netError/browser.svg | 3 +
.../onionservices/content/netError/network.svg | 3 +
.../content/netError/onionNetError.css | 88 +
.../content/netError/onionNetError.js | 243 +
.../onionservices/content/netError/onionsite.svg | 8 +
.../content/onionlocation-notification-icons.css | 5 +
.../onionservices/content/onionlocation-urlbar.css | 60 +
.../content/onionlocation-urlbar.inc.xhtml | 10 +
.../onionservices/content/onionlocation.svg | 3 +
.../content/onionlocationPreferences.inc.xhtml | 11 +
.../content/onionlocationPreferences.js | 34 +
.../onionservices/content/onionservices.css | 69 +
.../onionservices/content/savedKeysDialog.js | 259 +
.../onionservices/content/savedKeysDialog.xhtml | 42 +
browser/components/onionservices/jar.mn | 11 +
browser/components/onionservices/moz.build | 7 +
browser/components/preferences/home.inc.xhtml | 4 +-
browser/components/preferences/main.inc.xhtml | 54 -
browser/components/preferences/main.js | 14 -
browser/components/preferences/preferences.js | 14 +-
browser/components/preferences/preferences.xhtml | 13 +-
browser/components/preferences/privacy.inc.xhtml | 6 +
browser/components/preferences/privacy.js | 44 +
browser/components/rulesets/RulesetsChild.jsm | 11 +
browser/components/rulesets/RulesetsParent.jsm | 79 +
.../components/rulesets/content/aboutRulesets.css | 319 +
.../components/rulesets/content/aboutRulesets.html | 110 +
.../components/rulesets/content/aboutRulesets.js | 531 ++
browser/components/rulesets/content/securedrop.svg | 173 +
browser/components/rulesets/jar.mn | 5 +
browser/components/rulesets/moz.build | 6 +
browser/components/search/SearchSERPTelemetry.jsm | 6 -
.../search/extensions/blockchair-onion/favicon.png | Bin 0 -> 3116 bytes
.../extensions/blockchair-onion/manifest.json | 26 +
.../search/extensions/blockchair/favicon.png | Bin 0 -> 2898 bytes
.../search/extensions/blockchair/manifest.json | 26 +
.../search/extensions/ddg-onion/favicon.ico | Bin 0 -> 973 bytes
.../search/extensions/ddg-onion/manifest.json | 26 +
.../components/search/extensions/ddg/favicon.ico | Bin 5430 -> 0 bytes
.../components/search/extensions/ddg/favicon.png | Bin 0 -> 1150 bytes
.../components/search/extensions/ddg/manifest.json | 38 +-
.../extensions/google/_locales/b-1-d/messages.json | 23 -
.../extensions/google/_locales/b-1-e/messages.json | 23 -
.../extensions/google/_locales/b-d/messages.json | 23 -
.../extensions/google/_locales/b-e/messages.json | 23 -
.../extensions/google/_locales/en/messages.json | 24 -
.../search/extensions/google/manifest.json | 17 +-
.../search/extensions/startpage/favicon.png | Bin 0 -> 1150 bytes
.../search/extensions/startpage/manifest.json | 26 +
.../extensions/twitter/favicon.ico} | Bin
.../search/extensions/twitter/manifest.json | 26 +
.../extensions/wikipedia/_locales/NN/messages.json | 20 -
.../extensions/wikipedia/_locales/NO/messages.json | 20 -
.../extensions/wikipedia/_locales/af/messages.json | 20 -
.../extensions/wikipedia/_locales/an/messages.json | 20 -
.../extensions/wikipedia/_locales/ar/messages.json | 20 -
.../wikipedia/_locales/ast/messages.json | 20 -
.../extensions/wikipedia/_locales/az/messages.json | 20 -
.../wikipedia/_locales/be-tarask/messages.json | 20 -
.../extensions/wikipedia/_locales/be/messages.json | 20 -
.../extensions/wikipedia/_locales/bg/messages.json | 20 -
.../extensions/wikipedia/_locales/bn/messages.json | 20 -
.../extensions/wikipedia/_locales/br/messages.json | 20 -
.../extensions/wikipedia/_locales/bs/messages.json | 20 -
.../extensions/wikipedia/_locales/ca/messages.json | 20 -
.../extensions/wikipedia/_locales/cy/messages.json | 20 -
.../extensions/wikipedia/_locales/cz/messages.json | 20 -
.../extensions/wikipedia/_locales/da/messages.json | 20 -
.../extensions/wikipedia/_locales/de/messages.json | 20 -
.../wikipedia/_locales/dsb/messages.json | 20 -
.../extensions/wikipedia/_locales/el/messages.json | 20 -
.../extensions/wikipedia/_locales/en/messages.json | 20 -
.../extensions/wikipedia/_locales/eo/messages.json | 20 -
.../extensions/wikipedia/_locales/es/messages.json | 20 -
.../extensions/wikipedia/_locales/et/messages.json | 20 -
.../extensions/wikipedia/_locales/eu/messages.json | 20 -
.../extensions/wikipedia/_locales/fa/messages.json | 20 -
.../extensions/wikipedia/_locales/fi/messages.json | 20 -
.../extensions/wikipedia/_locales/fr/messages.json | 20 -
.../wikipedia/_locales/fy-NL/messages.json | 20 -
.../wikipedia/_locales/ga-IE/messages.json | 20 -
.../extensions/wikipedia/_locales/gd/messages.json | 20 -
.../extensions/wikipedia/_locales/gl/messages.json | 20 -
.../extensions/wikipedia/_locales/gn/messages.json | 20 -
.../extensions/wikipedia/_locales/gu/messages.json | 20 -
.../extensions/wikipedia/_locales/he/messages.json | 20 -
.../extensions/wikipedia/_locales/hi/messages.json | 20 -
.../extensions/wikipedia/_locales/hr/messages.json | 20 -
.../wikipedia/_locales/hsb/messages.json | 20 -
.../extensions/wikipedia/_locales/hu/messages.json | 20 -
.../extensions/wikipedia/_locales/hy/messages.json | 20 -
.../extensions/wikipedia/_locales/ia/messages.json | 20 -
.../extensions/wikipedia/_locales/id/messages.json | 20 -
.../extensions/wikipedia/_locales/is/messages.json | 20 -
.../extensions/wikipedia/_locales/it/messages.json | 20 -
.../extensions/wikipedia/_locales/ja/messages.json | 20 -
.../extensions/wikipedia/_locales/ka/messages.json | 20 -
.../wikipedia/_locales/kab/messages.json | 20 -
.../extensions/wikipedia/_locales/kk/messages.json | 20 -
.../extensions/wikipedia/_locales/km/messages.json | 20 -
.../extensions/wikipedia/_locales/kn/messages.json | 20 -
.../extensions/wikipedia/_locales/kr/messages.json | 20 -
.../wikipedia/_locales/lij/messages.json | 20 -
.../extensions/wikipedia/_locales/lo/messages.json | 20 -
.../extensions/wikipedia/_locales/lt/messages.json | 20 -
.../wikipedia/_locales/ltg/messages.json | 20 -
.../extensions/wikipedia/_locales/lv/messages.json | 20 -
.../extensions/wikipedia/_locales/mk/messages.json | 20 -
.../extensions/wikipedia/_locales/mr/messages.json | 20 -
.../extensions/wikipedia/_locales/ms/messages.json | 20 -
.../extensions/wikipedia/_locales/my/messages.json | 20 -
.../extensions/wikipedia/_locales/ne/messages.json | 20 -
.../extensions/wikipedia/_locales/nl/messages.json | 20 -
.../extensions/wikipedia/_locales/oc/messages.json | 20 -
.../extensions/wikipedia/_locales/pa/messages.json | 20 -
.../extensions/wikipedia/_locales/pl/messages.json | 20 -
.../extensions/wikipedia/_locales/pt/messages.json | 20 -
.../extensions/wikipedia/_locales/rm/messages.json | 20 -
.../extensions/wikipedia/_locales/ro/messages.json | 20 -
.../extensions/wikipedia/_locales/ru/messages.json | 20 -
.../extensions/wikipedia/_locales/si/messages.json | 20 -
.../extensions/wikipedia/_locales/sk/messages.json | 20 -
.../extensions/wikipedia/_locales/sl/messages.json | 20 -
.../extensions/wikipedia/_locales/sq/messages.json | 20 -
.../extensions/wikipedia/_locales/sr/messages.json | 20 -
.../wikipedia/_locales/sv-SE/messages.json | 20 -
.../extensions/wikipedia/_locales/ta/messages.json | 20 -
.../extensions/wikipedia/_locales/te/messages.json | 20 -
.../extensions/wikipedia/_locales/th/messages.json | 20 -
.../extensions/wikipedia/_locales/tl/messages.json | 20 -
.../extensions/wikipedia/_locales/tr/messages.json | 20 -
.../extensions/wikipedia/_locales/uk/messages.json | 20 -
.../extensions/wikipedia/_locales/ur/messages.json | 20 -
.../extensions/wikipedia/_locales/uz/messages.json | 20 -
.../extensions/wikipedia/_locales/vi/messages.json | 20 -
.../extensions/wikipedia/_locales/wo/messages.json | 20 -
.../wikipedia/_locales/zh-CN/messages.json | 20 -
.../wikipedia/_locales/zh-TW/messages.json | 20 -
.../search/extensions/wikipedia/manifest.json | 15 +-
.../components/search/extensions/yahoo/favicon.ico | Bin 0 -> 5430 bytes
.../search/extensions/yahoo/manifest.json | 28 +
.../search/extensions/youtube/favicon.ico | Bin 0 -> 1150 bytes
.../search/extensions/youtube/manifest.json | 26 +
.../securitylevel/content/securityLevel.js | 533 ++
.../securitylevel/content/securityLevelButton.css | 18 +
.../content/securityLevelButton.inc.xhtml | 7 +
.../securitylevel/content/securityLevelIcon.svg | 40 +
.../securitylevel/content/securityLevelPanel.css | 74 +
.../content/securityLevelPanel.inc.xhtml | 47 +
.../content/securityLevelPreferences.css | 52 +
.../content/securityLevelPreferences.inc.xhtml | 67 +
browser/components/securitylevel/jar.mn | 6 +
browser/components/securitylevel/moz.build | 1 +
browser/components/sessionstore/SessionStore.jsm | 4 +
browser/components/torconnect/TorConnectChild.jsm | 9 +
browser/components/torconnect/TorConnectParent.jsm | 202 +
.../torconnect/content/aboutTorConnect.css | 325 +
.../torconnect/content/aboutTorConnect.js | 843 ++
.../torconnect/content/aboutTorConnect.xhtml | 68 +
.../components/torconnect/content/arrow-right.svg | 4 +
browser/components/torconnect/content/bridge.svg | 5 +
.../torconnect/content/connection-failure.svg | 5 +
.../torconnect/content/connection-location.svg | 5 +
.../torconnect/content/onion-slash-fillable.svg | 5 +
.../components/torconnect/content/onion-slash.svg | 5 +
browser/components/torconnect/content/onion.svg | 4 +
.../torconnect/content/torBootstrapUrlbar.js | 93 +
.../torconnect/content/torconnect-urlbar.css | 57 +
.../torconnect/content/torconnect-urlbar.inc.xhtml | 10 +
browser/components/torconnect/jar.mn | 12 +
browser/components/torconnect/moz.build | 6 +
.../torpreferences/content/bridgeQrDialog.jsm | 51 +
.../torpreferences/content/bridgeQrDialog.xhtml | 25 +
.../content/bridgemoji-annotations.json | 8774 ++++++++++++++++++++
.../torpreferences/content/bridgemoji/1f300.svg | 1 +
.../torpreferences/content/bridgemoji/1f308.svg | 1 +
.../torpreferences/content/bridgemoji/1f30a.svg | 1 +
.../torpreferences/content/bridgemoji/1f30b.svg | 1 +
.../torpreferences/content/bridgemoji/1f319.svg | 1 +
.../torpreferences/content/bridgemoji/1f31f.svg | 1 +
.../torpreferences/content/bridgemoji/1f321.svg | 1 +
.../torpreferences/content/bridgemoji/1f32d.svg | 1 +
.../torpreferences/content/bridgemoji/1f32e.svg | 1 +
.../torpreferences/content/bridgemoji/1f332.svg | 1 +
.../torpreferences/content/bridgemoji/1f333.svg | 1 +
.../torpreferences/content/bridgemoji/1f334.svg | 1 +
.../torpreferences/content/bridgemoji/1f335.svg | 1 +
.../torpreferences/content/bridgemoji/1f336.svg | 1 +
.../torpreferences/content/bridgemoji/1f337.svg | 1 +
.../torpreferences/content/bridgemoji/1f339.svg | 1 +
.../torpreferences/content/bridgemoji/1f33a.svg | 1 +
.../torpreferences/content/bridgemoji/1f33b.svg | 1 +
.../torpreferences/content/bridgemoji/1f33d.svg | 1 +
.../torpreferences/content/bridgemoji/1f33f.svg | 1 +
.../torpreferences/content/bridgemoji/1f341.svg | 1 +
.../torpreferences/content/bridgemoji/1f344.svg | 1 +
.../torpreferences/content/bridgemoji/1f345.svg | 1 +
.../torpreferences/content/bridgemoji/1f346.svg | 1 +
.../torpreferences/content/bridgemoji/1f347.svg | 1 +
.../torpreferences/content/bridgemoji/1f348.svg | 1 +
.../torpreferences/content/bridgemoji/1f349.svg | 1 +
.../torpreferences/content/bridgemoji/1f34a.svg | 1 +
.../torpreferences/content/bridgemoji/1f34b.svg | 1 +
.../torpreferences/content/bridgemoji/1f34c.svg | 1 +
.../torpreferences/content/bridgemoji/1f34d.svg | 1 +
.../torpreferences/content/bridgemoji/1f34f.svg | 1 +
.../torpreferences/content/bridgemoji/1f350.svg | 1 +
.../torpreferences/content/bridgemoji/1f351.svg | 1 +
.../torpreferences/content/bridgemoji/1f352.svg | 1 +
.../torpreferences/content/bridgemoji/1f353.svg | 1 +
.../torpreferences/content/bridgemoji/1f354.svg | 1 +
.../torpreferences/content/bridgemoji/1f355.svg | 1 +
.../torpreferences/content/bridgemoji/1f368.svg | 1 +
.../torpreferences/content/bridgemoji/1f369.svg | 1 +
.../torpreferences/content/bridgemoji/1f36a.svg | 1 +
.../torpreferences/content/bridgemoji/1f36b.svg | 1 +
.../torpreferences/content/bridgemoji/1f36c.svg | 1 +
.../torpreferences/content/bridgemoji/1f36d.svg | 1 +
.../torpreferences/content/bridgemoji/1f37f.svg | 1 +
.../torpreferences/content/bridgemoji/1f380.svg | 1 +
.../torpreferences/content/bridgemoji/1f381.svg | 1 +
.../torpreferences/content/bridgemoji/1f382.svg | 1 +
.../torpreferences/content/bridgemoji/1f383.svg | 1 +
.../torpreferences/content/bridgemoji/1f388.svg | 1 +
.../torpreferences/content/bridgemoji/1f389.svg | 1 +
.../torpreferences/content/bridgemoji/1f38f.svg | 1 +
.../torpreferences/content/bridgemoji/1f392.svg | 1 +
.../torpreferences/content/bridgemoji/1f399.svg | 1 +
.../torpreferences/content/bridgemoji/1f39f.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ac.svg | 1 +
.../torpreferences/content/bridgemoji/1f3af.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ba.svg | 1 +
.../torpreferences/content/bridgemoji/1f3bb.svg | 1 +
.../torpreferences/content/bridgemoji/1f3be.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d3.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d4.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f3dd.svg | 1 +
.../torpreferences/content/bridgemoji/1f3e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f40a.svg | 1 +
.../torpreferences/content/bridgemoji/1f40c.svg | 1 +
.../torpreferences/content/bridgemoji/1f40d.svg | 1 +
.../torpreferences/content/bridgemoji/1f417.svg | 1 +
.../torpreferences/content/bridgemoji/1f418.svg | 1 +
.../torpreferences/content/bridgemoji/1f419.svg | 1 +
.../torpreferences/content/bridgemoji/1f41a.svg | 1 +
.../torpreferences/content/bridgemoji/1f41b.svg | 1 +
.../torpreferences/content/bridgemoji/1f41d.svg | 1 +
.../torpreferences/content/bridgemoji/1f41e.svg | 1 +
.../torpreferences/content/bridgemoji/1f41f.svg | 1 +
.../torpreferences/content/bridgemoji/1f420.svg | 1 +
.../torpreferences/content/bridgemoji/1f422.svg | 1 +
.../torpreferences/content/bridgemoji/1f425.svg | 1 +
.../torpreferences/content/bridgemoji/1f426.svg | 1 +
.../torpreferences/content/bridgemoji/1f428.svg | 1 +
.../torpreferences/content/bridgemoji/1f42a.svg | 1 +
.../torpreferences/content/bridgemoji/1f42c.svg | 1 +
.../torpreferences/content/bridgemoji/1f42d.svg | 1 +
.../torpreferences/content/bridgemoji/1f42e.svg | 1 +
.../torpreferences/content/bridgemoji/1f42f.svg | 1 +
.../torpreferences/content/bridgemoji/1f430.svg | 1 +
.../torpreferences/content/bridgemoji/1f431.svg | 1 +
.../torpreferences/content/bridgemoji/1f432.svg | 1 +
.../torpreferences/content/bridgemoji/1f433.svg | 1 +
.../torpreferences/content/bridgemoji/1f434.svg | 1 +
.../torpreferences/content/bridgemoji/1f435.svg | 1 +
.../torpreferences/content/bridgemoji/1f436.svg | 1 +
.../torpreferences/content/bridgemoji/1f437.svg | 1 +
.../torpreferences/content/bridgemoji/1f43a.svg | 1 +
.../torpreferences/content/bridgemoji/1f43b.svg | 1 +
.../torpreferences/content/bridgemoji/1f43f.svg | 1 +
.../torpreferences/content/bridgemoji/1f441.svg | 1 +
.../torpreferences/content/bridgemoji/1f451.svg | 1 +
.../torpreferences/content/bridgemoji/1f455.svg | 1 +
.../torpreferences/content/bridgemoji/1f457.svg | 1 +
.../torpreferences/content/bridgemoji/1f45f.svg | 1 +
.../torpreferences/content/bridgemoji/1f47d.svg | 1 +
.../torpreferences/content/bridgemoji/1f484.svg | 1 +
.../torpreferences/content/bridgemoji/1f488.svg | 1 +
.../torpreferences/content/bridgemoji/1f48d.svg | 1 +
.../torpreferences/content/bridgemoji/1f48e.svg | 1 +
.../torpreferences/content/bridgemoji/1f490.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f4b3.svg | 1 +
.../torpreferences/content/bridgemoji/1f4bf.svg | 1 +
.../torpreferences/content/bridgemoji/1f4cc.svg | 1 +
.../torpreferences/content/bridgemoji/1f4ce.svg | 1 +
.../torpreferences/content/bridgemoji/1f4d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f4fb.svg | 1 +
.../torpreferences/content/bridgemoji/1f50b.svg | 1 +
.../torpreferences/content/bridgemoji/1f511.svg | 1 +
.../torpreferences/content/bridgemoji/1f525.svg | 1 +
.../torpreferences/content/bridgemoji/1f526.svg | 1 +
.../torpreferences/content/bridgemoji/1f52c.svg | 1 +
.../torpreferences/content/bridgemoji/1f52d.svg | 1 +
.../torpreferences/content/bridgemoji/1f52e.svg | 1 +
.../torpreferences/content/bridgemoji/1f54a.svg | 1 +
.../torpreferences/content/bridgemoji/1f58c.svg | 1 +
.../torpreferences/content/bridgemoji/1f58d.svg | 1 +
.../torpreferences/content/bridgemoji/1f5ff.svg | 1 +
.../torpreferences/content/bridgemoji/1f680.svg | 1 +
.../torpreferences/content/bridgemoji/1f681.svg | 1 +
.../torpreferences/content/bridgemoji/1f686.svg | 1 +
.../torpreferences/content/bridgemoji/1f68b.svg | 1 +
.../torpreferences/content/bridgemoji/1f68d.svg | 1 +
.../torpreferences/content/bridgemoji/1f695.svg | 1 +
.../torpreferences/content/bridgemoji/1f697.svg | 1 +
.../torpreferences/content/bridgemoji/1f69a.svg | 1 +
.../torpreferences/content/bridgemoji/1f69c.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f6.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fa.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fc.svg | 1 +
.../torpreferences/content/bridgemoji/1f916.svg | 1 +
.../torpreferences/content/bridgemoji/1f93f.svg | 1 +
.../torpreferences/content/bridgemoji/1f941.svg | 1 +
.../torpreferences/content/bridgemoji/1f94c.svg | 1 +
.../torpreferences/content/bridgemoji/1f94f.svg | 1 +
.../torpreferences/content/bridgemoji/1f950.svg | 1 +
.../torpreferences/content/bridgemoji/1f951.svg | 1 +
.../torpreferences/content/bridgemoji/1f955.svg | 1 +
.../torpreferences/content/bridgemoji/1f956.svg | 1 +
.../torpreferences/content/bridgemoji/1f95c.svg | 1 +
.../torpreferences/content/bridgemoji/1f95d.svg | 1 +
.../torpreferences/content/bridgemoji/1f95e.svg | 1 +
.../torpreferences/content/bridgemoji/1f965.svg | 1 +
.../torpreferences/content/bridgemoji/1f966.svg | 1 +
.../torpreferences/content/bridgemoji/1f968.svg | 1 +
.../torpreferences/content/bridgemoji/1f96c.svg | 1 +
.../torpreferences/content/bridgemoji/1f96d.svg | 1 +
.../torpreferences/content/bridgemoji/1f96f.svg | 1 +
.../torpreferences/content/bridgemoji/1f980.svg | 1 +
.../torpreferences/content/bridgemoji/1f981.svg | 1 +
.../torpreferences/content/bridgemoji/1f984.svg | 1 +
.../torpreferences/content/bridgemoji/1f986.svg | 1 +
.../torpreferences/content/bridgemoji/1f987.svg | 1 +
.../torpreferences/content/bridgemoji/1f988.svg | 1 +
.../torpreferences/content/bridgemoji/1f989.svg | 1 +
.../torpreferences/content/bridgemoji/1f98a.svg | 1 +
.../torpreferences/content/bridgemoji/1f98b.svg | 1 +
.../torpreferences/content/bridgemoji/1f98c.svg | 1 +
.../torpreferences/content/bridgemoji/1f98e.svg | 1 +
.../torpreferences/content/bridgemoji/1f98f.svg | 1 +
.../torpreferences/content/bridgemoji/1f992.svg | 1 +
.../torpreferences/content/bridgemoji/1f993.svg | 1 +
.../torpreferences/content/bridgemoji/1f994.svg | 1 +
.../torpreferences/content/bridgemoji/1f995.svg | 1 +
.../torpreferences/content/bridgemoji/1f998.svg | 1 +
.../torpreferences/content/bridgemoji/1f999.svg | 1 +
.../torpreferences/content/bridgemoji/1f99a.svg | 1 +
.../torpreferences/content/bridgemoji/1f99c.svg | 1 +
.../torpreferences/content/bridgemoji/1f99d.svg | 1 +
.../torpreferences/content/bridgemoji/1f99e.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ad.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c1.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9d9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9da.svg | 1 +
.../torpreferences/content/bridgemoji/1f9dc.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e0.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ea.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ec.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ed.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f9.svg | 1 +
.../torpreferences/content/bridgemoji/1fa73.svg | 1 +
.../torpreferences/content/bridgemoji/1fa80.svg | 1 +
.../torpreferences/content/bridgemoji/1fa81.svg | 1 +
.../torpreferences/content/bridgemoji/1fa83.svg | 1 +
.../torpreferences/content/bridgemoji/1fa90.svg | 1 +
.../torpreferences/content/bridgemoji/1fa91.svg | 1 +
.../torpreferences/content/bridgemoji/1fa95.svg | 1 +
.../torpreferences/content/bridgemoji/1fa97.svg | 1 +
.../torpreferences/content/bridgemoji/1fab6.svg | 1 +
.../torpreferences/content/bridgemoji/1fad0.svg | 1 +
.../torpreferences/content/bridgemoji/1fad2.svg | 1 +
.../torpreferences/content/bridgemoji/1fad6.svg | 1 +
.../torpreferences/content/bridgemoji/23f0.svg | 1 +
.../torpreferences/content/bridgemoji/2600.svg | 1 +
.../torpreferences/content/bridgemoji/2602.svg | 1 +
.../torpreferences/content/bridgemoji/2604.svg | 1 +
.../torpreferences/content/bridgemoji/260e.svg | 1 +
.../torpreferences/content/bridgemoji/2693.svg | 1 +
.../torpreferences/content/bridgemoji/2696.svg | 1 +
.../torpreferences/content/bridgemoji/26bd.svg | 1 +
.../torpreferences/content/bridgemoji/26f2.svg | 1 +
.../torpreferences/content/bridgemoji/26f5.svg | 1 +
.../torpreferences/content/bridgemoji/2708.svg | 1 +
.../torpreferences/content/bridgemoji/270f.svg | 1 +
.../torpreferences/content/bridgemoji/2728.svg | 1 +
.../torpreferences/content/bridgemoji/2744.svg | 1 +
.../torpreferences/content/builtinBridgeDialog.jsm | 120 +
.../content/builtinBridgeDialog.xhtml | 31 +
.../components/torpreferences/content/check.svg | 3 +
.../content/connectionCategory.inc.xhtml | 9 +
.../torpreferences/content/connectionPane.js | 1163 +++
.../torpreferences/content/connectionPane.xhtml | 194 +
.../content/connectionSettingsDialog.jsm | 397 +
.../content/connectionSettingsDialog.xhtml | 60 +
.../components/torpreferences/content/network.svg | 0
.../torpreferences/content/provideBridgeDialog.jsm | 72 +
.../content/provideBridgeDialog.xhtml | 21 +
.../torpreferences/content/requestBridgeDialog.jsm | 211 +
.../content/requestBridgeDialog.xhtml | 35 +
.../torpreferences/content/torLogDialog.jsm | 84 +
.../torpreferences/content/torLogDialog.xhtml | 23 +
.../torpreferences/content/torPreferences.css | 714 ++
.../torpreferences/content/torPreferencesIcon.svg | 8 +
browser/components/torpreferences/jar.mn | 22 +
browser/components/torpreferences/moz.build | 1 +
browser/components/uitour/UITour-lib.js | 7 +
browser/components/uitour/UITour.jsm | 120 +-
browser/components/uitour/UITourChild.jsm | 33 +-
browser/components/urlbar/UrlbarInput.jsm | 32 +
browser/config/mozconfigs/base-browser | 34 +
browser/config/mozconfigs/tor-browser | 10 +
browser/confvars.sh | 35 +-
browser/extensions/moz.build | 13 +-
.../extensions/onboarding/OnboardingTelemetry.jsm | 578 ++
.../extensions/onboarding/OnboardingTourType.jsm | 40 +
browser/extensions/onboarding/README.md | 87 +
browser/extensions/onboarding/api.js | 275 +
browser/extensions/onboarding/background.js | 8 +
.../extensions/onboarding/content/Onboarding.jsm | 1920 +++++
.../extensions/onboarding/content/img/close.png | Bin 0 -> 798 bytes
.../content/img/figure_tor-circuit-display.png | Bin 0 -> 26334 bytes
.../content/img/figure_tor-expect-differences.png | Bin 0 -> 22290 bytes
.../onboarding/content/img/figure_tor-network.png | Bin 0 -> 11982 bytes
.../content/img/figure_tor-onion-services.png | Bin 0 -> 40968 bytes
.../onboarding/content/img/figure_tor-privacy.png | Bin 0 -> 35527 bytes
.../content/img/figure_tor-security-level.png | Bin 0 -> 11263 bytes
.../onboarding/content/img/figure_tor-security.png | Bin 0 -> 24554 bytes
.../content/img/figure_tor-toolbar-layout.png | Bin 0 -> 13269 bytes
.../onboarding/content/img/figure_tor-welcome.png | Bin 0 -> 48405 bytes
.../onboarding/content/img/icons_no-icon.png | Bin 0 -> 673 bytes
.../onboarding/content/img/icons_tour-complete.png | Bin 0 -> 694 bytes
.../onboarding/content/img/icons_tour-complete.svg | 17 +
.../content/onboarding-tor-circuit-display.js | 283 +
.../onboarding/content/onboarding-tour-agent.js | 107 +
.../extensions/onboarding/content/onboarding.css | 664 ++
.../extensions/onboarding/content/onboarding.js | 38 +
browser/extensions/onboarding/data_events.md | 154 +
browser/extensions/onboarding/jar.mn | 19 +
.../onboarding/locales/en-US/onboarding.properties | 126 +
browser/extensions/onboarding/locales/jar.mn | 8 +
.../onboarding/locales}/moz.build | 0
browser/extensions/onboarding/manifest.json | 26 +
browser/extensions/onboarding/moz.build | 29 +
.../{formautofill => onboarding}/schema.json | 0
.../onboarding/test/browser/.eslintrc.js | 7 +
.../extensions/onboarding/test/browser/browser.ini | 18 +
.../browser/browser_onboarding_accessibility.js | 89 +
.../test/browser/browser_onboarding_keyboard.js | 137 +
.../browser/browser_onboarding_notification.js | 62 +
.../browser/browser_onboarding_notification_2.js | 80 +
.../browser/browser_onboarding_notification_3.js | 82 +
.../browser/browser_onboarding_notification_4.js | 84 +
.../browser/browser_onboarding_notification_5.js | 25 +
...arding_notification_click_auto_complete_tour.js | 33 +
.../browser_onboarding_select_default_tour.js | 80 +
.../test/browser/browser_onboarding_skip_tour.js | 47 +
.../test/browser/browser_onboarding_tours.js | 115 +
.../test/browser/browser_onboarding_tourset.js | 82 +
.../test/browser/browser_onboarding_uitour.js | 167 +
browser/extensions/onboarding/test/browser/head.js | 288 +
.../extensions/onboarding/test/unit/.eslintrc.js | 7 +
browser/extensions/onboarding/test/unit/head.js | 54 +
.../test/unit/test-onboarding-tour-type.js | 89 +
.../extensions/onboarding/test/unit/xpcshell.ini | 5 +
browser/installer/Makefile.in | 8 +
browser/installer/package-manifest.in | 18 +-
browser/installer/windows/nsis/shared.nsh | 1 -
browser/locales/Makefile.in | 10 +-
.../locales/en-US/chrome/browser/aboutTBUpdate.dtd | 8 +
browser/locales/filter.py | 1 +
browser/locales/jar.mn | 10 +-
browser/locales/l10n.ini | 1 +
browser/locales/l10n.toml | 4 +
browser/modules/BridgeDB.jsm | 61 +
browser/modules/HomePage.jsm | 2 +-
browser/modules/Moat.jsm | 814 ++
browser/modules/TorConnect.jsm | 901 ++
browser/modules/TorProcessService.jsm | 12 +
browser/modules/TorProtocolService.jsm | 502 ++
browser/modules/TorSettings.jsm | 674 ++
browser/modules/TorStrings.jsm | 922 ++
browser/modules/moz.build | 7 +
browser/moz.build | 1 +
browser/moz.configure | 8 +-
browser/themes/linux/browser.css | 9 -
browser/themes/shared/UITour.inc.css | 56 +-
browser/themes/shared/browser.inc.css | 5 +
browser/themes/shared/controlcenter/panel.inc.css | 4 +-
.../themes/shared/customizableui/panelUI.inc.css | 3 +-
browser/themes/shared/icons/new_circuit.svg | 6 +
browser/themes/shared/icons/new_identity.svg | 9 +
.../shared/identity-block/identity-block.inc.css | 33 +-
.../themes/shared/identity-block/onion-slash.svg | 5 +
.../themes/shared/identity-block/onion-warning.svg | 4 +
browser/themes/shared/identity-block/onion.svg | 4 +
browser/themes/shared/jar.inc.mn | 8 +
browser/themes/shared/menupanel.inc.css | 1 +
browser/themes/shared/notification-icons.inc.css | 5 +
browser/themes/shared/onionPattern.css | 31 +
browser/themes/shared/onionPattern.inc.xhtml | 12 +
browser/themes/shared/onionPattern.svg | 22 +
browser/themes/shared/preferences/privacy.css | 4 +
browser/themes/shared/tabs.inc.css | 6 +
browser/themes/shared/toolbarbutton-icons.inc.css | 8 +
browser/themes/shared/urlbar-searchbar.inc.css | 4 +
browser/themes/windows/browser.css | 9 -
build/application.ini.in | 2 +-
build/moz.configure/init.configure | 3 +-
config/createprecomplete.py | 18 +-
.../client/aboutdebugging/src/actions/runtimes.js | 5 +
.../images/aboutdebugging-firefox-aurora.svg | 35 +-
.../themes/images/aboutdebugging-firefox-beta.svg | 35 +-
.../themes/images/aboutdebugging-firefox-logo.svg | 11 +-
.../images/aboutdebugging-firefox-nightly.svg | 35 +-
.../images/aboutdebugging-firefox-release.svg | 35 +-
docshell/base/nsAboutRedirector.cpp | 6 +-
docshell/base/nsDocShell.cpp | 81 +-
docshell/build/components.conf | 1 +
dom/base/Document.cpp | 97 +-
dom/base/Document.h | 10 +-
dom/base/nsContentUtils.cpp | 19 +
dom/base/nsContentUtils.h | 5 +
dom/base/nsGlobalWindowOuter.cpp | 5 +-
dom/base/test/mochitest.ini | 2 -
dom/base/test/test_suppressed_microtasks.html | 62 -
dom/canvas/ClientWebGLContext.cpp | 8 +
dom/ipc/BrowserParent.cpp | 21 +
dom/ipc/BrowserParent.h | 3 +
dom/ipc/PBrowser.ipdl | 9 +
dom/ipc/WindowGlobalActor.cpp | 4 +-
dom/ipc/WindowGlobalChild.cpp | 6 +-
dom/security/nsMixedContentBlocker.cpp | 16 +-
dom/webidl/Document.webidl | 8 +
dom/workers/RuntimeService.cpp | 4 +-
dom/workers/WorkerPrivate.cpp | 2 +-
dom/worklet/WorkletThread.cpp | 2 +-
extensions/auth/nsHttpNegotiateAuth.cpp | 4 +
extensions/permissions/PermissionManager.cpp | 6 +-
gfx/thebes/gfxFcPlatformFontList.cpp | 8 +-
gfx/thebes/gfxMacPlatformFontList.h | 12 +
gfx/thebes/gfxMacPlatformFontList.mm | 83 +
gfx/thebes/gfxPlatformFontList.cpp | 4 +-
gfx/thebes/gfxPlatformMac.cpp | 73 +-
gfx/thebes/gfxPlatformMac.h | 2 +
intl/l10n/L10nRegistry.jsm | 19 +-
intl/locale/LocaleService.cpp | 6 +
intl/strres/nsStringBundle.cpp | 1 +
js/xpconnect/src/xpc.msg | 10 +
layout/generic/ReflowInput.cpp | 19 +-
layout/generic/test/mochitest.ini | 1 +
layout/generic/test/test_tor_bug23104.html | 50 +
mobile/android/app/000-tor-browser-android.js | 47 +
mobile/android/app/geckoview-prefs.js | 2 +
mobile/android/app/mobile.js | 4 +
mobile/android/app/moz.build | 1 +
.../components/geckoview/GeckoViewStartup.jsm | 5 +
mobile/android/confvars.sh | 9 +
mobile/android/geckoview/api.txt | 6 +
mobile/android/geckoview/build.gradle | 1 +
.../android/geckoview/src/main/AndroidManifest.xml | 20 +-
.../gecko/media/GeckoMediaDrmBridgeV21.java | 49 +-
.../java/org/mozilla/gecko/util/ProxySelector.java | 25 +-
.../java/org/mozilla/geckoview/GeckoRuntime.java | 8 +-
.../mozilla/geckoview/GeckoRuntimeSettings.java | 94 +-
.../java/org/mozilla/geckoview/WebRequest.java | 18 +
.../exoplayer2/upstream/DefaultHttpDataSource.java | 47 +-
mobile/android/installer/package-manifest.in | 4 +
.../modules/geckoview/GeckoViewProgress.jsm | 4 +
mobile/android/moz.configure | 21 +-
mobile/android/torbrowser.configure | 30 +
modules/libmar/tool/mar.c | 6 +-
modules/libmar/tool/moz.build | 12 +-
modules/libmar/verify/moz.build | 14 +-
modules/libpref/init/StaticPrefList.yaml | 10 +
moz.configure | 100 +
mozconfig-android-armv7 | 37 +
mozconfig-linux-i686 | 9 +
mozconfig-linux-x86_64 | 9 +
mozconfig-linux-x86_64-asan | 22 +
mozconfig-linux-x86_64-dev | 14 +
mozconfig-macos-x86_64 | 5 +
mozconfig-windows-i686 | 11 +
mozconfig-windows-x86_64 | 11 +
netwerk/base/nsSocketTransport2.cpp | 6 +
netwerk/build/components.conf | 11 +
netwerk/build/nsNetCID.h | 10 +
netwerk/dns/IOnionAliasService.idl | 34 +
netwerk/dns/OnionAliasService.cpp | 100 +
netwerk/dns/OnionAliasService.h | 36 +
netwerk/dns/TRR.cpp | 2 +
netwerk/dns/effective_tld_names.dat | 2 +
netwerk/dns/mdns/libmdns/components.conf | 15 -
netwerk/dns/mdns/libmdns/moz.build | 28 -
netwerk/dns/moz.build | 4 +
netwerk/protocol/http/nsHttpNTLMAuth.cpp | 3 +
netwerk/socket/nsSOCKSIOLayer.cpp | 73 +-
.../url-classifier/UrlClassifierFeatureBase.cpp | 2 +-
netwerk/url-classifier/components.conf | 6 -
python/mozbuild/mozbuild/artifacts.py | 2 -
run-tbb-tests | 66 +
security/manager/ssl/RemoteSecuritySettings.jsm | 23 +
security/manager/ssl/SSLServerCertVerification.cpp | 9 +
security/manager/ssl/SSLServerCertVerification.h | 4 +-
security/manager/ssl/nsSecureBrowserUI.cpp | 12 +
security/moz.build | 2 +-
security/nss/lib/certhigh/ocsp.c | 4 +
.../libpkix/pkix_pl_nss/module/pkix_pl_socket.c | 12 +
security/nss/lib/ssl/Makefile | 2 +-
services/settings/IDBHelpers.jsm | 4 +
services/settings/dumps/blocklists/moz.build | 14 +-
services/settings/dumps/main/moz.build | 7 -
services/settings/dumps/security-state/moz.build | 1 -
taskcluster/ci/source-test/mozlint.yml | 1 +
tbb-tests-ignore.txt | 13 +
tbb-tests/browser.ini | 5 +
tbb-tests/browser_tor_TB4.js | 35 +
tbb-tests/browser_tor_bug2950.js | 74 +
tbb-tests/browser_tor_omnibox.js | 20 +
tbb-tests/mochitest.ini | 3 +
tbb-tests/moz.build | 9 +
tbb-tests/test_tor_bug2874.html | 25 +
toolkit/actors/AboutHttpsOnlyErrorParent.jsm | 22 +-
.../components/antitracking/antitracking.manifest | 2 +-
toolkit/components/antitracking/components.conf | 7 -
.../EnterprisePoliciesParent.jsm | 13 +-
toolkit/components/enterprisepolicies/moz.build | 3 +
toolkit/components/extensions/Extension.jsm | 9 +
toolkit/components/extensions/ExtensionParent.jsm | 47 +
.../components/httpsonlyerror/content/errorpage.js | 19 +-
.../processsingleton/MainProcessSingleton.jsm | 10 +
.../remotebrowserutils/RemoteWebNavigation.jsm | 4 +
.../components/resistfingerprinting/RFPHelper.jsm | 94 +-
toolkit/components/search/SearchService.jsm | 32 +-
toolkit/components/telemetry/app/TelemetrySend.jsm | 19 +-
toolkit/components/telemetry/moz.build | 4 -
toolkit/content/license.html | 65 +
.../mozapps/profile/profileSelection.properties | 5 +
toolkit/modules/AppConstants.jsm | 22 +
toolkit/modules/Bech32Decode.jsm | 103 +
toolkit/modules/PopupNotifications.jsm | 6 +
toolkit/modules/QRCode.jsm | 1241 +++
toolkit/modules/RemotePageAccessManager.jsm | 41 +
toolkit/modules/UpdateUtils.jsm | 22 +-
toolkit/modules/moz.build | 5 +
toolkit/moz.build | 1 +
toolkit/moz.configure | 18 +
toolkit/mozapps/extensions/AddonManager.jsm | 24 +
.../mozapps/extensions/internal/XPIProvider.jsm | 33 +-
toolkit/mozapps/extensions/test/browser/head.js | 1 +
.../extensions/test/xpcshell/head_addons.js | 1 +
toolkit/mozapps/update/UpdateService.jsm | 256 +-
toolkit/mozapps/update/UpdateServiceStub.jsm | 4 +
toolkit/mozapps/update/UpdateTelemetry.jsm | 1 +
toolkit/mozapps/update/common/updatehelper.cpp | 8 +
toolkit/mozapps/update/moz.build | 5 +-
toolkit/mozapps/update/nsIUpdateService.idl | 11 +
toolkit/mozapps/update/updater/launchchild_osx.mm | 2 +
toolkit/mozapps/update/updater/moz.build | 2 +-
.../updater/nightly_aurora_level3_primary.der | Bin 1225 -> 1245 bytes
.../updater/nightly_aurora_level3_secondary.der | Bin 1225 -> 1245 bytes
toolkit/mozapps/update/updater/release_primary.der | Bin 1225 -> 1229 bytes
.../mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes
.../mozapps/update/updater/updater-common.build | 24 +-
toolkit/mozapps/update/updater/updater.cpp | 364 +-
toolkit/profile/nsProfileLock.cpp | 11 +
toolkit/profile/nsToolkitProfileService.cpp | 57 +-
toolkit/profile/nsToolkitProfileService.h | 13 +-
toolkit/toolkit.mozbuild | 3 +-
toolkit/torproject/torbutton | 1 +
toolkit/xre/MacLaunchHelper.h | 2 +
toolkit/xre/MacLaunchHelper.mm | 2 +
toolkit/xre/moz.build | 3 +
toolkit/xre/nsAppRunner.cpp | 270 +-
toolkit/xre/nsUpdateDriver.cpp | 159 +-
toolkit/xre/nsXREDirProvider.cpp | 144 +-
toolkit/xre/nsXREDirProvider.h | 14 +
tools/lint/codespell.yml | 1 +
.../lib/environments/browser-window.js | 10 +-
.../lib/environments/frame-script.js | 1 +
tools/torbrowser/update_bridgemoiji.py | 114 +
tools/update-packaging/common.sh | 64 +-
tools/update-packaging/make_full_update.sh | 25 +
tools/update-packaging/make_incremental_update.sh | 71 +-
.../exthandler/nsExternalHelperAppService.cpp | 207 +-
uriloader/exthandler/nsExternalHelperAppService.h | 3 +
.../exthandler/nsIExternalHelperAppService.idl | 47 +
widget/android/WebExecutorSupport.cpp | 10 +
widget/nsTransferable.cpp | 6 +
xpcom/base/CycleCollectedJSContext.cpp | 51 +-
xpcom/base/CycleCollectedJSContext.h | 29 +-
xpcom/base/ErrorList.py | 22 +
xpcom/ds/StaticAtoms.py | 1 +
xpcom/io/TorFileUtils.cpp | 96 +
xpcom/io/TorFileUtils.h | 32 +
xpcom/io/moz.build | 5 +
xpcom/io/nsAppFileLocationProvider.cpp | 72 +-
920 files changed, 36799 insertions(+), 3175 deletions(-)
create mode 100644 .gitlab/issue_templates/UXBug.md
create mode 100644 .gitlab/issue_templates/bug.md
create mode 100644 .gitmodules
create mode 100644 browser/actors/AboutTBUpdateChild.jsm
create mode 100644 browser/actors/AboutTBUpdateParent.jsm
create mode 100644 browser/actors/CryptoSafetyChild.jsm
create mode 100644 browser/actors/CryptoSafetyParent.jsm
create mode 100644 browser/app/profile/000-tor-browser.js
create mode 100644 browser/app/profile/001-base-profile.js
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.css
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.js
create mode 100644 browser/base/content/abouttbupdate/aboutTBUpdate.xhtml
create mode 100644 browser/branding/alpha/VisualElements_150.png
create mode 100644 browser/branding/alpha/VisualElements_70.png
create mode 100644 browser/branding/alpha/background.png
create mode 100644 browser/branding/alpha/bgstub.jpg
create mode 100644 browser/branding/alpha/bgstub_2x.jpg
copy browser/branding/{nightly => alpha}/branding.nsi (100%)
create mode 100644 browser/branding/alpha/configure.sh
create mode 100644 browser/branding/alpha/content/about-logo.png
copy browser/branding/{nightly => alpha}/content/about-logo.svg (100%)
create mode 100644 browser/branding/alpha/content/about-logo(a)2x.png
create mode 100644 browser/branding/alpha/content/about-wordmark.svg
create mode 100644 browser/branding/alpha/content/about.png
copy browser/branding/{nightly => alpha}/content/aboutDialog.css (100%)
create mode 100644 browser/branding/alpha/content/aboutlogins.svg
copy browser/branding/{nightly => alpha}/content/firefox-wordmark.svg (100%)
create mode 100644 browser/branding/alpha/content/identity-icons-brand.svg
create mode 100644 browser/branding/alpha/content/jar.mn
copy browser/branding/{aurora => alpha}/content/moz.build (100%)
create mode 100644 browser/branding/alpha/content/tor-styles.css
create mode 100644 browser/branding/alpha/default128.png
create mode 100644 browser/branding/alpha/default16.png
create mode 100644 browser/branding/alpha/default22.png
create mode 100644 browser/branding/alpha/default24.png
create mode 100644 browser/branding/alpha/default256.png
create mode 100644 browser/branding/alpha/default32.png
create mode 100644 browser/branding/alpha/default48.png
create mode 100644 browser/branding/alpha/default512.png
create mode 100644 browser/branding/alpha/default64.png
create mode 100644 browser/branding/alpha/disk.icns
create mode 100644 browser/branding/alpha/document.icns
create mode 100644 browser/branding/alpha/document.ico
copy browser/branding/{nightly => alpha}/dsstore (100%)
create mode 100644 browser/branding/alpha/firefox.VisualElementsManifest.xml
create mode 100644 browser/branding/alpha/firefox.icns
create mode 100644 browser/branding/alpha/firefox.ico
create mode 100644 browser/branding/alpha/firefox.svg
create mode 100644 browser/branding/alpha/firefox64.ico
create mode 100644 browser/branding/alpha/locales/en-US/brand.dtd
create mode 100644 browser/branding/alpha/locales/en-US/brand.ftl
create mode 100644 browser/branding/alpha/locales/en-US/brand.properties
copy browser/branding/{official => alpha}/locales/jar.mn (100%)
copy browser/branding/{aurora/content => alpha/locales}/moz.build (100%)
copy browser/branding/{aurora => alpha}/moz.build (100%)
copy browser/branding/{aurora => alpha}/newtab.ico (100%)
copy browser/branding/{aurora => alpha}/newwindow.ico (100%)
copy browser/branding/{aurora => alpha}/pbmode.ico (100%)
create mode 100644 browser/branding/alpha/pref/firefox-branding.js
copy browser/branding/{nightly => alpha}/stubinstaller/bgstub.jpg (100%)
copy browser/branding/{nightly => alpha}/stubinstaller/installing_page.css (100%)
copy browser/branding/{aurora => alpha}/stubinstaller/profile_cleanup_page.css (100%)
create mode 100644 browser/branding/alpha/wizHeader.bmp
create mode 100644 browser/branding/alpha/wizHeaderRTL.bmp
create mode 100644 browser/branding/alpha/wizWatermark.bmp
create mode 100644 browser/branding/nightly/content/identity-icons-brand.svg
create mode 100644 browser/branding/nightly/content/tor-styles.css
create mode 100644 browser/branding/nightly/default512.png
create mode 100644 browser/branding/nightly/firefox.svg
create mode 100644 browser/branding/official/content/identity-icons-brand.svg
create mode 100644 browser/branding/official/content/tor-styles.css
create mode 100644 browser/branding/official/default512.png
create mode 100644 browser/branding/official/firefox.svg
create mode 100644 browser/branding/tor-styles.inc.css
create mode 100644 browser/components/onionservices/OnionAliasStore.jsm
create mode 100644 browser/components/onionservices/OnionLocationChild.jsm
create mode 100644 browser/components/onionservices/OnionLocationParent.jsm
create mode 100644 browser/components/onionservices/content/authNotificationIcon.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPopup.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPreferences.css
create mode 100644 browser/components/onionservices/content/authPreferences.inc.xhtml
create mode 100644 browser/components/onionservices/content/authPreferences.js
create mode 100644 browser/components/onionservices/content/authPrompt.js
create mode 100644 browser/components/onionservices/content/authUtil.jsm
create mode 100644 browser/components/onionservices/content/netError/browser.svg
create mode 100644 browser/components/onionservices/content/netError/network.svg
create mode 100644 browser/components/onionservices/content/netError/onionNetError.css
create mode 100644 browser/components/onionservices/content/netError/onionNetError.js
create mode 100644 browser/components/onionservices/content/netError/onionsite.svg
create mode 100644 browser/components/onionservices/content/onionlocation-notification-icons.css
create mode 100644 browser/components/onionservices/content/onionlocation-urlbar.css
create mode 100644 browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
create mode 100644 browser/components/onionservices/content/onionlocation.svg
create mode 100644 browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
create mode 100644 browser/components/onionservices/content/onionlocationPreferences.js
create mode 100644 browser/components/onionservices/content/onionservices.css
create mode 100644 browser/components/onionservices/content/savedKeysDialog.js
create mode 100644 browser/components/onionservices/content/savedKeysDialog.xhtml
create mode 100644 browser/components/onionservices/jar.mn
create mode 100644 browser/components/onionservices/moz.build
create mode 100644 browser/components/rulesets/RulesetsChild.jsm
create mode 100644 browser/components/rulesets/RulesetsParent.jsm
create mode 100644 browser/components/rulesets/content/aboutRulesets.css
create mode 100644 browser/components/rulesets/content/aboutRulesets.html
create mode 100644 browser/components/rulesets/content/aboutRulesets.js
create mode 100644 browser/components/rulesets/content/securedrop.svg
create mode 100644 browser/components/rulesets/jar.mn
create mode 100644 browser/components/rulesets/moz.build
create mode 100644 browser/components/search/extensions/blockchair-onion/favicon.png
create mode 100644 browser/components/search/extensions/blockchair-onion/manifest.json
create mode 100644 browser/components/search/extensions/blockchair/favicon.png
create mode 100644 browser/components/search/extensions/blockchair/manifest.json
create mode 100644 browser/components/search/extensions/ddg-onion/favicon.ico
create mode 100644 browser/components/search/extensions/ddg-onion/manifest.json
delete mode 100644 browser/components/search/extensions/ddg/favicon.ico
create mode 100644 browser/components/search/extensions/ddg/favicon.png
delete mode 100644 browser/components/search/extensions/google/_locales/b-1-d/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-1-e/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-d/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/b-e/messages.json
delete mode 100644 browser/components/search/extensions/google/_locales/en/messages.json
create mode 100644 browser/components/search/extensions/startpage/favicon.png
create mode 100644 browser/components/search/extensions/startpage/manifest.json
copy browser/components/{newtab/data/content/tippytop/favicons/twitter-com.ico => search/extensions/twitter/favicon.ico} (100%)
create mode 100644 browser/components/search/extensions/twitter/manifest.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NN/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/NO/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/af/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/an/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ar/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ast/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/az/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be-tarask/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/be/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bg/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/br/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/bs/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ca/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cy/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/cz/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/da/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/de/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/dsb/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/el/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/en/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/es/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/et/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/eu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fa/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/fy-NL/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ga-IE/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gd/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/gu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/he/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hsb/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hu/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/hy/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ia/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/id/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/is/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/it/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ja/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ka/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kab/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/km/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kn/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/kr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lij/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lt/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ltg/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/lv/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/mr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ms/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/my/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ne/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/nl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/oc/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pa/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/pt/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/rm/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ro/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ru/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/si/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sq/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/sv-SE/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ta/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/te/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/th/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tl/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/tr/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uk/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/ur/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/uz/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/vi/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/wo/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-CN/messages.json
delete mode 100644 browser/components/search/extensions/wikipedia/_locales/zh-TW/messages.json
create mode 100644 browser/components/search/extensions/yahoo/favicon.ico
create mode 100644 browser/components/search/extensions/yahoo/manifest.json
create mode 100644 browser/components/search/extensions/youtube/favicon.ico
create mode 100644 browser/components/search/extensions/youtube/manifest.json
create mode 100644 browser/components/securitylevel/content/securityLevel.js
create mode 100644 browser/components/securitylevel/content/securityLevelButton.css
create mode 100644 browser/components/securitylevel/content/securityLevelButton.inc.xhtml
create mode 100644 browser/components/securitylevel/content/securityLevelIcon.svg
create mode 100644 browser/components/securitylevel/content/securityLevelPanel.css
create mode 100644 browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.css
create mode 100644 browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
create mode 100644 browser/components/securitylevel/jar.mn
create mode 100644 browser/components/securitylevel/moz.build
create mode 100644 browser/components/torconnect/TorConnectChild.jsm
create mode 100644 browser/components/torconnect/TorConnectParent.jsm
create mode 100644 browser/components/torconnect/content/aboutTorConnect.css
create mode 100644 browser/components/torconnect/content/aboutTorConnect.js
create mode 100644 browser/components/torconnect/content/aboutTorConnect.xhtml
create mode 100644 browser/components/torconnect/content/arrow-right.svg
create mode 100644 browser/components/torconnect/content/bridge.svg
create mode 100644 browser/components/torconnect/content/connection-failure.svg
create mode 100644 browser/components/torconnect/content/connection-location.svg
create mode 100644 browser/components/torconnect/content/onion-slash-fillable.svg
create mode 100644 browser/components/torconnect/content/onion-slash.svg
create mode 100644 browser/components/torconnect/content/onion.svg
create mode 100644 browser/components/torconnect/content/torBootstrapUrlbar.js
create mode 100644 browser/components/torconnect/content/torconnect-urlbar.css
create mode 100644 browser/components/torconnect/content/torconnect-urlbar.inc.xhtml
create mode 100644 browser/components/torconnect/jar.mn
create mode 100644 browser/components/torconnect/moz.build
create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.jsm
create mode 100644 browser/components/torpreferences/content/bridgeQrDialog.xhtml
create mode 100644 browser/components/torpreferences/content/bridgemoji-annotations.json
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f300.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f308.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f30b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f319.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f31f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f321.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f32e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f332.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f333.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f334.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f335.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f336.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f337.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f339.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f33f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f341.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f344.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f345.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f346.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f347.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f348.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f349.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f34f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f350.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f351.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f352.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f353.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f354.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f355.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f368.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f369.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f36d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f37f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f380.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f381.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f382.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f383.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f388.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f389.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f38f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f392.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f399.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f39f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3a8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ac.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3af.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3b8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ba.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3bb.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3be.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3c8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3d5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3dd.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3e1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3ee.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f3f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f40d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f417.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f418.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f419.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f41f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f420.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f422.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f425.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f426.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f428.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f42f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f430.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f431.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f432.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f433.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f434.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f435.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f436.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f437.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f43f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f441.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f451.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f455.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f457.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f45f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f47d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f484.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f488.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f48e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f490.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4a7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4b3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4bf.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4cc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4ce.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4d5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4e2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f4fb.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f50b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f511.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f525.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f526.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f52e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f54a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f58d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f5ff.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f680.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f681.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f686.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f68d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f695.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f697.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f69c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6a4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f8.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fa.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f6fc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f916.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f93f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f941.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f94f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f950.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f951.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f955.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f956.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f95e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f965.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f966.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f968.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f96f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f980.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f981.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f984.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f986.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f987.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f988.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f989.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98b.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f98f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f992.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f993.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f994.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f995.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f998.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f999.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99a.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99c.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99d.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f99e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a4.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9a9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ad.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c1.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c3.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c7.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9c9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9d9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9da.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9dc.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9e9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ea.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ec.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ed.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9ee.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1f9f9.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa73.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa80.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa81.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa83.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa90.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa91.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa95.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fa97.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fab6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/1fad6.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/23f0.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2600.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2602.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2604.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/260e.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2693.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2696.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26bd.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26f2.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/26f5.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2708.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/270f.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2728.svg
create mode 100644 browser/components/torpreferences/content/bridgemoji/2744.svg
create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/builtinBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/check.svg
create mode 100644 browser/components/torpreferences/content/connectionCategory.inc.xhtml
create mode 100644 browser/components/torpreferences/content/connectionPane.js
create mode 100644 browser/components/torpreferences/content/connectionPane.xhtml
create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.jsm
create mode 100644 browser/components/torpreferences/content/connectionSettingsDialog.xhtml
copy toolkit/themes/shared/icons/defaultFavicon.svg => browser/components/torpreferences/content/network.svg (100%)
create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/provideBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.jsm
create mode 100644 browser/components/torpreferences/content/requestBridgeDialog.xhtml
create mode 100644 browser/components/torpreferences/content/torLogDialog.jsm
create mode 100644 browser/components/torpreferences/content/torLogDialog.xhtml
create mode 100644 browser/components/torpreferences/content/torPreferences.css
create mode 100644 browser/components/torpreferences/content/torPreferencesIcon.svg
create mode 100644 browser/components/torpreferences/jar.mn
create mode 100644 browser/components/torpreferences/moz.build
create mode 100644 browser/config/mozconfigs/base-browser
create mode 100644 browser/config/mozconfigs/tor-browser
create mode 100644 browser/extensions/onboarding/OnboardingTelemetry.jsm
create mode 100644 browser/extensions/onboarding/OnboardingTourType.jsm
create mode 100644 browser/extensions/onboarding/README.md
create mode 100644 browser/extensions/onboarding/api.js
create mode 100644 browser/extensions/onboarding/background.js
create mode 100644 browser/extensions/onboarding/content/Onboarding.jsm
create mode 100644 browser/extensions/onboarding/content/img/close.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-circuit-display.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-expect-differences.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-network.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-onion-services.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-privacy.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security-level.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-security.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-toolbar-layout.png
create mode 100644 browser/extensions/onboarding/content/img/figure_tor-welcome.png
create mode 100644 browser/extensions/onboarding/content/img/icons_no-icon.png
create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.png
create mode 100644 browser/extensions/onboarding/content/img/icons_tour-complete.svg
create mode 100644 browser/extensions/onboarding/content/onboarding-tor-circuit-display.js
create mode 100644 browser/extensions/onboarding/content/onboarding-tour-agent.js
create mode 100644 browser/extensions/onboarding/content/onboarding.css
create mode 100644 browser/extensions/onboarding/content/onboarding.js
create mode 100644 browser/extensions/onboarding/data_events.md
create mode 100644 browser/extensions/onboarding/jar.mn
create mode 100644 browser/extensions/onboarding/locales/en-US/onboarding.properties
create mode 100644 browser/extensions/onboarding/locales/jar.mn
copy browser/{branding/aurora/content => extensions/onboarding/locales}/moz.build (100%)
create mode 100644 browser/extensions/onboarding/manifest.json
create mode 100644 browser/extensions/onboarding/moz.build
copy browser/extensions/{formautofill => onboarding}/schema.json (100%)
create mode 100644 browser/extensions/onboarding/test/browser/.eslintrc.js
create mode 100644 browser/extensions/onboarding/test/browser/browser.ini
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_accessibility.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_keyboard.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_2.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_3.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_4.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_5.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_notification_click_auto_complete_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_select_default_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_skip_tour.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js
create mode 100644 browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js
create mode 100644 browser/extensions/onboarding/test/browser/head.js
create mode 100644 browser/extensions/onboarding/test/unit/.eslintrc.js
create mode 100644 browser/extensions/onboarding/test/unit/head.js
create mode 100644 browser/extensions/onboarding/test/unit/test-onboarding-tour-type.js
create mode 100644 browser/extensions/onboarding/test/unit/xpcshell.ini
create mode 100644 browser/locales/en-US/chrome/browser/aboutTBUpdate.dtd
create mode 100644 browser/modules/BridgeDB.jsm
create mode 100644 browser/modules/Moat.jsm
create mode 100644 browser/modules/TorConnect.jsm
create mode 100644 browser/modules/TorProcessService.jsm
create mode 100644 browser/modules/TorProtocolService.jsm
create mode 100644 browser/modules/TorSettings.jsm
create mode 100644 browser/modules/TorStrings.jsm
create mode 100644 browser/themes/shared/icons/new_circuit.svg
create mode 100644 browser/themes/shared/icons/new_identity.svg
create mode 100644 browser/themes/shared/identity-block/onion-slash.svg
create mode 100644 browser/themes/shared/identity-block/onion-warning.svg
create mode 100644 browser/themes/shared/identity-block/onion.svg
create mode 100644 browser/themes/shared/onionPattern.css
create mode 100644 browser/themes/shared/onionPattern.inc.xhtml
create mode 100644 browser/themes/shared/onionPattern.svg
delete mode 100644 dom/base/test/test_suppressed_microtasks.html
create mode 100644 layout/generic/test/test_tor_bug23104.html
create mode 100644 mobile/android/app/000-tor-browser-android.js
create mode 100644 mobile/android/torbrowser.configure
create mode 100644 mozconfig-android-armv7
create mode 100644 mozconfig-linux-i686
create mode 100644 mozconfig-linux-x86_64
create mode 100644 mozconfig-linux-x86_64-asan
create mode 100644 mozconfig-linux-x86_64-dev
create mode 100644 mozconfig-macos-x86_64
create mode 100644 mozconfig-windows-i686
create mode 100644 mozconfig-windows-x86_64
create mode 100644 netwerk/dns/IOnionAliasService.idl
create mode 100644 netwerk/dns/OnionAliasService.cpp
create mode 100644 netwerk/dns/OnionAliasService.h
create mode 100755 run-tbb-tests
create mode 100644 tbb-tests-ignore.txt
create mode 100644 tbb-tests/browser.ini
create mode 100644 tbb-tests/browser_tor_TB4.js
create mode 100644 tbb-tests/browser_tor_bug2950.js
create mode 100644 tbb-tests/browser_tor_omnibox.js
create mode 100644 tbb-tests/mochitest.ini
create mode 100644 tbb-tests/moz.build
create mode 100644 tbb-tests/test_tor_bug2874.html
create mode 100644 toolkit/modules/Bech32Decode.jsm
create mode 100644 toolkit/modules/QRCode.jsm
create mode 160000 toolkit/torproject/torbutton
create mode 100755 tools/torbrowser/update_bridgemoiji.py
create mode 100644 xpcom/io/TorFileUtils.cpp
create mode 100644 xpcom/io/TorFileUtils.h
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
73

[tor-browser] branch tor-browser-91.12.0esr-12.0-1 updated: fixup! Bug 41075: Accept self-signed certificates for onion services
by gitolite role 22 Aug '22
by gitolite role 22 Aug '22
22 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch tor-browser-91.12.0esr-12.0-1
in repository tor-browser.
The following commit(s) were added to refs/heads/tor-browser-91.12.0esr-12.0-1 by this push:
new 17f05be05d46e fixup! Bug 41075: Accept self-signed certificates for onion services
17f05be05d46e is described below
commit 17f05be05d46e5be93ca68afdf1b9ed271b5e8dc
Author: Dan Ballard <dan(a)mindstab.net>
AuthorDate: Tue Aug 16 13:12:36 2022 -0700
fixup! Bug 41075: Accept self-signed certificates for onion services
---
browser/base/content/browser-siteIdentity.js | 6 ++++--
security/certverifier/CertVerifier.cpp | 22 ++++++++++++++++++----
security/manager/ssl/SSLServerCertVerification.cpp | 15 +++++++++++++--
security/manager/ssl/nsNSSIOLayer.cpp | 13 ++++++++++---
security/nss/lib/mozpkix/include/pkix/Result.h | 2 ++
security/nss/lib/mozpkix/include/pkix/pkixnss.h | 1 +
6 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index b7d59db3dd34d..e45b65ddac158 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -767,8 +767,10 @@ var gIdentityHandler = {
issuerCert = this._secInfo.succeededCertChain[
this._secInfo.succeededCertChain.length - 1
];
-
- return !issuerCert.isBuiltInRoot;
+ if (issuerCert) {
+ return !issuerCert.isBuiltInRoot;
+ }
+ return false;
},
/**
diff --git a/security/certverifier/CertVerifier.cpp b/security/certverifier/CertVerifier.cpp
index c427539bd67ea..e513eddb31e0c 100644
--- a/security/certverifier/CertVerifier.cpp
+++ b/security/certverifier/CertVerifier.cpp
@@ -918,6 +918,8 @@ Result CertVerifier::VerifySSLServerCert(
return Result::ERROR_BAD_CERT_DOMAIN;
}
+ bool errOnionWithSelfSignedCert = false;
+
// CreateCertErrorRunnable assumes that CheckCertHostname is only called
// if VerifyCert succeeded.
Result rv =
@@ -931,9 +933,16 @@ Result CertVerifier::VerifySSLServerCert(
CertIsSelfSigned(peerCert, pinarg)) {
// In this case we didn't find any issuer for the certificate and the
// certificate is self-signed.
- return Result::ERROR_SELF_SIGNED_CERT;
+ if (StringEndsWith(hostname, ".onion"_ns)) {
+ // Self signed cert over onion is deemed secure, the hidden service provides authentication.
+ // We defer returning this error and keep processing to determine if there are other legitimate
+ // certificate errors (such as expired, wrong domain) that we would like to surface to the user
+ errOnionWithSelfSignedCert = true;
+ } else {
+ return Result::ERROR_SELF_SIGNED_CERT;
+ }
}
- if (rv == Result::ERROR_UNKNOWN_ISSUER) {
+ if (rv == Result::ERROR_UNKNOWN_ISSUER && !errOnionWithSelfSignedCert) {
// In this case we didn't get any valid path for the cert. Let's see if
// the issuer is the same as the issuer for our canary probe. If yes, this
// connection is connecting via a misconfigured proxy.
@@ -951,7 +960,9 @@ Result CertVerifier::VerifySSLServerCert(
return Result::ERROR_MITM_DETECTED;
}
}
- return rv;
+ if (!errOnionWithSelfSignedCert) {
+ return rv;
+ }
}
if (dcInfo) {
@@ -995,7 +1006,7 @@ Result CertVerifier::VerifySSLServerCert(
}
bool isBuiltInRoot;
rv = IsCertChainRootBuiltInRoot(builtChain, isBuiltInRoot);
- if (rv != Success) {
+ if (rv != Success && !errOnionWithSelfSignedCert) {
return rv;
}
@@ -1016,6 +1027,9 @@ Result CertVerifier::VerifySSLServerCert(
return rv;
}
+ if (errOnionWithSelfSignedCert) {
+ return Result::ERROR_ONION_WITH_SELF_SIGNED_CERT;
+ }
return Success;
}
diff --git a/security/manager/ssl/SSLServerCertVerification.cpp b/security/manager/ssl/SSLServerCertVerification.cpp
index 0a84aecc6c724..a0c14be276dd6 100644
--- a/security/manager/ssl/SSLServerCertVerification.cpp
+++ b/security/manager/ssl/SSLServerCertVerification.cpp
@@ -299,6 +299,7 @@ SECStatus DetermineCertOverrideErrors(const UniqueCERTCertificate& cert,
case mozilla::pkix::MOZILLA_PKIX_ERROR_MITM_DETECTED:
case mozilla::pkix::MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE:
case mozilla::pkix::MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT:
+ case mozilla::pkix::MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT:
case mozilla::pkix::MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA: {
collectedErrors = nsICertOverrideService::ERROR_UNTRUSTED;
errorCodeTrust = defaultErrorCodeToReport;
@@ -984,6 +985,17 @@ PRErrorCode AuthCertificateParseResults(
gPIPNSSLog, LogLevel::Debug,
("[0x%" PRIx64 "] Certificate error was not overridden\n", aPtrForLog));
+ // If Onion with self signed cert we want to prioritize any other error
+ if (errorCodeTrust == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) {
+ if (errorCodeMismatch) {
+ return errorCodeMismatch;
+ } else if (errorCodeTime) {
+ return errorCodeTime;
+ } else {
+ return MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT;
+ }
+ }
+
// pick the error code to report by priority
return errorCodeTrust ? errorCodeTrust
: errorCodeMismatch ? errorCodeMismatch
@@ -1389,8 +1401,7 @@ SSLServerCertVerificationResult::Run() {
std::move(mPeerCertChain),
mCertificateTransparencyStatus, mEVStatus,
mSucceeded, mIsBuiltCertChainRootBuiltInRoot);
-
- if (!mSucceeded && mCollectedErrors != 0) {
+ if (!mSucceeded && mCollectedErrors != 0 && mFinalError != MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) {
mInfoObject->SetStatusErrorBits(mCert, mCollectedErrors);
}
mInfoObject->SetCertVerificationResult(mFinalError);
diff --git a/security/manager/ssl/nsNSSIOLayer.cpp b/security/manager/ssl/nsNSSIOLayer.cpp
index 21687447072d4..10d74b9eb3eb4 100644
--- a/security/manager/ssl/nsNSSIOLayer.cpp
+++ b/security/manager/ssl/nsNSSIOLayer.cpp
@@ -411,7 +411,11 @@ void nsNSSSocketInfo::SetCertVerificationResult(PRErrorCode errorCode) {
"Invalid state transition to cert_verification_finished");
if (mFd) {
- SECStatus rv = SSL_AuthCertificateComplete(mFd, errorCode);
+ PRErrorCode passCode = errorCode;
+ if (errorCode == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) {
+ passCode = 0;
+ }
+ SECStatus rv = SSL_AuthCertificateComplete(mFd, passCode);
// Only replace errorCode if there was originally no error
if (rv != SECSuccess && errorCode == 0) {
errorCode = PR_GetError();
@@ -422,12 +426,15 @@ void nsNSSSocketInfo::SetCertVerificationResult(PRErrorCode errorCode) {
}
}
- if (errorCode) {
+ if (errorCode &&
+ errorCode != MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) {
mFailedVerification = true;
SetCanceled(errorCode);
}
- if (mPlaintextBytesRead && !errorCode) {
+ if (mPlaintextBytesRead &&
+ (!errorCode ||
+ errorCode == MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT)) {
Telemetry::Accumulate(Telemetry::SSL_BYTES_BEFORE_CERT_CALLBACK,
AssertedCast<uint32_t>(mPlaintextBytesRead));
}
diff --git a/security/nss/lib/mozpkix/include/pkix/Result.h b/security/nss/lib/mozpkix/include/pkix/Result.h
index 29461dc1a510b..b2ad3a383ceb3 100644
--- a/security/nss/lib/mozpkix/include/pkix/Result.h
+++ b/security/nss/lib/mozpkix/include/pkix/Result.h
@@ -188,6 +188,8 @@ static const unsigned int FATAL_ERROR_FLAG = 0x800;
SEC_ERROR_LIBRARY_FAILURE) \
MOZILLA_PKIX_MAP(FATAL_ERROR_NO_MEMORY, FATAL_ERROR_FLAG | 4, \
SEC_ERROR_NO_MEMORY) \
+ MOZILLA_PKIX_MAP(ERROR_ONION_WITH_SELF_SIGNED_CERT, 155, \
+ MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT) \
/* nothing here */
enum class Result {
diff --git a/security/nss/lib/mozpkix/include/pkix/pkixnss.h b/security/nss/lib/mozpkix/include/pkix/pkixnss.h
index b181ca541e01c..16513a5dfb0b1 100644
--- a/security/nss/lib/mozpkix/include/pkix/pkixnss.h
+++ b/security/nss/lib/mozpkix/include/pkix/pkixnss.h
@@ -88,6 +88,7 @@ enum ErrorCode {
MOZILLA_PKIX_ERROR_ADDITIONAL_POLICY_CONSTRAINT_FAILED = ERROR_BASE + 13,
MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT = ERROR_BASE + 14,
MOZILLA_PKIX_ERROR_MITM_DETECTED = ERROR_BASE + 15,
+ MOZILLA_PKIX_ERROR_ONION_WITH_SELF_SIGNED_CERT = ERROR_BASE + 100,
END_OF_LIST
};
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[builders/tor-browser-build] branch main updated: Bug 40580: Add support for uk (ukranian) locale
by gitolite role 22 Aug '22
by gitolite role 22 Aug '22
22 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch main
in repository builders/tor-browser-build.
The following commit(s) were added to refs/heads/main by this push:
new 34ede95 Bug 40580: Add support for uk (ukranian) locale
34ede95 is described below
commit 34ede95be7c8a76167b63aa21a8693b32ce0db0f
Author: Richard Pospesel <richard(a)torproject.org>
AuthorDate: Fri Aug 19 18:36:23 2022 +0000
Bug 40580: Add support for uk (ukranian) locale
---
rbm.conf | 3 +++
tools/signing/set-config | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/rbm.conf b/rbm.conf
index c41b5ea..dc155fa 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -129,6 +129,7 @@ var:
- sv-SE
- th
- tr
+ - uk
- vi
- zh-CN
- zh-TW
@@ -163,6 +164,7 @@ var:
- sv-rSE
- th
- tr
+ - uk
- vi
- zh-rCN
- zh-rTW
@@ -222,6 +224,7 @@ targets:
- es-ES
- fr
- ru
+ - uk
max_torbrowser_incremental_from: 2
build_infos_json: 1
diff --git a/tools/signing/set-config b/tools/signing/set-config
index bad1009..d0b8fb3 100644
--- a/tools/signing/set-config
+++ b/tools/signing/set-config
@@ -1,7 +1,7 @@
. "$script_dir/set-config.tbb-version"
. "$script_dir/set-config.hosts"
-bundle_locales="ar ca cs da de el en-US es-AR es-ES fa fr ga-IE he hu id is it ja ka ko lt mk ms my nb-NO nl pl pt-BR ro ru sv-SE th tr vi zh-CN zh-TW"
+bundle_locales="ar ca cs da de el en-US es-AR es-ES fa fr ga-IE he hu id is it ja ka ko lt mk ms my nb-NO nl pl pt-BR ro ru sv-SE th tr uk vi zh-CN zh-TW"
signed_dir="$script_dir/../../$tbb_version_type/signed"
signed_version_dir="$signed_dir/$tbb_version"
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
0

[tor-browser] branch tor-browser-91.12.0esr-12.0-1 updated (485fc652ef187 -> 372d4edbd4d08)
by gitolite role 22 Aug '22
by gitolite role 22 Aug '22
22 Aug '22
This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch tor-browser-91.12.0esr-12.0-1
in repository tor-browser.
from 485fc652ef187 fixup! Bug 41089: Add tor-browser build scripts + Makefile to tor-browser
new 6d14d10b5d446 fixup! Bug 10760: Integrate TorButton to TorBrowser core
new 372d4edbd4d08 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../content/bridgemoji-annotations.json | 268 ++++++++++++++++++++-
toolkit/torproject/torbutton | 2 +-
tools/torbrowser/update_bridgemoiji.py | 1 +
3 files changed, 265 insertions(+), 6 deletions(-)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
1
2