tbb-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 18606 discussions
commit 77e609495b917c74791cb868b72d7cb1cb8ec4fc
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Jan 16 07:57:11 2021 +0000
Fix up 10.5a7 Changelog
---
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 5bd6f12..8801910 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,23 +1,27 @@
Tor Browser 10.5a7 -- January 19 2021
* All Platforms
* Update NoScript to 11.1.8
- * Bug 40165: Update zstd to 1.4.8 [tor-browser-build]
* Bug 40204: Update Tor to 0.4.5.3-rc
* Translations update
* Windows + OS X + Linux
+ * Update Firefox to 78.6.1esr
* Bug 40287: Switch DDG search from POST to GET [tor-browser]
* Bug 40297: Rebase 10.5 patches onto 78.6.1esr [tor-browser]
* Android
* Bug 40036: Rebase patches onto v70.0.11 [android-components]
* Bug 40134: Rebase patches onto v85.0.0-beta.7 [fenix]
* Bug 40293: Rebase patches onto 85.0b9-build1 [tor-browser]
+ * Bug 40165: Update zstd to 1.4.8 [tor-browser-build]
* OS X
* Bug 40262: Browser tabs crashing on the new Macbooks with the M1 chip [tor-browser]
* Build System
* All Platforms
- * Bug 40194: Remove osname part in cbindgen filename
+ * Bug 40194: Remove osname part in cbindgen filename [tor-browser-build]
* Android
- * Bug 40162: Build Fenix instrumented tests apk
+ * Bug 40162: Build Fenix instrumented tests apk [tor-browser-build]
+ * 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 40195: repo.spring.io is not usable anymore [tor-browser-build]
Tor Browser 10.0.8 -- January 12 2021
1
0

16 Jan '21
commit bd6ab3dd91d6e993775f8522ea7f71482b61e77f
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Sat Jan 16 00:54:37 2021 +0000
Update allowed_addons.json
---
projects/tor-browser/allowed_addons.json | 210 +++++++++++++++----------------
1 file changed, 105 insertions(+), 105 deletions(-)
diff --git a/projects/tor-browser/allowed_addons.json b/projects/tor-browser/allowed_addons.json
index 59f4517..b6221cd 100644
--- a/projects/tor-browser/allowed_addons.json
+++ b/projects/tor-browser/allowed_addons.json
@@ -17,7 +17,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/13/13299/13299734.png?mo…"
}
],
- "average_daily_users": 532335,
+ "average_daily_users": 557182,
"categories": {
"android": [
"experimental",
@@ -237,10 +237,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.5643,
- "bayesian_average": 4.562593737590973,
- "count": 3156,
- "text_count": 1045
+ "average": 4.562,
+ "bayesian_average": 4.5603163051620115,
+ "count": 3242,
+ "text_count": 1071
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/darkreader/reviews/",
"requires_payment": false,
@@ -334,7 +334,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/darkreader/",
- "weekly_downloads": 30532
+ "weekly_downloads": 25347
},
"notes": null
},
@@ -350,7 +350,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/5/5474/5474073.png?modif…"
}
],
- "average_daily_users": 738238,
+ "average_daily_users": 731941,
"categories": {
"firefox": [
"privacy-security"
@@ -480,10 +480,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.6134,
- "bayesian_average": 4.610851576716928,
- "count": 2139,
- "text_count": 550
+ "average": 4.615,
+ "bayesian_average": 4.612461607979137,
+ "count": 2179,
+ "text_count": 554
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/https-everywhere/reviews/",
"requires_payment": false,
@@ -516,7 +516,7 @@
],
"type": "extension",
"url": "https://www.eff.org/https-everywhere",
- "weekly_downloads": 15301
+ "weekly_downloads": 17926
},
"notes": null
},
@@ -532,7 +532,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/6/6937/6937656.png?modif…"
}
],
- "average_daily_users": 197484,
+ "average_daily_users": 199663,
"categories": {
"android": [
"security-privacy"
@@ -745,10 +745,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.7993,
- "bayesian_average": 4.794509964201113,
- "count": 1186,
- "text_count": 304
+ "average": 4.7995,
+ "bayesian_average": 4.794687251543521,
+ "count": 1202,
+ "text_count": 305
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/decentraleyes/reviews/",
"requires_payment": false,
@@ -784,7 +784,7 @@
"ru": "Защищает Вас от отслеживания через «бесплатные», централизованные CDN. Предотвращает отслеживание через множество запросов к CDN (а-ля GHL, MaxCDN, YandexCDN и т.п.), «доставляя» локальные файлы, чтобы не ломать сайты. Дополняет контент-фильтры.",
"sv-SE": "Skyddar dig mot att spåras av \"gratis\" centraliserad innehållsleverans. Det hindrar att förfrågningar görs till nätverk som Google Hosted Libraries och tillhandahåller lokala filer, så att sidor inte går sönder. Kompletterar vanliga blockerare.",
"tr": "Sizi içerik dağıtımıyla yapılan merkezi ve \"ücretsiz\" takipten korur. Google Yerleşimli Kütüphaneler gibi ağlara erişimi engelleyip bunlar yerine siteler için gerekli yerel dosyaları sunar. Olağan içerik engelleyicileri işlevsel olarak tamamlar.",
- "uk": "Захищає вас від стеження \"безкоштовними\", централізованими мережами доставки контенту. Блокує безліч запитів до мереж як-от Google Hosted Libraries, й взамін надає локальні файли для забезпечення справності сайтів. Доповнює звичні блокатори контенту.",
+ "uk": "Захищає вас від стеження \"безкоштовними\", централізованими мережами доставки контенту. Блокує безліч запитів до мереж, як-от Google Hosted Libraries, взамін надає локальні файли для забезпечення справності сайтів. Доповнює звичні блокатори контенту.",
"zh-CN": "保护您免受集中式的内容交付网络(CDN)的跟踪。它可以拦截许多种链向 CDN 的请求,转而指向本地提供的文件,从而防止网站功能受损。辅助常规的内容过滤规则。",
"zh-TW": "保護您不受「免費」、中心化的內容傳遞網路(CDN)的追蹤。此附加元件可防止您的瀏覽器送出請求到 Google Hosted Libraries 這類的服務,並在本機提供程式庫以達到相同的效果,而不造成網頁錯誤。可補充一般內容封鎖器的功能。"
},
@@ -843,7 +843,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/decentraleyes/",
- "weekly_downloads": 4997
+ "weekly_downloads": 5986
},
"notes": null
},
@@ -859,7 +859,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/5/5474/5474073.png?modif…"
}
],
- "average_daily_users": 952327,
+ "average_daily_users": 957110,
"categories": {
"android": [
"security-privacy"
@@ -871,7 +871,7 @@
"contributions_url": "https://www.paypal.me/SupportEFF?utm_content=product-page-contribute&utm_me…",
"created": "2014-05-01T18:23:16Z",
"current_version": {
- "id": 5112079,
+ "id": 5147400,
"compatibility": {
"firefox": {
"min": "52.0",
@@ -882,19 +882,19 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/privacy-badger17/versions…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/privacy-badger17/versions…",
"files": [
{
- "id": 3656444,
- "created": "2020-10-07T17:10:45Z",
- "hash": "sha256:da9d488a9ee75347b73931a7d0136540292cd3db8aa0bfe4c273503291f7019e",
+ "id": 3691765,
+ "created": "2020-12-09T22:01:55Z",
+ "hash": "sha256:635ded379b5c3259d7bf0997689215bcb0f1bbb77f9289f33b0c01b0cddc7ff0",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 1240482,
+ "size": 1277059,
"status": "public",
- "url": "https://addons.mozilla.org/android/downloads/file/3656444/privacy_badger-20…",
+ "url": "https://addons.mozilla.org/android/downloads/file/3691765/privacy_badger-20…",
"permissions": [
"tabs",
"http://*/*",
@@ -1330,10 +1330,10 @@
"url": "http://www.gnu.org/licenses/gpl-3.0.html"
},
"release_notes": {
- "en-US": "<ul><li>Disabled learning (by default) to address privacy concerns. Visit <a href=\"https://outgoing.prod.mozaws.net/v1/dd9daec91f441e755b8ec63a96a996dbbda9efa…" rel=\"nofollow\">https://www.eff.org/badger-evolution</a> to learn more.</li><li>Added support for Global Privacy Control, a new specification that lets you tell companies you'd like to opt out of data sharing and selling. Visit <a href=\"https://outgoing.prod.mozaws.net/v1/f5433e6e384e33b2921d74ea02a8ada23fd2a7a…" rel=\"nofollow\">https://globalprivacycontrol.org/</a> to learn more.</li><li>Added a new section to the options page to display the browser settings that Privacy Badger overrides for privacy reasons</li><li>Fixed various site breakages</li><li>Improved translations (Simplified Chinese, Dutch, Finnish, Hebrew, Italian, Russian, Spanish, Ukrainian)</li></ul>"
+ "en-US": "<ul><li>Added a direct link to widget content to replacements for widgets like YouTube, Vimeo, SoundCloud and Spotify. You can click this link to watch a video (for example) without sharing the page you are on with the video provider. You can also right-click the link to copy the link URL.</li><li>Fixed \"fbclid\" tracking parameter removal on Facebook</li><li>Enabled Google Search link unwrapping on Firefox for Android</li><li>Fixed various site breakages</li><li>Improved translations (Dutch, Esperanto, French, German, Hebrew, Polish, Russian, Swedish, Turkish, Ukrainian)</li></ul>"
},
"reviewed": null,
- "version": "2020.10.7"
+ "version": "2020.12.10"
},
"default_locale": "en-US",
"description": {
@@ -1357,7 +1357,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2020-10-08T08:20:41Z",
+ "last_updated": "2020-12-14T10:25:28Z",
"name": {
"en-US": "Privacy Badger"
},
@@ -1403,10 +1403,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.7821,
- "bayesian_average": 4.778771863974202,
- "count": 1707,
- "text_count": 408
+ "average": 4.7854,
+ "bayesian_average": 4.782091117459344,
+ "count": 1743,
+ "text_count": 412
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/privacy-badger17/reviews/",
"requires_payment": false,
@@ -1425,7 +1425,7 @@
"tags": [],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/privacy-badger17/",
- "weekly_downloads": 15338
+ "weekly_downloads": 39119
},
"notes": null
},
@@ -1441,7 +1441,7 @@
"picture_url": null
}
],
- "average_daily_users": 4915921,
+ "average_daily_users": 4880622,
"categories": {
"android": [
"security-privacy"
@@ -1453,7 +1453,7 @@
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
"current_version": {
- "id": 5135389,
+ "id": 5156717,
"compatibility": {
"firefox": {
"min": "55.0",
@@ -1464,19 +1464,19 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/ublock-origin/versions/51…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/ublock-origin/versions/51…",
"files": [
{
- "id": 3679754,
- "created": "2020-11-17T13:08:46Z",
- "hash": "sha256:d9eef701b99866565708fe69b5855c1634187630e9e223e810f10e482545e6c0",
+ "id": 3701081,
+ "created": "2020-12-29T13:58:02Z",
+ "hash": "sha256:5b94fd7f749319a6ff6d83dd20b05b29e733446465aff2ab7669499a3e8fb9cc",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 2801972,
+ "size": 2748800,
"status": "public",
- "url": "https://addons.mozilla.org/android/downloads/file/3679754/ublock_origin-1.3…",
+ "url": "https://addons.mozilla.org/android/downloads/file/3701081/ublock_origin-1.3…",
"permissions": [
"dns",
"menus",
@@ -1532,10 +1532,10 @@
"url": "http://www.gnu.org/licenses/gpl-3.0.html"
},
"release_notes": {
- "en-US": "See <a href=\"https://outgoing.prod.mozaws.net/v1/ad6e491ded735345270ee88f63016f80b30a14a…" rel=\"nofollow\">release notes</a>.\n\n<b>New:</b>\n\n<b>Click-to-load</b>\n\nSupport to replace embedded frames with a click-to-load widget. Examples of usage:\n\n<code>||<a href=\"https://outgoing.prod.mozaws.net/v1/6f77a09441a6af61d6a5a78db00417d7f6fa5ea…" rel=\"nofollow\">youtube.com/embed/$3p,frame,redirect=click2load.html</a>\n||<a href=\"https://outgoing.prod.mozaws.net/v1/5d656ee5ac41d8489285a0dc824f318ad247715…" rel=\"nofollow\">scribd.com/embeds/$3p,frame,redirect=click2load.html</a>\n||<a href=\"https://outgoing.prod.mozaws.net/v1/c21551ebf05dc74e4faf00f50497b02fb52b8c8…
p%3A//player.vimeo.com/video/%243p%2Cframe%2Credirect=click2load.html\" rel=\"nofollow\">player.vimeo.com/video/$3p,frame,redirect=click2load.html</a></code>\n\nUsers of medium mode can experiment with a redirect rule to reveal embedded frames in a page:\n\n<code>*$3p,frame,redirect-rule=click2load.html</code>\n\nOr if you want to have click-to-load only for embedded widgets from specific origins being blocked (reminder: <a href=\"https://outgoing.prod.mozaws.net/v1/82e9714a02fcaa78100672185283fe1c7cbdb5f…" rel=\"nofollow\"><code>redirect-rule</code></a> does not create a block filter):\n\n<code> ||<a href=\"https://outgoing.prod.mozaws.net/v1/ada5d641241ba08f41ca8e2e95aebee8f706b1e…" rel=\"nofollow\">youtube.com/embed/$3p,frame,redirect-rule=click2load.html</a></code>\n\n<b>Changes:</
b>\n\nResources redirected to local, neutered versions will no longer be collapsed as would occur if those resources were only blocked. This change is to enable implementation of the new click-to-load feature.\n\nCloud storage compression is now enabled by default.\n\n<b>Closed as fixed:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/d9f510b2fb029955173d9be41f90545747de359…" rel=\"nofollow\">Unable to scroll down to the last line in My Filters pane on Firefox for Android</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/d700dd030a4e03713d042957c88336b36bd6ba0…" rel=\"nofollow\">\"Home\" button on Strict blocking page works incorrectly in some cases</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/84c6f75ee567b34cd4aa3aec1a6f31cddf583f0…
ckOrigin/uBlock-issues/issues/1281\" rel=\"nofollow\">Implement a version of \"{{origin}}\" that uses the whole URL and not just the domain</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/62d1c11a39a31be9bc951a6d4aaa723368205a3…" rel=\"nofollow\">cosmetic filter <code>## selector</code> is valid in element picker only</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/818f69764248823cab44bd9117c37f456562a8c…" rel=\"nofollow\">Implement <code>$queryprune</code> parameter</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/c79eb691e9a7fc0a59d72e00e29b986bf686c89…" rel=\"nofollow\">Calling callback if provided for google analytics mock</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/5e6a994e0da5171446cff1a75b87a
efb329f7d82397537a3fdd0a94ac5590717/https%3A//github.com/gorhill/uBlock/iss…" rel=\"nofollow\">Redirection syntax issue</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/5d2e7632a8795a7c45baab376148f651eec9b2a…" rel=\"nofollow\">Use user styles to collapse the placeholder of blocked resources</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/b07e12c0e3d2f25d7675fa413bfe53d87e21245…" rel=\"nofollow\">Make load-on-demand smarter for blocked large media elements</a></li></ul>\n<b>Notable commits with no entry in issue tracker:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/f7a3990dd4ed5c5e5108863ab916d03ebf59def…" rel=\"nofollow\">Work around Firefox's <code>data:</code> favIconUrl leak</a></li><li
><a href=\"https://outgoing.prod.mozaws.net/v1/6d652733de4a3b67966235794851835c0738a13…" rel=\"nofollow\">Make json-prune scriptlet also trap Response.json() calls</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/3e21e48016cc0cc59127b5ba039722b18a8bedb…" rel=\"nofollow\">Incrementally improve static filtering parser</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/300d566bae935dfe7caa7f26a6f449120fc0d16…" rel=\"nofollow\">Coallesce origin hit filters into their own bucket</a><ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/90c37955cca74165527bf305c54e5df68b4a180…
e70577509eb9bba5b1737223d42329\" rel=\"nofollow\">Allow <code>domain=</code> with entity values into pre-test buckets</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/7108e88d163783823d57170458f542c706c7e83…" rel=\"nofollow\">Enable origin-hit coalescing optimisation for modifier filters</a></li></ul></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/475c486ecbde642be209825abb7fd6fe36366ce…" rel=\"nofollow\">Re-classify <code>redirect=</code> option as a modifier option</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/ef8c8465e5abf4f11c31c8a4c92ec262be7e889…" rel=\"nofollow\">Improve token extraction from regex-based filters</a></li><li><a
href=\"https://outgoing.prod.mozaws.net/v1/6d598749fe7ac25e19168f52d44d4e984f8f7ce…" rel=\"nofollow\">Improve specificity slider in element picker</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/c794932ff392735e9a64897732e68373cf9a334…" rel=\"nofollow\">Use a CodeMirror editor instance in element picker</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/54ee032bd2c27f255a30badca5c689591784376…" rel=\"nofollow\">Add support for click-to-load of embedded frames</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/ae0b4b1e1056107154420d9e267976afc4c3b4d…
6c3052a407b9802af\" rel=\"nofollow\">Minor improvements to syntax highlight of static filters</a></li></ul>\n<a href=\"https://outgoing.prod.mozaws.net/v1/e68ac420535993cfc64cadf07cb49eb66dcce14…" rel=\"nofollow\">Commits history since 1.30.6</a>."
+ "en-US": "<a href=\"https://outgoing.prod.mozaws.net/v1/9fa7d3c9ad42a6b694799cc29274f9b7089f1e6…" rel=\"nofollow\">Complete release notes</a>.\n\n<b>Closed as fixed:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/396d45d7f82e1bf630b3f16ab1f6be4d60ae2d0…" rel=\"nofollow\">Problems with asterisk in the destination of hostname-based rules</a></li></ul>\n<a href=\"https://outgoing.prod.mozaws.net/v1/345396c53b050d1081014dc73d56f95d30eb255…" rel=\"nofollow\">Commits history since 1.32.2</a>."
},
"reviewed": null,
- "version": "1.31.0"
+ "version": "1.32.4"
},
"default_locale": "en-US",
"description": {
@@ -1625,7 +1625,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2020-12-12T19:45:13Z",
+ "last_updated": "2021-01-10T17:45:12Z",
"name": {
"ar": "uBlock Origin",
"bg": "uBlock Origin",
@@ -1770,10 +1770,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.7308,
- "bayesian_average": 4.730368456265662,
- "count": 13011,
- "text_count": 4374
+ "average": 4.7336,
+ "bayesian_average": 4.733167386436881,
+ "count": 13174,
+ "text_count": 4396
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/ublock-origin/reviews/",
"requires_payment": false,
@@ -1827,7 +1827,7 @@
"tags": [],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/ublock-origin/",
- "weekly_downloads": 117604
+ "weekly_downloads": 118723
},
"notes": null
},
@@ -1843,7 +1843,7 @@
"picture_url": null
}
],
- "average_daily_users": 44743,
+ "average_daily_users": 54258,
"categories": {
"android": [
"photos-media"
@@ -1956,10 +1956,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.5098,
- "bayesian_average": 4.504325143252171,
- "count": 969,
- "text_count": 368
+ "average": 4.5077,
+ "bayesian_average": 4.502207031980669,
+ "count": 979,
+ "text_count": 370
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/video-background-play-fix/re…",
"requires_payment": false,
@@ -1984,7 +1984,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/video-background-play-fix/",
- "weekly_downloads": 35
+ "weekly_downloads": 63
},
"notes": null
},
@@ -2000,7 +2000,7 @@
"picture_url": null
}
],
- "average_daily_users": 97046,
+ "average_daily_users": 95297,
"categories": {
"android": [
"experimental",
@@ -2139,9 +2139,9 @@
"category": "recommended"
},
"ratings": {
- "average": 4.4965,
- "bayesian_average": 4.478095502811583,
- "count": 286,
+ "average": 4.4948,
+ "bayesian_average": 4.476468114105913,
+ "count": 291,
"text_count": 81
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/privacy-possum/reviews/",
@@ -2167,7 +2167,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/privacy-possum/",
- "weekly_downloads": 1304
+ "weekly_downloads": 1408
},
"notes": null
},
@@ -2183,7 +2183,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/12/12929/12929064.png?mo…"
}
],
- "average_daily_users": 150262,
+ "average_daily_users": 157802,
"categories": {
"android": [
"photos-media",
@@ -2197,7 +2197,7 @@
"contributions_url": "https://www.paypal.me/ArminSebastian/5?utm_content=product-page-contribute&…",
"created": "2017-06-17T15:23:33Z",
"current_version": {
- "id": 5146105,
+ "id": 5157708,
"compatibility": {
"firefox": {
"min": "68.0",
@@ -2208,19 +2208,19 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/search_by_image/versions/…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/search_by_image/versions/…",
"files": [
{
- "id": 3690470,
- "created": "2020-12-07T19:45:57Z",
- "hash": "sha256:2987a5f9c9b043de969f166d8f2275e3c2147fe2e3d186eb8a13f8cc5bd3c45d",
+ "id": 3702070,
+ "created": "2021-01-01T08:38:36Z",
+ "hash": "sha256:6f8f8d89ad294069232dff6a8a076763466c8d594289a74310dd8e8805c2cda7",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 639063,
+ "size": 639916,
"status": "public",
- "url": "https://addons.mozilla.org/android/downloads/file/3690470/search_by_image-3…",
+ "url": "https://addons.mozilla.org/android/downloads/file/3702070/search_by_image-3…",
"permissions": [
"contextMenus",
"storage",
@@ -2271,7 +2271,7 @@
"en-US": "Learn more about this release from the <a href=\"https://outgoing.prod.mozaws.net/v1/034fc31c913b4c441795892fe3d65db9f7edbe6…" rel=\"nofollow\">changelog</a>."
},
"reviewed": null,
- "version": "3.4.2"
+ "version": "3.4.3"
},
"default_locale": "en-US",
"description": {
@@ -2293,7 +2293,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2020-12-08T09:48:37Z",
+ "last_updated": "2021-01-05T08:57:27Z",
"name": {
"en-US": "Search by Image"
},
@@ -2405,10 +2405,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.6575,
- "bayesian_average": 4.650311244599122,
- "count": 765,
- "text_count": 161
+ "average": 4.6604,
+ "bayesian_average": 4.653397289169066,
+ "count": 798,
+ "text_count": 168
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/search_by_image/reviews/",
"requires_payment": false,
@@ -2443,7 +2443,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/search_by_image/",
- "weekly_downloads": 3363
+ "weekly_downloads": 8987
},
"notes": null
},
@@ -2466,7 +2466,7 @@
"picture_url": null
}
],
- "average_daily_users": 25981,
+ "average_daily_users": 31964,
"categories": {
"android": [
"other"
@@ -2748,10 +2748,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.4545,
- "bayesian_average": 4.4488466955050585,
- "count": 924,
- "text_count": 250
+ "average": 4.4492,
+ "bayesian_average": 4.443594465372142,
+ "count": 944,
+ "text_count": 254
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/google-search-fixer/reviews/",
"requires_payment": false,
@@ -2770,7 +2770,7 @@
"tags": [],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/google-search-fixer/",
- "weekly_downloads": 45
+ "weekly_downloads": 69
},
"notes": null
},
@@ -2786,7 +2786,7 @@
"picture_url": "https://addons.cdn.mozilla.net/user-media/userpics/0/0/143.png?modified=150…"
}
],
- "average_daily_users": 411625,
+ "average_daily_users": 407188,
"categories": {
"android": [
"performance",
@@ -2800,7 +2800,7 @@
"contributions_url": "https://www.paypal.me/NoScript?utm_content=product-page-contribute&utm_medi…",
"created": "2005-05-13T10:51:32Z",
"current_version": {
- "id": 5147387,
+ "id": 5161029,
"compatibility": {
"firefox": {
"min": "59.0",
@@ -2811,19 +2811,19 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/noscript/versions/5147387",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/noscript/versions/5161029",
"files": [
{
- "id": 3691752,
- "created": "2020-12-09T21:34:16Z",
- "hash": "sha256:3e3e00026db6a65cd5eebbe4a2c214fd7ef437c8f4d17fa591c85f61eab9d1e5",
+ "id": 3705391,
+ "created": "2021-01-07T22:41:19Z",
+ "hash": "sha256:86bcf1540cdfa04614288fb6ebb1b7f37dc962f233641ebb9c6e8827a0123870",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 602842,
+ "size": 628730,
"status": "public",
- "url": "https://addons.mozilla.org/android/downloads/file/3691752/noscript_security…",
+ "url": "https://addons.mozilla.org/android/downloads/file/3705391/noscript_security…",
"permissions": [
"contextMenus",
"storage",
@@ -2870,10 +2870,10 @@
"url": "http://www.gnu.org/licenses/gpl-2.0.html"
},
"release_notes": {
- "en-US": "(cc @lastknight, @raistolo)v 11.1.6\n============================================================\nx Better handling of concurrent prompts issues (thanks\n billarbor for reporting)\nx Remove z-index boosting from ancestors when placeholder is\n collapsed or replaced (issue #162)\nx Fixed permission keyboard shortcuts being triggered with\n modifiers like CTRL (thanks barbaz for report)\nx More accurate blockage reporting, with better filtering of\n page's own CSP effects\nx [UI] Fixed bug in CUSTOM sites filtering (thanks barbaz\n for reporting)\nx Fixed bug in automatic HTML events build-time updates\nx Updated HTML events\nx Updated TLDs\nx [L10n] Updated sv_SE\nx Better handling 0 width / 0 height media placeholders"
+ "en-US": "v 11.1.8\n============================================================\nx [XSS] Fix for old pre-screening optimization exploitable\nto bypass the filter in recent browsers - thanks Tsubasa\nFUJII (@reinforchu) for reporting\nx Replace DOM-based entity decoding with the he.js pure JS\nlibrary\nx Updated copyright statement\nx Updated browser-polyfill.js\nx Removed obsolete fastclick.js dependency\nx [l10n] Updated de (thanks ib and Musonius)\nx Updated TLDs"
},
"reviewed": null,
- "version": "11.1.6"
+ "version": "11.1.8"
},
"default_locale": "en-US",
"description": {
@@ -2923,7 +2923,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2020-12-10T21:35:10Z",
+ "last_updated": "2021-01-15T17:30:09Z",
"name": {
"de": "NoScript",
"el": "NoScript",
@@ -3011,10 +3011,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.5317,
- "bayesian_average": 4.530138906447172,
- "count": 3421,
- "text_count": 2374
+ "average": 4.5418,
+ "bayesian_average": 4.5402139765882055,
+ "count": 3424,
+ "text_count": 2366
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/noscript/reviews/",
"requires_payment": false,
@@ -3070,7 +3070,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/noscript/",
- "weekly_downloads": 10596
+ "weekly_downloads": 10849
},
"notes": null
},
@@ -3086,7 +3086,7 @@
"picture_url": null
}
],
- "average_daily_users": 127980,
+ "average_daily_users": 126953,
"categories": {
"android": [
"performance",
@@ -3225,10 +3225,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.1117,
- "bayesian_average": 4.107520342079109,
- "count": 1137,
- "text_count": 545
+ "average": 4.1056,
+ "bayesian_average": 4.101394551282457,
+ "count": 1146,
+ "text_count": 551
},
"ratings_url": "https://addons.mozilla.org/en-US/android/addon/youtube-high-definition/revi…",
"requires_payment": false,
@@ -3266,7 +3266,7 @@
],
"type": "extension",
"url": "https://addons.mozilla.org/en-US/android/addon/youtube-high-definition/",
- "weekly_downloads": 1947
+ "weekly_downloads": 1939
},
"notes": null
}
1
0

15 Jan '21
commit 72b79491854051f2d027f4dde7c59d46b4985cab
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Jan 15 18:41:40 2021 +0000
Bug 40204: Update Tor to 0.4.5.3-rc
---
projects/tor/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/tor/config b/projects/tor/config
index 42c5a1b..c564928 100644
--- a/projects/tor/config
+++ b/projects/tor/config
@@ -1,6 +1,6 @@
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-version: 0.4.5.2-alpha
+version: 0.4.5.3-rc
git_hash: 'tor-[% c("version") %]'
git_url: https://git.torproject.org/tor.git
git_submodule: 1
1
0

15 Jan '21
commit 3a4d431025b4f673c80b372af4dabdd07b15bbfa
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Jan 15 19:27:01 2021 +0000
Release preparations for 10.5a7
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 | 348 ++++++++++-----------
projects/geckoview/config | 4 +-
projects/tba-translation/config | 2 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 22 ++
projects/tor-browser/config | 4 +-
8 files changed, 209 insertions(+), 187 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index 7fa2ba5..b00214e 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: 70.0.0
+ android_components_version: 70.0.11
torbrowser_branch: 10.5
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 14
+ gradle_dependencies_version: 15
# 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 b513cbe..a050124 100644
--- a/projects/android-components/gradle-dependencies-list.txt
+++ b/projects/android-components/gradle-dependencies-list.txt
@@ -436,12 +436,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.…
-7e8ab993e6e5d1a705f1879476873094402b3759a1c1eecd429a5d5a2a727108 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
-14bfd8b909f47d082843c487bc55146de8fe59e64bfd7ffd9e88e8a01aa358d6 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
+e2b9b284bad82ab05baf09bcf628b5ce9848efef5c78eca573b13f02d7339ddf | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
+89d6809df4e7dff26cb068199d0afd6112e388605dcb1fa12bd2e36dde947954 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
0bfaeb53dcf5df0a6b816a1950d8b1bd615317a472103b27b61a6a411d853055 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/86…
fd7c6e0136dfbe5357da4bdc749a55d8bb36abd5a9ffeb1fe4497784f373c242 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/86…
-c0846392b7f8a8762122f9a9bc1221e311226e84e015cfaa2f057b0437a9ac97 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20201…
-8fae8d4945c9e5e5ca6d32d5e0f9d0b4a4c8cd02ede6c361b7c2cdc960e008c0 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20201…
+fcdfe4029a5f82ac8a86c6452e3f5b57994bb1025ebb8143c12a436a7f07d359 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20210…
+fd621684f18690a812c81438e100d5d5b9d67fb912f243d9e7625ffd691ee672 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.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 c9f6f3b..c76d3cf 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -8,13 +8,13 @@ gpg_keyring: torbutton.gpg
variant: Beta
var:
- fenix_version: 85.0.0b1
+ fenix_version: 85.0.0b7
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: 16
+ gradle_dependencies_version: 17
# 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 a4edaad..0c8d226 100644
--- a/projects/fenix/gradle-dependencies-list.txt
+++ b/projects/fenix/gradle-dependencies-list.txt
@@ -899,180 +899,180 @@ 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…
-eb10e41437ff99e9f9bc482456da68b7c662f4289a31521e36058bc3110e9f22 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-98f9708a11f1749e9fd607f0dda6599b7956df536490c37d7b38f54f877dda4d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-96ba207d21b7f3ea35ed0d73e5a9ddc75235b7f047977fd862b653352b1f2561 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/70.…
-05012acf0559c323ff4a7b3e76ac5ab889c312f82fac9338ebbd5db4320eac14 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/70.…
-34610d714cc8dab8d5c71ae366b01f0c07a8e36e3b3434e998e075d5c44894be | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-b2ece51e32d8dfecfee525a98452c7403169b5216a7e073f6f365b28f2149379 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-b14a5255f90d56aad0a6dec8c8e639f90419ffe10babe75ff4ac79f8dae20919 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-6f003402bc7d3ab3b06ba1227813609440e32411803ec6dd5481be9eba512a72 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-f623787a65dabc05dbcc7da70fb6785199603fea2d17c927207cd6f4247a1868 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-14a916cb6a409ef628cf4e5c87d01496c1f536bda5294a6d7b3bc4cf412020a8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-32e2efc670cc240c949b8403ddde5263c118ddd5e12649d5bb1ae2ed71232b8c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/70.0.…
-66b62c2af1e6abb740fa3283773c723af5835f8ea20ad3170ab63f771452788d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/70.0.…
-172f0ac554ef72727bdec8c542da7872013c7168a175e1b10f4116b925c8b78e | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/70.0.0…
-692e16e28d730aea4fe9818eef36c308d8bc661fa2960e152dd5292d5d683e48 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/70.0.0…
-34f9fe3cfd61b9e5817d37214f46211abb57484f95a6da27c479c17070e8ff55 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/70.0.…
-187b27b778529ae4728ae151756bd2a1a25406348173ccd166c3233c8ee35283 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/70.0.…
-e08d94684d14dd3798e59f265703cfcb6de6da3dcd6d9f81292da9f6c33f5243 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/70.0…
-bbc5e0c3f094cd476fde76d115ada9723b93b713b6b9230e9899eac339a5888e | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/70.0…
-b21673f5a221058a61c4d021f40d95e7438741c79a4a9e1ce31a52933ed7a835 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/70.…
-f6e3e7ceee9c4f059abf2bde6f33970d137652ad469503424de01cd213d9ae24 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/70.…
-47cc792a992acd8ee025ca71212a4c2bbdad415fbf4451d87efbad6b3602211c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/70.0.…
-49bebd70e63ef6cbb7e6b46fa174567a1776e5beeb70096baff0225d89ea02e8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/70.0.…
-8e40abe139c33c6a076e4a816b2d3d8013b6d88548b9a32a2f01cc7b86d6e236 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-225a4106236e2c3d66d1d1b5615b16cce5a1009cb28d00271399cb737dd714f3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-a1177224245621239841c962f2357664b8fbeef260fe72c820108363b04a184d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/70…
-9c3abd12f6022a3757ddbb37a191a07a7f65bdb081e1842adf15de4eba1e6c7e | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/70…
-ec32f69d6a2cda56392a125ef387273e7857c6c49aa7831f67151c22a045bbad | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-722d9886a935b9f75c492e767b1118f1448009ff4ff17399d54269fd2557e810 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-ef19a31c3d22e44bed0e626b4d792250a9c4d7691faf3fda1d9104be85f5fe44 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/70.…
-d451eb25453bf0172d173c91b0a8ca23240c90757bddde4f09a59bbefc19a26b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/70.…
-9881d2f4d6781a56c54c4e2147d3b85bb3c12d717ee436f2b7ae0f9098b4c315 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-3fb158ad824b814a5483e379de494194c999bcfb73bedde5be2190d6300222ee | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-f79856dc09b0453fc0a741b7edd90fc87d229953db53eee7bcaa60601e547595 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/70.0.0…
-ce07701607b6c9e29c0f7b268f3f4f7c19d78883a7d1b8e3432e70ec184caf31 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/70.0.0…
-092eb815939df2144215fc6307d6d92e88e36b933cef8d859efd250971b3a3fe | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/70.0…
-cde75df23f34c6c776135d9762028b2a662280f9bd88b4fb8ee638d9869dbe01 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/70.0…
-9e347d0aa834f54c1c22908ec0b7ac41cbd0735879fd0a304aa3f11485c27607 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/70.0.…
-561d4cf4bc284cf577b341af6dd4d134d7f8e0a56de366834b658299802a4879 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/70.0.…
-bba506554ab268585d61cff368090d0588ec9a5c9f352166a406794202591584 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/70.0.0…
-4acd340add6eca7f2d63db3d325f99cb8457966d7371a27e097cac0492412ee2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/70.0.0…
-7c2c2ec4950c09e097ef71cc441d37f4c538ffef5e7d05fd4bdde136748545b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/70.0.0…
-0ef92b6feffebb892c7f2b1a075a0a09c50ec806946cd4267418f53644314434 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/70.0.0…
-cf426a1ee8adf7b0f2ebc718465a3e472286dd5db738b0ca26eed426a4024941 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/70.…
-04c1dd11d4a7258f6e3c99e7805f554df96cdf2b3c4b709f6c18155143b514e6 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/70.…
-33ff3f8d3c6a62879a6029ba88694cfee4121e317046c467bf6a6e24eda3d87c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/70.0.0…
-5f7a2037f5709dcf82220d066bb18b1ec9bc54c3a9dc26de46f92ec8477036e0 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/70.0.0…
-d8ab166f91c99d5abfad741531223b50098e0f881e435aac1981f944d787c75b | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/70…
-49788737e8b097361791dd0318d234e273fdef496ac9b6826fda154fcb7ea572 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/70…
-47bfc83389681525981943ddb45f5d9a5ae059240a0d46f857de3a08a1ef405c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/70.…
-72dc0cb105aff4cc20170d92658bb33ae7497625468934ddaced7739b5d3f0ad | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/70.…
-2c6ed0a189624ff4b740def6314ff9814078e0d71030600380fa35e970324db9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-1e7a10522a2d331609c83edb339b7ffdc64e12a64b959a9bd4368fa255a5953a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-95e9931a0d217e69e0d7ba9b05dbdebfd5bfbe1a9e827fa5a5435913f25b013a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/70…
-874597c5c64c45b5b483bc014f8d753f51016ad372ac031c408ba493f1ad1e1f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/70…
-de07da00795c5736b51bb4f51322532c2b1cdb4904d50954b1d63ce459d884d4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/70.0…
-75f492ba7697f4c9e0b77f8131ec496529d308cdddea4114c15404bdcb413850 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/70.0…
-4444056c3c02e6af3b5b49218732ace935110c0c0a9f3c9314f4c72261206061 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
-8d817fb27e7515f362a5bcce727322b32b3fa73b8e1b07c0e046287cba2cd6b7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
-d600ada270230c5f5447334be483aa55d7b3cc1b4c956d4d2a3fc9837f1c2899 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-a02230264da028ee6552268ee13c9913af1555f653cb6375d549679eccaed4e7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-768d6aae518c92edf969dd169cb0c9c9c49779b165ebd56a38307b1424189362 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-b5b1a9ef937b37ac661072bc92a5af18ed4f761fc903f85ef05d1ecac7d4861a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-d473451da8196ce05f1df3111dd7bc3f6d143691549bf6f809ee35f224c43a8f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-31b4a080ffdaf589ea0f37092b5583876b1de0726704079345bb23ff91ad03dd | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-724a55efb229d844aae59db58b55370022851e0b614110a4935a3e0eb09fdd53 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
-0b421c84583182b97b48f1081cc8cf4667bb47b9023c5a80149edbdc33d8c8ae | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
-b5dcf37f8e9461485c3c7277784fa8ed49e728afefa1725fa64e8052c772ff2a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-54c6b3e2beb7dc24ce1be91b2829e322cd669f6bf7f856da900096dc79525bb5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-b8e7a98b1173bd7f191659f148036d0ca3e56764cfbd2b9bdf55c67916560f76 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/70.0…
-9f64be890784bb467c0a0b41c4f5bb7cf41b00bd6a376254708c1f0848790f60 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/70.0…
-f72b520f9fd36f627d4a0572c62407bebf7c8cbca888429ef89f9c4f317d7a5e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/70.0…
-2cbb621657b69e107c05cda18c2d14f196ab490e34fe3448ecaaf29fd0e99f31 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/70.0…
-5c9656c4ebb350d051226efe1ffaecc309bf0c8395d0f2cbc8ea4720c09a1c47 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/70.0.…
-156afabef938e457b340468d58870983f7eb16dc8d256e12cfe5f89e71e781af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/70.0.…
-db9e59be933617302ee4c9dd6eb5bb9a234a89dadab9c7fd90045963629d58eb | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-4a3922493a368390563e4ef58af8efd4da668f4c834050f3ecf0c0aff12e28d1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-4d6eac696d5d399dfbbf9b297877a31ce6c800d7945e1343aeaf20561edc24da | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/70.…
-95dd998ea43acbe8a8df2241b7b53434c0d6006e4b1c2eae0d88a037de00c7f4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/70.…
-877cd2c04d55a25fd607d1ffe4a5ccc9c5f8049f02fc64ee149412e8cd0ab130 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/70.0.0…
-e21d857d17ff83cdbbe1a62495ddb5ba4061ac3d494473f27b93dda82023883d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/70.0.0…
-33b503b8a2cdb6fdeb695a837a10a35b6f9c12e1f8be72ff73d178dedaf1ea4e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/70.0.0/…
-6cafea88d5a8c4f23b3ff9e43aad07f0fd2cb5fa546bd76d252e501c05a54ec8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/70.0.0/…
-a25a79bc11473dec3e235e53a675862595a9ae47fc62bf2832dffc8b79749986 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/70.0.0/f…
-183209e9b4ad05228638c04897385b209a88e84bd073ddc967529ac6bead0d71 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/70.0.0/f…
-6cca3efef7c58d2504c1fc4bfc17976b9331ff7b0486fb8d2a226d37225554d5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-b23fd37e8b06c8dcb442cf2be5cf22429ffcbd2fec7fbc17ed6c2724230aae89 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-0cc797dcf14dd2deb7c1578375f59b1ddf91a007a2d7a8d1edb46cc0a4148548 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
-9617096d5128748cc117b0d5bbd3ee0a4d5a0e8113aa4a664acbe986be376ff7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
-2746d9ce02f8866e130c0fb08c55a19a4dbc82fc1e2b5941b7e7ee56f6891eb3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/70.0…
-b239644306a0e1488840ef8c6648eeca9e3e685e8657bc106ac827ad7f34249d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/70.0…
-d1e280ae87d73e4c3117a6efaf2fb936651c9876936d82a31d8a980a3a77f7e6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/70.…
-c18393b4b42ee976cb2ca879931733c208aa38982e32d95be413184d3126f2f8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/70.…
-fd26d96692208b08bde84d7136aeeae9d085819dec92ac672a976c5c7ddb5e5f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/70.0.…
-bcdf59b36c15d4cdb4d923903068dec6ffcd28df79a8380d457ad0b7724aaae2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/70.0.…
-522f3a7010b06d93f6ae9b446a487c237e60b19fa82f769943467f865d6df6cc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-5bb7eb70af9e3f75e2c9641405098cab4be13038b2bfae816c49a96e91f863d2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-1298f7da86ae9632d6155c680375e2b9282f2afdac9607644a13556e75adb3a8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-322f0d92d65f4e9a7a49cd27b25754165f94a82237e2ed99e4c50e2c8c742342 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-468732a45ea3b7ccaf0d85650bf5cca036e3eac59964bcc913c8227d5f580697 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-f3ee76e2dcb553e2be857feafe4aa73bf95b4ebd5cb97bfc74dcadf9f838900c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-a15ae366297ba01bcce987364ca54b5f792315c71a6b0b4a2adfe48dc4fd6581 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/70.0.0…
-01904d7c92d412e3670f4d749cebbdddd64705551f13751af4beeb41e8f86821 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/70.0.0…
-08384f77fc05b5de5f0ef98f4135177eff8a9ad93359c2ea3b8ea7aedc03c71f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/70.…
-2a58c5cbccf95ca99c1eccf981e394b227688a8d717370501c7868d595d3d2c8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/70.…
-bf86363ecc6e9e086c85c51a83d32e98ac63e03f70ffa1de6de949702d77de15 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
-e5dd80de9e05380bfbb6abfc4ccae384c839afe4073a5655c44763c74b8fe973 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
-09e67091620ab5dc8ce822d4730644fc6ed73f16155860755af69b4170a221c4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-4568af0e7a50c2848b14d0ed0276e21ed3fece298e20844de0011efe371fb64b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-13caae87a75f12312d6035e7ee41af8aeb82e659189bf3cf8c9f838baf45bd58 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
-cf58fd923b18e4f7e7142cc8b5c2c7ed8953d2c455fa702c9a89468544fcd941 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
-dacaac94c09c15073201e36473f13f489f5154f2cb33fd3c11da33154496d2ed | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-e3b98fcc4e0c899c10d49330b2dec7fc5584b0e83bc7d6af57f9785234c9c377 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-69a01302c41356e0fbb2f92af46f4d8445d1b027ed8da979529181b8957fa596 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/70.0.0/li…
-fb9038c7e5356700b014e954c14edc8a5713ba9c9ad0e80ed34e92ffe032ba5c | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/70.0.0/li…
-cb20c3ce0527f2df1376959e12d4f0283b38b9d3619b9cbbeb0d86e1b9bbd240 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/70.…
-b4567058bfca0ba82703ce6dd5dbca5b816e96b15d2aa697d41f1215f0793884 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/70.…
-8e3dbbb157901a5af8c80326cefd87e8c2e01de232117c8203a666d342dd3348 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-08a5ec324ee08b991c291b1d1273f7007d7dbd203724c81425eedb668bc55e7d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-a2b8dff3b67fe89e5c7c2601fb73a9d19247fcf5bb0dca80a8ca13ebf4457111 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
-422e588fa00998afe0baa2341e264f1b8aed71f11444dfda9fbdb848d6dfa7d4 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
-eafc7345d5de199fb217fb95d6ed60695a17b0f4f0dbba7fe86bf98e386c65ea | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/70.0.0/li…
-8f5c32e60bd7447d348a2a2947f75fdd5d14536a0c9f5a16ab0eb5050340104d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/70.0.0/li…
-64e27638105d46e6c64d5632ae68bab22416d77d5169b68c48499b93855951bf | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-12dfc986bbf89913472211331271d8254f17b659481e477fa129a4f50798312e | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-87fb2783e865e13e7a0b2834c55209c75a8f45ccdd5eb977b27c8cacb1102779 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-19a7c065ea32b2da2c74cc6874f446617e92e670a4cc40a58e8e857f865da2ed | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-e5cc50047401eb5dbc962f9267f6abaf4a36af9b0af9786069165faa9d9109b7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/70.0.…
-083e36a96f777ccfd53df01100a6fb025152f218e642895d22756acb70419fca | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/70.0.…
-8bf7f3f5fa1cf1f46c0292e937200861e3c707335b4baf38eac35fd157452c14 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/70…
-04e824e8e738628ffc4c6bb359621e3741c1e4afe0bf16f569c3568196a5c6ee | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/70…
-4877217ae325ecdc5e6df574f2242e383a2c927ebfaf9064a98334fb4c2212ab | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/70.0…
-c8fb1e4bc0d30572dcad6a384c37e0ebc2f8d9d988be823d9000713c10228d86 | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/70.0…
-3ad9028792a8903f426471a7bc38fc92b3333c5b8c43819d5a34bbf7d5fde477 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-1611b0cbd7806be9ddf054a5764a6bbd96da6f9cdd52022db85ba0c755263e4f | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-98c504148ccbb9712300694f0541bde4a8e3c29ae7f9c75e1adc774a477a0a93 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/70.0.0…
-b2f0ea28543f63683fd907dc55e020fd3e96d9452f6459b9439eb9bfb743eca5 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/70.0.0…
-64160d6f2310044493cf42b19bd661b385c6aeac983a28566b7933717d1dd7ce | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/70.0…
-01759ce48f7d1b4732535014c4e96ca7bbaf7aa467833e217806e947983b5941 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/70.0…
-913a93638ba0f26fb2af2a08c2bf3cd6e8d3359b7e7d896823833f43770cfd3e | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/70.0.0/…
-ccdb71376dc484aba966ef87c4db0f74e106dff3667894b713e7ab57168c14a3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/70.0.0/…
-dece9307fd3323394fd4246ff3a4aa4b09795e0f8e7466de495aaefd9b75cb60 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/70.0…
-4edc3ee8e306483b63722ea3a59e0f7971580ab8782f0181aa7ea5d9542c065a | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/70.0…
-71ae75858321dfddaf5c14ed02cc45bb78777ab7d5e9a75e98d1164a5b8978db | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
-d23677c16459edd2ca49aa805b58fc98be33d7aa8d827bb99239bca85f1c5ab6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
-8639a7b017f074538e46405e947de42614f512bf154c0e10bb823033a399fec3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/70…
-4611cea10ce74e68f4e7bbabe8e2a293b8cd0f9fde3342747444b27658d5bbac | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/70…
-3398018e243a40a5aa1930ea2913319725e401e5c7800006da655b328a7b4e73 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/70.…
-e441697cf03a6674617b8a4763e51a45f75e91a52fa74e37fa835516cbcb1a75 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/70.…
-2dd3d15ef7bcb96cacf3b841cb5ca0640553a258db895169072e81c950eb1da0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-22b833eba0b664e8a523772d58c34cbf92004afbf6cc9206580384473ade490a | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-1275baef6d4d3d0a13c8e2f5a145e82ed22f234b93cd23ba20c3749a901e97ca | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
-5d01266aa1bba16ef4092ba64e7663572f80c111a12463333f7a813cadc90f60 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
-ab202a392ce30bf1e0197f6c4b1aa5f163c56b1850daefb4f2de84a2007912ae | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/70.0.0…
-b0a95949c79bdd97a19a3e930a607ec541abb06fd361a10a5ac78a431117e39c | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/70.0.0…
-927d0c02791b1a93ac702c081f22de47141f21a5e8428923ad0b2bc526b745ec | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/70.0.…
-ffbbe421bb81404d2700f62681d003b161080a4cdac660b0494ad89d9b959064 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/70.0.…
-4ba4df984e557fba95217bbc8fa9a321f7b9b592df75ca4524d29fccb2cec44a | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-a3fbd273c6309691460e9887b06618c9573cac3d8f0d7fa173a28acb43777f49 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-d88f4f899e4534ea55c06ed3699aa86d570a73ca312cd328bc5f5d6a951649c3 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-dbbc0b624a35416cd6e35f1998ced39f821880c710753f16dfd0b70ee9212a5a | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-5e24752108cf29270e74f42ed7479531ad77b8c014093d70bb102159f228174f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/70.…
-084dd0a222fee103596e00a01a974195d7ea54474c84624701edd6f0dd99ac96 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/70.…
-7ec7264a35b13382f84d701fab89daace99c6c8157c6fdc6d15da2361fb4f16b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/70.0.0/ui…
-50cb8a512a6ebb5974b194a148be19b329689063c503487cbe01b6074bf56fe6 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/70.0.0/ui…
-71307c399eb59749c6c25d2a0eb93c61513bc79b6c2c5a3e4dfb70e5077185a2 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/70.0.0/ui-…
-26e516b057dfd88e0e55fd4ae1702eaf271d383086e78be38d97ef9f225d1a8f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/70.0.0/ui-…
-c15cd963cdc54dd257be6f3bf72e797a7d8f93ab6c4d92590dfdd59a468a6078 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/70.0.…
-82027e4094929ec4bb9e5ee61b5e536333025c00975dded304952770d89e0f68 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/70.0.…
-28efed984b2ee3a66ffcf4a60d648ed048fb4f73ba533c73b6567f03d91cd46f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/70.0.0/u…
-35947da6512fd35bd9c4c6ff7569a78bb6f3bf871c1a3e4e330d0774f9bc5405 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/70.0.0/u…
-7e8ab993e6e5d1a705f1879476873094402b3759a1c1eecd429a5d5a2a727108 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
-14bfd8b909f47d082843c487bc55146de8fe59e64bfd7ffd9e88e8a01aa358d6 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
-c0846392b7f8a8762122f9a9bc1221e311226e84e015cfaa2f057b0437a9ac97 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20201…
-8fae8d4945c9e5e5ca6d32d5e0f9d0b4a4c8cd02ede6c361b7c2cdc960e008c0 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20201…
+3569436c9ba384c03364568536a305725964fe637838e53f5ed6a99a6da3bd3f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+4b661bc21cab2c14aba2238a2853f0522d01380db12951be005e1e420d5a3bc8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+96ba207d21b7f3ea35ed0d73e5a9ddc75235b7f047977fd862b653352b1f2561 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/70.…
+28157886da4ccf99ce06ccb80b209ed54975779bb58f61dc88b5e0f0f673362b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/70.…
+d6c4566d67144b0af2adcae6d304ba2748696a15777080c89a311394b5bf4fb4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+9e05b4cb59ed7cc4988101525a58e632530ce09f94d06733a610ddcd048b8782 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+4fd08103a9a1562870c4dca57f30cb6840e5bd40e8788d923176fc7a38df8942 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+f000e2069c929d27c691212ad06acb7a1939ae1d3f87d4feb87394db6613d4a3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+29a1e2f74beaa25677b5b77f03ffecb53ac16ec8f1abfddb8a5f9d5b862e0155 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+886df72a1d533081d14d384137950c178edf43b63e4a7de9b6ac787fd7a64983 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+2647f1f13af46e7abe02bfcd2de2b1855e043d9748b41bc2332829dfce4994af | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/70.0.…
+0dbe48d0357a740a411feeeafa6de885ba4c6b08aadbcb813126d6423c44227b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/70.0.…
+f056dc57918e74739eea08664994efa68c36ee5aaf122fc83a7ca4db9ca8701b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/70.0.1…
+86e73120c80d00b8f033949d87a8c19a1ef85bc0b2d681242557a038ca253ec1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/70.0.1…
+a5c63f0f55f4ebe510d46dffef3e495567bd4ee71b5344200302c0905c55636d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/70.0.…
+d8e6429ab8fdfd44060bcd0e59b0ecfa5f349071c1417f4189c46288891d1f2f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/70.0.…
+e08d94684d14dd3798e59f265703cfcb6de6da3dcd6d9f81292da9f6c33f5243 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/70.0…
+b43ec9b8aacdb1064b7dce7b4b44b604f1c1bcdf13d872cf019573248023bfce | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/70.0…
+b21673f5a221058a61c4d021f40d95e7438741c79a4a9e1ce31a52933ed7a835 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/70.…
+90e08761d2f7d729625f7e674e44a8f0bea334994c4980312c0e50679e5dfbf6 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/70.…
+47cc792a992acd8ee025ca71212a4c2bbdad415fbf4451d87efbad6b3602211c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/70.0.…
+f67046ffac96dade9b511a8846d48afee691bfe4d00f6c4509bd29c1b33c52e8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/70.0.…
+8e40abe139c33c6a076e4a816b2d3d8013b6d88548b9a32a2f01cc7b86d6e236 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+5f0fbe22f843932a35ce9ec5403c23ce8ef8d36537dce773d781901393377fef | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+a1177224245621239841c962f2357664b8fbeef260fe72c820108363b04a184d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/70…
+4133e7508831fd446da2b45e324e3f333e1e344ccb9eb0553831eef8b383a804 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/70…
+ec32f69d6a2cda56392a125ef387273e7857c6c49aa7831f67151c22a045bbad | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+a3c343b963c3f32248aa1bba6dee4d724d8a05e212841580d0ebf1306d0c4ff3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+ec4d9a8073ca7e8150a6538e7990be186e39cbacd88e3bf641e915efd175f18d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/70.…
+6bd22f5d94a9594d22748439bf7313b162919c0a50b08bb6de29af5e79b607e9 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/70.…
+9881d2f4d6781a56c54c4e2147d3b85bb3c12d717ee436f2b7ae0f9098b4c315 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+bddd450a573ad88e262cc7e1ee43a11dc2901a2efd710c497c63f132132f0958 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+e3c085f9de8f49ba0a0c0bebc0b6548eca11fb73acc2ff2a32ae746be5be94b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/70.0.1…
+8b9ca7dad914b9d5437b878845b2263a43ccf6a5138ac59c6e06286f9c813d50 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/70.0.1…
+092eb815939df2144215fc6307d6d92e88e36b933cef8d859efd250971b3a3fe | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/70.0…
+6dfcde57834fb2aa55a02d951fa9e009ee927da0095b9338b44aa5b751168c3c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/70.0…
+bc7f4d903c04b6bdbb1f38ece70cc20abbf569bcc09c94a4b627ec7962d11592 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/70.0.…
+5f737a198d282b5e29c8d852999c0f29f5657ed7ededada980956e8f12e74e3c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/70.0.…
+bba506554ab268585d61cff368090d0588ec9a5c9f352166a406794202591584 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/70.0.1…
+5ad0c8684c42ce4d0122e0c18f368754ab5d22d93cf4ee9ede4b4e9ddcd06187 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/70.0.1…
+7c2c2ec4950c09e097ef71cc441d37f4c538ffef5e7d05fd4bdde136748545b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/70.0.1…
+14147e8d70c99c23dd3a47bb67d6a2a94565258ac9050c7db7329f30a1b62f74 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/70.0.1…
+cf426a1ee8adf7b0f2ebc718465a3e472286dd5db738b0ca26eed426a4024941 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/70.…
+26b3dab372b4e3c47d8b31476308dde6b8a2732dd12140139f70619ab5aaeb34 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/70.…
+33ff3f8d3c6a62879a6029ba88694cfee4121e317046c467bf6a6e24eda3d87c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/70.0.1…
+7334320edc10ef1be78332ace0e44671ae1104e861051e0b27af7bd71193f1b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/70.0.1…
+d8ab166f91c99d5abfad741531223b50098e0f881e435aac1981f944d787c75b | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/70…
+beb73a5765645a014ce36da11c854a33ad675b591fe339b25b37efbd6005c766 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/70…
+47bfc83389681525981943ddb45f5d9a5ae059240a0d46f857de3a08a1ef405c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/70.…
+f93a1d96e62228ceaf9625f7f76e5bf1433d3c3b0e505b51fe09bcaa2b4c049a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/70.…
+62a1aa1bcc076c9833cce320cdb8ca47e94d43ca9a1d42771f165f1c211f49f0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+647ee28f68bd0387ad462778a12446e7866674dd4220d4c43bd340db3dd5af5c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+764d90b9c4eb228b4fb2ea9ba192855d5defbe45b4437a7a50d0af706e631bc6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/70…
+bc0e5e112fdcb79bebf66fd267ba2df3bdc7c14e1abe90d082b98be059078031 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/70…
+6a8bc671bc89a0ecc10601efb9dab1a0eef5c39aa9500e51010f84dcf4146436 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/70.0…
+51c8e3a74d4f3f452dd096665fa5b72998db165fc10db2fd17a3c2b82d4c9f20 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/70.0…
+66c0832cddc17be215807229e71703db6c55031d001063348ec8bf3e17d42612 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
+2cfdf898aee12e6be76687de6de460831296649a9210ed5d0c427925b716fdd3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/7…
+9f3442c8b2499bdb0e0d726f3dfaa10ce3379d299cfdec1aeeb9a4366e0c8abc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+27101039f2d985cf60f1845865fdfcf26e3f2f9327359702092f28949157cec4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+389c2adb2b0b6e105f21fc5de36dce5c5da5f865a15321eed2e32b482ffc34e8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+63381408a026e69e4421e528655ce63d579b7588cade2ba681e597898ad1eddf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+d8c5c6cbf67309b40b83d1e5544dcb0952bfba8e6d9075fd48b5756324bb8e6e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+c5d2dad83c3673f81f983b19b00ec0260e631e31afe63d3e96bad0cf6744f9b9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+562740b33d732b2ec19ec4b1f36649836d1566e7d5eb633abdfad188b1e7bf00 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
+954c7b911c7bdfb48aca5efbf40de24ceae650cd1ae333d6486500c1d703f9db | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/7…
+f9654a3500900d4ff45d89debe9f49947cceb1e4942a96604b18e9d1639fe6fe | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+eb5b85a3aa395682a9c91450311af99bb42881ceceede11da6d7cec1c13ce88a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+b8e7a98b1173bd7f191659f148036d0ca3e56764cfbd2b9bdf55c67916560f76 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/70.0…
+fbda11856a6ba58ba7c64879c6f5e2f2e58c2b69132c278ee1f3a4b58f054be7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/70.0…
+f72b520f9fd36f627d4a0572c62407bebf7c8cbca888429ef89f9c4f317d7a5e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/70.0…
+9b3f3c768df83845ad51d7647f123e89ffb46949a615c540b5a4a5c7863556a2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/70.0…
+b271f5970147d569c83d67e895299fb3a5abff89f67476619d5374cd2a2932fa | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/70.0.…
+13a457334c994900ffdf179762b72a8b36d5f09793f2d719aae7162ff5b55860 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/70.0.…
+db9e59be933617302ee4c9dd6eb5bb9a234a89dadab9c7fd90045963629d58eb | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+ef7fcea24f7120a14142d2f0ff8ba274541bbf378972d0e9b3b6090e7d2f3034 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+1281509ac42b49825fa033af7a4f15bedaf4f2bcaa2261e089ef7b13f9445659 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/70.…
+0ad67e5594e67f2f8ea8e1e8305f4f16f9aeace1d5dc02db11462bae75986f52 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/70.…
+877cd2c04d55a25fd607d1ffe4a5ccc9c5f8049f02fc64ee149412e8cd0ab130 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/70.0.1…
+f4cf81fd413290909fa293247f76f78e41a99bb8cf57e62c9cc4673309861dd8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/70.0.1…
+ed2f94970ede3d0f4c102b56d7c450cce205cfdedeecaf57c22316096da9fcce | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/70.0.11…
+5d1cb851c2e9088abb513585bfc298ca94894e7e811f36510e4d2fb20654432e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/70.0.11…
+4f9728a5e81969dfb248197608cb2e10b81e994a9485dc3c92c3207fd5b0557c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/70.0.11/…
+254679dff9f56eeaddc7cfd788d6d018bd92d8b4887911fa39a4ef6ea881b57a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/70.0.11/…
+c28a9784eda688a1dacac9b8d1ebf839653d57e39d38d9638ad7ba5d235ca007 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+a144bc55feb99beca5412d6dcab195eb758dac44665cfaf614fd571dae8d84f0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+0cc797dcf14dd2deb7c1578375f59b1ddf91a007a2d7a8d1edb46cc0a4148548 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+be3b4ce823b16513c42042ee5223bf2af5f40c605f4f63da50a15e677c7f25b5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+2746d9ce02f8866e130c0fb08c55a19a4dbc82fc1e2b5941b7e7ee56f6891eb3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/70.0…
+176e964e5436f26335e0a5887eb552559f71e687e94dc5d16dd2b7a079d2b6af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/70.0…
+d1e280ae87d73e4c3117a6efaf2fb936651c9876936d82a31d8a980a3a77f7e6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/70.…
+d899da8f0f94071a3e91aa6f172e8c045561ad8b175d09841f16fe867b590063 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/70.…
+fd26d96692208b08bde84d7136aeeae9d085819dec92ac672a976c5c7ddb5e5f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/70.0.…
+4360f9a05d178668806eb3b6da01c8907d490ec1916d8293eaff4330f3ca1199 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/70.0.…
+0352aaf392859af323250f3c41f8e08151e8c44594cf5dbac7d736cb6e387424 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+5e5cdc38562a1257dbacfcc63c54f08e0a6e0671f6d4eff86e7bb614bdcb042b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+1298f7da86ae9632d6155c680375e2b9282f2afdac9607644a13556e75adb3a8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+c73b7c3ec4e3b354ccdc4901e6c0d4b166f7930a4bd7ad3024df90f1de9a4c6d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+468732a45ea3b7ccaf0d85650bf5cca036e3eac59964bcc913c8227d5f580697 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+15c8edd3c072742a51739876dec27ef4ba7daaad654af8f00b3f2ce936086933 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+a15ae366297ba01bcce987364ca54b5f792315c71a6b0b4a2adfe48dc4fd6581 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/70.0.1…
+c8cce2154fcd67132835c5bc9c9129ff2ee580067dabd0200e00fbdd0f8c7090 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/70.0.1…
+08384f77fc05b5de5f0ef98f4135177eff8a9ad93359c2ea3b8ea7aedc03c71f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/70.…
+26510257dbbeea5fdd51a1fcf8e632c6eedabf3d44d2f2274aab419ecc80eaff | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/70.…
+bf86363ecc6e9e086c85c51a83d32e98ac63e03f70ffa1de6de949702d77de15 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
+1402b9c62c302e05e72f7cd028d3af081051d603910975f6232e5285c0ac35e7 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/7…
+09e67091620ab5dc8ce822d4730644fc6ed73f16155860755af69b4170a221c4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+40f717bc038c40594d4971f7a10c3338c46a5c542aea9bcaf043a107b1bbd26e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+13caae87a75f12312d6035e7ee41af8aeb82e659189bf3cf8c9f838baf45bd58 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
+86d7b402289444bee92e961d10f681fce72abffe896957a39771626f3b8f1f87 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/7…
+53eef8fbdebd12ece726938585531a5001354c047608454f5470594fb4626d5c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+7718fc956b29a57d401ff3b1f1644c03f396155393e3319e8ba3de7bb84133d8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+ccea023400df3973faba0158f71de3bfb166c1fa6877cc65b5e0929c82422362 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/70.0.11/l…
+ec96639d395c5c98775e782329afe57ea7924ec4a5d4eb4fb0da8fd69045ed6d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/70.0.11/l…
+cb20c3ce0527f2df1376959e12d4f0283b38b9d3619b9cbbeb0d86e1b9bbd240 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/70.…
+7037dc6038054b38e8ae1d7729c97becde6761f71d906d44354f4ae196326586 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/70.…
+8e3dbbb157901a5af8c80326cefd87e8c2e01de232117c8203a666d342dd3348 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+0f38f50007d314e3a690ed39dd7b5c748279987c6110f14220aeee65a0eaf316 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+a2b8dff3b67fe89e5c7c2601fb73a9d19247fcf5bb0dca80a8ca13ebf4457111 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
+01dc4ff4f65cb721c5b40a79475923f72dfa613d6c2abbe8fa7075f8915c996f | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/7…
+eafc7345d5de199fb217fb95d6ed60695a17b0f4f0dbba7fe86bf98e386c65ea | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/70.0.11/l…
+a12a25370965d4cd032c55b46bfd1e758da37e51ae5ceeeab0e4ae673801fa83 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/70.0.11/l…
+64e27638105d46e6c64d5632ae68bab22416d77d5169b68c48499b93855951bf | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+1c4b6068089a07091813cd73f0182cad8d684ba007e23589551e4d28bcba0fa4 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+87fb2783e865e13e7a0b2834c55209c75a8f45ccdd5eb977b27c8cacb1102779 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+df2bcd668f99477c79b496bb1637443ae4bad85eb6792854c2a028e412e69417 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+e5cc50047401eb5dbc962f9267f6abaf4a36af9b0af9786069165faa9d9109b7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/70.0.…
+ff1dc25b7d1598631ea48bc4f7e815a994c58817890d57afb3dd5c21781c7816 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/70.0.…
+dd20ac0d1d2ece5364993e22b6d7dc6ca030aa7cec34afa397cbad6456e92dbb | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/70…
+46a8cc59463ff433a8d696e976a8732a085b72df02139033ff2fae7a1f5f3a8b | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/70…
+4877217ae325ecdc5e6df574f2242e383a2c927ebfaf9064a98334fb4c2212ab | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/70.0…
+53e595c31a939f0df7fd159db503d50c99c984cbf5f62a22c9eeaa949e6e8eae | https://maven.mozilla.org/maven2/org/mozilla/components/service-nimbus/70.0…
+3ad9028792a8903f426471a7bc38fc92b3333c5b8c43819d5a34bbf7d5fde477 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+100ec9d59020589603d0a11e116f146c7a936627e646a7b4b38a2f4a567070ac | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+a9bdbee27097b2d7d0d333e55294ef6070e99e7a3eb128036b4df2219730610b | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/70.0.1…
+121f5fc08fcd75690864b8135fa0b8cbf201c0a5b4adae78137602293d28cb05 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/70.0.1…
+64160d6f2310044493cf42b19bd661b385c6aeac983a28566b7933717d1dd7ce | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/70.0…
+12614430a41c07547a610a1b48b2f3223b9f031d1d9afec37e0f55b92cf57b79 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/70.0…
+dd51f1cfb12da227c9aaec2732ef87cf84e814c0484387e008af11e0ee5e2b5b | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/70.0.11…
+e86b8123359a41a644365ae60e35617dfba08478c9c7afb03423149f2cb75aad | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/70.0.11…
+dece9307fd3323394fd4246ff3a4aa4b09795e0f8e7466de495aaefd9b75cb60 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/70.0…
+4bf56e8e8d2ef11f08708568357fe1854b7b825e41ffc28f2780c2343a909cf4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/70.0…
+28b175b07a54478ac4f64f19fd14312b28617b10d117cf0610136ed2169fb5c7 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
+c6b27b957146be9a4090c7e8166ccab0349be8ac0f4433f0623abee5bef6ba60 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/7…
+8639a7b017f074538e46405e947de42614f512bf154c0e10bb823033a399fec3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/70…
+2eb65fe80b4b92541b5deb9ab6753f61aa6916d7c7fd0149946cf2456ed9e14d | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/70…
+3398018e243a40a5aa1930ea2913319725e401e5c7800006da655b328a7b4e73 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/70.…
+ac407d6ac86d36b0b5899b1875b63cc730c2ae078e5e40f2019af22f988d2dd9 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/70.…
+2dd3d15ef7bcb96cacf3b841cb5ca0640553a258db895169072e81c950eb1da0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+4787c6b55e1c5a6db8a23ced228d9ff1153e746992a8661600e6ee97f9dceb6f | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+1275baef6d4d3d0a13c8e2f5a145e82ed22f234b93cd23ba20c3749a901e97ca | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
+07dcc8b02624e22cd9b324dcf27638d4afd2d1ef0b1a75f7ccf5db03ddf7557d | https://maven.mozilla.org/maven2/org/mozilla/components/support-test-libsta…
+ab202a392ce30bf1e0197f6c4b1aa5f163c56b1850daefb4f2de84a2007912ae | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/70.0.1…
+644481fbae5fa4dfa391c9a0f2e9d76132526d1fab2ec885e8dec68a68fb4012 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/70.0.1…
+927d0c02791b1a93ac702c081f22de47141f21a5e8428923ad0b2bc526b745ec | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/70.0.…
+1fc2a0730e3b34d93d54fa08cff6aa8b647603d6d6ce7f9d007b1fadde4acd81 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/70.0.…
+4ba4df984e557fba95217bbc8fa9a321f7b9b592df75ca4524d29fccb2cec44a | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+c33d409408cd788a05c8ba486d982f7f2e398f908906983660ba442912d2aa61 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+ed93ca619eb86f3df39e6c60ed5f39ada4d6154297479ee8a6afdaa57f2f84d7 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+0fac8613bff5ad0cd153d13f73fed9f07aac8b59131488ae5bf78e3d7417aea3 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+5e24752108cf29270e74f42ed7479531ad77b8c014093d70bb102159f228174f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/70.…
+cf5490b45f1101959253b3bd463ec5bc87a8b703d3b342b8b888de026cf136a7 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/70.…
+7ec7264a35b13382f84d701fab89daace99c6c8157c6fdc6d15da2361fb4f16b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/70.0.11/u…
+7d42e42f6a5887cac643e7758443c4f3ce8ee648732ddaa5ffc70391a54627de | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/70.0.11/u…
+71307c399eb59749c6c25d2a0eb93c61513bc79b6c2c5a3e4dfb70e5077185a2 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/70.0.11/ui…
+5d5197ff4ef2bc6c2c7463bf2ff832b0cbe8315bba733989204ff6db386d1b84 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/70.0.11/ui…
+e80f4b16e4182eb9c3407dbce40ff4129ed181f9067ffb24bad3efbf6cdd7df9 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/70.0.…
+20981903dcf821ad2874387cd0623643b80c1e7f6fc16fd5d806e43b79cdabe8 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/70.0.…
+28efed984b2ee3a66ffcf4a60d648ed048fb4f73ba533c73b6567f03d91cd46f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/70.0.11/…
+2985c5de93ad496a1b426399962bd5a3c86ff2d595d3540f5d2cc2d347da4681 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/70.0.11/…
+e2b9b284bad82ab05baf09bcf628b5ce9848efef5c78eca573b13f02d7339ddf | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
+89d6809df4e7dff26cb068199d0afd6112e388605dcb1fa12bd2e36dde947954 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/85.0.…
+fcdfe4029a5f82ac8a86c6452e3f5b57994bb1025ebb8143c12a436a7f07d359 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.0.20210…
+fd621684f18690a812c81438e100d5d5b9d67fb912f243d9e7625ffd691ee672 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/84.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 ead50c5..0a82001 100644
--- a/projects/geckoview/config
+++ b/projects/geckoview/config
@@ -1,14 +1,14 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
-git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-2-build1'
+git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- geckoview_version: 85.0b1
+ geckoview_version: 85.0b9
torbrowser_branch: 10.5
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
deps:
diff --git a/projects/tba-translation/config b/projects/tba-translation/config
index 2c8e70d..867b0c8 100644
--- a/projects/tba-translation/config
+++ b/projects/tba-translation/config
@@ -3,5 +3,5 @@ filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
git_url: https://git.torproject.org/translation.git
# We need to bump the commit before releasing but just pointing to a branch
# might cause too much rebuidling of the Firefox part.
-git_hash: afba80b5aa89823da93ea2d742d413e73b031c06
+git_hash: 78436bf799015834e57faccd936f50e3718815be
version: '[% c("abbrev") %]'
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index e393597..5bd6f12 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,25 @@
+Tor Browser 10.5a7 -- January 19 2021
+ * All Platforms
+ * Update NoScript to 11.1.8
+ * Bug 40165: Update zstd to 1.4.8 [tor-browser-build]
+ * Bug 40204: Update Tor to 0.4.5.3-rc
+ * Translations update
+ * Windows + OS X + Linux
+ * Bug 40287: Switch DDG search from POST to GET [tor-browser]
+ * Bug 40297: Rebase 10.5 patches onto 78.6.1esr [tor-browser]
+ * Android
+ * Bug 40036: Rebase patches onto v70.0.11 [android-components]
+ * Bug 40134: Rebase patches onto v85.0.0-beta.7 [fenix]
+ * Bug 40293: Rebase patches onto 85.0b9-build1 [tor-browser]
+ * OS X
+ * Bug 40262: Browser tabs crashing on the new Macbooks with the M1 chip [tor-browser]
+ * Build System
+ * All Platforms
+ * Bug 40194: Remove osname part in cbindgen filename
+ * Android
+ * Bug 40162: Build Fenix instrumented tests apk
+ * Bug 40195: repo.spring.io is not usable anymore [tor-browser-build]
+
Tor Browser 10.0.8 -- January 12 2021
* All Platforms
* Update NoScript to 11.1.7
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index b3bc014..e2f16ba 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -78,9 +78,9 @@ input_files:
enable: '[% c("var/snowflake") && ! c("var/android") %]'
- filename: Bundle-Data
enable: '[% ! c("var/android") %]'
- - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
+ - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
name: noscript
- sha256sum: 3e3e00026db6a65cd5eebbe4a2c214fd7ef437c8f4d17fa591c85f61eab9d1e5
+ sha256sum: 86bcf1540cdfa04614288fb6ebb1b7f37dc962f233641ebb9c6e8827a0123870
- filename: 'RelativeLink/start-tor-browser.desktop'
enable: '[% c("var/linux") %]'
- filename: 'RelativeLink/execdesktop'
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 31575: Replace Firefox Home (newtab) with about:tor
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 41e74bd6e900edd06dc0a07dbdad08ff2372c202
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Sep 9 13:04:34 2019 +0200
Bug 31575: Replace Firefox Home (newtab) with about:tor
Avoid loading AboutNewTab in BrowserGlue.jsm in order
to avoid several network requests that we do not need. Besides,
about:newtab will now point to about:blank or about:tor (depending
on browser.newtabpage.enabled) and about:home will point to
about:tor.
---
browser/components/BrowserGlue.jsm | 29 ++----------------------
browser/components/newtab/AboutNewTabService.jsm | 15 +-----------
browser/components/preferences/home.inc.xhtml | 4 ++--
browser/components/preferences/preferences.xhtml | 5 +++-
browser/modules/HomePage.jsm | 2 +-
5 files changed, 10 insertions(+), 45 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 3363e24a9b56..44b1426b92e0 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -29,12 +29,6 @@ ChromeUtils.defineModuleGetter(
"resource:///modules/CustomizableUI.jsm"
);
-ChromeUtils.defineModuleGetter(
- this,
- "AboutNewTab",
- "resource:///modules/AboutNewTab.jsm"
-);
-
ChromeUtils.defineModuleGetter(
this,
"E10SUtils",
@@ -123,19 +117,6 @@ let JSWINDOWACTORS = {
matches: ["about:newinstall"],
},
- AboutNewTab: {
- child: {
- moduleURI: "resource:///actors/AboutNewTabChild.jsm",
- events: {
- DOMContentLoaded: {},
- },
- },
- // The wildcard on about:newtab is for the ?endpoint query parameter
- // that is used for snippets debugging.
- matches: ["about:home", "about:welcome", "about:newtab*"],
- remoteTypes: ["privilegedabout"],
- },
-
AboutPlugins: {
parent: {
moduleURI: "resource:///actors/AboutPluginsParent.jsm",
@@ -1730,8 +1711,6 @@ BrowserGlue.prototype = {
// the first browser window has finished initializing
_onFirstWindowLoaded: function BG__onFirstWindowLoaded(aWindow) {
- AboutNewTab.init();
-
TabCrashHandler.init();
ProcessHangMonitor.init();
@@ -5199,12 +5178,8 @@ var AboutHomeStartupCache = {
return { pageInputStream: null, scriptInputStream: null };
}
- let state = AboutNewTab.activityStream.store.getState();
- return new Promise(resolve => {
- this._cacheDeferred = resolve;
- this.log.trace("Parent received cache streams.");
- this._procManager.sendAsyncMessage(this.CACHE_REQUEST_MESSAGE, { state });
- });
+ this.log.error("Activity Stream is disabled in Tor Browser.");
+ return { pageInputStream: null, scriptInputStream: null };
},
/**
diff --git a/browser/components/newtab/AboutNewTabService.jsm b/browser/components/newtab/AboutNewTabService.jsm
index 506b521f528c..3962ebf94ab5 100644
--- a/browser/components/newtab/AboutNewTabService.jsm
+++ b/browser/components/newtab/AboutNewTabService.jsm
@@ -286,20 +286,7 @@ class BaseAboutNewTabService {
* the newtab page has no effect on the result of this function.
*/
get defaultURL() {
- // Generate the desired activity stream resource depending on state, e.g.,
- // "resource://activity-stream/prerendered/activity-stream.html"
- // "resource://activity-stream/prerendered/activity-stream-debug.html"
- // "resource://activity-stream/prerendered/activity-stream-noscripts.html"
- return [
- "resource://activity-stream/prerendered/",
- "activity-stream",
- // Debug version loads dev scripts but noscripts separately loads scripts
- this.activityStreamDebug && !this.privilegedAboutProcessEnabled
- ? "-debug"
- : "",
- this.privilegedAboutProcessEnabled ? "-noscripts" : "",
- ".html",
- ].join("");
+ return "about:tor";
}
/*
diff --git a/browser/components/preferences/home.inc.xhtml b/browser/components/preferences/home.inc.xhtml
index 2e900ccd296c..2a7412944d73 100644
--- a/browser/components/preferences/home.inc.xhtml
+++ b/browser/components/preferences/home.inc.xhtml
@@ -37,7 +37,7 @@
class="check-home-page-controlled"
data-preference-related="browser.startup.homepage">
<menupopup>
- <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+ <menuitem value="0" label="&aboutTor.title;" />
<menuitem value="2" data-l10n-id="home-mode-choice-custom" />
<menuitem value="1" data-l10n-id="home-mode-choice-blank" />
</menupopup>
@@ -97,7 +97,7 @@
flex="1"
preference="browser.newtabpage.enabled">
<menupopup>
- <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+ <menuitem value="0" label="&aboutTor.title;" />
<menuitem value="1" data-l10n-id="home-mode-choice-blank" />
</menupopup>
</menulist>
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 3d89ddf00808..c176457c68fd 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -14,7 +14,10 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
-<!DOCTYPE html>
+<!DOCTYPE html [
+<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
+ %aboutTorDTD;
+]>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:html="http://www.w3.org/1999/xhtml"
diff --git a/browser/modules/HomePage.jsm b/browser/modules/HomePage.jsm
index c903787fde48..bf67b1c5d173 100644
--- a/browser/modules/HomePage.jsm
+++ b/browser/modules/HomePage.jsm
@@ -20,7 +20,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
});
const kPrefName = "browser.startup.homepage";
-const kDefaultHomePage = "about:home";
+const kDefaultHomePage = "about:tor";
const kExtensionControllerPref =
"browser.startup.homepage_override.extensionControlled";
const kHomePageIgnoreListId = "homepage-urls";
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 27511: Add new identity button to toolbar
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 0f86d3e4c069d69669ef222c13a3bdbc4f8f85da
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 4 19:08:33 2019 +0200
Bug 27511: Add new identity button to toolbar
Also added 'New circuit for this site' button to CustomizableUI, but
not visible by default.
---
browser/base/content/browser.xhtml | 10 ++++++++++
.../components/customizableui/CustomizableUI.jsm | 21 +++++++++++++++++++++
browser/themes/shared/icons/new_circuit.svg | 8 ++++++++
browser/themes/shared/icons/new_identity.svg | 9 +++++++++
browser/themes/shared/jar.inc.mn | 3 +++
browser/themes/shared/menupanel.inc.css | 8 ++++++++
browser/themes/shared/toolbarbutton-icons.inc.css | 8 ++++++++
7 files changed, 67 insertions(+)
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 72c415b8f843..ddf5d766126b 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -1295,6 +1295,16 @@
ondragenter="newWindowButtonObserver.onDragOver(event)"
ondragexit="newWindowButtonObserver.onDragExit(event)"/>
+ <toolbarbutton id="new-identity-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
+ label="&torbutton.context_menu.new_identity;"
+ oncommand="torbutton_new_identity();"
+ tooltiptext="&torbutton.context_menu.new_identity;"/>
+
+ <toolbarbutton id="new-circuit-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
+ label="&torbutton.context_menu.new_circuit;"
+ oncommand="torbutton_new_circuit();"
+ tooltiptext="&torbutton.context_menu.new_circuit;"/>
+
<toolbarbutton id="fullscreen-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
observes="View:FullScreen"
type="checkbox"
diff --git a/browser/components/customizableui/CustomizableUI.jsm b/browser/components/customizableui/CustomizableUI.jsm
index e2f006c73464..1c0064249158 100644
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -68,6 +68,8 @@ const kSubviewEvents = ["ViewShowing", "ViewHiding"];
*/
var kVersion = 16;
+var kTorVersion = 1;
+
/**
* Buttons removed from built-ins by version they were removed. kVersion must be
* bumped any time a new id is added to this. Use the button id as key, and
@@ -566,6 +568,20 @@ var CustomizableUIInternal = {
navbarPlacements.push("fxa-toolbar-menu-button");
}
}
+
+ let currentTorVersion = gSavedState.currentTorVersion;
+ if (currentTorVersion < 1 && gSavedState.placements) {
+ let navbarPlacements = gSavedState.placements[CustomizableUI.AREA_NAVBAR];
+ if (navbarPlacements) {
+ let secLevelIndex = navbarPlacements.indexOf("security-level-button");
+ if (secLevelIndex === -1) {
+ let urlbarIndex = navbarPlacements.indexOf("urlbar-container");
+ secLevelIndex = urlbarIndex + 1;
+ navbarPlacements.splice(secLevelIndex, 0, "security-level-button");
+ }
+ navbarPlacements.splice(secLevelIndex + 1, 0, "new-identity-button");
+ }
+ }
},
/**
@@ -2369,6 +2385,10 @@ var CustomizableUIInternal = {
gSavedState.currentVersion = 0;
}
+ if (!("currentTorVersion" in gSavedState)) {
+ gSavedState.currentTorVersion = 0;
+ }
+
gSeenWidgets = new Set(gSavedState.seen || []);
gDirtyAreaCache = new Set(gSavedState.dirtyAreaCache || []);
gNewElementCount = gSavedState.newElementCount || 0;
@@ -2447,6 +2467,7 @@ var CustomizableUIInternal = {
seen: gSeenWidgets,
dirtyAreaCache: gDirtyAreaCache,
currentVersion: kVersion,
+ currentTorVersion: kTorVersion,
newElementCount: gNewElementCount,
};
diff --git a/browser/themes/shared/icons/new_circuit.svg b/browser/themes/shared/icons/new_circuit.svg
new file mode 100644
index 000000000000..e0a93cc83502
--- /dev/null
+++ b/browser/themes/shared/icons/new_circuit.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <title>Icon / New Circuit(a)1.5x</title>
+ <g id="Icon-/-New-Circuit" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <path d="M13.4411138,10.1446317 L9.5375349,10.1446317 C8.99786512,10.1446317 8.56164018,10.5818326 8.56164018,11.1205264 C8.56164018,11.6592203 8.99786512,12.0964212 9.5375349,12.0964212 L11.4571198,12.0964212 C10.7554515,13.0479185 9.73466563,13.692009 8.60067597,13.9359827 C8.41818366,13.9720908 8.23276366,14.0033194 8.04734366,14.0218614 C7.97219977,14.0277168 7.89803177,14.0306445 7.82288788,14.0335722 C6.07506044,14.137017 4.290149,13.4499871 3.38647049,11.857327 C2.52280367,10.3349312 2.77263271,8.15966189 3.93687511,6.87343267 C5.12453898,5.56183017 7.44814431,5.04363008 8.21226987,3.38558497 C9.01738301,4.92847451 9.60682342,5.02801577 10.853041,6.15029468 C11.2892659,6.54455615 11.9704404,7.55558307 12.1861132,8.10501179 C12.3051723,8.40949094 12.5013272,9.17947187 12.5013272,9.17947187 L14.2862386,9.17947187 C14.2091429,7.59754654 13.439162,5.96877827 12.2261248,4.93628166 C11.279507,4.13116853 10.5065984,3.84718317 9.77662911,2.8088312 C9.63219669,2.60194152 9.599
99216,2.4565332 9.56290816,2.21646311 C9.53851079,2.00762164 9.54143848,1.78511764 9.62048595,1.53919218 C9.65952174,1.41720534 9.59804037,1.28545955 9.47702943,1.23764071 L6.40296106,0.0167964277 C6.32391359,-0.0134563083 6.23413128,-0.00272146652 6.16679454,0.0480250584 L5.95502539,0.206120002 C5.85743592,0.280288 5.82815908,0.416913259 5.89159223,0.523285783 C6.70060895,1.92564648 6.36978064,2.82542141 5.8984235,3.20211676 C5.4914754,3.4900057 4.99084141,3.72226864 4.63366394,3.95453159 C3.82367132,4.47956294 3.03222071,5.02508808 2.40374451,5.76774396 C0.434388969,8.09427695 0.519291809,12.0046871 2.77165682,14.1077402 C3.65288975,14.9284676 4.70295247,15.4749686 5.81742423,15.7570022 C5.81742423,15.7570022 6.13556591,15.833122 6.21754107,15.8497122 C7.36616915,16.0829511 8.53529102,16.0146384 9.62243774,15.6672199 C9.67416016,15.6525815 9.77174963,15.620377 9.76784605,15.6154975 C10.7730176,15.2700308 11.7049971,14.7010841 12.4652191,13.90573 L12.4652191,15.0241053 C12.4652191,
15.5627992 12.901444,16 13.4411138,16 C13.9798077,16 14.4170085,15.5627992 14.4170085,15.0241053 L14.4170085,11.1205264 C14.4170085,10.5818326 13.9798077,10.1446317 13.4411138,10.1446317" id="Fill-3" fill="context-fill" fill-opacity="context-fill-opacity"></path>
+ <path d="M5.107,7.462 C4.405,8.078 4,8.946 4,9.839 C4,10.712 4.422,11.57 5.13,12.132 C5.724,12.607 6.627,12.898 7.642,12.949 L7.642,5.8 C7.39,6.029 7.103,6.227 6.791,6.387 C5.993,6.812 5.489,7.133 5.107,7.462" id="Fill-1" fill="context-fill" fill-opacity="context-fill-opacity"></path>
+ </g>
+</svg>
diff --git a/browser/themes/shared/icons/new_identity.svg b/browser/themes/shared/icons/new_identity.svg
new file mode 100644
index 000000000000..91d5b35f7e80
--- /dev/null
+++ b/browser/themes/shared/icons/new_identity.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <title>New Identity Icon</title>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="New-Identity-Icon" fill="#000000" fill-rule="nonzero">
+ <path d="M4.65687153,14.5532899 L5.79494313,12.0855326 C5.8689125,11.9251399 5.6620883,11.7793527 5.53742729,11.9040137 L3.77194352,13.6694975 L2.32342782,12.2228406 L4.089841,10.4564274 C4.21450201,10.3317664 4.06871482,10.1249422 3.90832206,10.1989116 L1.43773764,11.338287 L0.206601383,10.1087306 C0.0509544211,9.9532834 -0.0167994233,9.75447206 0.00351451705,9.53432844 C0.0238284574,9.31418483 0.154794797,9.13897939 0.330406365,9.0302193 L4.61213917,6.53066101 C4.98542292,6.31331572 5.42541251,6.16259067 5.8659261,6.07796117 C6.63682488,5.92985954 7.40999434,6.06817199 8.09666802,6.42610336 L12.618483,1.910278 C13.0562019,1.47313888 13.7399062,1.45652879 14.1403159,1.87828207 C14.5407256,2.30003536 14.523905,2.96081599 14.0861861,3.39795511 L9.56437119,7.91378047 C9.92258101,8.57753432 10.0391721,9.37155544 9.91292178,10.1416209 C9.85023328,10.5817332 9.67706706,10.9989392 9.45960494,11.3937636 L6.95651989,15.6478297 C6.84761416,15.82321 6.6720026,15.9319701 6.47398108
,15.9964916 C6.25354962,16.0167745 6.0544801,15.9491049 5.89883314,15.7936577 L4.65687153,14.5532899 L4.65687153,14.5532899 Z M6.35600863,9.57888316 C6.35684236,9.57982492 6.35770616,9.58074275 6.35860024,9.58163642 L7.56801202,10.7899206 C7.78820303,11.010009 8.15567242,10.9533982 8.29166823,10.678253 C8.42766403,10.4031079 8.55818512,10.1511975 8.61427424,9.83946755 C8.73630873,9.14856819 8.51477165,8.45005355 8.01189873,7.92920397 C8.01085853,7.92816425 8.00979562,7.92715687 8.00871022,7.92618158 C8.00773493,7.92509618 8.00672754,7.92403327 8.00568783,7.92299307 C7.48483824,7.42012014 6.7863236,7.19858307 6.09542425,7.32061756 C5.78369428,7.37670668 5.53178393,7.50722777 5.25663877,7.64322357 C4.98149362,7.77921937 4.92488284,8.14668876 5.14497116,8.36687978 L6.35325537,9.57629155 C6.35414904,9.57718564 6.35506687,9.57804944 6.35600863,9.57888316 L6.35600863,9.57888316 Z M3.56503003,4.86094581 C3.44279837,4.85716019 3.33693302,4.76594656 3.31450832,4.6450962 C3.29259157,4.5009814
3 3.24425431,4.36089837 3.1719467,4.23194774 C3.04272848,4.15978087 2.90235166,4.11153221 2.75793184,4.08964745 C2.63678145,4.06729735 2.5453314,3.9616241 2.54155161,3.83961366 C2.53777182,3.71760322 2.62276629,3.61489221 2.74265726,3.59658884 C2.88757581,3.57942626 3.02687427,3.53584537 3.15371096,3.46798665 C3.21938702,3.3436261 3.26061987,3.20700605 3.27529255,3.0651408 C3.29205048,2.94466859 3.39451537,2.85825378 3.5172925,2.86104768 C3.6386065,2.86399065 3.74452528,2.95324633 3.76872081,3.07292141 C3.79288781,3.21715288 3.84342323,3.35694342 3.91777207,3.4852254 C4.04615548,3.55876237 4.18583906,3.60883869 4.32991405,3.63297757 C4.45015386,3.6576218 4.53936117,3.76418021 4.54139495,3.88559216 C4.54342874,4.00700411 4.45770065,4.10814717 4.33816215,4.12536877 C4.1960481,4.14067978 4.05931708,4.18249381 3.9349938,4.24866259 C3.86697751,4.37522253 3.82328954,4.51422019 3.80607564,4.65882867 C3.78847982,4.77811508 3.68677836,4.86339193 3.56503003,4.86094581 Z M14.4103464,14.3126948
C14.2513672,14.307719 14.1137716,14.188804 14.0849193,14.0314492 C14.045996,13.7585014 13.9510862,13.4938971 13.8061961,13.2543814 C13.5663773,13.109665 13.301434,13.0148623 13.0281329,12.9759728 C12.8707684,12.946921 12.75198,12.8095493 12.7470672,12.6509372 C12.7421545,12.492325 12.8525523,12.3587997 13.0082799,12.3350024 C13.2816632,12.3044807 13.5433622,12.2185794 13.7775725,12.0824861 C13.9099238,11.8524988 13.992337,11.5955854 14.0197279,11.3275956 C14.0417134,11.1717293 14.1740126,11.0598594 14.3327736,11.0628895 C14.4905572,11.0667732 14.6282205,11.1831391 14.6593783,11.3389665 C14.703143,11.6110771 14.8017156,11.8740418 14.9490566,12.1117486 C15.1872615,12.2578242 15.450159,12.3559923 15.7221615,12.4004323 C15.8783433,12.4324665 15.9942186,12.5709889 15.9968634,12.7288231 C15.9995083,12.8866572 15.8881575,13.0181443 15.7328877,13.0405352 C15.4641157,13.0669716 15.2064728,13.14931 14.9763475,13.2823129 C14.8406047,13.5164173 14.7548186,13.7777086 14.724105,14.0506041 C14.70
09285,14.2056508 14.5685348,14.3162427 14.4103464,14.3126948 Z M8.37194288,2.75251202 C8.23729358,2.7482977 8.12075529,2.6475812 8.09631849,2.5143077 C8.06335201,2.28313133 7.98296703,2.05902158 7.86025062,1.85616098 C7.65713325,1.73359169 7.43273641,1.65329741 7.2012608,1.62035947 C7.06797908,1.59575373 6.9673698,1.47940513 6.96320889,1.34506671 C6.95904797,1.21072829 7.05255074,1.09763741 7.18444606,1.07748204 C7.41599123,1.0516313 7.6376403,0.978876138 7.83600755,0.863610339 C7.94810399,0.668819911 8.01790485,0.45122403 8.04110388,0.224246882 C8.05972477,0.0922341146 8.17177714,-0.00251545243 8.30624168,5.089704e-05 C8.43987839,0.00334026838 8.55647391,0.101897787 8.58286336,0.233877601 C8.61993042,0.464344927 8.70341768,0.687066016 8.82820981,0.888394549 C9.02996027,1.012115 9.25262444,1.09525963 9.4830002,1.13289867 C9.6152802,1.16003037 9.71342219,1.27735361 9.71566226,1.41103311 C9.71790232,1.5447126 9.62359245,1.65607713 9.49208487,1.67504141 C9.26444525,1.69743199 9.0462315
3,1.76716948 8.85132417,1.87981789 C8.73635526,2.07809534 8.66369764,2.2993991 8.63768445,2.53053117 C8.61805481,2.66184983 8.50592239,2.75551697 8.37194288,2.75251202 Z" id="Shape" fill="context-fill" fill-opacity="context-fill-opacity"></path>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index 71fea38eb829..e4a3c8d2d41c 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -302,3 +302,6 @@
skin/classic/browser/install-ssb.svg (../shared/install-ssb.svg)
skin/classic/browser/critical.svg (../shared/icons/critical.svg)
skin/classic/browser/webRTC-indicator.css (../shared/webRTC-indicator.css)
+
+ skin/classic/browser/new_circuit.svg (../shared/icons/new_circuit.svg)
+ skin/classic/browser/new_identity.svg (../shared/icons/new_identity.svg)
diff --git a/browser/themes/shared/menupanel.inc.css b/browser/themes/shared/menupanel.inc.css
index c919f32a1454..eae453ec5004 100644
--- a/browser/themes/shared/menupanel.inc.css
+++ b/browser/themes/shared/menupanel.inc.css
@@ -183,3 +183,11 @@ toolbarpaletteitem[place="palette"] > #bookmarks-menu-button,
-moz-context-properties: fill, fill-opacity;
fill-opacity: 0;
}
+
+#appMenuNewIdentity {
+ list-style-image: url("chrome://browser/skin/new_identity.svg");
+}
+
+#appMenuNewCircuit {
+ list-style-image: url("chrome://browser/skin/new_circuit.svg");
+}
diff --git a/browser/themes/shared/toolbarbutton-icons.inc.css b/browser/themes/shared/toolbarbutton-icons.inc.css
index 9514eb1d5338..cf02f871c9a4 100644
--- a/browser/themes/shared/toolbarbutton-icons.inc.css
+++ b/browser/themes/shared/toolbarbutton-icons.inc.css
@@ -233,6 +233,14 @@ toolbar[brighttext] {
list-style-image: url("chrome://browser/skin/new-tab.svg");
}
+#new-identity-button {
+ list-style-image: url("chrome://browser/skin/new_identity.svg");
+}
+
+#new-circuit-button {
+ list-style-image: url("chrome://browser/skin/new_circuit.svg");
+}
+
#privatebrowsing-button {
list-style-image: url("chrome://browser/skin/privateBrowsing.svg");
}
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 31607: App menu items stop working on macOS
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 96a50da3fc3414954134e599ebee6b3ae2225710
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 719684ceb072..1600a3fea789 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-78.6.1esr-10.5-1] Bug 13543: Spoof smooth and powerEfficient for Media Capabilities
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 0c75631cdc527aad01fec861932e668afbfd990b
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 10 15:08:12 2019 +0200
Bug 13543: Spoof smooth and powerEfficient for Media Capabilities
---
dom/media/mediacapabilities/MediaCapabilities.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dom/media/mediacapabilities/MediaCapabilities.cpp b/dom/media/mediacapabilities/MediaCapabilities.cpp
index fb1b1a2cb32c..3bc6b97eac63 100644
--- a/dom/media/mediacapabilities/MediaCapabilities.cpp
+++ b/dom/media/mediacapabilities/MediaCapabilities.cpp
@@ -290,6 +290,11 @@ already_AddRefed<Promise> MediaCapabilities::DecodingInfo(
if (aValue.IsReject()) {
p = CapabilitiesPromise::CreateAndReject(
std::move(aValue.RejectValue()), __func__);
+ } else if (nsContentUtils::
+ ShouldResistFingerprinting()) {
+ p = CapabilitiesPromise::CreateAndResolve(
+ MediaCapabilitiesInfo(true, true, false),
+ __func__);
} else {
MOZ_ASSERT(config->IsVideo());
if (StaticPrefs::media_mediacapabilities_from_database()) {
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 32092: Fix Tor Browser Support link in preferences
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit c27906ae6ba8f045ecba44bc78d3ca6a59a86bcc
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 089533f20ade..586e32e277cb 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -121,10 +121,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-78.6.1esr-10.5-1] Bug 32220: Improve the letterboxing experience
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 733fd78b2a19e34c6f2a0750a02184dd5f1b3031
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Oct 28 17:42:17 2019 -0700
Bug 32220: Improve the letterboxing experience
CSS and JS changes to alter the UX surrounding letterboxing. The
browser element containing page content is now anchored to the bottom
of the toolbar, and the remaining letterbox margin is the same color
as the firefox chrome. The letterbox margin and border are tied to
the currently selected theme.
Also adds a 'needsLetterbox' property to tabbrowser.xml to fix a race
condition present when using the 'isEmpty' property. Using 'isEmpty'
as a proxy for 'needsLetterbox' resulted in over-zealous/unnecessary
letterboxing of about:blank tabs.
---
browser/base/content/browser.css | 8 ++
browser/base/content/tabbrowser-tab.js | 9 +++
browser/themes/shared/tabs.inc.css | 6 ++
.../components/resistfingerprinting/RFPHelper.jsm | 94 +++++++++++++++++++---
4 files changed, 105 insertions(+), 12 deletions(-)
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 808c03e88223..a0b1bf4a8951 100644
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -85,6 +85,14 @@ body {
display: none;
}
+
+.browserStack > browser.letterboxing {
+ border-color: var(--chrome-content-separator-color);
+ border-style: solid;
+ border-width : 1px;
+ border-top: none;
+}
+
%ifdef MENUBAR_CAN_AUTOHIDE
#toolbar-menubar[autohide="true"] {
overflow: hidden;
diff --git a/browser/base/content/tabbrowser-tab.js b/browser/base/content/tabbrowser-tab.js
index 183eff1bab86..7f376ab1d122 100644
--- a/browser/base/content/tabbrowser-tab.js
+++ b/browser/base/content/tabbrowser-tab.js
@@ -225,6 +225,15 @@
return true;
}
+ get needsLetterbox() {
+ let browser = this.linkedBrowser;
+ if (isBlankPageURL(browser.currentURI.spec)) {
+ return false;
+ }
+
+ return true;
+ }
+
get lastAccessed() {
return this._lastAccessed == Infinity ? Date.now() : this._lastAccessed;
}
diff --git a/browser/themes/shared/tabs.inc.css b/browser/themes/shared/tabs.inc.css
index b47842af766c..019da6ecf76f 100644
--- a/browser/themes/shared/tabs.inc.css
+++ b/browser/themes/shared/tabs.inc.css
@@ -33,6 +33,12 @@
background-color: #f9f9fa;
}
+/* extend down the toolbar's colors when letterboxing is enabled*/
+#tabbrowser-tabpanels.letterboxing {
+ background-color: var(--toolbar-bgcolor);
+ background-image: var(--toolbar-bgimage);
+}
+
:root[privatebrowsingmode=temporary] #tabbrowser-tabpanels {
/* Value for --in-content-page-background in aboutPrivateBrowsing.css */
background-color: #25003e;
diff --git a/toolkit/components/resistfingerprinting/RFPHelper.jsm b/toolkit/components/resistfingerprinting/RFPHelper.jsm
index 49010d1c8cb1..b906a067fd63 100644
--- a/toolkit/components/resistfingerprinting/RFPHelper.jsm
+++ b/toolkit/components/resistfingerprinting/RFPHelper.jsm
@@ -40,6 +40,7 @@ class _RFPHelper {
// ============================================================================
constructor() {
this._initialized = false;
+ this._borderDimensions = null;
}
init() {
@@ -361,6 +362,24 @@ class _RFPHelper {
});
}
+ getBorderDimensions(aBrowser) {
+ if (this._borderDimensions) {
+ return this._borderDimensions;
+ }
+
+ const win = aBrowser.ownerGlobal;
+ const browserStyle = win.getComputedStyle(aBrowser);
+
+ this._borderDimensions = {
+ top : parseInt(browserStyle.borderTopWidth),
+ right: parseInt(browserStyle.borderRightWidth),
+ bottom : parseInt(browserStyle.borderBottomWidth),
+ left : parseInt(browserStyle.borderLeftWidth),
+ };
+
+ return this._borderDimensions;
+ }
+
_addOrClearContentMargin(aBrowser) {
let tab = aBrowser.getTabBrowser().getTabForBrowser(aBrowser);
@@ -369,9 +388,13 @@ class _RFPHelper {
return;
}
+ // we add the letterboxing class even if the content does not need letterboxing
+ // in which case margins are set such that the borders are hidden
+ aBrowser.classList.add("letterboxing");
+
// We should apply no margin around an empty tab or a tab with system
// principal.
- if (tab.isEmpty || aBrowser.contentPrincipal.isSystemPrincipal) {
+ if (!tab.needsLetterbox || aBrowser.contentPrincipal.isSystemPrincipal) {
this._clearContentViewMargin(aBrowser);
} else {
this._roundContentView(aBrowser);
@@ -539,10 +562,29 @@ class _RFPHelper {
// Calculating the margins around the browser element in order to round the
// content viewport. We will use a 200x100 stepping if the dimension set
// is not given.
- let margins = calcMargins(containerWidth, containerHeight);
+
+ const borderDimensions = this.getBorderDimensions(aBrowser);
+ const marginDims = calcMargins(containerWidth, containerHeight - borderDimensions.top);
+
+ let margins = {
+ top : 0,
+ right : 0,
+ bottom : 0,
+ left : 0,
+ };
+
+ // snap browser element to top
+ margins.top = 0;
+ // and leave 'double' margin at the bottom
+ margins.bottom = 2 * marginDims.height - borderDimensions.bottom;
+ // identical margins left and right
+ margins.right = marginDims.width - borderDimensions.right;
+ margins.left = marginDims.width - borderDimensions.left;
+
+ const marginStyleString = `${margins.top}px ${margins.right}px ${margins.bottom}px ${margins.left}px`;
// If the size of the content is already quantized, we do nothing.
- if (aBrowser.style.margin == `${margins.height}px ${margins.width}px`) {
+ if (aBrowser.style.margin === marginStyleString) {
log("_roundContentView[" + logId + "] is_rounded == true");
if (this._isLetterboxingTesting) {
log(
@@ -563,19 +605,35 @@ class _RFPHelper {
"_roundContentView[" +
logId +
"] setting margins to " +
- margins.width +
- " x " +
- margins.height
+ marginStyleString
);
- // One cannot (easily) control the color of a margin unfortunately.
- // An initial attempt to use a border instead of a margin resulted
- // in offset event dispatching; so for now we use a colorless margin.
- aBrowser.style.margin = `${margins.height}px ${margins.width}px`;
+
+ // The margin background color is determined by the background color of the
+ // window's tabpanels#tabbrowser-tabpanels element
+ aBrowser.style.margin = marginStyleString;
});
}
_clearContentViewMargin(aBrowser) {
+ const borderDimensions = this.getBorderDimensions(aBrowser);
+ // set the margins such that the browser elements border is visible up top, but
+ // are rendered off-screen on the remaining sides
+ let margins = {
+ top : 0,
+ right : -borderDimensions.right,
+ bottom : -borderDimensions.bottom,
+ left : -borderDimensions.left,
+ };
+ const marginStyleString = `${margins.top}px ${margins.right}px ${margins.bottom}px ${margins.left}px`;
+
+ aBrowser.ownerGlobal.requestAnimationFrame(() => {
+ aBrowser.style.margin = marginStyleString;
+ });
+ }
+
+ _removeLetterboxing(aBrowser) {
aBrowser.ownerGlobal.requestAnimationFrame(() => {
+ aBrowser.classList.remove("letterboxing");
aBrowser.style.margin = "";
});
}
@@ -593,6 +651,11 @@ class _RFPHelper {
aWindow.gBrowser.addTabsProgressListener(this);
aWindow.addEventListener("TabOpen", this);
+ const tabPanel = aWindow.document.getElementById("tabbrowser-tabpanels");
+ if (tabPanel) {
+ tabPanel.classList.add("letterboxing");
+ }
+
// Rounding the content viewport.
this._updateMarginsForTabsInWindow(aWindow);
}
@@ -616,10 +679,17 @@ class _RFPHelper {
tabBrowser.removeTabsProgressListener(this);
aWindow.removeEventListener("TabOpen", this);
- // Clear all margins and tooltip for all browsers.
+ // revert tabpanel's background colors to default
+ const tabPanel = aWindow.document.getElementById("tabbrowser-tabpanels");
+ if (tabPanel) {
+ tabPanel.classList.remove("letterboxing");
+ }
+
+ // and revert each browser element to default,
+ // restore default margins and remove letterboxing class
for (let tab of tabBrowser.tabs) {
let browser = tab.linkedBrowser;
- this._clearContentViewMargin(browser);
+ this._removeLetterboxing(browser);
}
}
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 32658: Create a new MAR signing key
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 3bff338ce7d1fd10e860d0167a1955f21052e862
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.
squash! Bug 32658: Create a new MAR signing 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

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 31740: Remove some unnecessary RemoteSettings instances
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 09b59544f7f3869300b5abe938a42ba251a23eca
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.
---
.../url-classifier/UrlClassifierFeatureBase.cpp | 2 +-
netwerk/url-classifier/components.conf | 6 ------
security/manager/ssl/RemoteSecuritySettings.jsm | 22 ++++++++++++++++++++++
services/settings/IDBHelpers.jsm | 4 ++++
services/settings/dumps/blocklists/moz.build | 1 -
services/settings/dumps/main/moz.build | 5 -----
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 --
10 files changed, 28 insertions(+), 24 deletions(-)
diff --git a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
index 9bc7fc5d6e9a..3fb3b74a4f08 100644
--- a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
+++ b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
@@ -76,7 +76,7 @@ void UrlClassifierFeatureBase::InitializePreferences() {
nsCOMPtr<nsIUrlClassifierSkipListService> skipListService =
do_GetService("@mozilla.org/url-classifier/skip-list-service;1");
- if (NS_WARN_IF(!skipListService)) {
+ if (!skipListService) {
return;
}
diff --git a/netwerk/url-classifier/components.conf b/netwerk/url-classifier/components.conf
index 7f49d94b6488..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/skip-list-service;1'],
- 'jsm': 'resource://gre/modules/UrlClassifierSkipListService.jsm',
- 'constructor': 'UrlClassifierSkipListService',
- },
]
diff --git a/security/manager/ssl/RemoteSecuritySettings.jsm b/security/manager/ssl/RemoteSecuritySettings.jsm
index 199eeb5b58e1..96d6a7a2de48 100644
--- a/security/manager/ssl/RemoteSecuritySettings.jsm
+++ b/security/manager/ssl/RemoteSecuritySettings.jsm
@@ -350,6 +350,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),
{
@@ -379,6 +389,7 @@ class IntermediatePreloads {
);
return;
}
+ this.maybeInit();
// Download attachments that are awaiting download, up to a max.
const maxDownloadsPerRun = Services.prefs.getIntPref(
@@ -704,6 +715,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),
{
@@ -729,6 +750,7 @@ class CRLiteFilters {
);
return;
}
+ this.maybeInit();
let current = await this.client.db.list();
let fullFilters = current.filter(filter => !filter.incremental);
if (fullFilters.length < 1) {
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 1683ab6aafa4..dd0bad30f19a 100644
--- a/services/settings/dumps/blocklists/moz.build
+++ b/services/settings/dumps/blocklists/moz.build
@@ -9,7 +9,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 3628fa00b5e6..e25fc4214042 100644
--- a/services/settings/dumps/main/moz.build
+++ b/services/settings/dumps/main/moz.build
@@ -3,15 +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',
- 'onboarding.json',
- 'search-config.json',
'search-default-override-allowlist.json',
- 'sites-classification.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 d8f8227a0278..37410d0fb054 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 ddd824522c16..cd46ed1046d5 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 608f3c475458..23cb3daa9fac 100644
--- a/toolkit/components/search/SearchService.jsm
+++ b/toolkit/components/search/SearchService.jsm
@@ -573,8 +573,6 @@ SearchService.prototype = {
)
.finally(() => (this._ensureKnownRegionPromise = null));
- this._setupRemoteSettings().catch(Cu.reportError);
-
await this._loadEngines(cache);
// If we've got this far, but the application is now shutting down,
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 27604: Fix addon issues when moving TB directory
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 3d24662eb8c6070b59093920f26b527bd89e9096
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 bf31932b59f1..5e467fb4f14c 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -485,7 +485,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;
}
@@ -498,7 +498,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;
}
}
@@ -1439,6 +1442,7 @@ var XPIStates = {
if (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-78.6.1esr-10.5-1] Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 862861647818314793f67a76f1d606ba60c4bef3
Author: Amogh Pradeep <amoghbl1(a)gmail.com>
Date: Fri Jun 12 02:07:45 2015 -0400
Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
See Bug 1357997 for partial uplift.
Also:
Bug 28051 - Use our Orbot for proxying our connections
Bug 31144 - ESR68 Network Code Review
---
.../main/java/org/mozilla/gecko/GeckoAppShell.java | 68 +++++++++++-----------
.../java/org/mozilla/gecko/util/BitmapUtils.java | 7 ---
.../java/org/mozilla/gecko/util/ProxySelector.java | 25 +++++++-
3 files changed, 59 insertions(+), 41 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
index 995b23316c32..b9ca73bee2eb 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
@@ -1764,39 +1764,41 @@ public class GeckoAppShell {
@WrapForJNI
private static URLConnection getConnection(final String url) {
- try {
- String spec;
- if (url.startsWith("android://")) {
- spec = url.substring(10);
- } else {
- spec = url.substring(8);
- }
-
- // Check if we are loading a package icon.
- try {
- if (spec.startsWith("icon/")) {
- String[] splits = spec.split("/");
- if (splits.length != 2) {
- return null;
- }
- final String pkg = splits[1];
- final PackageManager pm = getApplicationContext().getPackageManager();
- final Drawable d = pm.getApplicationIcon(pkg);
- final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
- return new BitmapConnection(bitmap);
- }
- } catch (Exception ex) {
- Log.e(LOGTAG, "error", ex);
- }
-
- // if the colon got stripped, put it back
- int colon = spec.indexOf(':');
- if (colon == -1 || colon > spec.indexOf('/')) {
- spec = spec.replaceFirst("/", ":/");
- }
- } catch (Exception ex) {
- return null;
- }
+ // Bug 31144 - Prevent potential proxy-bypass
+
+ //try {
+ // String spec;
+ // if (url.startsWith("android://")) {
+ // spec = url.substring(10);
+ // } else {
+ // spec = url.substring(8);
+ // }
+
+ // // Check if we are loading a package icon.
+ // try {
+ // if (spec.startsWith("icon/")) {
+ // String[] splits = spec.split("/");
+ // if (splits.length != 2) {
+ // return null;
+ // }
+ // final String pkg = splits[1];
+ // final PackageManager pm = getApplicationContext().getPackageManager();
+ // final Drawable d = pm.getApplicationIcon(pkg);
+ // final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
+ // return new BitmapConnection(bitmap);
+ // }
+ // } catch (Exception ex) {
+ // Log.e(LOGTAG, "error", ex);
+ // }
+
+ // // if the colon got stripped, put it back
+ // int colon = spec.indexOf(':');
+ // if (colon == -1 || colon > spec.indexOf('/')) {
+ // spec = spec.replaceFirst("/", ":/");
+ // }
+ //} catch (Exception ex) {
+ // return null;
+ //}
return null;
}
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
index 73a69a3abd66..f795dacffb47 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
@@ -101,13 +101,6 @@ public final class BitmapUtils {
public static Bitmap decodeUrl(final URL url) {
InputStream stream = null;
- try {
- stream = url.openStream();
- } catch (IOException e) {
- Log.w(LOGTAG, "decodeUrl: IOException downloading " + url);
- return null;
- }
-
if (stream == null) {
Log.w(LOGTAG, "decodeUrl: stream not found downloading " + url);
return null;
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
index 3940d3c84249..9515975f680a 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
@@ -29,6 +29,10 @@ import java.net.URLConnection;
import java.util.List;
public class ProxySelector {
+ private static final String TOR_PROXY_ADDRESS = "127.0.0.1";
+ private static final int TOR_SOCKS_PROXY_PORT = 9150;
+ private static final int TOR_HTTP_PROXY_PORT = 8218;
+
public static URLConnection openConnectionWithProxy(final URI uri) throws IOException {
java.net.ProxySelector ps = java.net.ProxySelector.getDefault();
Proxy proxy = Proxy.NO_PROXY;
@@ -39,7 +43,26 @@ public class ProxySelector {
}
}
- return uri.toURL().openConnection(proxy);
+ /* Ignore the proxy we found from the VM, only use Tor. We can probably
+ * safely use the logic in this class in the future. */
+ return uri.toURL().openConnection(getProxy());
+ }
+
+ public static Proxy getProxy() {
+ // TODO make configurable
+ return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_SOCKS_PROXY_PORT));
+ }
+
+ public static String getProxyHostAddress() {
+ return TOR_PROXY_ADDRESS;
+ }
+
+ public static int getSocksProxyPort() {
+ return TOR_SOCKS_PROXY_PORT;
+ }
+
+ public static int getHttpProxyPort() {
+ return TOR_HTTP_PROXY_PORT;
}
public ProxySelector() {
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 24796 - Comment out excess permissions from GeckoView
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit b3966d3f20d8addbd6c3078071f889e22f65ed8d
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 87ad6dc28047..4c8ab2a9d996 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-78.6.1esr-10.5-1] Bug 30237: Add v3 onion services client authentication prompt
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 21e08c5005a35863d370e54d6fdc4b45151628c5
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 af9d6bd46128..de66e9eeda18 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",
@@ -29,6 +31,7 @@ class NetErrorChild extends RemotePageChild {
"RPMPrefIsLocked",
"RPMAddToHistogram",
"RPMRecordTelemetryEvent",
+ "RPMGetTorStrings",
];
this.exportFunctions(exportableFunctions);
}
@@ -82,4 +85,8 @@ class NetErrorChild extends RemotePageChild {
RPMRecordTelemetryEvent(category, event, object, value, extra) {
Services.telemetry.recordEvent(category, event, object, value, extra);
}
+
+ RPMGetTorStrings() {
+ return Cu.cloneInto(TorStrings.onionServices, this.contentWindow);
+ }
}
diff --git a/browser/base/content/aboutNetError.js b/browser/base/content/aboutNetError.js
index 053d26ade512..60db17f46eb9 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 */
const formatter = new Intl.DateTimeFormat("default");
@@ -241,7 +242,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) {
@@ -387,6 +391,10 @@ function initPage() {
span.textContent = document.location.hostname;
}
}
+
+ if (isOnionError) {
+ OnionServicesAboutNetError.initPage(document);
+ }
}
function setupErrorUI() {
diff --git a/browser/base/content/aboutNetError.xhtml b/browser/base/content/aboutNetError.xhtml
index 3e9677e3c0ff..957b6f15a0be 100644
--- a/browser/base/content/aboutNetError.xhtml
+++ b/browser/base/content/aboutNetError.xhtml
@@ -208,5 +208,6 @@
</div>
</div>
</body>
+ <script src="chrome://browser/content/onionservices/netError/onionNetError.js"/>
<script src="chrome://browser/content/aboutNetError.js"/>
</html>
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index d192bc433fe6..6246068e88df 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -220,6 +220,11 @@ XPCOMUtils.defineLazyScriptGetter(
["SecurityLevelButton"],
"chrome://browser/content/securitylevel/securityLevel.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionAuthPrompt"],
+ "chrome://browser/content/onionservices/authPrompt.js"
+);
XPCOMUtils.defineLazyScriptGetter(
this,
"gEditItemOverlay",
@@ -1883,6 +1888,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
@@ -2567,6 +2575,8 @@ var gBrowserInit = {
SecurityLevelButton.uninit();
+ OnionAuthPrompt.uninit();
+
gAccessibilityServiceIndicator.uninit();
AccessibilityRefreshBlocker.uninit();
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index ddf5d766126b..4cab5fad6475 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.
@@ -626,6 +627,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">
@@ -994,6 +996,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 30cfa891c1fb..c57244a962ee 100644
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -19,6 +19,9 @@ ChromeUtils.defineModuleGetter(
"BrowserUtils",
"resource://gre/modules/BrowserUtils.jsm"
);
+var { OnionAuthUtil } = ChromeUtils.import(
+ "chrome://browser/content/onionservices/authUtil.jsm"
+);
var { ActorManagerChild } = ChromeUtils.import(
"resource://gre/modules/ActorManagerChild.jsm"
@@ -101,5 +104,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 09e209dc9c3b..b660be047b14 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -41,6 +41,7 @@ DIRS += [
'fxmonitor',
'migration',
'newtab',
+ 'onionservices',
'originattributes',
'pioneer',
'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..7e103239c8d6
--- /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 2a99400bfb70..b09808e83c45 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 f36145ea80d4..eb7587afa0e1 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -477,6 +477,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 35e1fda9f96b..41dda96a14de 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -77,6 +77,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,
@@ -434,6 +440,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 f17ddae9dc79..979ae9482244 100644
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -117,6 +117,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 2e0f2e749741..97c06788ad33 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -3536,6 +3536,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
@@ -3618,10 +3619,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
@@ -3710,6 +3745,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);
}
@@ -6189,6 +6238,7 @@ nsresult nsDocShell::EndPageLoad(nsIWebProgress* aProgress,
aStatus == NS_ERROR_NET_INADEQUATE_SECURITY ||
aStatus == NS_ERROR_NET_HTTP2_SENT_GOAWAY ||
aStatus == NS_ERROR_NET_HTTP3_PROTOCOL_ERROR ||
+ 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
DisplayLoadError(aStatus, url, nullptr, aChannel);
@@ -7746,6 +7796,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 dfd15c1fd17b..7749792cafb4 100644
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -3941,6 +3941,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 66509194edba..816945504b6c 100644
--- a/dom/ipc/BrowserParent.h
+++ b/dom/ipc/BrowserParent.h
@@ -763,6 +763,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 ed31b32a4eb2..f36e2c6db353 100644
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -592,6 +592,15 @@ parent:
bool aNeedCollectSHistory, uint32_t aFlushId,
bool aIsFinal, uint32_t aEpoch);
+ /**
+ * 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 d884c6a85999..31e5e75ba35c 100644
--- a/js/xpconnect/src/xpc.msg
+++ b/js/xpconnect/src/xpc.msg
@@ -253,5 +253,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 7256280697c8..ce739e1f0de8 100644
--- a/netwerk/base/nsSocketTransport2.cpp
+++ b/netwerk/base/nsSocketTransport2.cpp
@@ -215,6 +215,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 6f2743ed5c71..57af13a7c026 100644
--- a/netwerk/socket/nsSOCKSIOLayer.cpp
+++ b/netwerk/socket/nsSOCKSIOLayer.cpp
@@ -1004,6 +1004,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 d31f91ab00a5..6886c0b13c5d 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
@@ -1884,6 +1886,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 9734324cbd5f..eceaa7c857de 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -95,6 +95,7 @@ let RemotePageAccessManager = {
],
RPMPrefIsLocked: ["security.tls.version.min"],
RPMAddToHistogram: ["*"],
+ 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 28f5d864b0bd..cd0d6d4d3656 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
@@ -37,5 +37,6 @@ module.exports = {
RPMRecordTelemetryEvent: false,
RPMAddToHistogram: false,
RPMRemoveMessageListener: false,
+ RPMGetTorStrings: false,
},
};
diff --git a/xpcom/base/ErrorList.py b/xpcom/base/ErrorList.py
index 6b1a05a91b31..5f35cf7771f9 100755
--- a/xpcom/base/ErrorList.py
+++ b/xpcom/base/ErrorList.py
@@ -85,6 +85,7 @@ modules["URL_CLASSIFIER"] = Mod(42)
# ErrorResult gets its own module to reduce the chance of someone accidentally
# defining an error code matching one of the ErrorResult ones.
modules["ERRORRESULT"] = Mod(43)
+modules["TOR"] = Mod(44)
# NS_ERROR_MODULE_GENERAL should be used by modules that do not
# care if return code values overlap. Callers of methods that
@@ -1179,6 +1180,27 @@ with modules["ERRORRESULT"]:
errors["NS_ERROR_INTERNAL_ERRORRESULT_RANGEERROR"] = FAILURE(5)
+# =======================================================================
+# 44: 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-78.6.1esr-10.5-1] Bug 28125 - Prevent non-Necko network connections
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 1cf21f08461b4a19261dc26d32868185dc73d400
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Thu Oct 25 19:17:09 2018 +0000
Bug 28125 - Prevent non-Necko network connections
---
.../gecko/media/GeckoMediaDrmBridgeV21.java | 49 +---------------------
.../exoplayer2/upstream/DefaultHttpDataSource.java | 47 +--------------------
2 files changed, 3 insertions(+), 93 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
index 3ba59bfd6776..eb57b1013642 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
@@ -488,54 +488,7 @@ public class GeckoMediaDrmBridgeV21 implements GeckoMediaDrm {
@Override
protected Void doInBackground(final Void... params) {
- HttpURLConnection urlConnection = null;
- BufferedReader in = null;
- try {
- URI finalURI = new URI(mURL + "&signedRequest=" + URLEncoder.encode(new String(mDrmRequest), "UTF-8"));
- urlConnection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(finalURI);
- urlConnection.setRequestMethod("POST");
- if (DEBUG) Log.d(LOGTAG, "Provisioning, posting url =" + finalURI.toString());
-
- // Add data
- urlConnection.setRequestProperty("Accept", "*/*");
- urlConnection.setRequestProperty("User-Agent", getCDMUserAgent());
- urlConnection.setRequestProperty("Content-Type", "application/json");
-
- // Execute HTTP Post Request
- urlConnection.connect();
-
- int responseCode = urlConnection.getResponseCode();
- if (responseCode == HttpURLConnection.HTTP_OK) {
- in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StringUtils.UTF_8));
- String inputLine;
- StringBuffer response = new StringBuffer();
-
- while ((inputLine = in.readLine()) != null) {
- response.append(inputLine);
- }
- in.close();
- mResponseBody = String.valueOf(response).getBytes(StringUtils.UTF_8);
- if (DEBUG) Log.d(LOGTAG, "Provisioning, response received.");
- if (mResponseBody != null) Log.d(LOGTAG, "response length=" + mResponseBody.length);
- } else {
- Log.d(LOGTAG, "Provisioning, server returned HTTP error code :" + responseCode);
- }
- } catch (IOException e) {
- Log.e(LOGTAG, "Got exception during posting provisioning request ...", e);
- } catch (URISyntaxException e) {
- Log.e(LOGTAG, "Got exception during creating uri ...", e);
- } finally {
- if (urlConnection != null) {
- urlConnection.disconnect();
- }
- try {
- if (in != null) {
- in.close();
- }
- } catch (IOException e) {
- Log.e(LOGTAG, "Exception during closing in ...", e);
- }
- }
+ Log.i(LOGTAG, "This is Tor Browser. Skipping.");
return null;
}
diff --git a/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
index fdb44cc2ea1f..7a2044721d2d 100644
--- a/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
+++ b/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
@@ -395,51 +395,8 @@ public class DefaultHttpDataSource implements HttpDataSource {
*/
private HttpURLConnection makeConnection(URL url, byte[] postBody, long position,
long length, boolean allowGzip, boolean followRedirects) throws IOException, URISyntaxException {
- /**
- * Tor Project modified the way the connection object was created. For the sake of
- * simplicity, instead of duplicating the whole file we changed the connection object
- * to use the ProxySelector.
- */
- HttpURLConnection connection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(url.toURI());
-
- connection.setConnectTimeout(connectTimeoutMillis);
- connection.setReadTimeout(readTimeoutMillis);
- if (defaultRequestProperties != null) {
- for (Map.Entry<String, String> property : defaultRequestProperties.getSnapshot().entrySet()) {
- connection.setRequestProperty(property.getKey(), property.getValue());
- }
- }
- for (Map.Entry<String, String> property : requestProperties.getSnapshot().entrySet()) {
- connection.setRequestProperty(property.getKey(), property.getValue());
- }
- if (!(position == 0 && length == C.LENGTH_UNSET)) {
- String rangeRequest = "bytes=" + position + "-";
- if (length != C.LENGTH_UNSET) {
- rangeRequest += (position + length - 1);
- }
- connection.setRequestProperty("Range", rangeRequest);
- }
- connection.setRequestProperty("User-Agent", userAgent);
- if (!allowGzip) {
- connection.setRequestProperty("Accept-Encoding", "identity");
- }
- connection.setInstanceFollowRedirects(followRedirects);
- connection.setDoOutput(postBody != null);
- if (postBody != null) {
- connection.setRequestMethod("POST");
- if (postBody.length == 0) {
- connection.connect();
- } else {
- connection.setFixedLengthStreamingMode(postBody.length);
- connection.connect();
- OutputStream os = connection.getOutputStream();
- os.write(postBody);
- os.close();
- }
- } else {
- connection.connect();
- }
- return connection;
+ Log.i(TAG, "This is Tor Browser. Skipping.");
+ throw new IOException();
}
/**
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 33342: Avoid disconnect search addon error after removal.
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 355aef0d261db980c995c2c31abeefae7a5a218a
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Mar 13 18:19:30 2020 +0100
Bug 33342: Avoid disconnect search addon error after removal.
We removed the addon in #32767, but it was still being loaded
from addonStartup.json.lz4 and throwing an error on startup
because its resource: location is not available anymore.
---
toolkit/mozapps/extensions/internal/XPIProvider.jsm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index 5e467fb4f14c..794c206fb453 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -970,6 +970,12 @@ var BuiltInLocation = new (class _BuiltInLocation extends XPIStateLocation {
get enumerable() {
return false;
}
+
+ restore(saved) {
+ super.restore(saved);
+ // Bug 33342: avoid restoring disconnect addon from addonStartup.json.lz4.
+ this.removeAddon("disconnect(a)search.mozilla.org");
+ }
})();
/**
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 21952: Implement Onion-Location
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit d6247a9ad6b112f0d521ce30dcc85f0a193163c2
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Mar 5 22:16:39 2020 +0100
Bug 21952: Implement Onion-Location
Whenever a valid Onion-Location HTTP header (or corresponding HTML
<meta> http-equiv attribute) is found in a document load, we either
redirect to it (if the user opted-in via preference) or notify the
presence of an onionsite alternative with a badge in the urlbar.
---
browser/base/content/browser.js | 12 ++
browser/base/content/browser.xhtml | 3 +
browser/components/BrowserGlue.jsm | 9 ++
.../onionservices/OnionLocationChild.jsm | 43 ++++++
.../onionservices/OnionLocationParent.jsm | 161 +++++++++++++++++++++
.../content/onionlocation-notification-icons.css | 5 +
.../onionservices/content/onionlocation-urlbar.css | 27 ++++
.../content/onionlocation-urlbar.inc.xhtml | 10 ++
.../onionservices/content/onionlocation.svg | 3 +
.../content/onionlocationPreferences.inc.xhtml | 11 ++
.../content/onionlocationPreferences.js | 31 ++++
browser/components/onionservices/jar.mn | 2 +
browser/components/onionservices/moz.build | 2 +
browser/components/preferences/privacy.inc.xhtml | 2 +
browser/components/preferences/privacy.js | 17 +++
browser/themes/shared/notification-icons.inc.css | 2 +
browser/themes/shared/urlbar-searchbar.inc.css | 2 +
dom/base/Document.cpp | 34 ++++-
dom/base/Document.h | 2 +
dom/webidl/Document.webidl | 9 ++
modules/libpref/init/StaticPrefList.yaml | 5 +
xpcom/ds/StaticAtoms.py | 1 +
22 files changed, 392 insertions(+), 1 deletion(-)
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index e1681a2759db..7d52c125b94e 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -44,6 +44,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
NetUtil: "resource://gre/modules/NetUtil.jsm",
NewTabUtils: "resource://gre/modules/NewTabUtils.jsm",
OpenInTabsUtils: "resource:///modules/OpenInTabsUtils.jsm",
+ OnionLocationParent: "resource:///modules/OnionLocationParent.jsm",
PageActions: "resource:///modules/PageActions.jsm",
PageThumbs: "resource://gre/modules/PageThumbs.jsm",
PanelMultiView: "resource:///modules/PanelMultiView.jsm",
@@ -5421,6 +5422,7 @@ var XULBrowserWindow = {
Services.obs.notifyObservers(null, "touchbar-location-change", location);
UpdateBackForwardCommands(gBrowser.webNavigation);
ReaderParent.updateReaderButton(gBrowser.selectedBrowser);
+ OnionLocationParent.updateOnionLocationBadge(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
// Bug 1108553 - Cannot rotate images with e10s
@@ -5963,6 +5965,16 @@ const AccessibilityRefreshBlocker = {
var TabsProgressListener = {
onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
+ // Clear OnionLocation UI
+ if (
+ aStateFlags & Ci.nsIWebProgressListener.STATE_START &&
+ aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK &&
+ aRequest &&
+ aWebProgress.isTopLevel
+ ) {
+ OnionLocationParent.onStateChange(aBrowser);
+ }
+
// Collect telemetry data about tab load times.
if (
aWebProgress.isTopLevel &&
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 4cab5fad6475..c2caecc1a416 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -1077,6 +1077,9 @@
onclick="FullZoom.reset();"
tooltip="dynamic-shortcut-tooltip"
hidden="true"/>
+
+#include ../../components/onionservices/content/onionlocation-urlbar.inc.xhtml
+
<box id="pageActionSeparator" class="urlbar-page-action"/>
<image id="pageActionButton"
class="urlbar-icon urlbar-page-action"
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index d30abff54562..e08e461a27ff 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -539,6 +539,13 @@ let LEGACY_ACTORS = {
observers: ["keyword-uri-fixup"],
},
},
+ OnionLocation: {
+ child: {
+ module: "resource:///modules/OnionLocationChild.jsm",
+ events: { pageshow: {} },
+ messages: ["OnionLocation:Refresh"],
+ },
+ },
};
if (AppConstants.TOR_BROWSER_UPDATE) {
@@ -713,6 +720,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
XPCOMUtils.defineLazyModuleGetters(this, {
AboutLoginsParent: "resource:///modules/AboutLoginsParent.jsm",
AsyncPrefs: "resource://gre/modules/AsyncPrefs.jsm",
+ OnionLocationParent: "resource:///modules/OnionLocationParent.jsm",
PluginManager: "resource:///actors/PluginParent.jsm",
ReaderParent: "resource:///modules/ReaderParent.jsm",
});
@@ -816,6 +824,7 @@ const listeners = {
"AboutLogins:VulnerableLogins": ["AboutLoginsParent"],
"Reader:FaviconRequest": ["ReaderParent"],
"Reader:UpdateReaderButton": ["ReaderParent"],
+ "OnionLocation:Set": ["OnionLocationParent"],
},
observe(subject, topic, data) {
diff --git a/browser/components/onionservices/OnionLocationChild.jsm b/browser/components/onionservices/OnionLocationChild.jsm
new file mode 100644
index 000000000000..1059eb7d5925
--- /dev/null
+++ b/browser/components/onionservices/OnionLocationChild.jsm
@@ -0,0 +1,43 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["OnionLocationChild"];
+
+const { ActorChild } = ChromeUtils.import(
+ "resource://gre/modules/ActorChild.jsm"
+);
+
+class OnionLocationChild extends ActorChild {
+ handleEvent(event) {
+ this.onPageShow(event);
+ }
+
+ onPageShow(event) {
+ if (event.target != this.content.document) {
+ return;
+ }
+ const onionLocationURI = this.content.document.onionLocationURI;
+ if (onionLocationURI) {
+ this.mm.sendAsyncMessage("OnionLocation:Set");
+ }
+ }
+
+ receiveMessage(aMessage) {
+ if (aMessage.name == "OnionLocation:Refresh") {
+ const doc = this.content.document;
+ const docShell = this.mm.docShell;
+ const onionLocationURI = doc.onionLocationURI;
+ const refreshURI = docShell.QueryInterface(Ci.nsIRefreshURI);
+ if (onionLocationURI && refreshURI) {
+ refreshURI.refreshURI(
+ onionLocationURI,
+ doc.nodePrincipal,
+ 0,
+ false,
+ true
+ );
+ }
+ }
+ }
+}
diff --git a/browser/components/onionservices/OnionLocationParent.jsm b/browser/components/onionservices/OnionLocationParent.jsm
new file mode 100644
index 000000000000..1c79fc07d215
--- /dev/null
+++ b/browser/components/onionservices/OnionLocationParent.jsm
@@ -0,0 +1,161 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["OnionLocationParent"];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+// Prefs
+const NOTIFICATION_PREF = "privacy.prioritizeonions.showNotification";
+const PRIORITIZE_ONIONS_PREF = "privacy.prioritizeonions.enabled";
+
+// Element IDs
+const ONIONLOCATION_BOX_ID = "onion-location-box";
+const ONIONLOCATION_BUTTON_ID = "onion-location-button";
+const ONIONLOCATION_LABEL_ID = "onion-label";
+
+// Notification IDs
+const NOTIFICATION_ID = "onion-location";
+const NOTIFICATION_ANCHOR_ID = "onionlocation";
+
+// Strings
+const STRING_ONION_AVAILABLE = TorStrings.onionLocation.onionAvailable;
+const NOTIFICATION_CANCEL_LABEL = TorStrings.onionLocation.notNow;
+const NOTIFICATION_CANCEL_ACCESSKEY = TorStrings.onionLocation.notNowAccessKey;
+const NOTIFICATION_OK_LABEL = TorStrings.onionLocation.alwaysPrioritize;
+const NOTIFICATION_OK_ACCESSKEY =
+ TorStrings.onionLocation.alwaysPrioritizeAccessKey;
+const NOTIFICATION_TITLE = TorStrings.onionLocation.tryThis;
+const NOTIFICATION_DESCRIPTION = TorStrings.onionLocation.description;
+const NOTIFICATION_LEARN_MORE_URL = TorStrings.onionLocation.learnMoreURL;
+
+var OnionLocationParent = {
+ // Listeners are added in BrowserGlue.jsm
+ receiveMessage(aMsg) {
+ switch (aMsg.name) {
+ case "OnionLocation:Set":
+ this.setOnionLocation(aMsg.target);
+ break;
+ }
+ },
+
+ buttonClick(event) {
+ if (event.button != 0) {
+ return;
+ }
+ const win = event.target.ownerGlobal;
+ const browser = win.gBrowser.selectedBrowser;
+ this.redirect(browser);
+ },
+
+ redirect(browser) {
+ browser.messageManager.sendAsyncMessage("OnionLocation:Refresh");
+ this.setDisabled(browser);
+ },
+
+ onStateChange(browser) {
+ delete browser._onionLocation;
+ this.hideNotification(browser);
+ },
+
+ setOnionLocation(browser) {
+ const win = browser.ownerGlobal;
+ browser._onionLocation = true;
+ if (browser === win.gBrowser.selectedBrowser) {
+ this.updateOnionLocationBadge(browser);
+ }
+ },
+
+ hideNotification(browser) {
+ const win = browser.ownerGlobal;
+ if (browser._onionLocationPrompt) {
+ win.PopupNotifications.remove(browser._onionLocationPrompt);
+ }
+ },
+
+ showNotification(browser) {
+ const mustShow = Services.prefs.getBoolPref(NOTIFICATION_PREF, true);
+ if (!mustShow) {
+ return;
+ }
+
+ const win = browser.ownerGlobal;
+ Services.prefs.setBoolPref(NOTIFICATION_PREF, false);
+
+ const mainAction = {
+ label: NOTIFICATION_OK_LABEL,
+ accessKey: NOTIFICATION_OK_ACCESSKEY,
+ callback() {
+ Services.prefs.setBoolPref(PRIORITIZE_ONIONS_PREF, true);
+ OnionLocationParent.redirect(browser);
+ win.openPreferences("privacy-onionservices");
+ },
+ };
+
+ const cancelAction = {
+ label: NOTIFICATION_CANCEL_LABEL,
+ accessKey: NOTIFICATION_CANCEL_ACCESSKEY,
+ callback: () => {},
+ };
+
+ const options = {
+ autofocus: true,
+ persistent: true,
+ removeOnDismissal: false,
+ eventCallback(aTopic) {
+ if (aTopic === "removed") {
+ delete browser._onionLocationPrompt;
+ delete browser.onionpopupnotificationanchor;
+ }
+ },
+ learnMoreURL: NOTIFICATION_LEARN_MORE_URL,
+ displayURI: {
+ hostPort: NOTIFICATION_TITLE, // This is hacky, but allows us to have a title without extra markup/css.
+ },
+ hideClose: true,
+ popupIconClass: "onionlocation-notification-icon",
+ };
+
+ // A hacky way of setting the popup anchor outside the usual url bar icon box
+ // onionlocationpopupnotificationanchor comes from `${ANCHOR_ID}popupnotificationanchor`
+ // From https://searchfox.org/mozilla-esr68/rev/080f9ed47742644d2ff84f7aa0b10aea5c4…
+ browser.onionlocationpopupnotificationanchor = win.document.getElementById(
+ ONIONLOCATION_BUTTON_ID
+ );
+
+ browser._onionLocationPrompt = win.PopupNotifications.show(
+ browser,
+ NOTIFICATION_ID,
+ NOTIFICATION_DESCRIPTION,
+ NOTIFICATION_ANCHOR_ID,
+ mainAction,
+ [cancelAction],
+ options
+ );
+ },
+
+ setEnabled(browser) {
+ const win = browser.ownerGlobal;
+ const label = win.document.getElementById(ONIONLOCATION_LABEL_ID);
+ label.textContent = STRING_ONION_AVAILABLE;
+ const elem = win.document.getElementById(ONIONLOCATION_BOX_ID);
+ elem.removeAttribute("hidden");
+ },
+
+ setDisabled(browser) {
+ const win = browser.ownerGlobal;
+ const elem = win.document.getElementById(ONIONLOCATION_BOX_ID);
+ elem.setAttribute("hidden", true);
+ },
+
+ updateOnionLocationBadge(browser) {
+ if (browser._onionLocation) {
+ this.setEnabled(browser);
+ this.showNotification(browser);
+ } else {
+ this.setDisabled(browser);
+ }
+ },
+};
diff --git a/browser/components/onionservices/content/onionlocation-notification-icons.css b/browser/components/onionservices/content/onionlocation-notification-icons.css
new file mode 100644
index 000000000000..7c8a6d892c6f
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-notification-icons.css
@@ -0,0 +1,5 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+.onionlocation-notification-icon {
+ display: none;
+}
\ No newline at end of file
diff --git a/browser/components/onionservices/content/onionlocation-urlbar.css b/browser/components/onionservices/content/onionlocation-urlbar.css
new file mode 100644
index 000000000000..91cad5f178d1
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-urlbar.css
@@ -0,0 +1,27 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+#onion-location-button {
+ list-style-image: url(chrome://browser/content/onionservices/onionlocation.svg);
+}
+
+#onion-location-box {
+ border-radius: 3px;
+ background-color: #6200A4;
+ padding-left: 5px;
+ padding-right: 5px;
+ color: white;
+ -moz-context-properties: fill;
+ fill: white;
+}
+
+#onion-location-box:hover {
+ background-color: #0060DF !important;
+}
+
+toolbar[brighttext] #onion-location-box {
+ background-color: #9400ff;
+}
+
+toolbar[brighttext] #onion-location-box:hover {
+ background-color: #0060DF !important;
+}
diff --git a/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
new file mode 100644
index 000000000000..b612a4236f3c
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
@@ -0,0 +1,10 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<hbox id="onion-location-box"
+ class="urlbar-icon-wrapper urlbar-page-action"
+ role="button"
+ hidden="true"
+ onclick="OnionLocationParent.buttonClick(event);">
+ <image id="onion-location-button" role="presentation"/>
+ <hbox id="onion-label-container"><label id="onion-label"/></hbox>
+</hbox>
diff --git a/browser/components/onionservices/content/onionlocation.svg b/browser/components/onionservices/content/onionlocation.svg
new file mode 100644
index 000000000000..37f40ac1812f
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="m8.016411 14.54499v-0.969784c3.071908-0.0089 5.559239-2.501304 5.559239-5.575429 0-3.073903-2.487331-5.566336-5.559239-5.575206v-0.9697843c3.607473 0.00909 6.528802 2.935521 6.528802 6.544991 0 3.609691-2.921329 6.536342-6.528802 6.545213zm0-3.394356c1.732661-0.0091 3.135111-1.415756 3.135111-3.150857 0-1.734878-1.402451-3.141542-3.135111-3.150634v-0.9695626c2.268448 0.00887 4.104895 1.849753 4.104895 4.120197 0 2.270666-1.836447 4.111549-4.104895 4.120419zm0-4.846926c0.9294227 0.00887 1.680545 0.7644289 1.680545 1.696069 0 0.9318627-0.7511226 1.687421-1.680545 1.696291zm-8.016411 1.696069c0 4.418473 3.581527 8.000222 8 8.000222 4.418251 0 8-3.581749 8-8.000222 0-4.418251-3.581749-7.999778-8-7.999778-4.418473 0-8 3.581527-8 7.999778z" />
+</svg>
\ No newline at end of file
diff --git a/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
new file mode 100644
index 000000000000..c285f403f99b
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
@@ -0,0 +1,11 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<groupbox id="onionServicesGroup" data-category="panePrivacy" data-subcategory="onionservices" hidden="true">
+ <label><html:h2 id="onionServicesTitle"></html:h2></label>
+ <label><label class="tail-with-learn-more" id="prioritizeOnionsDesc"></label><label
+ class="learnMore" is="text-link" id="onionServicesLearnMore"></label></label>
+ <radiogroup id="prioritizeOnionsRadioGroup" aria-labelledby="prioritizeOnionsDesc" preference="privacy.prioritizeonions.enabled">
+ <radio id="onionServicesRadioAlways" value="true"/>
+ <radio id="onionServicesRadioAsk" value="false"/>
+ </radiogroup>
+</groupbox>
diff --git a/browser/components/onionservices/content/onionlocationPreferences.js b/browser/components/onionservices/content/onionlocationPreferences.js
new file mode 100644
index 000000000000..aa569b54721c
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocationPreferences.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+const OnionLocationPreferences = {
+ init() {
+ document.getElementById("onionServicesTitle").textContent =
+ TorStrings.onionLocation.onionServicesTitle;
+ document.getElementById("prioritizeOnionsDesc").textContent =
+ TorStrings.onionLocation.prioritizeOnionsDescription;
+ const learnMore = document.getElementById("onionServicesLearnMore");
+ learnMore.textContent = TorStrings.onionLocation.learnMore;
+ learnMore.href = TorStrings.onionLocation.learnMoreURL;
+ document.getElementById("onionServicesRadioAlways").label =
+ TorStrings.onionLocation.always;
+ document.getElementById("onionServicesRadioAsk").label =
+ TorStrings.onionLocation.askEverytime;
+ },
+};
+
+Object.defineProperty(this, "OnionLocationPreferences", {
+ value: OnionLocationPreferences,
+ enumerable: true,
+ writable: false,
+});
diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn
index 9d6ce88d1841..f45b16dc5d29 100644
--- a/browser/components/onionservices/jar.mn
+++ b/browser/components/onionservices/jar.mn
@@ -7,3 +7,5 @@ browser.jar:
content/browser/onionservices/onionservices.css (content/onionservices.css)
content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js)
content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml)
+ content/browser/onionservices/onionlocationPreferences.js (content/onionlocationPreferences.js)
+ content/browser/onionservices/onionlocation.svg (content/onionlocation.svg)
diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build
index e4b6d73f8f40..dfd664df434e 100644
--- a/browser/components/onionservices/moz.build
+++ b/browser/components/onionservices/moz.build
@@ -4,4 +4,6 @@ EXTRA_JS_MODULES += [
'ExtensionMessaging.jsm',
'HttpsEverywhereControl.jsm',
'OnionAliasStore.jsm',
+ 'OnionLocationChild.jsm',
+ 'OnionLocationParent.jsm',
]
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index eb7587afa0e1..6e05405079bf 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -14,6 +14,8 @@
<html:h1 data-l10n-id="privacy-header"/>
</hbox>
+#include ../onionservices/content/onionlocationPreferences.inc.xhtml
+
<!-- Tracking / Content Blocking -->
<groupbox id="trackingGroup" data-category="panePrivacy" hidden="true" aria-describedby="contentBlockingDescription">
<label id="contentBlockingHeader"><html:h2 data-l10n-id="content-blocking-enhanced-tracking-protection"/></label>
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index 41dda96a14de..92f35dc78d12 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -90,6 +90,12 @@ XPCOMUtils.defineLazyScriptGetter(
"chrome://browser/content/securitylevel/securityLevel.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionLocationPreferences"],
+ "chrome://browser/content/onionservices/onionlocationPreferences.js"
+);
+
XPCOMUtils.defineLazyServiceGetter(
this,
"listManager",
@@ -158,6 +164,9 @@ Preferences.addAll([
// Do not track
{ id: "privacy.donottrackheader.enabled", type: "bool" },
+ // Onion Location
+ { id: "privacy.prioritizeonions.enabled", type: "bool" },
+
// Media
{ id: "media.autoplay.default", type: "int" },
@@ -300,6 +309,13 @@ var gPrivacyPane = {
window.addEventListener("unload", unload);
},
+ /**
+ * Show the OnionLocation preferences UI
+ */
+ _initOnionLocation() {
+ OnionLocationPreferences.init();
+ },
+
/**
* Whether the prompt to restart Firefox should appear when changing the autostart pref.
*/
@@ -442,6 +458,7 @@ var gPrivacyPane = {
this._initTrackingProtectionExtensionControl();
OnionServicesAuthPreferences.init();
this._initSecurityLevel();
+ this._initOnionLocation();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/themes/shared/notification-icons.inc.css b/browser/themes/shared/notification-icons.inc.css
index 979ae9482244..7aa92d51f4d6 100644
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -415,3 +415,5 @@ html|*#webRTC-previewVideo {
background: #FFE900 url(chrome://browser/skin/notification-icons/update.svg) no-repeat center;
border-radius: 50%;
}
+
+%include ../../components/onionservices/content/onionlocation-notification-icons.css
\ No newline at end of file
diff --git a/browser/themes/shared/urlbar-searchbar.inc.css b/browser/themes/shared/urlbar-searchbar.inc.css
index 0b1f69342995..d3cc6bf7f024 100644
--- a/browser/themes/shared/urlbar-searchbar.inc.css
+++ b/browser/themes/shared/urlbar-searchbar.inc.css
@@ -824,3 +824,5 @@
.searchbar-search-button:hover:not([addengines=true]) > .searchbar-search-icon-overlay:-moz-locale-dir(rtl) {
margin-inline: -26px 20px;
}
+
+%include ../../components/onionservices/content/onionlocation-urlbar.css
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index ee2948b660aa..59bf445fafd0 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -2542,6 +2542,7 @@ void Document::ResetToURI(nsIURI* aURI, nsILoadGroup* aLoadGroup,
// mDocumentURI.
mDocumentBaseURI = nullptr;
mChromeXHRDocBaseURI = nullptr;
+ mOnionLocationURI = nullptr;
// Check if the current document is the top-level DevTools document.
// For inner DevTools frames, mIsDevToolsDocument will be set when
@@ -6025,6 +6026,22 @@ void Document::GetHeaderData(nsAtom* aHeaderField, nsAString& aData) const {
}
}
+static bool IsValidOnionLocation(nsIURI* aDocumentURI,
+ nsIURI* aOnionLocationURI) {
+ bool isHttpish;
+ nsAutoCString host;
+ return aDocumentURI && aOnionLocationURI &&
+ NS_SUCCEEDED(aDocumentURI->SchemeIs("https", &isHttpish)) &&
+ isHttpish && NS_SUCCEEDED(aDocumentURI->GetAsciiHost(host)) &&
+ !StringEndsWith(host, NS_LITERAL_CSTRING(".onion")) &&
+ ((NS_SUCCEEDED(aOnionLocationURI->SchemeIs("http", &isHttpish)) &&
+ isHttpish) ||
+ (NS_SUCCEEDED(aOnionLocationURI->SchemeIs("https", &isHttpish)) &&
+ isHttpish)) &&
+ NS_SUCCEEDED(aOnionLocationURI->GetAsciiHost(host)) &&
+ StringEndsWith(host, NS_LITERAL_CSTRING(".onion"));
+}
+
void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) {
if (!aHeaderField) {
NS_ERROR("null headerField");
@@ -6100,6 +6117,21 @@ void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) {
aHeaderField == nsGkAtoms::handheldFriendly) {
mViewportType = Unknown;
}
+
+ if (aHeaderField == nsGkAtoms::headerOnionLocation && !aData.IsEmpty()) {
+ nsCOMPtr<nsIURI> onionURI;
+ if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(onionURI), aData)) &&
+ IsValidOnionLocation(Document::GetDocumentURI(), onionURI)) {
+ if (StaticPrefs::privacy_prioritizeonions_enabled()) {
+ nsCOMPtr<nsIRefreshURI> refresher(mDocumentContainer);
+ if (refresher) {
+ refresher->RefreshURI(onionURI, NodePrincipal(), 0, false, true);
+ }
+ } else {
+ mOnionLocationURI = onionURI;
+ }
+ }
+ }
}
void Document::TryChannelCharset(nsIChannel* aChannel, int32_t& aCharsetSource,
@@ -10140,7 +10172,7 @@ void Document::RetrieveRelevantHeaders(nsIChannel* aChannel) {
static const char* const headers[] = {
"default-style", "content-style-type", "content-language",
"content-disposition", "refresh", "x-dns-prefetch-control",
- "x-frame-options",
+ "x-frame-options", "onion-location",
// add more http headers if you need
// XXXbz don't add content-location support without reading bug
// 238654 and its dependencies/dups first.
diff --git a/dom/base/Document.h b/dom/base/Document.h
index 6d06a8c2a8cd..6e80306e94b5 100644
--- a/dom/base/Document.h
+++ b/dom/base/Document.h
@@ -3322,6 +3322,7 @@ class Document : public nsINode,
void ReleaseCapture() const;
void MozSetImageElement(const nsAString& aImageElementId, Element* aElement);
nsIURI* GetDocumentURIObject() const;
+ nsIURI* GetOnionLocationURI() const { return mOnionLocationURI; }
// Not const because all the fullscreen goop is not const
const char* GetFullscreenError(CallerType);
bool FullscreenEnabled(CallerType aCallerType) {
@@ -4194,6 +4195,7 @@ class Document : public nsINode,
nsCOMPtr<nsIURI> mChromeXHRDocURI;
nsCOMPtr<nsIURI> mDocumentBaseURI;
nsCOMPtr<nsIURI> mChromeXHRDocBaseURI;
+ nsCOMPtr<nsIURI> mOnionLocationURI;
// The base domain of the document for third-party checks.
nsCString mBaseDomain;
diff --git a/dom/webidl/Document.webidl b/dom/webidl/Document.webidl
index 8130db018f47..df3a18eaf266 100644
--- a/dom/webidl/Document.webidl
+++ b/dom/webidl/Document.webidl
@@ -676,3 +676,12 @@ partial interface Document {
[ChromeOnly, Pure]
readonly attribute nsIPermissionDelegateHandler permDelegateHandler;
};
+
+
+/**
+ * Extension to allows chrome JS to know whether the document has a valid
+ * Onion-Location that we could redirect to.
+ */
+partial interface Document {
+ [ChromeOnly] readonly attribute URI? onionLocationURI;
+};
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index 3f881146ca1e..75382661ca59 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -8446,6 +8446,11 @@
value: @IS_NIGHTLY_BUILD@
mirror: always
+- name: privacy.prioritizeonions.enabled
+ type: RelaxedAtomicBool
+ value: false
+ mirror: always
+
#---------------------------------------------------------------------------
# Prefs starting with "prompts."
#---------------------------------------------------------------------------
diff --git a/xpcom/ds/StaticAtoms.py b/xpcom/ds/StaticAtoms.py
index ab5f662575e4..23a5d6f9bb95 100644
--- a/xpcom/ds/StaticAtoms.py
+++ b/xpcom/ds/StaticAtoms.py
@@ -811,6 +811,7 @@ STATIC_ATOMS = [
Atom("oninputsourceschange","oninputsourceschange"),
Atom("oninstall", "oninstall"),
Atom("oninvalid", "oninvalid"),
+ Atom("headerOnionLocation", "onion-location"),
Atom("onkeydown", "onkeydown"),
Atom("onkeypress", "onkeypress"),
Atom("onkeyup", "onkeyup"),
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit d71e50d1719ed6b2f20e3f8a67f38c6a08cbac95
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Jul 14 11:15:07 2020 -0400
Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
Hide elements on about:logins that mention sync, "Firefox LockWise", and
Mozilla's LockWise mobile apps.
Disable the "Create New Login" button when security.nocertdb is true.
---
browser/components/aboutlogins/AboutLoginsParent.jsm | 2 ++
browser/components/aboutlogins/content/aboutLogins.css | 8 +++++++-
browser/components/aboutlogins/content/aboutLogins.js | 6 ++++++
.../aboutlogins/content/components/fxaccounts-button.css | 5 +++++
.../components/aboutlogins/content/components/menu-button.css | 10 ++++++++++
5 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/browser/components/aboutlogins/AboutLoginsParent.jsm b/browser/components/aboutlogins/AboutLoginsParent.jsm
index 015ce5f29332..d06d6d0ec6c7 100644
--- a/browser/components/aboutlogins/AboutLoginsParent.jsm
+++ b/browser/components/aboutlogins/AboutLoginsParent.jsm
@@ -62,6 +62,7 @@ const PASSWORD_SYNC_NOTIFICATION_ID = "enable-password-sync";
const HIDE_MOBILE_FOOTER_PREF = "signon.management.page.hideMobileFooter";
const SHOW_PASSWORD_SYNC_NOTIFICATION_PREF =
"signon.management.page.showPasswordSyncNotification";
+const NOCERTDB_PREF = "security.nocertdb";
// about:logins will always use the privileged content process,
// even if it is disabled for other consumers such as about:newtab.
@@ -431,6 +432,7 @@ class AboutLoginsParent extends JSWindowActorParent {
importVisible:
Services.policies.isAllowed("profileImport") &&
AppConstants.platform != "linux",
+ canCreateLogins: !Services.prefs.getBoolPref(NOCERTDB_PREF, false),
});
await AboutLogins._sendAllLoginRelatedObjects(
diff --git a/browser/components/aboutlogins/content/aboutLogins.css b/browser/components/aboutlogins/content/aboutLogins.css
index 7ed29bda8297..dca63da2e649 100644
--- a/browser/components/aboutlogins/content/aboutLogins.css
+++ b/browser/components/aboutlogins/content/aboutLogins.css
@@ -69,6 +69,11 @@ login-item {
grid-area: login;
}
+/* Do not promote Mozilla Sync in Tor Browser. */
+login-intro {
+ display: none !important;
+}
+
#branding-logo {
flex-basis: var(--sidebar-width);
flex-shrink: 0;
@@ -83,7 +88,8 @@ login-item {
}
}
-:root:not(.official-branding) #branding-logo {
+/* Hide "Firefox LockWise" branding in Tor Browser. */
+#branding-logo {
visibility: hidden;
}
diff --git a/browser/components/aboutlogins/content/aboutLogins.js b/browser/components/aboutlogins/content/aboutLogins.js
index da7d9016a2eb..361b2b0d02bf 100644
--- a/browser/components/aboutlogins/content/aboutLogins.js
+++ b/browser/components/aboutlogins/content/aboutLogins.js
@@ -19,6 +19,9 @@ const gElements = {
get loginFooter() {
return this.loginItem.shadowRoot.querySelector("login-footer");
},
+ get createNewLoginButton() {
+ return this.loginList.shadowRoot.querySelector(".create-login-button");
+ },
};
let numberOfLogins = 0;
@@ -100,6 +103,9 @@ window.addEventListener("AboutLoginsChromeToContent", event => {
gElements.loginList.setSortDirection(event.detail.value.selectedSort);
document.documentElement.classList.add("initialized");
gElements.loginList.classList.add("initialized");
+ if (!event.detail.value.canCreateLogins) {
+ gElements.createNewLoginButton.disabled = true;
+ }
break;
}
case "ShowLoginItemError": {
diff --git a/browser/components/aboutlogins/content/components/fxaccounts-button.css b/browser/components/aboutlogins/content/components/fxaccounts-button.css
index aefda548c84d..a02707980158 100644
--- a/browser/components/aboutlogins/content/components/fxaccounts-button.css
+++ b/browser/components/aboutlogins/content/components/fxaccounts-button.css
@@ -8,6 +8,11 @@
align-items: center;
}
+/* Do not promote Mozilla Sync in Tor Browser. */
+.logged-out-view {
+ display: none !important;
+}
+
.fxaccounts-extra-text {
/* Only show at most 3 lines of text to limit the
text from overflowing the header. */
diff --git a/browser/components/aboutlogins/content/components/menu-button.css b/browser/components/aboutlogins/content/components/menu-button.css
index 3c93d409b2c7..2d7380b2ea37 100644
--- a/browser/components/aboutlogins/content/components/menu-button.css
+++ b/browser/components/aboutlogins/content/components/menu-button.css
@@ -85,3 +85,13 @@
.menuitem-mobile-android {
background-image: url("chrome://browser/skin/logo-android.svg");
}
+
+/*
+ * Do not promote LockWise mobile apps in Tor Browser: hide the menu items
+ * and the separator line that precedes them.
+ */
+.menuitem-mobile-android,
+.menuitem-mobile-ios,
+button[data-event-name="AboutLoginsGetHelp"] + hr {
+ display: none !important;
+}
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 1650281 - P1: Widen `gCombinedSizes` once the buffers grow r=gerald
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 85c9f960a716ba317202211a932e8bc3ba8b4788
Author: Chun-Min Chang <chun.m.chang(a)gmail.com>
Date: Tue Jul 21 23:38:57 2020 +0000
Bug 1650281 - P1: Widen `gCombinedSizes` once the buffers grow r=gerald
The `gCombinedSizes` need to be enlarged once the inner buffer within
`MemoryBlockCache` grows. Otherwise, when the `MemoryBlockCache` is
released, subtracting the buffer-size of the `MemoryBlockCache` from
`gCombinedSizes` lead to a underflow.
Differential Revision: https://phabricator.services.mozilla.com/D84273
---
dom/media/MemoryBlockCache.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/dom/media/MemoryBlockCache.cpp b/dom/media/MemoryBlockCache.cpp
index 2d31119dca0a..bf073e6769d0 100644
--- a/dom/media/MemoryBlockCache.cpp
+++ b/dom/media/MemoryBlockCache.cpp
@@ -114,6 +114,10 @@ bool MemoryBlockCache::EnsureBufferCanContain(size_t aContentLength) {
// possibly bypass some future growths that would fit in this new capacity.
mBuffer.SetLength(capacity);
}
+ const size_t newSizes = gCombinedSizes += (extra + extraCapacity);
+ LOG("EnsureBufferCanContain(%zu) - buffer size %zu + requested %zu + bonus "
+ "%zu = %zu; combined sizes %zu",
+ aContentLength, initialLength, extra, extraCapacity, capacity, newSizes);
mHasGrown = true;
return true;
}
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 40002: Remove about:pioneer
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 831ec8b14a4d824e682defbe510b6343decee8a2
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Fri Aug 14 09:06:33 2020 -0400
Bug 40002: Remove about:pioneer
Firefox Pioneer is an opt-in program in which people volunteer to
participate in studies that collect detailed, sensitive data about
how they use their browser.
---
browser/components/about/AboutRedirector.cpp | 2 --
browser/components/about/components.conf | 1 -
2 files changed, 3 deletions(-)
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index 544e21782729..e7c377d655e7 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -114,8 +114,6 @@ static const RedirEntry kRedirMap[] = {
nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
- {"pioneer", "chrome://browser/content/pioneer.html",
- nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
#ifdef TOR_BROWSER_UPDATE
{"tbupdate", "chrome://browser/content/abouttbupdate/aboutTBUpdate.xhtml",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf
index d78de142e2e4..8e04467c05da 100644
--- a/browser/components/about/components.conf
+++ b/browser/components/about/components.conf
@@ -14,7 +14,6 @@ pages = [
'logins',
'newinstall',
'newtab',
- 'pioneer',
'pocket-saved',
'pocket-signup',
'policies',
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 40025: Remove Mozilla add-on install permissions
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 87f293539d05300cca8bf3e1413f4238f528bebb
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jul 27 18:12:55 2020 +0200
Bug 40025: Remove Mozilla add-on install permissions
---
browser/app/permissions | 6 ------
1 file changed, 6 deletions(-)
diff --git a/browser/app/permissions b/browser/app/permissions
index da6b6728043d..5c4c302f5ba5 100644
--- a/browser/app/permissions
+++ b/browser/app/permissions
@@ -11,12 +11,6 @@
origin uitour 1 https://3g2upl4pq6kufc4m.onion
origin uitour 1 about:tor
-# XPInstall
-origin install 1 https://addons.mozilla.org
-
# Remote troubleshooting
origin remote-troubleshooting 1 https://support.mozilla.org
-# addon install
-origin install 1 https://private-network.firefox.com
-origin install 1 https://fpn.firefox.com
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Bug 40073: Disable remote Public Suffix List fetching
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit 827918ce0c0126d2cdd9be0d05685c53d22f9057
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Aug 13 11:05:03 2020 +0200
Bug 40073: Disable remote Public Suffix List fetching
In https://bugzilla.mozilla.org/show_bug.cgi?id=1563246 Firefox implemented
fetching the Public Suffix List via RemoteSettings and replacing the default
one at runtime, which we do not want.
---
browser/components/BrowserGlue.jsm | 5 -----
1 file changed, 5 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index e08e461a27ff..ec38d0ca8b33 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -695,7 +695,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
PluralForm: "resource://gre/modules/PluralForm.jsm",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.jsm",
- PublicSuffixList: "resource://gre/modules/netwerk-dns/PublicSuffixList.jsm",
RemoteSettings: "resource://services-settings/remote-settings.js",
RemoteSecuritySettings:
"resource://gre/modules/psm/RemoteSecuritySettings.jsm",
@@ -2575,10 +2574,6 @@ BrowserGlue.prototype = {
this._addBreachesSyncHandler();
},
- () => {
- PublicSuffixList.init();
- },
-
() => {
RemoteSecuritySettings.init();
},
1
0

[tor-browser/tor-browser-78.6.1esr-10.5-1] Revert "Bug 21907: Fix runtime error on CentOS 6"
by sysrqb@torproject.org 15 Jan '21
by sysrqb@torproject.org 15 Jan '21
15 Jan '21
commit f79fc4ea7dcc627f7a8ac904c2c37cb3e68bb33c
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Sep 17 08:46:57 2020 +0000
Revert "Bug 21907: Fix runtime error on CentOS 6"
This reverts commit a00c57b6116329b5376bbf3f4212e5d2a3fece07.
The 10.0 series is the last one with CentOS 6 support.
---
gfx/harfbuzz/src/hb-glib.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++
gfx/harfbuzz/src/hb-glib.h | 5 +++++
2 files changed, 58 insertions(+)
diff --git a/gfx/harfbuzz/src/hb-glib.cc b/gfx/harfbuzz/src/hb-glib.cc
index 2fd39610203d..058f65ae69c3 100644
--- a/gfx/harfbuzz/src/hb-glib.cc
+++ b/gfx/harfbuzz/src/hb-glib.cc
@@ -49,6 +49,7 @@
**/
+#if !GLIB_CHECK_VERSION(2,29,14)
static const hb_script_t
glib_script_to_script[] =
{
@@ -170,6 +171,7 @@ glib_script_to_script[] =
HB_SCRIPT_SORA_SOMPENG,
HB_SCRIPT_TAKRI
};
+#endif
/**
* hb_glib_script_to_script:
@@ -185,6 +187,9 @@ glib_script_to_script[] =
hb_script_t
hb_glib_script_to_script (GUnicodeScript script)
{
+#if GLIB_CHECK_VERSION(2,29,14)
+ return (hb_script_t) g_unicode_script_to_iso15924 (script);
+#else
if (likely ((unsigned int) script < ARRAY_LENGTH (glib_script_to_script)))
return glib_script_to_script[script];
@@ -192,6 +197,7 @@ hb_glib_script_to_script (GUnicodeScript script)
return HB_SCRIPT_INVALID;
return HB_SCRIPT_UNKNOWN;
+#endif
}
/**
@@ -208,6 +214,9 @@ hb_glib_script_to_script (GUnicodeScript script)
GUnicodeScript
hb_glib_script_from_script (hb_script_t script)
{
+#if GLIB_CHECK_VERSION(2,29,14)
+ return g_unicode_script_from_iso15924 (script);
+#else
unsigned int count = ARRAY_LENGTH (glib_script_to_script);
for (unsigned int i = 0; i < count; i++)
if (glib_script_to_script[i] == script)
@@ -217,6 +226,7 @@ hb_glib_script_from_script (hb_script_t script)
return G_UNICODE_SCRIPT_INVALID_CODE;
return G_UNICODE_SCRIPT_UNKNOWN;
+#endif
}
@@ -263,6 +273,10 @@ hb_glib_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
hb_codepoint_t *ab,
void *user_data HB_UNUSED)
{
+#if GLIB_CHECK_VERSION(2,29,12)
+ return g_unichar_compose (a, b, ab);
+#endif
+
/* We don't ifdef-out the fallback code such that compiler always
* sees it and makes sure it's compilable. */
@@ -296,6 +310,10 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
hb_codepoint_t *b,
void *user_data HB_UNUSED)
{
+#if GLIB_CHECK_VERSION(2,29,12)
+ return g_unichar_decompose (ab, a, b);
+#endif
+
/* We don't ifdef-out the fallback code such that compiler always
* sees it and makes sure it's compilable. */
@@ -397,4 +415,39 @@ hb_glib_get_unicode_funcs ()
return static_glib_funcs.get_unconst ();
}
+
+
+#if GLIB_CHECK_VERSION(2,31,10)
+
+static void
+_hb_g_bytes_unref (void *data)
+{
+ g_bytes_unref ((GBytes *) data);
+}
+
+/**
+ * hb_glib_blob_create:
+ * @gbytes: the GBytes structure to work upon
+ *
+ * Creates an #hb_blob_t blob from the specified
+ * GBytes data structure.
+ *
+ * Return value: (transfer full): the new #hb_blob_t blob object
+ *
+ * Since: 0.9.38
+ **/
+hb_blob_t *
+hb_glib_blob_create (GBytes *gbytes)
+{
+ gsize size = 0;
+ gconstpointer data = g_bytes_get_data (gbytes, &size);
+ return hb_blob_create ((const char *) data,
+ size,
+ HB_MEMORY_MODE_READONLY,
+ g_bytes_ref (gbytes),
+ _hb_g_bytes_unref);
+}
+#endif
+
+
#endif
diff --git a/gfx/harfbuzz/src/hb-glib.h b/gfx/harfbuzz/src/hb-glib.h
index 4adbd7c332cb..5f04183ba19f 100644
--- a/gfx/harfbuzz/src/hb-glib.h
+++ b/gfx/harfbuzz/src/hb-glib.h
@@ -46,6 +46,11 @@ hb_glib_script_from_script (hb_script_t script);
HB_EXTERN hb_unicode_funcs_t *
hb_glib_get_unicode_funcs (void);
+#if GLIB_CHECK_VERSION(2,31,10)
+HB_EXTERN hb_blob_t *
+hb_glib_blob_create (GBytes *gbytes);
+#endif
+
HB_END_DECLS
#endif /* HB_GLIB_H */
1
0