tbb-commits
Threads by month
- ----- 2025 -----
- 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
February 2021
- 4 participants
- 535 discussions
commit 66f8a03d67680bc34486340607796cb346ebcb7e
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Feb 5 10:40:16 2021 +0000
Fold in stable Changelogs
---
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 29 ++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 92a0d80..f1bb8c4 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -18,6 +18,15 @@ Tor Browser 10.5a9 -- February 5 2021
* Bug 40214: Update AMO Collection URL [tor-browser-build]
* Bug 40217: Update components for switch to mozilla86-based Fenix [tor-browser-build]
+Tor Browser 10.0.10 -- February 3 2021
+ * All Platforms
+ * Update NoScript to 11.2
+ * Update HTTPS Everywhere to 2021.1.27
+ * Bug 40224: Backport Tor patch for v3 onion services [tor-browser-build]
+ * Android
+ * Pick up fix for Mozilla's bug 1688783
+ * Pick up fix for Mozilla's bug 1688017
+
Tor Browser 10.5a8 -- January 26 2021
* All Platforms
* Update NoScript to 11.1.9
@@ -41,6 +50,26 @@ Tor Browser 10.5a8 -- January 26 2021
* Linux
* Bug 40112: Strip libstdc++ we ship [tor-browser-build]
+Tor Browser 10.0.9 -- January 26 2021
+ * All Platforms
+ * Update NoScript to 11.1.9
+ * Windows + OS X + Linux
+ * Update Firefox to 78.7.0esr
+ * Bug 40249: Remove EOY 2020 Campaign [tor-browser]
+ * Android
+ * Update Fenix to 85.1.0
+ * Bug 40137: Remove EOY 2020 Campaign [fenix]
+ * Bug 40165: Update zstd to 1.4.8 [tor-browser-build]
+ * Bug 40308: Disable network state partitioning until audit [tor-browser]
+ * Build System
+ * All Platforms
+ * Update Go to 1.14.14
+ * Android
+ * Bug 40190: Update toolchain for Fenix 85 [tor-browser-build]
+ * Bug 40191: Update Fenix and dependencies to 85.0.0-beta1 [tor-browser-build]
+ * Bug 40193: Build all mobile Rust targets in a single step [tor-browser-build]
+ * Bug 40208: Mitigate uniffi non-deterministic code generation [tor-browser-build]
+
Tor Browser 10.5a7 -- January 19 2021
* All Platforms
* Update NoScript to 11.1.8
1
0

04 Feb '21
commit 3ff156822f70af92761e508e7f86d752512974f5
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu Feb 4 18:57:03 2021 +0000
Release preparations for 10.5a9
Versions bump and Changelog update
---
projects/android-components/config | 4 +-
.../gradle-dependencies-list.txt | 8 +-
projects/fenix/config | 4 +-
projects/fenix/gradle-dependencies-list.txt | 352 ++++++++++-----------
projects/geckoview/config | 2 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 20 ++
rbm.conf | 2 +-
7 files changed, 206 insertions(+), 186 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index 5e770c5..df3d636 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -8,12 +8,12 @@ gpg_keyring: torbutton.gpg
variant: '[% IF c("var/release") %]Release[% ELSE %]Beta[% END %]'
var:
- android_components_version: 72.0.1
+ android_components_version: 72.0.5
torbrowser_branch: 10.5
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 17
+ gradle_dependencies_version: 18
# Switch to make it easier to grab all dependencies during a dry-run.
# Note: Use the commit before support for new GeckoView interfaces gets added.
fetch_gradle_dependencies: 0
diff --git a/projects/android-components/gradle-dependencies-list.txt b/projects/android-components/gradle-dependencies-list.txt
index a23995b..4e7b6a9 100644
--- a/projects/android-components/gradle-dependencies-list.txt
+++ b/projects/android-components/gradle-dependencies-list.txt
@@ -440,12 +440,12 @@ ea6cb3d94121d03fefd5329072c7b01d891b8bb25c2c303b28dfd6728eeaa72f | https://maven
ca3c96c281e314f07170bbfa766693ef0d2e4d865433a9622254088ee7e68363 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/63.0.0/…
93fd44998bfeeab9d7137cb34a50d510876ec8362e988b8a4ddf4e1629a69e71 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/63.0.…
b3836516ae7c9f1ca38ce636e24e3d10b2b421d94e344f14033daa5f20df3168 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/63.0.…
-6ca800559b22d4bd0833444d3e666390a103307375d000565ea89d571ca1fe81 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
-12028814b487c385870e3eb1b40d3cb3027ebbe50af7c3ef182880d6ba79aae9 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
+8c0fe200be53cfd668ffbf10efa897e68480caaab5c0cfe3f72753dbc8e8d69f | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
+d8993f6b94fc6e91c7d91bfd201ab5a1d17b7c7288b3eb28fd4d63f9a7064324 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
5fe022d90f552aae72e0f7f908ade55798ea5a44bdb6c9458dd7706ba60d4eb6 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/87…
a530ccd2c9adfc3b98e3246c33997831ccbe0d66752e968fb90cfa933006cc99 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/87…
-7ac371cfa60025020c391b59890db48c9db52fb67c1b2fd1eda70a2d20b72cb6 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
-e514f95723d5f97c1e92e425923d13add24fdb85c2f761b20ae42d23e0457c0d | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
+4251784fdd7b1f8c7a675fcf668b2fd23d0b44c26a425fe7752dbce3b2f19cb0 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
+ab81e6a37144452a63880bb34b6140a1e3075cfe50e3a7275c0c6316844b8b75 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
97a9d151ad636acc68eeda046866f0ac24e6f7bf2a81a6b938a3386cc73be529 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
817736c79269dc217946522fdb8f6ed57547bdd8fbf187687b53ffbe5d813bc3 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
ccd3a75eb0e0f8ce5882d9d3a3154e3d3c40ce9c44f6c506ad4e28df84bab751 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
diff --git a/projects/fenix/config b/projects/fenix/config
index 0cf9267..9cab5dc 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -8,13 +8,13 @@ gpg_keyring: torbutton.gpg
variant: Beta
var:
- fenix_version: 86.0.0b1
+ fenix_version: 86.0.0b2
torbrowser_branch: 10.5
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 19
+ gradle_dependencies_version: 20
# Switch to make it easier to grab all dependencies during a dry-run.
# Note: Use the commit that integrates Tor.
fetch_gradle_dependencies: 0
diff --git a/projects/fenix/gradle-dependencies-list.txt b/projects/fenix/gradle-dependencies-list.txt
index 5a334b3..21890f5 100644
--- a/projects/fenix/gradle-dependencies-list.txt
+++ b/projects/fenix/gradle-dependencies-list.txt
@@ -922,182 +922,182 @@ fd98ace3131929977df6caa61b419956cd704fe7fb46dc20e1d348e710755690 | https://maven
0b41c8ffaa03c0f84bc4ffebcd765c6373162191fa14e480fd1de19e1d9ed2b2 | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/67.2.0…
9ff49670a110fd56586229d42673902049a92650257fad81146a25daa5a4e58f | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/67.2.0/tabs-6…
8729ddf632ec417808e0e0b49868cb46bc968fb44c97f5e0b7397ccd4728c8e3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/67.2.0/tabs-6…
-707eb615751466dc1ee135a52c2009352fdd3a5e879b6064c24c094953907fab | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-26fe99915f9db9b66a321051451b835f08313a632b7c351ede17e9f73761a670 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-a33eab48fd4179e2c74e4efdc40ba7e0123eaa46f64edd110bcf497501ac6281 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/72.…
-599a4b9bdabfdcfdb13b0fd56091469c2629e54fcc2615eb19f7c5266a9caa2c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/72.…
-4b9325626526a8774d9313fc9e5dfe145505e5a7bb7ad4a43f67c24bc5127c5b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-58e1948a344749e8e9ef83097d35775eef0b379a95b8b8af2a62458570e35325 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-47bbdc0db9e0d032022d8575debd9411e991ca89e00b8062e0d1b85a3d1a55b1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-1b25649ca27bd92b581682d6f98b6abb66d0bfa4483390c66b5720f7f3e780c4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-8ee1b23eb8bb5a464deca2e3e0b90dd7619751a0889c63714702b6dea2fa7c2c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-e5676a2ec9e56dad1dc23e5f9ed25eb757b4c580a132e84118f6ba7c7b62d2c5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-421fde3c9641e50bc932e20d382d19bc99ad67996e30223439522e323274618c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/72.0.…
-104f8429ad278a62b76a5748b0a1a33b66c2f9a36cfe714f4b51e73c1fce07a4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/72.0.…
-72b47d9ae38027c9686bcc4aeec69c4c290c5dda71f5b18230ea328ff1aa24e7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/72.0.1…
-d18f914b6dd7b33af4cde0711f8e1947d46f2f96c8e0b5e94cbca36337eb2756 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/72.0.1…
-807e0a73ee535859a8957eda4ee52f858a6d973c3d8c5f3e8ddaabfacc849305 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/72.0.…
-10cfc7830f0522619a9eee3551e0aedd152358e5dbb538e910ca4d46b1b68ac3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/72.0.…
-f0eb789cb5daef255d9ee4ff7ea3afeeb3d3f6046eb7b03871da41e52b8ba1c1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/72.0…
-8b60ce05c42fb38f98b010824dc5146bb397a0dfdbb6a43a767cb357e4984f86 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/72.0…
-07cca82ca086d49a7d26ac44d08eaff857357b357e9600b312c598e2259c8627 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session-sto…
-467d2be40b3dd02055b822f10bd3e4e6866646ab560d79c28720c71d66c6b9ca | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session-sto…
-9c293d868f3ad6b5b1bdeea71745be48c4da9ebe33ba70dc36b413c741446787 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/72.…
-5cb1694ff03cbc4ef81267f1ac6baf7d1b8d78a62e9455dce9134e7f79bbde40 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/72.…
-d55f14316f736b6860512d81f32a2148d9394b1d56f5be8f8098d43dc385bf07 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/72.0.…
-2efeb5a653c2012b7b6c56a153be721c8a4530de09ef2834e721f31f2c96b5da | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/72.0.…
-f3620e6dafd8244db545af087d50ed93533cdbdb956e2436c841f78b631e1d0f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-70f5a5ede04dc8a602b153b1492e20b6fecfcbf0afb0c12f16831a5e902715c4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-d75a22b6e81f1f90471251a695ef64d4a75532040065d8923ddb0928ae61fbf2 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/72…
-c4260cf9ba9a6946edb73f4462193185703dccd70b4984cfb89df96fdf1ba162 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/72…
-fe8e7843478a9699ebe8d21ca9486d826aa4c85dc3178ff1114be22f9b0ff50c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-99e4b9be8cf3acd6da058b8246ddb1c55ca033f3d47b52974c6f8dc7a7d6c3bb | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-27ad00d7ca8b1fd07b32f3dc28feb39885c982e34f998000934478d0732b8d20 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/72.…
-1f3ea3fd2fc0db948260589251d5b54499c70ffedc032a41a2fd3d451218265c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/72.…
-a333cc604fe5934656fed5f842fb359f0fdde47c33351c03ef0de3dc742754aa | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-88f2322764929aa7b2903f427728907f87913c5a3d685edaae2eede554b8cfda | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-1384140f0da5782fa9822c40320737247dd22e0c64058e976846982716330583 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/72.0.1…
-7f3854b0e2ff2e69d12a403448cf312936a47a0d7500c91276183397980b40e7 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/72.0.1…
-f37e94bb0b6e1dc275fb0d50c72870e39db756e4f8fde3b8e443df97d20191f8 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/72.0…
-5d94446e0765aa5621a777a6ea3258080d9e5f31f0ea610260394d4783f919c3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/72.0…
-2c67f877477525cbafc6773f8b93d03ff91d51310769f094521d3e62aff774f6 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/72.0.…
-d123e3446f12d6ed2afb80c6983d779bdc6f0a11590c60d9a6138a519ad6a2b8 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/72.0.…
-df27163b42a29ec9e7678cf31c3d3ec76881cab74cff7b50bdce412c3fd63c1a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/72.0.1…
-08adae12391ede66274e13628b45cbdb9dd61535bf2108e68e60b531ab849562 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/72.0.1…
-75be14a169c7ef2bac1830cc7efca7ec45f34edf54c87d7738804030926bd1fd | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/72.0.1…
-ba0428bffb1563dcb8e84e4172b727f2e3f45737eda131214c1a2fda2624e92b | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/72.0.1…
-63c1a7ccf904423703ef3007cd79c0abddbe8d9f43c675685149392de48a4eeb | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/72.…
-00ac375e647a36ad586023bfb3cf2baa27d0e03eda97ccb1bd43880ddf2c1007 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/72.…
-900d502cfbdb96b3c9e35472bd2fbcc5c78396eae66ddca040d3c789bbfac61c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/72.0.1…
-6b2b41a95e05c8121d2af1f53329cb47d67ccf99c6d04fe942f62a606ff5182e | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/72.0.1…
-00de4cfb49bcd14819487375f615055b8993bd73fbbcf6e76c0317b5e066e1a9 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/72…
-e300ef6b9ac7867f9109a9ab3d1e0dac5f5adc74176ad5c612451778d1a4de64 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/72…
-3a5fd8665a36910a96dc2964fa9e241ceda29073139865c493124f12da631257 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/72.…
-4285aa14d4b04ff1fdcecac3d900ccfd435ea7ad2ee599316fa57ab1f5ef626f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/72.…
-cf22dafd69d182e403c420f8b2e0ff15650531958d4d9bec9eb1773a898adbf5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-66d2e749978b1fc5c872b357c7e8491df3d1c75983e620eda522c3ef59639a5e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-4601b349d413fc9cc409d8b37d3dc6dd3134733b3ba021731c17494abde612ad | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/72…
-58f5cb4c9ba1e62852cbf10ac281deee1eb5bace66c23e0e9905b7d5bfcc21a1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/72…
-7c5e19441d7af3d9e0ac277f528aa607bd134ea7cb15939f8b4b4dcb0b5d6e28 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/72.0…
-d3119dc706bd511b9c78c15bbc87489e6649c2e4e724f7152e2f564e337d4191 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/72.0…
-f668f699acb95a2c916a93fd9f64232a7eb64d4f40b9c83a819850bcb1f188b7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
-749f03901ae1c79654eabd0c6f5b3b4d063b346cc9f54b6f0dc746f91d0e3ef2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
-4a010fe579f7d81d8cd4b9fec36b3b651ff0a8df009c72af8e3c15bfd0c0f6c9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-716f4fade805f4aaa4de9dfd4f655fe29af9e92c2b2ee8ef702ea41e0497777c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-9ce1db08d3a68571358833af99038ec7981de7e0d5921aee56cb34a40dba3a61 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-3b3cebc44ba58680a51ef8df3a6396172cb87c413e6901f548363f4c5905f325 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-0782cc4b473dd6dfdaee2166ceb76ae0bccee802116bfdaaa09b7f995a804b9b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-746ed4c272a217e0fa57dd5c488b662c3b77d44c0ff737f35586abe6a104de64 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-dbfd013db1b6a18bf2a0974e3fe18d084bfe0aa569f381bc60e67b05086015dc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
-965327c314c3d219e611b44b0a7624ca0f39e6f2c7d46c221a5b064f73dea772 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
-8ea11512c113a2640173d46c19636bffde9fc7d336d72b7101e34d7fae1451bf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-41b902c776ebefeaaeb1dda2ad01bfecb16b2700301f2d46dd715337b6492d06 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-d00b5dc50a6d1057e68bf3a3160a884c63405f8a71cc6d0c130c5f4445e4d2f0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/72.0…
-8b4e93c8ed76ec5e87d1db87e32b96f20db1c3a87335b8575a477bf8dc0665fe | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/72.0…
-48516fec9ac2cd8daf126fdae2cbf169e67cbf76e9b3f3d9ac676dbdb99fabf6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/72.0…
-6f04daa045897b9c341fab05e1781171e7f8a82b7478a4a2cc29a9835995fb5e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/72.0…
-c4b0d3c10f9c482f2df539734ffc026fc0a0fa510aa1f180ec284cdd128807e4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/72.0.…
-ea4796c4772d3c522cee1828ec1a71582ff6eacc0e8eb1660550900e807285c1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/72.0.…
-a3e04cc2d816a6cc811f4742664971116420504bd622207cf510a15f833f807b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-5d9c94fa7ae83c60afa7ab26aaf4dbc7b427a46a71dd08d61ad7848d0a579ff5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-394a813d7a809927036028a4d48afd5bb14ccc20efd96e152e1ceb8647ff8502 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/72.…
-41e086ee9c1dd70401805bb9224727e77de04338c00c45b6ffd9e388d60e4137 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/72.…
-cb0f953fdc4bc4c12db326b637611a35e45522435832fcb149034db20a494449 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/72.0.1…
-cb18a4d4067ec892ce3af4320f9ec8b6b8aed63befd5beee291ee7c352e37fc7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/72.0.1…
-129d41e2e7ad9a59d9e1ac9a86eda0d415f0bd43cfbd68e3203544a5957b8919 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/72.0.1/…
-7df696932dc9d5ed4f7b2a88abc2e21ad7ef8ea631da9e05cfd296a5ed7fadbc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/72.0.1/…
-9dbd38fe5c60466ac1d0d911eb69689165cd27d4e5a74a63d5831562b5d45140 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/72.0.1/f…
-c1f1af9b78ed772167e400dd3a04b6d5cf281402fb8721aa129572af3548ad76 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/72.0.1/f…
-65d3b493a76f21648f219d11116c27671f2e2b78bc513e2cde30bacef5c1e98d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-f03ecae7b7d23a4c627927deb70328c75041813f50b2e271c8de5f1eb723f5e1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-3b72bf4c8c50784d39e997ab0622ebcb4c9e25e8f371d95a120a3cfa437e495a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
-e219271d9c498ee5ce1b9960c71f7573ec1b1aecc4ea1c870ea649f6f11e0294 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
-90bdb1bda5fce4b8946affd99d0193578183143afd2d6f184eaef51485f0308c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/72.0…
-3c4bca9fea18ef15e10ca971951a82c803e3905287d962ff90ea7caa309f0013 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/72.0…
-e916752eebd104569639e87cff8159df345ed8ebf4ecae391ef9b0dadf7c0300 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/72.…
-93370a455e923de80570057afaf40b130e2eb2b9a312ded8fc9f86d8e05c05ad | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/72.…
-e00d47d0c3730a5958e36cdd263ddc91dc744958cb2346bc19b5452d6f0799c1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/72.0.…
-a731da97a8cb3cf0b771b16edaaae8475e788ef1839b6ec2659c4ffa5bfb6b0c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/72.0.…
-c4389c74dc01872836ddccd1e1ae4b532df60aaf62e08ece1d698a8b0186ab67 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-a42e0350f5ef058fd21fe86e3c9fe6c773c5048ac7565838df9c7c0f53fffb11 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-ff7b95cced4e44633cf22d007f9ff40cbda272b7963f62dfeb08682d822198ec | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-2c0847cfbd1e56415c1bdd4e6c6adf12ad13c5f9aa5435a67891e3fa8fe08e25 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-b33db8f3e1ce1b5856bda8844b529d617101df81329b66e8fbfa5cb078b783f9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-310736ed3df1f34f483ed7dbdfe8ebf38f4128ffb822303955cc38e9588aef9e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-3524b6d1680c0218563f2738767d580062a7b74792fdddfa442b6b1619524dab | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/72.0.1…
-c154e09d91cba8b3db20dc0172f9ac8b4b8587f1fe8dd56fe7b614a336de22cc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/72.0.1…
-e4fd8116ba7112468bc43ad895cee9c50d29a149a95e1fd0d8f87962076b6ef7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/72.…
-79e4d963dba76be697e01127ace6efc9a6fea44d0adbb2fce24ebbd43a0a247a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/72.…
-6f0b1315aa46725006f85f68bc664e505e603d99917b06e89012f7567993b8ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
-db3026ba20b9fcdc2823bd2b40d5eb86602b0dd3aca0cf98c483bf22369358d0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
-11f1eabc582d8b2a824a45241816f9e82be13ea473363e7f1dff00b697bd6ef9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-0a459768125e5a401ec606ea3fb273305d2b7c7de1affe6bd19b380f081da656 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-1dba077ef2c14496114bdc05c01f632a05a6d6f1bc5d851c18c8032737d90696 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
-b31d4758ec9dd8f4091b4cdcccf70240a87393886a6d0f89d4c9758ef79b40ca | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
-33fd07f7f285d67a88684cee8167049a426f68a8eca466f9ae84304730361642 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-5d217fcc144abf67424252cc45edf1e21f506f0e8ffe05df64dba827855b1cf8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-0b4253ab0ae9e021830214d14272fe5feb1295be5b3d845ac0ae77abae439aa1 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/72.0.1/li…
-5aaa4a590c55258ab8365ac1092b0d6e2dd5d6852195f10cd16f7c47888e37f1 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/72.0.1/li…
-8ddd5a225161264c7d736a42f116f543ed9f672c8574f568ae2fecfb4c08f93b | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/72.…
-dace51ae229c3c03ecdd6f26f3d8ad6db6a77bee4a11420d289fdfe10952ee04 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/72.…
-eda0fcb43894fbdc9a24d4f5b979c902eaaae70aea62b1554f45aa9600b1a7b8 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-b58499b3fb1947692e4d4d29717963dd798849f02410b58210893947021db6e6 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-63a56b896edab40120aa64fe37ad51a008d94de16479d168ceff29dffdd8d5ce | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
-0722d14c6633bf705e3b6de5b7c92de0f77be314da58fb4ebf263b6ed7c458b5 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
-4a6856c18b4c6d6b6de158bd2094f2ba4d84978ead7a98d5ba83c36057b6d4e7 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/72.0.1/li…
-d3451b235c19b0053dc71e8b516cf3fa1f035e4dbab7bfbd909d17b8ff9e0659 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/72.0.1/li…
-8db1f518ab4716885dd27e366400e124d153ea38831f8709632c4d8c43c9789d | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-c75bc4d7866e8258c020b4189d84100095ab41a63b94d967e7c8afc860606af4 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-750e3daa0a68c257472e7e3cb6c3f4f9f400555e32bdd31727d238d8fe9505b7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-e659ba9c2386f3de9bd96a043f2a8cce3e89c48583dee15e3a72085589af923d | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-16d0389b23a563a0f03230afb4438d69072e904557635bee1cb642beceae2607 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/72.0.…
-1adc3cf6b69a901923a0233e349fe1146ce5a4064b8255755b13f56ab391db43 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/72.0.…
-313c55e6d5d22e30812c87ead998c38fd8139f5f5ef50132527410c50611bca7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/72…
-ba6a538646a476c6bc26da89d3f273a1562de06b808834b46b5a3976f4232251 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/72…
-6dfef14f659e10261b6ac082ba60b74f66864df9759055c8d35835fa12da6786 | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/72.0…
-d5fe6458ff9f8d6b898ae178e31a1a9547656d9b63b1acbcf3310dc80f3e8bd8 | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/72.0…
-d338c9bb41e2007cbe2fe9970c9326db9f35f8ad6260696c1b79285c5d5b980b | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-ec62b383ffa88c46af42fc63dadd220f226e6f9728d597d3a23d63e3611d24d9 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-7059fa83e9ab0d3d8d578a35e6573e666ae2d003cedb32e58f87796e121841af | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/72.0.1…
-9ea0a7fe66ffdb0ab26003b612811c23ed46d774810f1c6f30277b9eaad29599 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/72.0.1…
-4399954ec888c5316cc41e7011d19ae663f6ecebb5f38f31d0b94918d40314d5 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/72.0…
-bbe2875022375e21fd2bc3e6812af8cd63bf9751c1ebde680249c305b93242ee | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/72.0…
-755cd9e2c9d550b7d13e32b2d0fc3838021967405cf6b7bf30c58577fec5827a | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/72.0.1/…
-623da48f2e4cbad7161851813f392f8bf5371f9f4ae3ee7d4536d91ddde70c60 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/72.0.1/…
-0c071b715ecd3debb7a93289de8626e4815bd06167ddbdc58cf454c9c4e1c780 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/72.0…
-f9e80748bc674b31fcf0065fe2e56bc0b18284a21e19ebd662fbc5401ed91f62 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/72.0…
-98ac937bc1923bce2c0a9cbb65ae0bc47e2caf4d675dad34dcdd0ea4cbac6ed0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
-a87b0defe96f1726c566febf7243495e175265d7173eedb2f5d935643d994cdb | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
-7d36f11412ef9b7360e0752309b7541e3c85f17b49e32a94a8398e7dab53331c | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/72…
-d7aeaa68bcd0be531147547d2bc121d1d303dc6d1a08e8322c7a76c5271be561 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/72…
-72a085b1abb58af1bc6e47e690634c8d2648f021dfa9c8ce5ae752cbe0670066 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/72.…
-cc2edfcf37281442bdee8221c41f255a3aa58e30ae211fda59becda97c1cb4dd | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/72.…
-20498d158e06bf13012376fe08d3162f722c67ef6005599d97448abc2bcc66a0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-aaca9a1a3ab05d502d6c86f5c4ebc718f4762536ccfec847cee45496f6e48d5c | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-935d569da3ce6839b7457c87a539f71a105d2c4b8eae8caa97f166601402931f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
-f97f98f6baf5efa203b9937af0f3a68ec91fcce434028c092f4975403a6e4451 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
-eb8e8abdd2a1108b338b1a4136d80f4eb02379985946d3d0ffe954c4dad094f7 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/72.0.1…
-5b3ba40e210dcd9c1191d1526dc0b39e8ba1f0fc50a8fceb45064415043f92c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/72.0.1…
-f7bf27270904abd8639b543151b6eaf268b821b8e6235c8decf8031e02ec8648 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/72.0.…
-a982fe4e17f65437b83c0fb6761d62e1ac0f8ce47dfad0eb3dc26a755e808b4c | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/72.0.…
-4b6e3912804fa12d26972c20f161dff350ad238574dea7c9cf9503996d7b13e6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-811312155411acccb4d10f159cf0b0906c74f90c4fdc697ec29594db72440c28 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-42956cea135c67cb2e5e0485146f0f6d53c83d91f9edd999d8c851556c054447 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-1e7bfdc556053760638f4ece37390c432fc040e78cf2c9d2b0ba6a12630089fc | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-09f80a0b9aafdd9d46f53d139c8056880d17e2578d3f9cf797d632a5aba40fba | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/72.…
-ecb9eb77915798c562b2bf8e174493379fc6a138680379e5f4532ea494db0d8e | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/72.…
-7ec7264a35b13382f84d701fab89daace99c6c8157c6fdc6d15da2361fb4f16b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/72.0.1/ui…
-5a0fcad5051301f99816c2dbd72f11d6b2de769e3765da7e5921018714cb3cb1 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/72.0.1/ui…
-71307c399eb59749c6c25d2a0eb93c61513bc79b6c2c5a3e4dfb70e5077185a2 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/72.0.1/ui-…
-5982e0514be1442e3a9c59357737f996d43c2ebb459e21c934308fd77deab52b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/72.0.1/ui-…
-ef0ea652e32aac9d8a52884e5aba0c30bd4236eb042190813cfd5ec4f3216927 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/72.0.…
-6c0754c4cded024e0f8c863bc9c957f6a252d01a6551866b3e662ac5fe234382 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/72.0.…
-b27707dbb4f038517c89ce84541251f527a954ead43f6f7c67dd516a1640dd76 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/72.0.1/u…
-4248c9d81fcf41b29830f0a348db8c12cacf8697cfd6624a7fe1086366fb45c2 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/72.0.1/u…
-6ca800559b22d4bd0833444d3e666390a103307375d000565ea89d571ca1fe81 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
-12028814b487c385870e3eb1b40d3cb3027ebbe50af7c3ef182880d6ba79aae9 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
-7ac371cfa60025020c391b59890db48c9db52fb67c1b2fd1eda70a2d20b72cb6 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
-e514f95723d5f97c1e92e425923d13add24fdb85c2f761b20ae42d23e0457c0d | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
+707eb615751466dc1ee135a52c2009352fdd3a5e879b6064c24c094953907fab | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+ccd95d3031cf0aa450e5c932915250c71e9ebaf90a6615b3ff2ac2e2bcc8bdc7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+a33eab48fd4179e2c74e4efdc40ba7e0123eaa46f64edd110bcf497501ac6281 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/72.…
+7904ef2d3ec4b32b11e1457e3cc5ee3247d1d1969140574e61b0cc07cc9affcf | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/72.…
+76c335ef74415219fe3a28b97b1f439c6171fd8d65988cf407b57fe6cae0a5cd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+2891b3ea2219af4bb6b1c2d60320ab002d2da1dce9e64eb496384cfcabb653c7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+261896df31c26873d3011c200750c1b5bdbf4a55dbb518ebab1cf9ab336cbb97 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+c1e3586a84507770a2549bcf29589b98fba4946a149c142e4163268a543a2582 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+8ee1b23eb8bb5a464deca2e3e0b90dd7619751a0889c63714702b6dea2fa7c2c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+63e48f4208447a3112906eb8c02dfacd0cf3de32cd4c587938787e61716adb03 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+8467f50e6494029503e6a65bed02048825aee1c96da86f42e8f7327f7ddb9c01 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/72.0.…
+81149e35b601f68bd704af6e830f0e8e19e2248fb0dbf0604c72a94528078fc1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/72.0.…
+72b47d9ae38027c9686bcc4aeec69c4c290c5dda71f5b18230ea328ff1aa24e7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/72.0.5…
+983a843ed6cbfd999baf26eeb04d84bb8679b36d891e67d55b07719cba3fdc17 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/72.0.5…
+807e0a73ee535859a8957eda4ee52f858a6d973c3d8c5f3e8ddaabfacc849305 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/72.0.…
+478f9a1e56202f1c8bc483e8000f5646140b2e3996ee0a1af8918298d395973b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/72.0.…
+f0eb789cb5daef255d9ee4ff7ea3afeeb3d3f6046eb7b03871da41e52b8ba1c1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/72.0…
+51ff03796509a2efd194a5b67fa38021e773a759fd66381bc1d5db523a09c7db | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/72.0…
+07cca82ca086d49a7d26ac44d08eaff857357b357e9600b312c598e2259c8627 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session-sto…
+fa3265e3a5635e78e51c5edad0ae62edfe8d186865e34d47eb11173224c45319 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session-sto…
+9c293d868f3ad6b5b1bdeea71745be48c4da9ebe33ba70dc36b413c741446787 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/72.…
+f4746f2e47c6e7b562462deb5ffbf38775e9c362945e374e1afba161aaf1f3d7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/72.…
+d55f14316f736b6860512d81f32a2148d9394b1d56f5be8f8098d43dc385bf07 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/72.0.…
+a020ab27b399ba90b84908f7db049e78ee4aa8760688b0d4878197ba71cf05be | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/72.0.…
+f3620e6dafd8244db545af087d50ed93533cdbdb956e2436c841f78b631e1d0f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+8db6b872db891f99933596f8966c089dba21722f5e67d055beafe51d1c443dec | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+d75a22b6e81f1f90471251a695ef64d4a75532040065d8923ddb0928ae61fbf2 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/72…
+b5983daee96f4ea5bfa4ff13462c00a40231f39641f45a542d283605ed1606e8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/72…
+fe8e7843478a9699ebe8d21ca9486d826aa4c85dc3178ff1114be22f9b0ff50c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+7810035330e6a50683362a0eeddd1cd9540ed13267ef9ce28e3787c7e88e3358 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+27ad00d7ca8b1fd07b32f3dc28feb39885c982e34f998000934478d0732b8d20 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/72.…
+0358373cc8aaa42974ad61830e812070abfd16200cf920021c832dea3e60fe66 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/72.…
+a333cc604fe5934656fed5f842fb359f0fdde47c33351c03ef0de3dc742754aa | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+b523d19025cc5b41f78ed2c70389ed4d77de078f8c9c52c87a02d560d1b32342 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+669854064c0f68e7f8e1aa56177e3ddecfca37f7dd774940a34f88ca9822eb27 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/72.0.5…
+117ce29e8031ee4e53d5da764113b9d61cd257cbd0620f4a6d8fd369c0736e61 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/72.0.5…
+48ccc3cf289c825eca902277a633597ea19568d991863d682a528bafc2b5af42 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/72.0…
+8bb6d0f30165b1ca7bc1c244cce13a257dc72db9069839c7ed9d2bad89bd1717 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/72.0…
+5032bc284eb098c97ce1176913a8895d07ee50aceb2551176071d516ae89251f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/72.0.…
+19dbd8a86bf2167c5ee6ee7e1aca02be42a7fd244ab46bbd60bd427ca8132846 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/72.0.…
+df27163b42a29ec9e7678cf31c3d3ec76881cab74cff7b50bdce412c3fd63c1a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/72.0.5…
+9a10e27f0fa7371ab36911a23b087ad406b68d1e271a1cfbf73fe5af1e70e207 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/72.0.5…
+75be14a169c7ef2bac1830cc7efca7ec45f34edf54c87d7738804030926bd1fd | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/72.0.5…
+552fe32473dcf6068a6b307238efc9b552f78927fb42c626486fd3932dca49ce | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/72.0.5…
+63c1a7ccf904423703ef3007cd79c0abddbe8d9f43c675685149392de48a4eeb | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/72.…
+7fa573c5b9fffd5f81b07a067f09472f21b6ab877762f832c0b4e73a8c81bade | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/72.…
+900d502cfbdb96b3c9e35472bd2fbcc5c78396eae66ddca040d3c789bbfac61c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/72.0.5…
+2d29070c2e106f01d47130f4278a2044a6271651cc2a309f517b37f0703a4fbd | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/72.0.5…
+00de4cfb49bcd14819487375f615055b8993bd73fbbcf6e76c0317b5e066e1a9 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/72…
+3189c52dd2f0758bd549e953dab9f9f131c63a45004467228100777947faed4f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/72…
+3a5fd8665a36910a96dc2964fa9e241ceda29073139865c493124f12da631257 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/72.…
+d2d3c09be18f469de61e3f7457b3e2afa5a7db3cb923771e6499141a6589d95e | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/72.…
+cf22dafd69d182e403c420f8b2e0ff15650531958d4d9bec9eb1773a898adbf5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+3fe557a6a191e1c1ae165e24cb9b0ed18744f24dd69385101330366f5491c813 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+4f834add639a40a0bdd325db87911ab45cb6261f9d6f4f08517e1e9e0c309134 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/72…
+242f92a0c1ba73951a6ad8792c6a7a740dbb858977a5020b431c16b6ced186a8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/72…
+7c5e19441d7af3d9e0ac277f528aa607bd134ea7cb15939f8b4b4dcb0b5d6e28 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/72.0…
+26cb02e5baa82fc077940ccb3731090c11749faf43e3e88ba2262424f7d7093f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/72.0…
+f668f699acb95a2c916a93fd9f64232a7eb64d4f40b9c83a819850bcb1f188b7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
+639e8f809358a3ba3e46b2ca45cc98305e063aa974f4122f47ec168ab04d26c7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
+4a010fe579f7d81d8cd4b9fec36b3b651ff0a8df009c72af8e3c15bfd0c0f6c9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+93439edb1b9343cf5521c2274a3266e3e3b93dba12d0dcbc67ddf0b14252fc64 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+9ce1db08d3a68571358833af99038ec7981de7e0d5921aee56cb34a40dba3a61 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+3c509b71789dfaa428e102cbf4bd4a5affab2efcf969cd2e8ad77dd6917ce011 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+0782cc4b473dd6dfdaee2166ceb76ae0bccee802116bfdaaa09b7f995a804b9b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+e8a8971ac17f58992c5e90e4ef84f44d5b7113c30ec77474f135cf23067271fc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+dbfd013db1b6a18bf2a0974e3fe18d084bfe0aa569f381bc60e67b05086015dc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
+e46e4a686907fb88d10afdaf028edd45a02911b6663a075b41fdf22bf6130231 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
+8ea11512c113a2640173d46c19636bffde9fc7d336d72b7101e34d7fae1451bf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+4417fc06f31f88c3a79c23585f7fdcf3381b573cfb919921d669a7e1e12549d7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+d00b5dc50a6d1057e68bf3a3160a884c63405f8a71cc6d0c130c5f4445e4d2f0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/72.0…
+3cf44331e2cbbf07904db37f3ea6e69ea3170df4c813d4ed775918c47292998e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/72.0…
+48516fec9ac2cd8daf126fdae2cbf169e67cbf76e9b3f3d9ac676dbdb99fabf6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/72.0…
+baade39ff53bbc14c297c3790aabac2f39ecc83b64a6c1f69a7c1f8502b30e13 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/72.0…
+00da182b420ca58ba821ce856a813560ec945827aa48e35c050cfeab814e3749 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/72.0.…
+a074d79b44f6b2b3c9bf17724a43ca83745b256e79b3caa43b6ee99bd45a2517 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/72.0.…
+a3e04cc2d816a6cc811f4742664971116420504bd622207cf510a15f833f807b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+9e6f64e560453584cad9bf19184631bd52db54d9fc21847a3f193db26cdcd56f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+394a813d7a809927036028a4d48afd5bb14ccc20efd96e152e1ceb8647ff8502 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/72.…
+d6797cb42c9acbcfcea66266a4b949c606da32760d2bd42685da48ac92fa61d5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/72.…
+cb0f953fdc4bc4c12db326b637611a35e45522435832fcb149034db20a494449 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/72.0.5…
+48aea8c5a1ec252d6daf5fcb56a279f7d5edce56562b3b91d00801ab0ac2a26b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/72.0.5…
+129d41e2e7ad9a59d9e1ac9a86eda0d415f0bd43cfbd68e3203544a5957b8919 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/72.0.5/…
+b5873679a09f65016736491b1248ba2045c7c1345e71b5cdf091469f862bf6b7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/72.0.5/…
+9dbd38fe5c60466ac1d0d911eb69689165cd27d4e5a74a63d5831562b5d45140 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/72.0.5/f…
+80ecd2be1b4dc6bb9f46f02ee8ab5831a3c62a562087fab8540346610e9bb155 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/72.0.5/f…
+638be2cbd30fc433c63dbf529c3765b7745b72dcafedf9694c6c515dd19adf4c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+79852385cf4348cc810069281b5d9d21e99cf8922b6813de7c5e7d1c6ef3f686 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+3b72bf4c8c50784d39e997ab0622ebcb4c9e25e8f371d95a120a3cfa437e495a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+b06a4bd628199d0706f38b871779d9bb853259b239dcab11003cf65bd5773b72 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+90bdb1bda5fce4b8946affd99d0193578183143afd2d6f184eaef51485f0308c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/72.0…
+032ef88a545a4cdb66cc7be4ae36382775e5dd962c8d6bbe378965a2834e7e7e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/72.0…
+e916752eebd104569639e87cff8159df345ed8ebf4ecae391ef9b0dadf7c0300 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/72.…
+d60f8cb02185bad2c51007978b9d08e4943d08d3f000e14dcc4bc9e995a0db49 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/72.…
+e00d47d0c3730a5958e36cdd263ddc91dc744958cb2346bc19b5452d6f0799c1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/72.0.…
+889e94bdd227849f7987959848e49c84ab2cc77f0bbf02726db765a48d8d6a1e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/72.0.…
+c4389c74dc01872836ddccd1e1ae4b532df60aaf62e08ece1d698a8b0186ab67 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+7f5d44990e7cfd64ec4b67efa6a68f11805209dea128436d27a7fbf0a77708e2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+ff7b95cced4e44633cf22d007f9ff40cbda272b7963f62dfeb08682d822198ec | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+18d6243f410fa4426036490b6875d38efaede6107139761929b67569444fc8d0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+b33db8f3e1ce1b5856bda8844b529d617101df81329b66e8fbfa5cb078b783f9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+37544576f651c9a7a76e0d2a60213440476d8400bf8d172a5fe08c0aeb9a2dd4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+3524b6d1680c0218563f2738767d580062a7b74792fdddfa442b6b1619524dab | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/72.0.5…
+37ef5c78fad1778b9a96a2f3f0a65cd4fa89209ecfd976b91e938479559e211c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/72.0.5…
+e4fd8116ba7112468bc43ad895cee9c50d29a149a95e1fd0d8f87962076b6ef7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/72.…
+3e1f6aec7a364d89b3bea3f11db98bf4dfeada5d46e78e684e06f208df48d70d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/72.…
+6f0b1315aa46725006f85f68bc664e505e603d99917b06e89012f7567993b8ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
+a8c7107e913417a78e58dc2fce03bc6497bc8923b5fb16589f647782bb00c862 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
+11f1eabc582d8b2a824a45241816f9e82be13ea473363e7f1dff00b697bd6ef9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+09e48e7f32d8e40a3a2ceb1dabd2c6d36d9784490000945e7b8167e77a6c1e33 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+1dba077ef2c14496114bdc05c01f632a05a6d6f1bc5d851c18c8032737d90696 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
+b3a7db07fce29fee0a0dc7663016b1c68904f715345ada72f0dcbf4b2105d645 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
+33fd07f7f285d67a88684cee8167049a426f68a8eca466f9ae84304730361642 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+fea3957b40281f176bd1c401f6fd11ffad2fa3c2b09cffb9fe7688c89e014124 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+bbe8b26216904bb2006eab8cb018303791f9751e8e2d4c1f2634888a38f5100b | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/72.0.5/li…
+a2624323db68369c935d83f74c5d01676c3876bd10a883a49eb5e3459985d9e6 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/72.0.5/li…
+8ddd5a225161264c7d736a42f116f543ed9f672c8574f568ae2fecfb4c08f93b | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/72.…
+4fcf487ba804673b5329409226d48901a9ad7edaecd719fa09243c6315bb29ce | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/72.…
+eda0fcb43894fbdc9a24d4f5b979c902eaaae70aea62b1554f45aa9600b1a7b8 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+bf2f639cecf4102843460ca05660ee122171f82083659ec0499a73c072240be5 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+63a56b896edab40120aa64fe37ad51a008d94de16479d168ceff29dffdd8d5ce | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
+e6fed2c06bb49e133c90866a8d19174da1390a610054785b716daf5321760dc5 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
+4a6856c18b4c6d6b6de158bd2094f2ba4d84978ead7a98d5ba83c36057b6d4e7 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/72.0.5/li…
+c109da70e3b09634096925b4a1d6205fe5a3311d5ee4e02cbfb51280eaa89956 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/72.0.5/li…
+8db1f518ab4716885dd27e366400e124d153ea38831f8709632c4d8c43c9789d | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+1750ffa066e75f74c4b2d6f95326e62ff1294b6ffc3c999d7afbf4c6f1ea6bed | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+750e3daa0a68c257472e7e3cb6c3f4f9f400555e32bdd31727d238d8fe9505b7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+186364883710fa2b2cc5e1de1a0e73d8365ce6319678e680400de430e89804ba | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+16d0389b23a563a0f03230afb4438d69072e904557635bee1cb642beceae2607 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/72.0.…
+78857476c82faeabb87c625c10ba92769d53de04616b46aa3ac96c2c84af417e | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/72.0.…
+b3b01aefb960083a633457f78cb15db1e2c53f1213efb41c8908f69fbbddd20b | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/72…
+9ba925af793e427fc715c3cb43bf75991bcb952c411aa5acdf676d838ebe077c | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/72…
+6dfef14f659e10261b6ac082ba60b74f66864df9759055c8d35835fa12da6786 | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/72.0…
+2757d533de5fcfe3fd497c842357b82c8d9afe89701c7d90ebafc7203fc9b40c | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/72.0…
+d338c9bb41e2007cbe2fe9970c9326db9f35f8ad6260696c1b79285c5d5b980b | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+11d65d2728f6932e4a9eba79e30228c5e326e26d01526b2ffd986b3b3943ac26 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+c5539d32747e194412392708dc329ace3582f3a05bfe733dd6483d695886586a | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/72.0.5…
+15574bc9ea549ee8fd988b5e8fd26671c36c3347a75acb151bcfbc69f284fe7e | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/72.0.5…
+4399954ec888c5316cc41e7011d19ae663f6ecebb5f38f31d0b94918d40314d5 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/72.0…
+64a557a962c22e40c773f9b61cf4622e5c544e8cc5c51906b366529b6098012c | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/72.0…
+755cd9e2c9d550b7d13e32b2d0fc3838021967405cf6b7bf30c58577fec5827a | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/72.0.5/…
+dcac66ae6f327e0ff3a535c5bd029fae9c5277be6ef4aa0349c68438ca21987f | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/72.0.5/…
+0c071b715ecd3debb7a93289de8626e4815bd06167ddbdc58cf454c9c4e1c780 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/72.0…
+0d8315dba084231e35e18c1cfc025deea6fa4eaee4b64d77b3a5668c8d69e433 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/72.0…
+98ac937bc1923bce2c0a9cbb65ae0bc47e2caf4d675dad34dcdd0ea4cbac6ed0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
+9d5f76bb542793e0b07a757c58f0d1a21abb77a0476e820d1cc9a3830fd1202c | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
+7d36f11412ef9b7360e0752309b7541e3c85f17b49e32a94a8398e7dab53331c | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/72…
+18357f26fe2d24b37df93d7d114dc53e36f6c2265bb9366e976359a9e987238c | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/72…
+72a085b1abb58af1bc6e47e690634c8d2648f021dfa9c8ce5ae752cbe0670066 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/72.…
+5e823d83b186416c24efe1131cf90fb934f46b271a6deec0f288247508df32d2 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/72.…
+20498d158e06bf13012376fe08d3162f722c67ef6005599d97448abc2bcc66a0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+5e9e4a2223929aa6009b26487cf84cef6090479787fdc66897baa40e9e74e15d | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+935d569da3ce6839b7457c87a539f71a105d2c4b8eae8caa97f166601402931f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
+3a3a5f3588cdd6e852c4ba4e67e4dc19cb21971cda60bf03effab563d8c2a8b6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
+eb8e8abdd2a1108b338b1a4136d80f4eb02379985946d3d0ffe954c4dad094f7 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/72.0.5…
+e8f8137548145600f7595d9a0207cc01637d1470d2d1044e711b4fccd69c8dd8 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/72.0.5…
+f7bf27270904abd8639b543151b6eaf268b821b8e6235c8decf8031e02ec8648 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/72.0.…
+c83379b00bd0b7cbe8e28aea8d08178df32610c4338fa8d7de03142831ff6d16 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/72.0.…
+4b6e3912804fa12d26972c20f161dff350ad238574dea7c9cf9503996d7b13e6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+da89a91025b054d2b380d76ab28e5c8307b9da5954b9a0a74d6c3f148af451bc | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+75b9aa5aac3fb8079f35382339f251faaeae0046699b6acf6841c645c2e7ca37 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+0f3b5c76276dc5109bd7b88ec95ddee5d702340debafa457153d112166205b9f | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+09f80a0b9aafdd9d46f53d139c8056880d17e2578d3f9cf797d632a5aba40fba | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/72.…
+0db1b5c7ba7c100d5a12305c572c8d348fb8dbb4500540e13aa8fefa9deb1169 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/72.…
+7ec7264a35b13382f84d701fab89daace99c6c8157c6fdc6d15da2361fb4f16b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/72.0.5/ui…
+b53d560612c2808a1623fa60092c020988dad9826467dcdd0bce18a6dfb561a5 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/72.0.5/ui…
+71307c399eb59749c6c25d2a0eb93c61513bc79b6c2c5a3e4dfb70e5077185a2 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/72.0.5/ui-…
+a4245435703548a7b723f23a5a762cc3000f4c6390cf2b2f75e3e9cb8d164eea | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/72.0.5/ui-…
+ef0ea652e32aac9d8a52884e5aba0c30bd4236eb042190813cfd5ec4f3216927 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/72.0.…
+d6b138a48d0d48e068272dd2497d0c73e28bf327b560f5b2c2e7e542eca01d09 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/72.0.…
+b27707dbb4f038517c89ce84541251f527a954ead43f6f7c67dd516a1640dd76 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/72.0.5/u…
+65c3698561f38c9ce8d23f486a8e3981cbf29b3f1271e34a6018cab08b93982a | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/72.0.5/u…
+8c0fe200be53cfd668ffbf10efa897e68480caaab5c0cfe3f72753dbc8e8d69f | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
+d8993f6b94fc6e91c7d91bfd201ab5a1d17b7c7288b3eb28fd4d63f9a7064324 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/86.0.…
+4251784fdd7b1f8c7a675fcf668b2fd23d0b44c26a425fe7752dbce3b2f19cb0 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
+ab81e6a37144452a63880bb34b6140a1e3075cfe50e3a7275c0c6316844b8b75 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/85.0.20210…
97a9d151ad636acc68eeda046866f0ac24e6f7bf2a81a6b938a3386cc73be529 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
817736c79269dc217946522fdb8f6ed57547bdd8fbf187687b53ffbe5d813bc3 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
ccd3a75eb0e0f8ce5882d9d3a3154e3d3c40ce9c44f6c506ad4e28df84bab751 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
diff --git a/projects/geckoview/config b/projects/geckoview/config
index 3a0b39a..f7e766d 100644
--- a/projects/geckoview/config
+++ b/projects/geckoview/config
@@ -8,7 +8,7 @@ git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- geckoview_version: 86.0b1
+ geckoview_version: 86.0b5
torbrowser_branch: 10.5
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
deps:
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 0c5b334..92a0d80 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,23 @@
+Tor Browser 10.5a9 -- February 5 2021
+ * Android
+ * Update Fenix to 86.0.0-beta.2
+ * Update HTTPS Everywhere to 2021.1.27
+ * Update NoScript to 11.2
+ * Bug 40041: Rebase android-components patches for Fenix 86 beta 2 builds [android-components]
+ * Bug 40109: Reduce requested permissions [fenix]
+ * Bug 40141: Hide EME site permission [fenix]
+ * Bug 40143: Use deterministic date in Test apk [fenix]
+ * Bug 40146: Rebase Fenix patches to Fenix 86 beta 2 [fenix]
+ * Bug 40188: Build and ship snowflake only if it is enabled [tor-browser-build}
+ * Bug 40212: Bump version of snowflake and webrtc [tor-browser-build]
+ * Bug 40308: Disable network partitioning until we evaluate dFPI [tor-browser]
+ * Bug 40309: Avoid using regional OS locales [tor-browser]
+ * Bug 40320: Rebase tor-browser patches to 86.0b5 [tor-browser]
+ * Build System
+ * Android
+ * Bug 40214: Update AMO Collection URL [tor-browser-build]
+ * Bug 40217: Update components for switch to mozilla86-based Fenix [tor-browser-build]
+
Tor Browser 10.5a8 -- January 26 2021
* All Platforms
* Update NoScript to 11.1.9
diff --git a/rbm.conf b/rbm.conf
index bbb8e9e..a027f7c 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,7 +24,7 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '10.5a8'
+ torbrowser_version: '10.5a9'
torbrowser_build: 'build1'
torbrowser_incremental_from:
- 10.5a7
1
0

[Git][tpo/applications/fenix] Pushed new tag tor-browser-86.0.0b2-10.5-1-build1
by Matthew Finkel 04 Feb '21
by Matthew Finkel 04 Feb '21
04 Feb '21
Matthew Finkel pushed new tag tor-browser-86.0.0b2-10.5-1-build1 at The Tor Project / Applications / fenix
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/tree/tor-browser-86.…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 32092: Fix Tor Browser Support link in preferences
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit cd120bf42f023e0388b3f21c15ba80cb62732448
Author: Alex Catarineu <acat(a)torproject.org>
Date: Tue Oct 15 22:54:10 2019 +0200
Bug 32092: Fix Tor Browser Support link in preferences
---
browser/components/preferences/preferences.js | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index a89fddd0306d..ce338584142e 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -166,10 +166,7 @@ function init_all() {
gotoPref().then(() => {
let helpButton = document.getElementById("helpButton");
- let helpUrl =
- Services.urlFormatter.formatURLPref("app.support.baseURL") +
- "preferences";
- helpButton.setAttribute("href", helpUrl);
+ helpButton.setAttribute("href", "https://support.torproject.org/tbb");
document.getElementById("addonsButton").addEventListener("click", e => {
if (e.button >= 2) {
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 27604: Fix addon issues when moving TB directory
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit 90306e458e8205bead95e334043fa24504054aba
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Oct 30 10:44:48 2019 +0100
Bug 27604: Fix addon issues when moving TB directory
---
toolkit/mozapps/extensions/internal/XPIProvider.jsm | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index ec4350dcba66..92f91b843958 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -473,7 +473,7 @@ class XPIState {
// Builds prior to be 1512436 did not include the rootURI property.
// If we're updating from such a build, add that property now.
- if (!("rootURI" in this) && this.file) {
+ if (this.file) {
this.rootURI = getURIForResourceInFile(this.file, "").spec;
}
@@ -486,7 +486,10 @@ class XPIState {
saved.currentModifiedTime != this.lastModifiedTime
) {
this.lastModifiedTime = saved.currentModifiedTime;
- } else if (saved.currentModifiedTime === null) {
+ } else if (
+ saved.currentModifiedTime === null &&
+ (!this.file || !this.file.exists())
+ ) {
this.missing = true;
}
}
@@ -1456,6 +1459,7 @@ var XPIStates = {
if (shouldRestoreLocationData && oldState[loc.name]) {
loc.restore(oldState[loc.name]);
+ changed = changed || loc.path != oldState[loc.name].path;
}
changed = changed || loc.changed;
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 31740: Remove some unnecessary RemoteSettings instances
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit f9bf8164989e2793de097bf1177d4e0cbf073160
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Oct 16 23:01:12 2019 +0200
Bug 31740: Remove some unnecessary RemoteSettings instances
More concretely, SearchService.jsm 'hijack-blocklists' and
url-classifier-skip-urls.
Avoid creating instance for 'anti-tracking-url-decoration'.
If prefs are disabling their usage, avoid creating instances for
'cert-revocations' and 'intermediates'.
Do not ship JSON dumps for collections we do not expect to need. For
the ones in the 'main' bucket, this prevents them from being synced
unnecessarily (the code in remote-settings does so for collections
in the main bucket for which a dump or local data exists). For the
collections in the other buckets, we just save some size by not
shipping their dumps.
We also clear the collections database on the v2 -> v3 migration.
---
browser/app/profile/000-tor-browser.js | 3 +++
browser/components/search/SearchSERPTelemetry.jsm | 6 ------
.../url-classifier/UrlClassifierFeatureBase.cpp | 2 +-
netwerk/url-classifier/components.conf | 6 ------
security/manager/ssl/RemoteSecuritySettings.jsm | 23 ++++++++++++++++++++++
services/settings/IDBHelpers.jsm | 4 ++++
services/settings/dumps/blocklists/moz.build | 1 -
services/settings/dumps/main/moz.build | 7 -------
services/settings/dumps/security-state/moz.build | 1 -
.../components/antitracking/antitracking.manifest | 2 +-
toolkit/components/antitracking/components.conf | 7 -------
toolkit/components/search/SearchService.jsm | 2 --
12 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index c7bf6a0cfd6a..c849d98f259c 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -149,6 +149,9 @@ pref("extensions.fxmonitor.enabled", false);
pref("signon.management.page.mobileAndroidURL", "");
pref("signon.management.page.mobileAppleURL", "");
+// Disable remote "password recipes"
+pref("signon.recipes.remoteRecipesEnabled", false);
+
// Disable ServiceWorkers and push notifications by default
pref("dom.serviceWorkers.enabled", false);
pref("dom.push.enabled", false);
diff --git a/browser/components/search/SearchSERPTelemetry.jsm b/browser/components/search/SearchSERPTelemetry.jsm
index a11bfc7176c9..efb5f2318fe4 100644
--- a/browser/components/search/SearchSERPTelemetry.jsm
+++ b/browser/components/search/SearchSERPTelemetry.jsm
@@ -95,13 +95,7 @@ class TelemetryHandler {
return;
}
- this._telemetrySettings = RemoteSettings(TELEMETRY_SETTINGS_KEY);
let rawProviderInfo = [];
- try {
- rawProviderInfo = await this._telemetrySettings.get();
- } catch (ex) {
- logConsole.error("Could not get settings:", ex);
- }
// Send the provider info to the child handler.
this._contentHandler.init(rawProviderInfo);
diff --git a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
index 07da1fd07374..48bcc7d10af9 100644
--- a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
+++ b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
@@ -78,7 +78,7 @@ void UrlClassifierFeatureBase::InitializePreferences() {
nsCOMPtr<nsIUrlClassifierExceptionListService> exceptionListService =
do_GetService("@mozilla.org/url-classifier/exception-list-service;1");
- if (NS_WARN_IF(!exceptionListService)) {
+ if (!exceptionListService) {
return;
}
diff --git a/netwerk/url-classifier/components.conf b/netwerk/url-classifier/components.conf
index 03a02f0ebeab..b2e667247317 100644
--- a/netwerk/url-classifier/components.conf
+++ b/netwerk/url-classifier/components.conf
@@ -13,10 +13,4 @@ Classes = [
'constructor': 'mozilla::net::ChannelClassifierService::GetSingleton',
'headers': ['mozilla/net/ChannelClassifierService.h'],
},
- {
- 'cid': '{b9f4fd03-9d87-4bfd-9958-85a821750ddc}',
- 'contract_ids': ['@mozilla.org/url-classifier/exception-list-service;1'],
- 'jsm': 'resource://gre/modules/UrlClassifierExceptionListService.jsm',
- 'constructor': 'UrlClassifierExceptionListService',
- },
]
diff --git a/security/manager/ssl/RemoteSecuritySettings.jsm b/security/manager/ssl/RemoteSecuritySettings.jsm
index 0beca1424741..1cffbd907bae 100644
--- a/security/manager/ssl/RemoteSecuritySettings.jsm
+++ b/security/manager/ssl/RemoteSecuritySettings.jsm
@@ -336,6 +336,16 @@ var RemoteSecuritySettings = {
class IntermediatePreloads {
constructor() {
+ this.maybeInit();
+ }
+
+ maybeInit() {
+ if (
+ this.client ||
+ !Services.prefs.getBoolPref(INTERMEDIATES_ENABLED_PREF, true)
+ ) {
+ return;
+ }
this.client = RemoteSettings(
Services.prefs.getCharPref(INTERMEDIATES_COLLECTION_PREF),
{
@@ -365,6 +375,7 @@ class IntermediatePreloads {
);
return;
}
+ this.maybeInit();
// Download attachments that are awaiting download, up to a max.
const maxDownloadsPerRun = Services.prefs.getIntPref(
@@ -675,6 +686,16 @@ function compareFilters(filterA, filterB) {
class CRLiteFilters {
constructor() {
+ this.maybeInit();
+ }
+
+ maybeInit() {
+ if (
+ this.client ||
+ !Services.prefs.getBoolPref(CRLITE_FILTERS_ENABLED_PREF, true)
+ ) {
+ return;
+ }
this.client = RemoteSettings(
Services.prefs.getCharPref(CRLITE_FILTERS_COLLECTION_PREF),
{
@@ -702,6 +723,8 @@ class CRLiteFilters {
return;
}
+ this.maybeInit();
+
let hasPriorFilter = await hasPriorData(
Ci.nsICertStorage.DATA_TYPE_CRLITE_FILTER_FULL
);
diff --git a/services/settings/IDBHelpers.jsm b/services/settings/IDBHelpers.jsm
index 5dc59c3687ef..010a5ea82987 100644
--- a/services/settings/IDBHelpers.jsm
+++ b/services/settings/IDBHelpers.jsm
@@ -188,6 +188,10 @@ async function openIDB(allowUpgrades = true) {
});
}
if (event.oldVersion < 3) {
+ // Clear existing stores for a fresh start
+ transaction.objectStore("records").clear();
+ transaction.objectStore("timestamps").clear();
+ transaction.objectStore("collections").clear();
// Attachment store
db.createObjectStore("attachments", {
keyPath: ["cid", "attachmentId"],
diff --git a/services/settings/dumps/blocklists/moz.build b/services/settings/dumps/blocklists/moz.build
index cdeb7e180c38..4ca18acd4ff6 100644
--- a/services/settings/dumps/blocklists/moz.build
+++ b/services/settings/dumps/blocklists/moz.build
@@ -10,7 +10,6 @@ with Files("**"):
# The addons blocklist is also in mobile/android/installer/package-manifest.in
FINAL_TARGET_FILES.defaults.settings.blocklists += [
"addons-bloomfilters.json",
- "addons.json",
"gfx.json",
"plugins.json",
]
diff --git a/services/settings/dumps/main/moz.build b/services/settings/dumps/main/moz.build
index d67162de87ac..c91b2b6f6264 100644
--- a/services/settings/dumps/main/moz.build
+++ b/services/settings/dumps/main/moz.build
@@ -3,17 +3,10 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.defaults.settings.main += [
- "anti-tracking-url-decoration.json",
"example.json",
"hijack-blocklists.json",
"language-dictionaries.json",
- "password-recipes.json",
- "search-config.json",
"search-default-override-allowlist.json",
- "search-telemetry.json",
- "sites-classification.json",
- "top-sites.json",
- "url-classifier-skip-urls.json",
]
if CONFIG["MOZ_BUILD_APP"] == "browser":
diff --git a/services/settings/dumps/security-state/moz.build b/services/settings/dumps/security-state/moz.build
index 9133cd4e3ed6..0d250ecddbe8 100644
--- a/services/settings/dumps/security-state/moz.build
+++ b/services/settings/dumps/security-state/moz.build
@@ -3,7 +3,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.defaults.settings["security-state"] += [
- "intermediates.json",
"onecrl.json",
]
diff --git a/toolkit/components/antitracking/antitracking.manifest b/toolkit/components/antitracking/antitracking.manifest
index 5eb37f9a3f99..872e6af07575 100644
--- a/toolkit/components/antitracking/antitracking.manifest
+++ b/toolkit/components/antitracking/antitracking.manifest
@@ -1 +1 @@
-category profile-after-change URLDecorationAnnotationsService @mozilla.org/tracking-url-decoration-service;1 process=main
+# category profile-after-change URLDecorationAnnotationsService @mozilla.org/tracking-url-decoration-service;1 process=main
diff --git a/toolkit/components/antitracking/components.conf b/toolkit/components/antitracking/components.conf
index c5e21b06156b..53db083e394c 100644
--- a/toolkit/components/antitracking/components.conf
+++ b/toolkit/components/antitracking/components.conf
@@ -11,13 +11,6 @@ Classes = [
'jsm': 'resource://gre/modules/TrackingDBService.jsm',
'constructor': 'TrackingDBService',
},
- {
- 'cid': '{5874af6d-5719-4e1b-b155-ef4eae7fcb32}',
- 'contract_ids': ['@mozilla.org/tracking-url-decoration-service;1'],
- 'jsm': 'resource://gre/modules/URLDecorationAnnotationsService.jsm',
- 'constructor': 'URLDecorationAnnotationsService',
- 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
- },
{
'cid': '{90d1fd17-2018-4e16-b73c-a04a26fa6dd4}',
'contract_ids': ['@mozilla.org/purge-tracker-service;1'],
diff --git a/toolkit/components/search/SearchService.jsm b/toolkit/components/search/SearchService.jsm
index 9a6c4e64aad7..ad352333e187 100644
--- a/toolkit/components/search/SearchService.jsm
+++ b/toolkit/components/search/SearchService.jsm
@@ -251,8 +251,6 @@ SearchService.prototype = {
// See if we have a settings file so we don't have to parse a bunch of XML.
let settings = await this._settings.get();
- this._setupRemoteSettings().catch(Cu.reportError);
-
await this._loadEngines(settings);
// If we've got this far, but the application is now shutting down,
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 31607: App menu items stop working on macOS
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit 5a21e44ffddae36a99c7f7ef0749f7dd10c7d477
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Thu Oct 3 10:53:43 2019 -0400
Bug 31607: App menu items stop working on macOS
Avoid re-creating the hidden window, since this causes the nsMenuBarX
object that is associated with the app menu to be freed (which in
turn causes all of the app menu items to stop working).
More detail: There should only be one hidden window.
XREMain::XRE_mainRun() contains an explicit call to create the
hidden window and that is the normal path by which it is created.
However, when Tor Launcher's wizard/progress window is opened during
startup, a hidden window is created earlier as a side effect of
calls to nsAppShellService::GetHiddenWindow(). Then, when
XREMain::XRE_mainRun() creates its hidden window, the original one
is freed which also causes the app menu's nsMenuBarX object which
is associated with that window to be destroyed. When that happens,
the menuGroupOwner property within each Cocoa menu items's MenuItemInfo
object is cleared. This breaks the link that is necessary for
NativeMenuItemTarget's menuItemHit method to dispatch a menu item
event.
---
xpfe/appshell/nsAppShellService.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/xpfe/appshell/nsAppShellService.cpp b/xpfe/appshell/nsAppShellService.cpp
index c7c3da49d86e..1cb1c6f5a7f9 100644
--- a/xpfe/appshell/nsAppShellService.cpp
+++ b/xpfe/appshell/nsAppShellService.cpp
@@ -93,6 +93,10 @@ void nsAppShellService::EnsureHiddenWindow() {
NS_IMETHODIMP
nsAppShellService::CreateHiddenWindow() {
+ if (mHiddenWindow) {
+ return NS_OK;
+ }
+
if (!XRE_IsParentProcess()) {
return NS_ERROR_NOT_IMPLEMENTED;
}
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 30237: Add v3 onion services client authentication prompt
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit 97249def825efc27cc22a6187e57ea521e757f02
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Nov 12 16:11:05 2019 -0500
Bug 30237: Add v3 onion services client authentication prompt
When Tor informs the browser that client authentication is needed,
temporarily load about:blank instead of about:neterror and prompt
for the user's key.
If a correctly formatted key is entered, use Tor's ONION_CLIENT_AUTH_ADD
control port command to add the key (via Torbutton's control port
module) and reload the page.
If the user cancels the prompt, display the standard about:neterror
"Unable to connect" page. This requires a small change to
browser/actors/NetErrorChild.jsm to account for the fact that the
docShell no longer has the failedChannel information. The failedChannel
is used to extract TLS-related error info, which is not applicable
in the case of a canceled .onion authentication prompt.
Add a leaveOpen option to PopupNotifications.show so we can display
error messages within the popup notification doorhanger without
closing the prompt.
Add support for onion services strings to the TorStrings module.
Add support for Tor extended SOCKS errors (Tor proposal 304) to the
socket transport and SOCKS layers. Improved display of all of these
errors will be implemented as part of bug 30025.
Also fixes bug 19757:
Add a "Remember this key" checkbox to the client auth prompt.
Add an "Onion Services Authentication" section within the
about:preferences "Privacy & Security section" to allow
viewing and removal of v3 onion client auth keys that have
been stored on disk.
Also fixes bug 19251: use enhanced error pages for onion service errors.
---
browser/actors/NetErrorChild.jsm | 7 +
browser/base/content/aboutNetError.js | 10 +-
browser/base/content/aboutNetError.xhtml | 1 +
browser/base/content/browser.js | 10 +
browser/base/content/browser.xhtml | 3 +
browser/base/content/tab-content.js | 5 +
browser/components/moz.build | 1 +
.../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 | 316 +++++++++++++++++++++
.../components/onionservices/content/authUtil.jsm | 47 +++
.../onionservices/content/netError/browser.svg | 3 +
.../onionservices/content/netError/network.svg | 3 +
.../content/netError/onionNetError.css | 65 +++++
.../content/netError/onionNetError.js | 244 ++++++++++++++++
.../onionservices/content/netError/onionsite.svg | 7 +
.../onionservices/content/onionservices.css | 69 +++++
.../onionservices/content/savedKeysDialog.js | 259 +++++++++++++++++
.../onionservices/content/savedKeysDialog.xhtml | 42 +++
browser/components/onionservices/jar.mn | 9 +
browser/components/onionservices/moz.build | 1 +
browser/components/preferences/preferences.xhtml | 1 +
browser/components/preferences/privacy.inc.xhtml | 2 +
browser/components/preferences/privacy.js | 7 +
browser/themes/shared/notification-icons.inc.css | 3 +
docshell/base/nsDocShell.cpp | 81 +++++-
dom/ipc/BrowserParent.cpp | 21 ++
dom/ipc/BrowserParent.h | 3 +
dom/ipc/PBrowser.ipdl | 9 +
js/xpconnect/src/xpc.msg | 10 +
netwerk/base/nsSocketTransport2.cpp | 6 +
netwerk/socket/nsSOCKSIOLayer.cpp | 49 ++++
toolkit/modules/PopupNotifications.jsm | 6 +
toolkit/modules/RemotePageAccessManager.jsm | 1 +
.../lib/environments/frame-script.js | 1 +
xpcom/base/ErrorList.py | 22 ++
39 files changed, 1449 insertions(+), 2 deletions(-)
diff --git a/browser/actors/NetErrorChild.jsm b/browser/actors/NetErrorChild.jsm
index 82978412fe24..164fb7c95cd1 100644
--- a/browser/actors/NetErrorChild.jsm
+++ b/browser/actors/NetErrorChild.jsm
@@ -13,6 +13,8 @@ const { RemotePageChild } = ChromeUtils.import(
"resource://gre/actors/RemotePageChild.jsm"
);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
XPCOMUtils.defineLazyServiceGetter(
this,
"gSerializationHelper",
@@ -33,6 +35,7 @@ class NetErrorChild extends RemotePageChild {
"RPMAddToHistogram",
"RPMRecordTelemetryEvent",
"RPMGetHttpResponseHeader",
+ "RPMGetTorStrings",
];
this.exportFunctions(exportableFunctions);
}
@@ -115,4 +118,8 @@ class NetErrorChild extends RemotePageChild {
return "";
}
+
+ RPMGetTorStrings() {
+ return Cu.cloneInto(TorStrings.onionServices, this.contentWindow);
+ }
}
diff --git a/browser/base/content/aboutNetError.js b/browser/base/content/aboutNetError.js
index 376d9d9dea97..e434d3746c48 100644
--- a/browser/base/content/aboutNetError.js
+++ b/browser/base/content/aboutNetError.js
@@ -3,6 +3,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env mozilla/frame-script */
+/* import-globals-from ../../components/onionservices/content/netError/onionNetError.js */
import { parse } from "chrome://global/content/certviewer/certDecoder.js";
import { pemToDER } from "chrome://global/content/certviewer/utils.js";
@@ -275,7 +276,10 @@ function initPage() {
errDesc = document.getElementById("ed_generic");
}
- setErrorPageStrings(err);
+ const isOnionError = err.startsWith("onionServices.");
+ if (!isOnionError) {
+ setErrorPageStrings(err);
+ }
var sd = document.getElementById("errorShortDescText");
if (sd) {
@@ -428,6 +432,10 @@ function initPage() {
span.textContent = HOST_NAME;
}
}
+
+ if (isOnionError) {
+ OnionServicesAboutNetError.initPage(document);
+ }
}
function setupBlockingReportingUI() {
diff --git a/browser/base/content/aboutNetError.xhtml b/browser/base/content/aboutNetError.xhtml
index f612d4df4c0e..a2d619cea3d9 100644
--- a/browser/base/content/aboutNetError.xhtml
+++ b/browser/base/content/aboutNetError.xhtml
@@ -208,6 +208,7 @@
</div>
</div>
</body>
+ <script src="chrome://browser/content/onionservices/netError/onionNetError.js"/>
<script src="chrome://browser/content/aboutNetErrorCodes.js"/>
<script src="chrome://global/content/certviewer/pvutils_bundle.js"></script>
<script src="chrome://global/content/certviewer/asn1js_bundle.js"></script>
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index aa4542889d9a..f36d85694ad4 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -218,6 +218,11 @@ XPCOMUtils.defineLazyScriptGetter(
["SecurityLevelButton"],
"chrome://browser/content/securitylevel/securityLevel.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionAuthPrompt"],
+ "chrome://browser/content/onionservices/authPrompt.js"
+);
XPCOMUtils.defineLazyScriptGetter(
this,
"gEditItemOverlay",
@@ -1819,6 +1824,9 @@ var gBrowserInit = {
// Init the SecuritySettingsButton
SecurityLevelButton.init();
+ // Init the OnionAuthPrompt
+ OnionAuthPrompt.init();
+
// Certain kinds of automigration rely on this notification to complete
// their tasks BEFORE the browser window is shown. SessionStore uses it to
// restore tabs into windows AFTER important parts like gMultiProcessBrowser
@@ -2500,6 +2508,8 @@ var gBrowserInit = {
SecurityLevelButton.uninit();
+ OnionAuthPrompt.uninit();
+
gAccessibilityServiceIndicator.uninit();
if (gToolbarKeyNavEnabled) {
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 8ae339e65491..8b6bbfd5a780 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -33,6 +33,7 @@
<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
<?xml-stylesheet href="chrome://torbutton/skin/tor-circuit-display.css" type="text/css"?>
<?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/onionservices.css" type="text/css"?>
# All DTD information is stored in a separate file so that it can be shared by
# hiddenWindowMac.xhtml.
@@ -647,6 +648,7 @@
#include ../../components/downloads/content/downloadsPanel.inc.xhtml
#include ../../../devtools/startup/enableDevToolsPopup.inc.xhtml
#include ../../components/securitylevel/content/securityLevelPanel.inc.xhtml
+#include ../../components/onionservices/content/authPopup.inc.xhtml
#include browser-allTabsMenu.inc.xhtml
<hbox id="downloads-animation-container">
@@ -1855,6 +1857,7 @@
data-l10n-id="urlbar-indexed-db-notification-anchor"/>
<image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
data-l10n-id="urlbar-password-notification-anchor"/>
+#include ../../components/onionservices/content/authNotificationIcon.inc.xhtml
<stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center" data-l10n-id="urlbar-plugins-notification-anchor">
<image class="plugin-icon" />
<image id="plugin-icon-badge" />
diff --git a/browser/base/content/tab-content.js b/browser/base/content/tab-content.js
index e45449d08090..5f1307cebcb7 100644
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -14,6 +14,9 @@ ChromeUtils.defineModuleGetter(
"BrowserUtils",
"resource://gre/modules/BrowserUtils.jsm"
);
+var { OnionAuthUtil } = ChromeUtils.import(
+ "chrome://browser/content/onionservices/authUtil.jsm"
+);
// BrowserChildGlobal
var global = this;
@@ -54,5 +57,7 @@ if (Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT) {
Services.obs.notifyObservers(this, "tab-content-frameloader-created");
+OnionAuthUtil.addCancelMessageListener(this, docShell);
+
// This is a temporary hack to prevent regressions (bug 1471327).
void content;
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 7bc1a92e199f..1ec8e30a8296 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -40,6 +40,7 @@ DIRS += [
"fxmonitor",
"migration",
"newtab",
+ "onionservices",
"originattributes",
"ion",
"places",
diff --git a/browser/components/onionservices/content/authNotificationIcon.inc.xhtml b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml
new file mode 100644
index 000000000000..91274d612739
--- /dev/null
+++ b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml
@@ -0,0 +1,6 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<image id="tor-clientauth-notification-icon"
+ class="notification-anchor-icon tor-clientauth-icon"
+ role="button"
+ tooltiptext="&torbutton.onionServices.authPrompt.tooltip;"/>
diff --git a/browser/components/onionservices/content/authPopup.inc.xhtml b/browser/components/onionservices/content/authPopup.inc.xhtml
new file mode 100644
index 000000000000..bd0ec3aa0b00
--- /dev/null
+++ b/browser/components/onionservices/content/authPopup.inc.xhtml
@@ -0,0 +1,16 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<popupnotification id="tor-clientauth-notification" hidden="true">
+ <popupnotificationcontent orient="vertical">
+ <description id="tor-clientauth-notification-desc"/>
+ <label id="tor-clientauth-notification-learnmore"
+ class="text-link popup-notification-learnmore-link"
+ is="text-link"/>
+ <html:div>
+ <html:input id="tor-clientauth-notification-key" type="password"/>
+ <html:div id="tor-clientauth-warning"/>
+ <checkbox id="tor-clientauth-persistkey-checkbox"
+ label="&torbutton.onionServices.authPrompt.persistCheckboxLabel;"/>
+ </html:div>
+ </popupnotificationcontent>
+</popupnotification>
diff --git a/browser/components/onionservices/content/authPreferences.css b/browser/components/onionservices/content/authPreferences.css
new file mode 100644
index 000000000000..b3fb79b26ddc
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.css
@@ -0,0 +1,20 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+#torOnionServiceKeys-overview-container {
+ margin-right: 30px;
+}
+
+#onionservices-savedkeys-tree treechildren::-moz-tree-cell-text {
+ font-size: 80%;
+}
+
+#onionservices-savedkeys-errorContainer {
+ margin-top: 4px;
+ min-height: 3em;
+}
+
+#onionservices-savedkeys-errorIcon {
+ margin-right: 4px;
+ list-style-image: url("chrome://browser/skin/warning.svg");
+ visibility: hidden;
+}
diff --git a/browser/components/onionservices/content/authPreferences.inc.xhtml b/browser/components/onionservices/content/authPreferences.inc.xhtml
new file mode 100644
index 000000000000..f69c9dde66a2
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.inc.xhtml
@@ -0,0 +1,19 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<groupbox id="torOnionServiceKeys" orient="vertical"
+ data-category="panePrivacy" hidden="true">
+ <label><html:h2 id="torOnionServiceKeys-header"/></label>
+ <hbox>
+ <description id="torOnionServiceKeys-overview-container" flex="1">
+ <html:span id="torOnionServiceKeys-overview"
+ class="tail-with-learn-more"/>
+ <label id="torOnionServiceKeys-learnMore" class="learnMore text-link"
+ is="text-link"/>
+ </description>
+ <vbox align="end">
+ <button id="torOnionServiceKeys-savedKeys"
+ is="highlightable-button"
+ class="accessory-button"/>
+ </vbox>
+ </hbox>
+</groupbox>
diff --git a/browser/components/onionservices/content/authPreferences.js b/browser/components/onionservices/content/authPreferences.js
new file mode 100644
index 000000000000..52f8272020cc
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.js
@@ -0,0 +1,66 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+/*
+ Onion Services Client Authentication Preferences Code
+
+ Code to handle init and update of onion services authentication section
+ in about:preferences#privacy
+*/
+
+const OnionServicesAuthPreferences = {
+ selector: {
+ groupBox: "#torOnionServiceKeys",
+ header: "#torOnionServiceKeys-header",
+ overview: "#torOnionServiceKeys-overview",
+ learnMore: "#torOnionServiceKeys-learnMore",
+ savedKeysButton: "#torOnionServiceKeys-savedKeys",
+ },
+
+ init() {
+ // populate XUL with localized strings
+ this._populateXUL();
+ },
+
+ _populateXUL() {
+ const groupbox = document.querySelector(this.selector.groupBox);
+
+ let elem = groupbox.querySelector(this.selector.header);
+ elem.textContent = TorStrings.onionServices.authPreferences.header;
+
+ elem = groupbox.querySelector(this.selector.overview);
+ elem.textContent = TorStrings.onionServices.authPreferences.overview;
+
+ elem = groupbox.querySelector(this.selector.learnMore);
+ elem.setAttribute("value", TorStrings.onionServices.learnMore);
+ elem.setAttribute("href", TorStrings.onionServices.learnMoreURL);
+
+ elem = groupbox.querySelector(this.selector.savedKeysButton);
+ elem.setAttribute(
+ "label",
+ TorStrings.onionServices.authPreferences.savedKeys
+ );
+ elem.addEventListener("command", () =>
+ OnionServicesAuthPreferences.onViewSavedKeys()
+ );
+ },
+
+ onViewSavedKeys() {
+ gSubDialog.open(
+ "chrome://browser/content/onionservices/savedKeysDialog.xhtml"
+ );
+ },
+}; // OnionServicesAuthPreferences
+
+Object.defineProperty(this, "OnionServicesAuthPreferences", {
+ value: OnionServicesAuthPreferences,
+ enumerable: true,
+ writable: false,
+});
diff --git a/browser/components/onionservices/content/authPrompt.js b/browser/components/onionservices/content/authPrompt.js
new file mode 100644
index 000000000000..d4a59ac46487
--- /dev/null
+++ b/browser/components/onionservices/content/authPrompt.js
@@ -0,0 +1,316 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ OnionAuthUtil: "chrome://browser/content/onionservices/authUtil.jsm",
+ CommonUtils: "resource://services-common/utils.js",
+ TorStrings: "resource:///modules/TorStrings.jsm",
+});
+
+const OnionAuthPrompt = (function() {
+ // OnionServicesAuthPrompt objects run within the main/chrome process.
+ // aReason is the topic passed within the observer notification that is
+ // causing this auth prompt to be displayed.
+ function OnionServicesAuthPrompt(aBrowser, aFailedURI, aReason, aOnionName) {
+ this._browser = aBrowser;
+ this._failedURI = aFailedURI;
+ this._reasonForPrompt = aReason;
+ this._onionName = aOnionName;
+ }
+
+ OnionServicesAuthPrompt.prototype = {
+ show(aWarningMessage) {
+ let mainAction = {
+ label: TorStrings.onionServices.authPrompt.done,
+ accessKey: TorStrings.onionServices.authPrompt.doneAccessKey,
+ leaveOpen: true, // Callback is responsible for closing the notification.
+ callback: this._onDone.bind(this),
+ };
+
+ let dialogBundle = Services.strings.createBundle(
+ "chrome://global/locale/dialog.properties");
+
+ let cancelAccessKey = dialogBundle.GetStringFromName("accesskey-cancel");
+ if (!cancelAccessKey)
+ cancelAccessKey = "c"; // required by PopupNotifications.show()
+
+ let cancelAction = {
+ label: dialogBundle.GetStringFromName("button-cancel"),
+ accessKey: cancelAccessKey,
+ callback: this._onCancel.bind(this),
+ };
+
+ let _this = this;
+ let options = {
+ autofocus: true,
+ hideClose: true,
+ persistent: true,
+ removeOnDismissal: false,
+ eventCallback(aTopic) {
+ if (aTopic === "showing") {
+ _this._onPromptShowing(aWarningMessage);
+ } else if (aTopic === "shown") {
+ _this._onPromptShown();
+ } else if (aTopic === "removed") {
+ _this._onPromptRemoved();
+ }
+ }
+ };
+
+ this._prompt = PopupNotifications.show(this._browser,
+ OnionAuthUtil.domid.notification, "",
+ OnionAuthUtil.domid.anchor,
+ mainAction, [cancelAction], options);
+ },
+
+ _onPromptShowing(aWarningMessage) {
+ let xulDoc = this._browser.ownerDocument;
+ let descElem = xulDoc.getElementById(OnionAuthUtil.domid.description);
+ if (descElem) {
+ // Handle replacement of the onion name within the localized
+ // string ourselves so we can show the onion name as bold text.
+ // We do this by splitting the localized string and creating
+ // several HTML <span> elements.
+ while (descElem.firstChild)
+ descElem.removeChild(descElem.firstChild);
+
+ let fmtString = TorStrings.onionServices.authPrompt.description;
+ let prefix = "";
+ let suffix = "";
+ const kToReplace = "%S";
+ let idx = fmtString.indexOf(kToReplace);
+ if (idx < 0) {
+ prefix = fmtString;
+ } else {
+ prefix = fmtString.substring(0, idx);
+ suffix = fmtString.substring(idx + kToReplace.length);
+ }
+
+ const kHTMLNS = "http://www.w3.org/1999/xhtml";
+ let span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.textContent = prefix;
+ descElem.appendChild(span);
+ span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.id = OnionAuthUtil.domid.onionNameSpan;
+ span.textContent = this._onionName;
+ descElem.appendChild(span);
+ span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.textContent = suffix;
+ descElem.appendChild(span);
+ }
+
+ // Set "Learn More" label and href.
+ let learnMoreElem = xulDoc.getElementById(OnionAuthUtil.domid.learnMore);
+ if (learnMoreElem) {
+ learnMoreElem.setAttribute("value", TorStrings.onionServices.learnMore);
+ learnMoreElem.setAttribute("href", TorStrings.onionServices.learnMoreURL);
+ }
+
+ this._showWarning(aWarningMessage);
+ let checkboxElem = this._getCheckboxElement();
+ if (checkboxElem) {
+ checkboxElem.checked = false;
+ }
+ },
+
+ _onPromptShown() {
+ let keyElem = this._getKeyElement();
+ if (keyElem) {
+ keyElem.setAttribute("placeholder",
+ TorStrings.onionServices.authPrompt.keyPlaceholder);
+ this._boundOnKeyFieldKeyPress = this._onKeyFieldKeyPress.bind(this);
+ this._boundOnKeyFieldInput = this._onKeyFieldInput.bind(this);
+ keyElem.addEventListener("keypress", this._boundOnKeyFieldKeyPress);
+ keyElem.addEventListener("input", this._boundOnKeyFieldInput);
+ keyElem.focus();
+ }
+ },
+
+ _onPromptRemoved() {
+ if (this._boundOnKeyFieldKeyPress) {
+ let keyElem = this._getKeyElement();
+ if (keyElem) {
+ keyElem.value = "";
+ keyElem.removeEventListener("keypress",
+ this._boundOnKeyFieldKeyPress);
+ this._boundOnKeyFieldKeyPress = undefined;
+ keyElem.removeEventListener("input", this._boundOnKeyFieldInput);
+ this._boundOnKeyFieldInput = undefined;
+ }
+ }
+ },
+
+ _onKeyFieldKeyPress(aEvent) {
+ if (aEvent.keyCode == aEvent.DOM_VK_RETURN) {
+ this._onDone();
+ } else if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) {
+ this._prompt.remove();
+ this._onCancel();
+ }
+ },
+
+ _onKeyFieldInput(aEvent) {
+ this._showWarning(undefined); // Remove the warning.
+ },
+
+ _onDone() {
+ let keyElem = this._getKeyElement();
+ if (!keyElem)
+ return;
+
+ let base64key = this._keyToBase64(keyElem.value);
+ if (!base64key) {
+ this._showWarning(TorStrings.onionServices.authPrompt.invalidKey);
+ return;
+ }
+
+ this._prompt.remove();
+
+ // Use Torbutton's controller module to add the private key to Tor.
+ let controllerFailureMsg =
+ TorStrings.onionServices.authPrompt.failedToSetKey;
+ try {
+ let { controller } =
+ Cu.import("resource://torbutton/modules/tor-control-port.js", {});
+ let torController = controller(aError => {
+ this.show(controllerFailureMsg);
+ });
+ let onionAddr = this._onionName.toLowerCase().replace(/\.onion$/, "");
+ let checkboxElem = this._getCheckboxElement();
+ let isPermanent = (checkboxElem && checkboxElem.checked);
+ torController.onionAuthAdd(onionAddr, base64key, isPermanent)
+ .then(aResponse => {
+ // Success! Reload the page.
+ this._browser.sendMessageToActor(
+ "Browser:Reload",
+ {},
+ "BrowserTab"
+ );
+ })
+ .catch(aError => {
+ if (aError.torMessage)
+ this.show(aError.torMessage);
+ else
+ this.show(controllerFailureMsg);
+ });
+ } catch (e) {
+ this.show(controllerFailureMsg);
+ }
+ },
+
+ _onCancel() {
+ // Arrange for an error page to be displayed.
+ this._browser.messageManager.sendAsyncMessage(
+ OnionAuthUtil.message.authPromptCanceled,
+ {failedURI: this._failedURI.spec,
+ reasonForPrompt: this._reasonForPrompt});
+ },
+
+ _getKeyElement() {
+ let xulDoc = this._browser.ownerDocument;
+ return xulDoc.getElementById(OnionAuthUtil.domid.keyElement);
+ },
+
+ _getCheckboxElement() {
+ let xulDoc = this._browser.ownerDocument;
+ return xulDoc.getElementById(OnionAuthUtil.domid.checkboxElement);
+ },
+
+ _showWarning(aWarningMessage) {
+ let xulDoc = this._browser.ownerDocument;
+ let warningElem =
+ xulDoc.getElementById(OnionAuthUtil.domid.warningElement);
+ let keyElem = this._getKeyElement();
+ if (warningElem) {
+ if (aWarningMessage) {
+ warningElem.textContent = aWarningMessage;
+ warningElem.removeAttribute("hidden");
+ if (keyElem)
+ keyElem.className = "invalid";
+ } else {
+ warningElem.setAttribute("hidden", "true");
+ if (keyElem)
+ keyElem.className = "";
+ }
+ }
+ },
+
+ // Returns undefined if the key is the wrong length or format.
+ _keyToBase64(aKeyString) {
+ if (!aKeyString)
+ return undefined;
+
+ let base64key;
+ if (aKeyString.length == 52) {
+ // The key is probably base32-encoded. Attempt to decode.
+ // Although base32 specifies uppercase letters, we accept lowercase
+ // as well because users may type in lowercase or copy a key out of
+ // a tor onion-auth file (which uses lowercase).
+ let rawKey;
+ try {
+ rawKey = CommonUtils.decodeBase32(aKeyString.toUpperCase());
+ } catch (e) {}
+
+ if (rawKey) try {
+ base64key = btoa(rawKey);
+ } catch (e) {}
+ } else if ((aKeyString.length == 44) &&
+ /^[a-zA-Z0-9+/]*=*$/.test(aKeyString)) {
+ // The key appears to be a correctly formatted base64 value. If not,
+ // tor will return an error when we try to add the key via the
+ // control port.
+ base64key = aKeyString;
+ }
+
+ return base64key;
+ },
+ };
+
+ let retval = {
+ init() {
+ Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthMissing);
+ Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthIncorrect);
+ },
+
+ uninit() {
+ Services.obs.removeObserver(this, OnionAuthUtil.topic.clientAuthMissing);
+ Services.obs.removeObserver(this, OnionAuthUtil.topic.clientAuthIncorrect);
+ },
+
+ // aSubject is the DOM Window or browser where the prompt should be shown.
+ // aData contains the .onion name.
+ observe(aSubject, aTopic, aData) {
+ if ((aTopic != OnionAuthUtil.topic.clientAuthMissing) &&
+ (aTopic != OnionAuthUtil.topic.clientAuthIncorrect)) {
+ return;
+ }
+
+ let browser;
+ if (aSubject instanceof Ci.nsIDOMWindow) {
+ let contentWindow = aSubject.QueryInterface(Ci.nsIDOMWindow);
+ browser = contentWindow.docShell.chromeEventHandler;
+ } else {
+ browser = aSubject.QueryInterface(Ci.nsIBrowser);
+ }
+
+ if (!gBrowser.browsers.some(aBrowser => aBrowser == browser)) {
+ return; // This window does not contain the subject browser; ignore.
+ }
+
+ let failedURI = browser.currentURI;
+ let authPrompt = new OnionServicesAuthPrompt(browser, failedURI,
+ aTopic, aData);
+ authPrompt.show(undefined);
+ }
+ };
+
+ return retval;
+})(); /* OnionAuthPrompt */
+
+
+Object.defineProperty(this, "OnionAuthPrompt", {
+ value: OnionAuthPrompt,
+ enumerable: true,
+ writable: false
+});
diff --git a/browser/components/onionservices/content/authUtil.jsm b/browser/components/onionservices/content/authUtil.jsm
new file mode 100644
index 000000000000..c9d83774da1f
--- /dev/null
+++ b/browser/components/onionservices/content/authUtil.jsm
@@ -0,0 +1,47 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "OnionAuthUtil",
+];
+
+var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+const OnionAuthUtil = {
+ topic: {
+ clientAuthMissing: "tor-onion-services-clientauth-missing",
+ clientAuthIncorrect: "tor-onion-services-clientauth-incorrect",
+ },
+ message: {
+ authPromptCanceled: "Tor:OnionServicesAuthPromptCanceled",
+ },
+ domid: {
+ anchor: "tor-clientauth-notification-icon",
+ notification: "tor-clientauth",
+ description: "tor-clientauth-notification-desc",
+ learnMore: "tor-clientauth-notification-learnmore",
+ onionNameSpan: "tor-clientauth-notification-onionname",
+ keyElement: "tor-clientauth-notification-key",
+ warningElement: "tor-clientauth-warning",
+ checkboxElement: "tor-clientauth-persistkey-checkbox",
+ },
+
+ addCancelMessageListener(aTabContent, aDocShell) {
+ aTabContent.addMessageListener(this.message.authPromptCanceled,
+ (aMessage) => {
+ // Upon cancellation of the client authentication prompt, display
+ // the appropriate error page. When calling the docShell
+ // displayLoadError() function, we pass undefined for the failed
+ // channel so that displayLoadError() can determine that it should
+ // not display the client authentication prompt a second time.
+ let failedURI = Services.io.newURI(aMessage.data.failedURI);
+ let reasonForPrompt = aMessage.data.reasonForPrompt;
+ let errorCode =
+ (reasonForPrompt === this.topic.clientAuthMissing) ?
+ Cr.NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH :
+ Cr.NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH;
+ aDocShell.displayLoadError(errorCode, failedURI, undefined, undefined);
+ });
+ },
+};
diff --git a/browser/components/onionservices/content/netError/browser.svg b/browser/components/onionservices/content/netError/browser.svg
new file mode 100644
index 000000000000..b4c433b37bbb
--- /dev/null
+++ b/browser/components/onionservices/content/netError/browser.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="72" height="65" viewBox="0 0 72 65">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M0.0 0.0C0.0 0.0 0.0 65.0 0.0 65.0C0.0 65.0 72.0 65.0 72.0 65.0C72.0 65.0 72.0 0.0 72.0 0.0C72.0 0.0 52.9019692 0.0 52.9019692 0.0C52.9019692 0.0 0.0 0.0 0.0 0.0C0.0 0.0 0.0 0.0 0.0 0.0M65.0 58.0C65.0 58.0 6.0 58.0 6.0 58.0C6.0 58.0 6.0 25.0 6.0 25.0C6.0 25.0 65.0 25.0 65.0 25.0C65.0 25.0 65.0 58.0 65.0 58.0C65.0 58.0 65.0 58.0 65.0 58.0M6.0 10.0C6.0 10.0 10.0 10.0 10.0 10.0C10.0 10.0 10.0 14.0 10.0 14.0C10.0 14.0 6.0 14.0 6.0 14.0C6.0 14.0 6.0 10.0 6.0 10.0C6.0 10.0 6.0 10.0 6.0 10.0M14.0 10.0C14.0 10.0 18.0 10.0 18.0 10.0C18.0 10.0 18.0 14.0 18.0 14.0C18.0 14.0 14.0 14.0 14.0 14.0C14.0 14.0 14.0 10.0 14.0 10.0C14.0 10.0 14.0 10.0 14.0 10.0M22.0 10.0C22.0 10.0 26.0 10.0 26.0 10.0C26.0 10.0 26.0 14.0 26.0 14.0C26.0 14.0 22.0 14.0 22.0 14.0C22.0 14.0 22.0 10.0 22.0 10.0C22.0 10.0 22.0 10.0 22.0 10.0" />
+</svg>
diff --git a/browser/components/onionservices/content/netError/network.svg b/browser/components/onionservices/content/netError/network.svg
new file mode 100644
index 000000000000..808c53dedd09
--- /dev/null
+++ b/browser/components/onionservices/content/netError/network.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="72" height="54" viewBox="0 0 72 54">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M14.0487805 54.0C6.28990244 54.0 0.0 47.3306322 0.0 39.1034585C0.0 32.0105634 4.68716488 26.0867675 10.9481707 24.585103C10.6902 23.574652 10.5365854 22.5107596 10.5365854 21.4138156C10.5365854 14.7292347 15.6471278 9.3103384 21.9512195 9.3103384C24.8076351 9.3103384 27.4126741 10.4393194 29.4146341 12.2780088C32.1344254 5.0777841 38.77452 0.0 46.5365854 0.0C56.7201249 0.0 64.9756098 8.7536733 64.9756098 19.5517479C64.9756098 20.7691677 64.8471688 21.9453428 64.6463415 23.1013144C69.0576849 26.0679606 72.0 31.2693674 72.0 37.2413909C72.0 46.5256603 64.9510244 54.0 56.195122 54.0C56.195122 54.0 14.0487805 54.0 14.0487805 54.0C14.0487805 54.0 14.0487805 54.0 14.0487805 54.0" />
+</svg>
diff --git a/browser/components/onionservices/content/netError/onionNetError.css b/browser/components/onionservices/content/netError/onionNetError.css
new file mode 100644
index 000000000000..58117ab93223
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionNetError.css
@@ -0,0 +1,65 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+:root {
+ --grey-70: #38383d;
+}
+
+#onionErrorDiagramContainer {
+ margin: 60px auto;
+ width: 460px; /* 3 columns @ 140px plus 2 column gaps @ 20px */
+ display: grid;
+ grid-row-gap: 15px;
+ grid-column-gap: 20px;
+ grid-template-columns: 1fr 1fr 1fr;
+}
+
+#onionErrorDiagramContainer > div {
+ margin: auto;
+ position: relative; /* needed to allow overlay of the ok or error icon */
+}
+
+.onionErrorImage {
+ width: 72px;
+ height: 72px;
+ background-position: center;
+ background-repeat: no-repeat;
+ -moz-context-properties: fill;
+ fill: var(--grey-70);
+}
+
+#onionErrorBrowserImage {
+ background-image: url("browser.svg");
+}
+
+#onionErrorNetworkImage {
+ background-image: url("network.svg");
+}
+
+#onionErrorOnionSiteImage {
+ background-image: url("onionsite.svg");
+}
+
+/* rules to support overlay of the ok or error icon */
+.onionErrorImage[status]::after {
+ content: " ";
+ position: absolute;
+ left: -18px;
+ top: 18px;
+ width: 36px;
+ height: 36px;
+ -moz-context-properties: fill;
+ fill: var(--in-content-page-background);
+ background-color: var(--grey-70);
+ background-repeat: no-repeat;
+ background-position: center;
+ border: 3px solid var(--in-content-page-background);
+ border-radius: 50%;
+}
+
+.onionErrorImage[status="ok"]::after {
+ background-image: url("chrome://global/skin/icons/check.svg");
+}
+
+.onionErrorImage[status="error"]::after {
+ background-image: url("chrome://browser/skin/stop.svg");
+}
diff --git a/browser/components/onionservices/content/netError/onionNetError.js b/browser/components/onionservices/content/netError/onionNetError.js
new file mode 100644
index 000000000000..8fabb3f38eb7
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionNetError.js
@@ -0,0 +1,244 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+/* eslint-env mozilla/frame-script */
+
+var OnionServicesAboutNetError = {
+ _selector: {
+ header: ".title-text",
+ longDesc: "#errorLongDesc",
+ learnMoreContainer: "#learnMoreContainer",
+ learnMoreLink: "#learnMoreLink",
+ contentContainer: "#errorLongContent",
+ tryAgainButtonContainer: "#netErrorButtonContainer",
+ },
+ _status: {
+ ok: "ok",
+ error: "error",
+ },
+
+ _diagramInfoMap: undefined,
+
+ // Public functions (called from outside this file).
+ //
+ // This initPage() function may need to be updated if the structure of
+ // browser/base/content/aboutNetError.xhtml changes. Specifically, it
+ // references the following elements:
+ // query string parameter e
+ // class title-text
+ // id errorLongDesc
+ // id learnMoreContainer
+ // id learnMoreLink
+ // id errorLongContent
+ initPage(aDoc) {
+ const searchParams = new URLSearchParams(aDoc.documentURI.split("?")[1]);
+ const err = searchParams.get("e");
+
+ const errPrefix = "onionServices.";
+ const errName = err.substring(errPrefix.length);
+
+ this._strings = RPMGetTorStrings();
+
+ const stringsObj = this._strings[errName];
+ if (!stringsObj) {
+ return;
+ }
+
+ this._insertStylesheet(aDoc);
+
+ const pageTitle = stringsObj.pageTitle;
+ const header = stringsObj.header;
+ const longDescription = stringsObj.longDescription; // optional
+ const learnMoreURL = stringsObj.learnMoreURL;
+
+ if (pageTitle) {
+ aDoc.title = pageTitle;
+ }
+
+ if (header) {
+ const headerElem = aDoc.querySelector(this._selector.header);
+ if (headerElem) {
+ headerElem.textContent = header;
+ }
+ }
+
+ const ld = aDoc.querySelector(this._selector.longDesc);
+ if (ld) {
+ if (longDescription) {
+ const hexErr = this._hexErrorFromName(errName);
+ ld.textContent = longDescription.replace("%S", hexErr);
+ } else {
+ // This onion service error does not have a long description. Since
+ // it is set to a generic error string by the code in
+ // browser/base/content/aboutNetError.js, hide it here.
+ ld.style.display = "none";
+ }
+ }
+
+ if (learnMoreURL) {
+ const lmContainer = aDoc.querySelector(this._selector.learnMoreContainer);
+ if (lmContainer) {
+ lmContainer.style.display = "block";
+ }
+ const lmLink = lmContainer.querySelector(this._selector.learnMoreLink);
+ if (lmLink) {
+ lmLink.setAttribute("href", learnMoreURL);
+ }
+ }
+
+ // Remove the "Try Again" button if the user made a typo in the .onion
+ // address since it is not useful in that case.
+ if (errName === "badAddress") {
+ const tryAgainButton = aDoc.querySelector(
+ this._selector.tryAgainButtonContainer
+ );
+ if (tryAgainButton) {
+ tryAgainButton.style.display = "none";
+ }
+ }
+
+ this._insertDiagram(aDoc, errName);
+ }, // initPage()
+
+ _insertStylesheet(aDoc) {
+ const url =
+ "chrome://browser/content/onionservices/netError/onionNetError.css";
+ let linkElem = aDoc.createElement("link");
+ linkElem.rel = "stylesheet";
+ linkElem.href = url;
+ linkElem.type = "text/css";
+ aDoc.head.appendChild(linkElem);
+ },
+
+ _insertDiagram(aDoc, aErrorName) {
+ // The onion error diagram consists of a grid of div elements.
+ // The first row contains three images (Browser, Network, Onionsite) and
+ // the second row contains labels for the images that are in the first row.
+ // The _diagramInfoMap describes for each type of onion service error
+ // whether a small ok or error status icon is overlaid on top of the main
+ // Browser/Network/Onionsite images.
+ if (!this._diagramInfoMap) {
+ this._diagramInfoMap = new Map();
+ this._diagramInfoMap.set("descNotFound", {
+ browser: this._status.ok,
+ network: this._status.ok,
+ onionSite: this._status.error,
+ });
+ this._diagramInfoMap.set("descInvalid", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("introFailed", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("rendezvousFailed", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("clientAuthMissing", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("clientAuthIncorrect", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("badAddress", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("introTimedOut", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ }
+
+ const diagramInfo = this._diagramInfoMap.get(aErrorName);
+
+ const container = this._createDiv(aDoc, "onionErrorDiagramContainer");
+ const imageClass = "onionErrorImage";
+
+ const browserImage = this._createDiv(
+ aDoc,
+ "onionErrorBrowserImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.browser) {
+ browserImage.setAttribute("status", diagramInfo.browser);
+ }
+
+ const networkImage = this._createDiv(
+ aDoc,
+ "onionErrorNetworkImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.network) {
+ networkImage.setAttribute("status", diagramInfo.network);
+ }
+
+ const onionSiteImage = this._createDiv(
+ aDoc,
+ "onionErrorOnionSiteImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.onionSite) {
+ onionSiteImage.setAttribute("status", diagramInfo.onionSite);
+ }
+
+ let labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.browser;
+ labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.network;
+ labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.onionSite;
+
+ const contentContainer = aDoc.querySelector(
+ this._selector.contentContainer
+ );
+ if (contentContainer) {
+ contentContainer.insertBefore(container, contentContainer.firstChild);
+ }
+ }, // _insertDiagram()
+
+ _createDiv(aDoc, aID, aClass, aParentElem) {
+ const div = aDoc.createElement("div");
+ if (aID) {
+ div.id = aID;
+ }
+ if (aClass) {
+ div.setAttribute("class", aClass);
+ }
+ if (aParentElem) {
+ aParentElem.appendChild(div);
+ }
+
+ return div;
+ },
+
+ _hexErrorFromName(aErrorName) {
+ // We do not have access to the original Tor SOCKS error code here, so
+ // perform a reverse mapping from the error name.
+ switch (aErrorName) {
+ case "descNotFound":
+ return "0xF0";
+ case "descInvalid":
+ return "0xF1";
+ case "introFailed":
+ return "0xF2";
+ case "rendezvousFailed":
+ return "0xF3";
+ case "clientAuthMissing":
+ return "0xF4";
+ case "clientAuthIncorrect":
+ return "0xF5";
+ case "badAddress":
+ return "0xF6";
+ case "introTimedOut":
+ return "0xF7";
+ }
+
+ return "";
+ },
+};
diff --git a/browser/components/onionservices/content/netError/onionsite.svg b/browser/components/onionservices/content/netError/onionsite.svg
new file mode 100644
index 000000000000..1f2777e6acc7
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionsite.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="70" height="63" viewBox="0 0 70 63">
+ <g fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M64.0 2.0C64.0 2.0 4.0 2.0 4.0 2.0C2.8954305 2.0 2.0 2.81148389 2.0 3.8125C2.0 3.8125 2.0 58.1875 2.0 58.1875C2.0 59.1885161 2.8954305 60.0 4.0 60.0C4.0 60.0 36.0 60.0 36.0 60.0C36.0 60.0 36.0 56.375 36.0 56.375C36.0 56.375 6.0 56.375 6.0 56.375C6.0 56.375 6.0 41.875 6.0 41.875C6.0 41.875 38.0 41.875 38.0 41.875C38.0 41.875 38.0 38.25 38.0 38.25C38.0 38.25 6.0 38.25 6.0 38.25C6.0 38.25 6.0 23.75 6.0 23.75C6.0 23.75 62.0 23.75 62.0 23.75C62.0 23.75 62.0 36.4375 62.0 36.4375C62.0 36.4375 66.0 36.4375 66.0 36.4375C66.0 36.4375 66.0 3.8125 66.0 3.8125C66.0 2.81148389 65.1045695 2.0 64.0 2.0C64.0 2.0 64.0 2.0 64.0 2.0M62.0 20.125C62.0 20.125 6.0 20.125 6.0 20.125C6.0 20.125 6.0 5.625 6.0 5.625C6.0 5.625 62.0 5.625 62.0 5.625C62.0 5.625 62.0 20.125 62.0 20.125C62.0 20.125 62.0 20.125 62.0 20.125" />
+ <path d="M24.0 47.0C24.0 47.0 24.0 51.0 24.0 51.0C24.0 51.0 20.0 51.0 20.0 51.0C20.0 51.0 20.0 47.0 20.0 47.0C20.0 47.0 24.0 47.0 24.0 47.0C24.0 47.0 24.0 47.0 24.0 47.0M16.0 47.0C16.0 47.0 16.0 51.0 16.0 51.0C16.0 51.0 12.0 51.0 12.0 51.0C12.0 51.0 12.0 47.0 12.0 47.0C12.0 47.0 16.0 47.0 16.0 47.0C16.0 47.0 16.0 47.0 16.0 47.0M56.0 29.0C56.0 29.0 56.0 33.0 56.0 33.0C56.0 33.0 52.0 33.0 52.0 33.0C52.0 33.0 52.0 29.0 52.0 29.0C52.0 29.0 56.0 29.0 56.0 29.0C56.0 29.0 56.0 29.0 56.0 29.0M48.0 29.0C48.0 29.0 48.0 33.0 48.0 33.0C48.0 33.0 12.0 33.0 12.0 33.0C12.0 33.0 12.0 29.0 12.0 29.0C12.0 29.0 48.0 29.0 48.0 29.0C48.0 29.0 48.0 29.0 48.0 29.0M22.0 11.0C22.0 11.0 22.0 15.0 22.0 15.0C22.0 15.0 10.0 15.0 10.0 15.0C10.0 15.0 10.0 11.0 10.0 11.0C10.0 11.0 22.0 11.0 22.0 11.0C22.0 11.0 22.0 11.0 22.0 11.0M70.0 0.0C70.0 0.0 70.0 36.5 70.0 36.5C70.0 36.5 65.0 36.5 65.0 36.5C65.0 36.5 65.0 4.5 65.0 4.5C65.0 4.5 5.0 4.5 5.0 4.5C5.0 4.5 5.0 58.5 5.0 58.5C5.0 58.5 36.0 58.5 36.0 58.5C36.0 58
.5 36.0 63.0 36.0 63.0C36.0 63.0 0.0 63.0 0.0 63.0C0.0 63.0 0.0 0.0 0.0 0.0C0.0 0.0 70.0 0.0 70.0 0.0C70.0 0.0 70.0 0.0 70.0 0.0M32.0 47.0C32.0 47.0 32.0 51.0 32.0 51.0C32.0 51.0 28.0 51.0 28.0 51.0C28.0 51.0 28.0 47.0 28.0 47.0C28.0 47.0 32.0 47.0 32.0 47.0C32.0 47.0 32.0 47.0 32.0 47.0M54.0 11.0C54.0 11.0 54.0 15.0 54.0 15.0C54.0 15.0 50.0 15.0 50.0 15.0C50.0 15.0 50.0 11.0 50.0 11.0C50.0 11.0 54.0 11.0 54.0 11.0C54.0 11.0 54.0 11.0 54.0 11.0M46.0 11.0C46.0 11.0 46.0 15.0 46.0 15.0C46.0 15.0 42.0 15.0 42.0 15.0C42.0 15.0 42.0 11.0 42.0 11.0C42.0 11.0 46.0 11.0 46.0 11.0C46.0 11.0 46.0 11.0 46.0 11.0M38.0 11.0C38.0 11.0 38.0 15.0 38.0 15.0C38.0 15.0 34.0 15.0 34.0 15.0C34.0 15.0 34.0 11.0 34.0 11.0C34.0 11.0 38.0 11.0 38.0 11.0C38.0 11.0 38.0 11.0 38.0 11.0M30.0 11.0C30.0 11.0 30.0 15.0 30.0 15.0C30.0 15.0 26.0 15.0 26.0 15.0C26.0 15.0 26.0 11.0 26.0 11.0C26.0 11.0 30.0 11.0 30.0 11.0C30.0 11.0 30.0 11.0 30.0 11.0" />
+ <path d="M61.0 46.0C61.0 46.0 59.0 46.0 59.0 46.0C59.0 46.0 59.0 40.0 59.0 40.0C59.0 38.8954305 58.1045695 38.0 57.0 38.0C57.0 38.0 49.0 38.0 49.0 38.0C47.8954305 38.0 47.0 38.8954305 47.0 40.0C47.0 40.0 47.0 46.0 47.0 46.0C47.0 46.0 45.0 46.0 45.0 46.0C43.8954305 46.0 43.0 46.8954305 43.0 48.0C43.0 48.0 43.0 60.0 43.0 60.0C43.0 61.1045695 43.8954305 62.0 45.0 62.0C45.0 62.0 61.0 62.0 61.0 62.0C62.1045695 62.0 63.0 61.1045695 63.0 60.0C63.0 60.0 63.0 48.0 63.0 48.0C63.0 46.8954305 62.1045695 46.0 61.0 46.0C61.0 46.0 61.0 46.0 61.0 46.0M51.0 42.0C51.0 42.0 55.0 42.0 55.0 42.0C55.0 42.0 55.0 46.0 55.0 46.0C55.0 46.0 51.0 46.0 51.0 46.0C51.0 46.0 51.0 42.0 51.0 42.0C51.0 42.0 51.0 42.0 51.0 42.0M59.0 58.0C59.0 58.0 47.0 58.0 47.0 58.0C47.0 58.0 47.0 50.0 47.0 50.0C47.0 50.0 59.0 50.0 59.0 50.0C59.0 50.0 59.0 58.0 59.0 58.0C59.0 58.0 59.0 58.0 59.0 58.0" />
+ </g>
+</svg>
diff --git a/browser/components/onionservices/content/onionservices.css b/browser/components/onionservices/content/onionservices.css
new file mode 100644
index 000000000000..e2621ec8266d
--- /dev/null
+++ b/browser/components/onionservices/content/onionservices.css
@@ -0,0 +1,69 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+@namespace html url("http://www.w3.org/1999/xhtml");
+
+html|*#tor-clientauth-notification-onionname {
+ font-weight: bold;
+}
+
+html|*#tor-clientauth-notification-key {
+ box-sizing: border-box;
+ width: 100%;
+ margin-top: 15px;
+ padding: 6px;
+}
+
+/* Start of rules adapted from
+ * browser/components/newtab/css/activity-stream-mac.css (linux and windows
+ * use the same rules).
+ */
+html|*#tor-clientauth-notification-key.invalid {
+ border: 1px solid #D70022;
+ box-shadow: 0 0 0 1px #D70022, 0 0 0 4px rgba(215, 0, 34, 0.3);
+}
+
+html|*#tor-clientauth-warning {
+ display: inline-block;
+ animation: fade-up-tt 450ms;
+ background: #D70022;
+ border-radius: 2px;
+ color: #FFF;
+ inset-inline-start: 3px;
+ padding: 5px 12px;
+ position: relative;
+ top: 6px;
+ z-index: 1;
+}
+
+html|*#tor-clientauth-warning[hidden] {
+ display: none;
+}
+
+html|*#tor-clientauth-warning::before {
+ background: #D70022;
+ bottom: -8px;
+ content: '.';
+ height: 16px;
+ inset-inline-start: 12px;
+ position: absolute;
+ text-indent: -999px;
+ top: -7px;
+ transform: rotate(45deg);
+ white-space: nowrap;
+ width: 16px;
+ z-index: -1;
+}
+
+@keyframes fade-up-tt {
+ 0% {
+ opacity: 0;
+ transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+/* End of rules adapted from
+ * browser/components/newtab/css/activity-stream-mac.css
+ */
diff --git a/browser/components/onionservices/content/savedKeysDialog.js b/browser/components/onionservices/content/savedKeysDialog.js
new file mode 100644
index 000000000000..b1376bbabe85
--- /dev/null
+++ b/browser/components/onionservices/content/savedKeysDialog.js
@@ -0,0 +1,259 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "controller",
+ "resource://torbutton/modules/tor-control-port.js"
+);
+
+var gOnionServicesSavedKeysDialog = {
+ selector: {
+ dialog: "#onionservices-savedkeys-dialog",
+ intro: "#onionservices-savedkeys-intro",
+ tree: "#onionservices-savedkeys-tree",
+ onionSiteCol: "#onionservices-savedkeys-siteCol",
+ onionKeyCol: "#onionservices-savedkeys-keyCol",
+ errorIcon: "#onionservices-savedkeys-errorIcon",
+ errorMessage: "#onionservices-savedkeys-errorMessage",
+ removeButton: "#onionservices-savedkeys-remove",
+ removeAllButton: "#onionservices-savedkeys-removeall",
+ },
+
+ _tree: undefined,
+ _isBusy: false, // true when loading data, deleting a key, etc.
+
+ // Public functions (called from outside this file).
+ async deleteSelectedKeys() {
+ this._setBusyState(true);
+
+ const indexesToDelete = [];
+ const count = this._tree.view.selection.getRangeCount();
+ for (let i = 0; i < count; ++i) {
+ const minObj = {};
+ const maxObj = {};
+ this._tree.view.selection.getRangeAt(i, minObj, maxObj);
+ for (let idx = minObj.value; idx <= maxObj.value; ++idx) {
+ indexesToDelete.push(idx);
+ }
+ }
+
+ if (indexesToDelete.length > 0) {
+ const controllerFailureMsg =
+ TorStrings.onionServices.authPreferences.failedToRemoveKey;
+ try {
+ const torController = controller(aError => {
+ this._showError(controllerFailureMsg);
+ });
+
+ // Remove in reverse index order to avoid issues caused by index changes.
+ for (let i = indexesToDelete.length - 1; i >= 0; --i) {
+ await this._deleteOneKey(torController, indexesToDelete[i]);
+ }
+ } catch (e) {
+ if (e.torMessage) {
+ this._showError(e.torMessage);
+ } else {
+ this._showError(controllerFailureMsg);
+ }
+ }
+ }
+
+ this._setBusyState(false);
+ },
+
+ async deleteAllKeys() {
+ this._tree.view.selection.selectAll();
+ await this.deleteSelectedKeys();
+ },
+
+ updateButtonsState() {
+ const haveSelection = this._tree.view.selection.getRangeCount() > 0;
+ const dialog = document.querySelector(this.selector.dialog);
+ const removeSelectedBtn = dialog.querySelector(this.selector.removeButton);
+ removeSelectedBtn.disabled = this._isBusy || !haveSelection;
+ const removeAllBtn = dialog.querySelector(this.selector.removeAllButton);
+ removeAllBtn.disabled = this._isBusy || this.rowCount === 0;
+ },
+
+ // Private functions.
+ _onLoad() {
+ document.mozSubdialogReady = this._init();
+ },
+
+ async _init() {
+ await this._populateXUL();
+
+ window.addEventListener("keypress", this._onWindowKeyPress.bind(this));
+
+ // We don't use await here because we want _loadSavedKeys() to run
+ // in the background and not block loading of this dialog.
+ this._loadSavedKeys();
+ },
+
+ async _populateXUL() {
+ const dialog = document.querySelector(this.selector.dialog);
+ const authPrefStrings = TorStrings.onionServices.authPreferences;
+ dialog.setAttribute("title", authPrefStrings.dialogTitle);
+
+ let elem = dialog.querySelector(this.selector.intro);
+ elem.textContent = authPrefStrings.dialogIntro;
+
+ elem = dialog.querySelector(this.selector.onionSiteCol);
+ elem.setAttribute("label", authPrefStrings.onionSite);
+
+ elem = dialog.querySelector(this.selector.onionKeyCol);
+ elem.setAttribute("label", authPrefStrings.onionKey);
+
+ elem = dialog.querySelector(this.selector.removeButton);
+ elem.setAttribute("label", authPrefStrings.remove);
+
+ elem = dialog.querySelector(this.selector.removeAllButton);
+ elem.setAttribute("label", authPrefStrings.removeAll);
+
+ this._tree = dialog.querySelector(this.selector.tree);
+ },
+
+ async _loadSavedKeys() {
+ const controllerFailureMsg =
+ TorStrings.onionServices.authPreferences.failedToGetKeys;
+ this._setBusyState(true);
+
+ try {
+ this._tree.view = this;
+
+ const torController = controller(aError => {
+ this._showError(controllerFailureMsg);
+ });
+
+ const keyInfoList = await torController.onionAuthViewKeys();
+ if (keyInfoList) {
+ // Filter out temporary keys.
+ this._keyInfoList = keyInfoList.filter(aKeyInfo => {
+ if (!aKeyInfo.Flags) {
+ return false;
+ }
+
+ const flags = aKeyInfo.Flags.split(",");
+ return flags.includes("Permanent");
+ });
+
+ // Sort by the .onion address.
+ this._keyInfoList.sort((aObj1, aObj2) => {
+ const hsAddr1 = aObj1.hsAddress.toLowerCase();
+ const hsAddr2 = aObj2.hsAddress.toLowerCase();
+ if (hsAddr1 < hsAddr2) {
+ return -1;
+ }
+ return hsAddr1 > hsAddr2 ? 1 : 0;
+ });
+ }
+
+ // Render the tree content.
+ this._tree.rowCountChanged(0, this.rowCount);
+ } catch (e) {
+ if (e.torMessage) {
+ this._showError(e.torMessage);
+ } else {
+ this._showError(controllerFailureMsg);
+ }
+ }
+
+ this._setBusyState(false);
+ },
+
+ // This method may throw; callers should catch errors.
+ async _deleteOneKey(aTorController, aIndex) {
+ const keyInfoObj = this._keyInfoList[aIndex];
+ await aTorController.onionAuthRemove(keyInfoObj.hsAddress);
+ this._tree.view.selection.clearRange(aIndex, aIndex);
+ this._keyInfoList.splice(aIndex, 1);
+ this._tree.rowCountChanged(aIndex + 1, -1);
+ },
+
+ _setBusyState(aIsBusy) {
+ this._isBusy = aIsBusy;
+ this.updateButtonsState();
+ },
+
+ _onWindowKeyPress(event) {
+ if (event.keyCode === KeyEvent.DOM_VK_ESCAPE) {
+ window.close();
+ } else if (event.keyCode === KeyEvent.DOM_VK_DELETE) {
+ this.deleteSelectedKeys();
+ }
+ },
+
+ _showError(aMessage) {
+ const dialog = document.querySelector(this.selector.dialog);
+ const errorIcon = dialog.querySelector(this.selector.errorIcon);
+ errorIcon.style.visibility = aMessage ? "visible" : "hidden";
+ const errorDesc = dialog.querySelector(this.selector.errorMessage);
+ errorDesc.textContent = aMessage ? aMessage : "";
+ },
+
+ // XUL tree widget view implementation.
+ get rowCount() {
+ return this._keyInfoList ? this._keyInfoList.length : 0;
+ },
+
+ getCellText(aRow, aCol) {
+ let val = "";
+ if (this._keyInfoList && aRow < this._keyInfoList.length) {
+ const keyInfo = this._keyInfoList[aRow];
+ if (aCol.id.endsWith("-siteCol")) {
+ val = keyInfo.hsAddress;
+ } else if (aCol.id.endsWith("-keyCol")) {
+ val = keyInfo.typeAndKey;
+ // Omit keyType because it is always "x25519".
+ const idx = val.indexOf(":");
+ if (idx > 0) {
+ val = val.substring(idx + 1);
+ }
+ }
+ }
+
+ return val;
+ },
+
+ isSeparator(index) {
+ return false;
+ },
+
+ isSorted() {
+ return false;
+ },
+
+ isContainer(index) {
+ return false;
+ },
+
+ setTree(tree) {},
+
+ getImageSrc(row, column) {},
+
+ getCellValue(row, column) {},
+
+ cycleHeader(column) {},
+
+ getRowProperties(row) {
+ return "";
+ },
+
+ getColumnProperties(column) {
+ return "";
+ },
+
+ getCellProperties(row, column) {
+ return "";
+ },
+};
+
+window.addEventListener("load", () => gOnionServicesSavedKeysDialog._onLoad());
diff --git a/browser/components/onionservices/content/savedKeysDialog.xhtml b/browser/components/onionservices/content/savedKeysDialog.xhtml
new file mode 100644
index 000000000000..3db9bb05ea82
--- /dev/null
+++ b/browser/components/onionservices/content/savedKeysDialog.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Copyright (c) 2020, The Tor Project, Inc. -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css" type="text/css"?>
+
+<window id="onionservices-savedkeys-dialog"
+ windowtype="OnionServices:SavedKeys"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ style="width: 45em;">
+
+ <script src="chrome://browser/content/onionservices/savedKeysDialog.js"/>
+
+ <vbox id="onionservices-savedkeys" class="contentPane" flex="1">
+ <label id="onionservices-savedkeys-intro"
+ control="onionservices-savedkeys-tree"/>
+ <separator class="thin"/>
+ <tree id="onionservices-savedkeys-tree" flex="1" hidecolumnpicker="true"
+ width="750"
+ style="height: 20em;"
+ onselect="gOnionServicesSavedKeysDialog.updateButtonsState();">
+ <treecols>
+ <treecol id="onionservices-savedkeys-siteCol" flex="1" persist="width"/>
+ <splitter class="tree-splitter"/>
+ <treecol id="onionservices-savedkeys-keyCol" flex="1" persist="width"/>
+ </treecols>
+ <treechildren/>
+ </tree>
+ <hbox id="onionservices-savedkeys-errorContainer" align="baseline" flex="1">
+ <image id="onionservices-savedkeys-errorIcon"/>
+ <description id="onionservices-savedkeys-errorMessage" flex="1"/>
+ </hbox>
+ <separator class="thin"/>
+ <hbox id="onionservices-savedkeys-buttons">
+ <button id="onionservices-savedkeys-remove" disabled="true"
+ oncommand="gOnionServicesSavedKeysDialog.deleteSelectedKeys();"/>
+ <button id="onionservices-savedkeys-removeall"
+ oncommand="gOnionServicesSavedKeysDialog.deleteAllKeys();"/>
+ </hbox>
+ </vbox>
+</window>
diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn
new file mode 100644
index 000000000000..9d6ce88d1841
--- /dev/null
+++ b/browser/components/onionservices/jar.mn
@@ -0,0 +1,9 @@
+browser.jar:
+ content/browser/onionservices/authPreferences.css (content/authPreferences.css)
+ content/browser/onionservices/authPreferences.js (content/authPreferences.js)
+ content/browser/onionservices/authPrompt.js (content/authPrompt.js)
+ content/browser/onionservices/authUtil.jsm (content/authUtil.jsm)
+ content/browser/onionservices/netError/ (content/netError/*)
+ content/browser/onionservices/onionservices.css (content/onionservices.css)
+ content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js)
+ content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml)
diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build
new file mode 100644
index 000000000000..2661ad7cb9f3
--- /dev/null
+++ b/browser/components/onionservices/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 6c1c12044d26..3216ea5be02c 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -12,6 +12,7 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/search.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index 96f7a021f645..1572df940759 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -511,6 +511,8 @@
<label id="fips-desc" hidden="true" data-l10n-id="forms-master-pw-fips-desc"></label>
</groupbox>
+#include ../onionservices/content/authPreferences.inc.xhtml
+
<!-- The form autofill section is inserted in to this box
after the form autofill extension has initialized. -->
<groupbox id="formAutofillGroupBox"
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index a279072199bf..e4051c342513 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -80,6 +80,12 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionServicesAuthPreferences"],
+ "chrome://browser/content/onionservices/authPreferences.js"
+);
+
// TODO: module import via ChromeUtils.defineModuleGetter
XPCOMUtils.defineLazyScriptGetter(
this,
@@ -535,6 +541,7 @@ var gPrivacyPane = {
this.trackingProtectionReadPrefs();
this.networkCookieBehaviorReadPrefs();
this._initTrackingProtectionExtensionControl();
+ OnionServicesAuthPreferences.init();
this._initSecurityLevel();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/themes/shared/notification-icons.inc.css b/browser/themes/shared/notification-icons.inc.css
index 46b412391f5a..aa51a4e44c12 100644
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -128,6 +128,9 @@
list-style-image: url(chrome://browser/skin/notification-icons/indexedDB.svg);
}
+/* Reuse Firefox's login (key) icon for the Tor onion services auth. prompt */
+.popup-notification-icon[popupid="tor-clientauth"],
+.tor-clientauth-icon,
.popup-notification-icon[popupid="password"],
.login-icon {
list-style-image: url(chrome://browser/skin/login.svg);
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index fbf2175d795c..3ddfbf83aad4 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -3727,6 +3727,7 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
}
} else {
// Errors requiring simple formatting
+ bool isOnionAuthError = false;
switch (aError) {
case NS_ERROR_MALFORMED_URI:
// URI is malformed
@@ -3809,10 +3810,44 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
// HTTP/2 or HTTP/3 stack detected a protocol error
error = "networkProtocolError";
break;
-
+ case NS_ERROR_TOR_ONION_SVC_NOT_FOUND:
+ error = "onionServices.descNotFound";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_IS_INVALID:
+ error = "onionServices.descInvalid";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_INTRO_FAILED:
+ error = "onionServices.introFailed";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_REND_FAILED:
+ error = "onionServices.rendezvousFailed";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH:
+ error = "onionServices.clientAuthMissing";
+ isOnionAuthError = true;
+ break;
+ case NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH:
+ error = "onionServices.clientAuthIncorrect";
+ isOnionAuthError = true;
+ break;
+ case NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS:
+ error = "onionServices.badAddress";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT:
+ error = "onionServices.introTimedOut";
+ break;
default:
break;
}
+
+ // The presence of aFailedChannel indicates that we arrived here due to a
+ // failed connection attempt. Note that we will arrive here a second time
+ // if the user cancels the Tor client auth prompt, but in that case we
+ // will not have a failed channel and therefore we will not prompt again.
+ if (isOnionAuthError && aFailedChannel) {
+ // Display about:blank while the Tor client auth prompt is open.
+ errorPage.AssignLiteral("blank");
+ }
}
// If the HTTPS-Only Mode upgraded this request and the upgrade might have
@@ -3895,6 +3930,20 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
nsAutoString str;
rv =
stringBundle->FormatStringFromName(errorDescriptionID, formatStrs, str);
+ if (NS_FAILED(rv)) {
+ // As a fallback, check torbutton.properties for the error string.
+ const char bundleURL[] = "chrome://torbutton/locale/torbutton.properties";
+ nsCOMPtr<nsIStringBundleService> stringBundleService =
+ mozilla::services::GetStringBundleService();
+ if (stringBundleService) {
+ nsCOMPtr<nsIStringBundle> tbStringBundle;
+ if (NS_SUCCEEDED(stringBundleService->CreateBundle(
+ bundleURL, getter_AddRefs(tbStringBundle)))) {
+ rv = tbStringBundle->FormatStringFromName(errorDescriptionID,
+ formatStrs, str);
+ }
+ }
+ }
NS_ENSURE_SUCCESS(rv, rv);
messageStr.Assign(str);
}
@@ -6360,6 +6409,7 @@ nsresult nsDocShell::FilterStatusForErrorPage(
aStatus == NS_ERROR_FILE_ACCESS_DENIED ||
aStatus == NS_ERROR_CORRUPTED_CONTENT ||
aStatus == NS_ERROR_INVALID_CONTENT_ENCODING ||
+ NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_TOR ||
NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_SECURITY) {
// Errors to be shown for any frame
return aStatus;
@@ -8132,6 +8182,35 @@ nsresult nsDocShell::CreateContentViewer(const nsACString& aContentType,
FireOnLocationChange(this, aRequest, mCurrentURI, locationFlags);
}
+ // Arrange to show a Tor onion service client authentication prompt if
+ // appropriate.
+ if ((mLoadType == LOAD_ERROR_PAGE) && failedChannel) {
+ nsresult status = NS_OK;
+ if (NS_SUCCEEDED(failedChannel->GetStatus(&status)) &&
+ ((status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH) ||
+ (status == NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH))) {
+ nsAutoCString onionHost;
+ failedURI->GetHost(onionHost);
+ const char* topic = (status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH)
+ ? "tor-onion-services-clientauth-missing"
+ : "tor-onion-services-clientauth-incorrect";
+ if (XRE_IsContentProcess()) {
+ nsCOMPtr<nsIBrowserChild> browserChild = GetBrowserChild();
+ if (browserChild) {
+ static_cast<BrowserChild*>(browserChild.get())
+ ->SendShowOnionServicesAuthPrompt(onionHost, nsCString(topic));
+ }
+ } else {
+ nsCOMPtr<nsPIDOMWindowOuter> browserWin = GetWindow();
+ nsCOMPtr<nsIObserverService> obsSvc = services::GetObserverService();
+ if (browserWin && obsSvc) {
+ obsSvc->NotifyObservers(browserWin, topic,
+ NS_ConvertUTF8toUTF16(onionHost).get());
+ }
+ }
+ }
+ }
+
return NS_OK;
}
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp
index 5ede68022d04..53044c7329d0 100644
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -3925,6 +3925,27 @@ mozilla::ipc::IPCResult BrowserParent::RecvShowCanvasPermissionPrompt(
return IPC_OK();
}
+mozilla::ipc::IPCResult BrowserParent::RecvShowOnionServicesAuthPrompt(
+ const nsCString& aOnionName, const nsCString& aTopic) {
+ nsCOMPtr<nsIBrowser> browser =
+ mFrameElement ? mFrameElement->AsBrowser() : nullptr;
+ if (!browser) {
+ // If the tab is being closed, the browser may not be available.
+ // In this case we can ignore the request.
+ return IPC_OK();
+ }
+ nsCOMPtr<nsIObserverService> os = services::GetObserverService();
+ if (!os) {
+ return IPC_FAIL_NO_REASON(this);
+ }
+ nsresult rv = os->NotifyObservers(browser, aTopic.get(),
+ NS_ConvertUTF8toUTF16(aOnionName).get());
+ if (NS_FAILED(rv)) {
+ return IPC_FAIL_NO_REASON(this);
+ }
+ return IPC_OK();
+}
+
mozilla::ipc::IPCResult BrowserParent::RecvVisitURI(nsIURI* aURI,
nsIURI* aLastVisitedURI,
const uint32_t& aFlags) {
diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h
index db4ace2dc5fc..5acc06fa8053 100644
--- a/dom/ipc/BrowserParent.h
+++ b/dom/ipc/BrowserParent.h
@@ -748,6 +748,9 @@ class BrowserParent final : public PBrowserParent,
mozilla::ipc::IPCResult RecvShowCanvasPermissionPrompt(
const nsCString& aOrigin, const bool& aHideDoorHanger);
+ mozilla::ipc::IPCResult RecvShowOnionServicesAuthPrompt(
+ const nsCString& aOnionName, const nsCString& aTopic);
+
mozilla::ipc::IPCResult RecvSetSystemFont(const nsCString& aFontName);
mozilla::ipc::IPCResult RecvGetSystemFont(nsCString* aFontName);
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl
index 90010a51b45a..015de763cbe3 100644
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -595,6 +595,15 @@ parent:
async RequestPointerCapture(uint32_t aPointerId) returns (bool aSuccess);
async ReleasePointerCapture(uint32_t aPointerId);
+ /**
+ * This function is used to notify the parent that it should display a
+ * onion services client authentication prompt.
+ *
+ * @param aOnionHost The hostname of the .onion that needs authentication.
+ * @param aTopic The reason for the prompt.
+ */
+ async ShowOnionServicesAuthPrompt(nsCString aOnionHost, nsCString aTopic);
+
child:
async NativeSynthesisResponse(uint64_t aObserverId, nsCString aResponse);
async FlushTabState(uint32_t aFlushId, bool aIsFinal);
diff --git a/js/xpconnect/src/xpc.msg b/js/xpconnect/src/xpc.msg
index dbcff2114eac..5d3669c9253c 100644
--- a/js/xpconnect/src/xpc.msg
+++ b/js/xpconnect/src/xpc.msg
@@ -254,5 +254,15 @@ XPC_MSG_DEF(NS_ERROR_FINGERPRINTING_URI , "The URI is fingerprinti
XPC_MSG_DEF(NS_ERROR_CRYPTOMINING_URI , "The URI is cryptomining")
XPC_MSG_DEF(NS_ERROR_SOCIALTRACKING_URI , "The URI is social tracking")
+/* Codes related to Tor */
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_NOT_FOUND , "Tor onion service descriptor cannot be found")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_IS_INVALID , "Tor onion service descriptor is invalid")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED , "Tor onion service introduction failed")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_REND_FAILED , "Tor onion service rendezvous failed")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH, "Tor onion service missing client authorization")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH , "Tor onion service wrong client authorization")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS , "Tor onion service bad address")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT , "Tor onion service introduction timed out")
+
/* Profile manager error codes */
XPC_MSG_DEF(NS_ERROR_DATABASE_CHANGED , "Flushing the profiles to disk would have overwritten changes made elsewhere.")
diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp
index e029c8e6bd35..cefcf6e7bc4b 100644
--- a/netwerk/base/nsSocketTransport2.cpp
+++ b/netwerk/base/nsSocketTransport2.cpp
@@ -217,6 +217,12 @@ nsresult ErrorAccordingToNSPR(PRErrorCode errorCode) {
default:
if (psm::IsNSSErrorCode(errorCode)) {
rv = psm::GetXPCOMFromNSSError(errorCode);
+ } else {
+ // If we received a Tor extended error code via SOCKS, pass it through.
+ nsresult res = nsresult(errorCode);
+ if (NS_ERROR_GET_MODULE(res) == NS_ERROR_MODULE_TOR) {
+ rv = res;
+ }
}
break;
diff --git a/netwerk/socket/nsSOCKSIOLayer.cpp b/netwerk/socket/nsSOCKSIOLayer.cpp
index 0a16d6c7236f..c2bf0e951dda 100644
--- a/netwerk/socket/nsSOCKSIOLayer.cpp
+++ b/netwerk/socket/nsSOCKSIOLayer.cpp
@@ -1007,6 +1007,55 @@ PRStatus nsSOCKSSocketInfo::ReadV5ConnectResponseTop() {
"08, Address type not supported."));
c = PR_BAD_ADDRESS_ERROR;
break;
+ case 0xF0: // Tor SOCKS5_HS_NOT_FOUND
+ LOGERROR(
+ ("socks5: connect failed: F0,"
+ " Tor onion service descriptor can not be found."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_NOT_FOUND);
+ break;
+ case 0xF1: // Tor SOCKS5_HS_IS_INVALID
+ LOGERROR(
+ ("socks5: connect failed: F1,"
+ " Tor onion service descriptor is invalid."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_IS_INVALID);
+ break;
+ case 0xF2: // Tor SOCKS5_HS_INTRO_FAILED
+ LOGERROR(
+ ("socks5: connect failed: F2,"
+ " Tor onion service introduction failed."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED);
+ break;
+ case 0xF3: // Tor SOCKS5_HS_REND_FAILED
+ LOGERROR(
+ ("socks5: connect failed: F3,"
+ " Tor onion service rendezvous failed."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_REND_FAILED);
+ break;
+ case 0xF4: // Tor SOCKS5_HS_MISSING_CLIENT_AUTH
+ LOGERROR(
+ ("socks5: connect failed: F4,"
+ " Tor onion service missing client authorization."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH);
+ break;
+ case 0xF5: // Tor SOCKS5_HS_BAD_CLIENT_AUTH
+ LOGERROR(
+ ("socks5: connect failed: F5,"
+ " Tor onion service wrong client authorization."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH);
+ break;
+ case 0xF6: // Tor SOCKS5_HS_BAD_ADDRESS
+ LOGERROR(
+ ("socks5: connect failed: F6,"
+ " Tor onion service bad address."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS);
+ break;
+ case 0xF7: // Tor SOCKS5_HS_INTRO_TIMEDOUT
+ LOGERROR(
+ ("socks5: connect failed: F7,"
+ " Tor onion service introduction timed out."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT);
+ break;
+
default:
LOGERROR(("socks5: connect failed."));
break;
diff --git a/toolkit/modules/PopupNotifications.jsm b/toolkit/modules/PopupNotifications.jsm
index 2fc54a589969..68f687698cfa 100644
--- a/toolkit/modules/PopupNotifications.jsm
+++ b/toolkit/modules/PopupNotifications.jsm
@@ -406,6 +406,8 @@ PopupNotifications.prototype = {
* will be dismissed instead of removed after running the callback.
* - [optional] disabled (boolean): If this is true, the button
* will be disabled.
+ * - [optional] leaveOpen (boolean): If this is true, the notification
+ * will not be removed after running the callback.
* - [optional] disableHighlight (boolean): If this is true, the button
* will not apply the default highlight style.
* If null, the notification will have a default "OK" action button
@@ -1890,6 +1892,10 @@ PopupNotifications.prototype = {
this._dismiss();
return;
}
+
+ if (action.leaveOpen) {
+ return;
+ }
}
this._remove(notification);
diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm
index 877aa998dd4e..3c454b4b2175 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -96,6 +96,7 @@ let RemotePageAccessManager = {
RPMAddToHistogram: ["*"],
RPMGetInnerMostURI: ["*"],
RPMGetHttpResponseHeader: ["*"],
+ RPMGetTorStrings: ["*"],
},
"about:newinstall": {
RPMGetUpdateChannel: ["*"],
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
index 5f3cb199af4a..b55d1731573c 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
@@ -39,5 +39,6 @@ module.exports = {
RPMAddToHistogram: false,
RPMRemoveMessageListener: false,
RPMGetHttpResponseHeader: false,
+ RPMGetTorStrings: false,
},
};
diff --git a/xpcom/base/ErrorList.py b/xpcom/base/ErrorList.py
index c7b889c3e499..85593b5d7eec 100755
--- a/xpcom/base/ErrorList.py
+++ b/xpcom/base/ErrorList.py
@@ -89,6 +89,7 @@ modules["ERRORRESULT"] = Mod(43)
# Win32 system error codes, which are not mapped to a specific other value,
# see Bug 1686041.
modules["WIN32"] = Mod(44)
+modules["TOR"] = Mod(45)
# NS_ERROR_MODULE_GENERAL should be used by modules that do not
# care if return code values overlap. Callers of methods that
@@ -1246,6 +1247,27 @@ with modules["ERRORRESULT"]:
errors["NS_ERROR_INTERNAL_ERRORRESULT_RANGEERROR"] = FAILURE(5)
+# =======================================================================
+# 45: Tor-specific error codes.
+# =======================================================================
+with modules["TOR"]:
+ # Tor onion service descriptor can not be found.
+ errors["NS_ERROR_TOR_ONION_SVC_NOT_FOUND"] = FAILURE(1)
+ # Tor onion service descriptor is invalid.
+ errors["NS_ERROR_TOR_ONION_SVC_IS_INVALID"] = FAILURE(2)
+ # Tor onion service introduction failed.
+ errors["NS_ERROR_TOR_ONION_SVC_INTRO_FAILED"] = FAILURE(3)
+ # Tor onion service rendezvous failed.
+ errors["NS_ERROR_TOR_ONION_SVC_REND_FAILED"] = FAILURE(4)
+ # Tor onion service missing client authorization.
+ errors["NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH"] = FAILURE(5)
+ # Tor onion service wrong client authorization.
+ errors["NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH"] = FAILURE(6)
+ # Tor onion service bad address.
+ errors["NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS"] = FAILURE(7)
+ # Tor onion service introduction timed out.
+ errors["NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT"] = FAILURE(8)
+
# =======================================================================
# 51: NS_ERROR_MODULE_GENERAL
# =======================================================================
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 24796 - Comment out excess permissions from GeckoView
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit 11f2a3dc3adabf07079fba65f3cb32b494f9fc22
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Wed Apr 11 17:52:59 2018 +0000
Bug 24796 - Comment out excess permissions from GeckoView
The GeckoView AndroidManifest.xml is not preprocessed unlike Fennec's
manifest, so we can't use the ifdef preprocessor guards around the
permissions we do not want. Commenting the permissions is the
next-best-thing.
---
.../android/geckoview/src/main/AndroidManifest.xml | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/mobile/android/geckoview/src/main/AndroidManifest.xml b/mobile/android/geckoview/src/main/AndroidManifest.xml
index a76b6a4754b6..7a2f30708fc3 100644
--- a/mobile/android/geckoview/src/main/AndroidManifest.xml
+++ b/mobile/android/geckoview/src/main/AndroidManifest.xml
@@ -6,20 +6,32 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.mozilla.geckoview">
+<!--#ifdef MOZ_ANDROID_NETWORK_STATE-->
+ <!--
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ -->
+<!--#endif-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+<!--#ifdef MOZ_ANDROID_LOCATION-->
+ <!--
<uses-feature
android:name="android.hardware.location"
android:required="false"/>
<uses-feature
android:name="android.hardware.location.gps"
android:required="false"/>
+ -->
+<!--#endif-->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false"/>
+<!--#ifdef MOZ_WEBRTC-->
+ <!-- TODO preprocess AndroidManifest.xml so that we can
+ conditionally include WebRTC permissions based on MOZ_WEBRTC. -->
+ <!--
<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
@@ -28,14 +40,16 @@
android:required="false"/>
<uses-feature
- android:name="android.hardware.audio.low_latency"
+ android:name="android.hardware.camera.any"
android:required="false"/>
<uses-feature
- android:name="android.hardware.microphone"
+ android:name="android.hardware.audio.low_latency"
android:required="false"/>
<uses-feature
- android:name="android.hardware.camera.any"
+ android:name="android.hardware.microphone"
android:required="false"/>
+ -->
+<!--#endif-->
<!-- GeckoView requires OpenGL ES 2.0 -->
<uses-feature
1
0

[tor-browser/tor-browser-86.0b5-10.5-1] Bug 32658: Create a new MAR signing key
by gk@torproject.org 04 Feb '21
by gk@torproject.org 04 Feb '21
04 Feb '21
commit 0b846be1dddac074284735fe808a2d1a3824f4be
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Jan 17 12:54:31 2020 +0000
Bug 32658: Create a new MAR signing key
It's time for our rotation again: Move the backup key in the front
position and add a new backup key.
Bug 33803: Move our primary nightly MAR signing key to tor-browser
Bug 33803: Add a secondary nightly MAR signing key
---
.../update/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
toolkit/mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der b/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der
index 44fd95dcff89..d579cf801e1a 100644
Binary files a/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der and b/toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der differ
diff --git a/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der b/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der
index 90f8e6e82c63..7cbfa77d06e7 100644
Binary files a/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der and b/toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der differ
diff --git a/toolkit/mozapps/update/updater/release_primary.der b/toolkit/mozapps/update/updater/release_primary.der
index 1d94f88ad73b..0103a171de88 100644
Binary files a/toolkit/mozapps/update/updater/release_primary.der and b/toolkit/mozapps/update/updater/release_primary.der differ
diff --git a/toolkit/mozapps/update/updater/release_secondary.der b/toolkit/mozapps/update/updater/release_secondary.der
index 474706c4b73c..fcee3944e9b7 100644
Binary files a/toolkit/mozapps/update/updater/release_secondary.der and b/toolkit/mozapps/update/updater/release_secondary.der differ
1
0