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

14 Feb '22
commit 4d63b6e7addc2e4f095ebca712973b08c7b381cd
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Mon Feb 14 17:17:10 2022 +0100
Bug 40422: Remove projects/ed25519
---
projects/ed25519/config | 19 -------------------
.../Docs/Licenses/PluggableTransports/LICENSE | 10 ----------
2 files changed, 29 deletions(-)
diff --git a/projects/ed25519/config b/projects/ed25519/config
deleted file mode 100644
index c6790b8..0000000
--- a/projects/ed25519/config
+++ /dev/null
@@ -1,19 +0,0 @@
-# vim: filetype=yaml sw=2
-version: '[% c("abbrev") %]'
-git_url: https://github.com/agl/ed25519.git
-git_hash: c4161f4c7483313562781c61b9a20aba73daf9de
-filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
-
-build: '[% c("projects/go/var/build_go_lib") %]'
-
-var:
- container:
- use_container: 1
- go_lib: github.com/agl/ed25519
- go_lib_install:
- - github.com/agl/ed25519/extra25519
-
-input_files:
- - project: container-image
- - name: go
- project: go
diff --git a/projects/tor-browser/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE b/projects/tor-browser/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
index fd0dbd6..f0e7cdb 100644
--- a/projects/tor-browser/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
+++ b/projects/tor-browser/Bundle-Data/Docs/Licenses/PluggableTransports/LICENSE
@@ -194,16 +194,6 @@ For details about the Go License, please see LICENSE.GO.
===============================================================================
-agl/ed25519
-
-Copyright 2013 The Go Authors. All rights reserved.
-Use of this source code is governed by a BSD-style
-license that can be found in the LICENSE file.
-
-For details about the Go License, please see LICENSE.GO.
-
-===============================================================================
-
dchest/siphash
To the extent possible under law, the authors have dedicated all
1
0

[tor-browser-build/maint-11.0] Bug 40400: Add tools/changelog-format-blog-post
by boklm@torproject.org 14 Feb '22
by boklm@torproject.org 14 Feb '22
14 Feb '22
commit 35bf019cae0bcf2df56e74e63308cc8b815cddc7
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Tue Dec 14 13:20:23 2021 +0100
Bug 40400: Add tools/changelog-format-blog-post
---
tools/changelog-format-blog-post | 53 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/tools/changelog-format-blog-post b/tools/changelog-format-blog-post
new file mode 100755
index 0000000..a50ae8f
--- /dev/null
+++ b/tools/changelog-format-blog-post
@@ -0,0 +1,53 @@
+#!/usr/bin/perl -w
+
+# This script reads the ChangeLog.txt file and outputs it to stdout
+# in the format for the blog post.
+
+use strict;
+use FindBin;
+
+sub version_type {
+ return $_[0] =~ 'a' ? 'alpha' : 'release';
+}
+
+my ($changelog, $current_tbversion, $last_tbversion);
+
+if (!open(CHANGELOG, '<', "$FindBin::Bin/../ChangeLog.txt")) {
+ print STDERR "Error opening changelog file\n";
+ exit 1;
+}
+
+foreach (<CHANGELOG>) {
+ if (m/^Tor Browser ([^\s]+) -/) {
+ if ($current_tbversion) {
+ $last_tbversion = $1;
+ last if version_type($current_tbversion) eq version_type($last_tbversion);
+ next;
+ }
+ $current_tbversion = $1;
+ next;
+ }
+
+ next if $last_tbversion;
+
+ # Remove one space at the begining of all lines
+ s/^\s//;
+
+ # Replace '*' by '-'
+ s/^(\s*)\*/$1-/;
+
+ s/&/&/; s/</</; s/>/>/;
+
+ # Change bug numbers to links
+ s|Bug (\d+): ([^\[]+) \[([^\]]+)\]|[Bug $3#$1](https://gitlab.torproject.org/tpo/applications/$3/-/issues/$1): $2|;
+
+ $changelog .= $_;
+}
+
+my $changelog_branch = 'master';
+if (! ( $current_tbversion =~ m/a/ ) ) {
+ my @v = split(/\./, $current_tbversion);
+ $changelog_branch = "maint-$v[0].$v[1]";
+}
+print "The full changelog since [Tor Browser $last_tbversion](https://gitweb.torproject.org/builders/tor-browser-build.git/plain/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt?h=$changelog_branch) is:\n\n";
+print $changelog;
1
0

14 Feb '22
commit baad54b37dc0f30500a4993fe26e31876def03c4
Author: aguestuser <aguestuser(a)torproject.org>
Date: Fri Feb 11 11:09:34 2022 -0500
Bug 40430: Update allowed_addons.json
context
- in aa65127f (prep for 11.5a4 release) we bumped noscript from
version 11.2.4 to 11.2.9 in `projects/tor-browser/config` but not in
`projects/tor-browser/allowed_addons.json`, causing nightly builds to break
change
- here, we update `allowed_addons.json` to match the version and hash
specified in `config` (after `wget`ing the `xpi` in question and
manually verifying that the hash is correct)
---
projects/tor-browser/allowed_addons.json | 221 ++++++++++++++++---------------
projects/tor-browser/config | 4 +-
2 files changed, 114 insertions(+), 111 deletions(-)
diff --git a/projects/tor-browser/allowed_addons.json b/projects/tor-browser/allowed_addons.json
index 852f4e4..1305287 100644
--- a/projects/tor-browser/allowed_addons.json
+++ b/projects/tor-browser/allowed_addons.json
@@ -17,7 +17,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/13/13299/13299734.png?modifi…"
}
],
- "average_daily_users": 720637,
+ "average_daily_users": 776142,
"categories": {
"android": [
"experimental",
@@ -31,7 +31,7 @@
"contributions_url": "https://opencollective.com/darkreader?utm_content=product-page-contribute&u…",
"created": "2017-09-19T07:03:00Z",
"current_version": {
- "id": 5333770,
+ "id": 5360273,
"compatibility": {
"firefox": {
"min": "54.0",
@@ -42,7 +42,7 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/darkreader/versions/53337…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/darkreader/versions/53602…",
"is_strict_compatibility_enabled": false,
"license": {
"id": 22,
@@ -53,22 +53,22 @@
"url": "http://www.opensource.org/licenses/mit-license.php"
},
"release_notes": {
- "en-US": "- Dynamic mode bug fixes.\n- Users' fixes for websites."
+ "en-US": "- Revert reducing brightness for images (due to some performance issues).\n- Users' fixes for websites."
},
"reviewed": null,
- "version": "4.9.43",
+ "version": "4.9.45",
"files": [
{
- "id": 3878116,
- "created": "2021-12-07T13:18:32Z",
- "hash": "sha256:390bdc2609b43627b58e47bb3a3c2f42b156f16bd932b93746196615134db0b1",
+ "id": 3904618,
+ "created": "2022-02-05T17:44:16Z",
+ "hash": "sha256:7df6f5a6c07d3740ed26be3c24fdd1719b77e685506e2642f756ce3538b3cc7f",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 585173,
+ "size": 592244,
"status": "public",
- "url": "https://addons.mozilla.org/firefox/downloads/file/3878116/dark_reader-4.9.4…",
+ "url": "https://addons.mozilla.org/firefox/downloads/file/3904618/dark_reader-4.9.4…",
"permissions": [
"alarms",
"contextMenus",
@@ -143,7 +143,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2021-12-07T16:09:38Z",
+ "last_updated": "2022-02-07T12:07:52Z",
"name": {
"ar": "Dark Reader",
"bn": "Dark Reader",
@@ -216,10 +216,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.5576,
- "bayesian_average": 4.556315606540176,
- "count": 4141,
- "text_count": 1330
+ "average": 4.5591,
+ "bayesian_average": 4.557826525105629,
+ "count": 4216,
+ "text_count": 1355
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/darkreader/reviews/",
"requires_payment": false,
@@ -310,7 +310,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/darkreader/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/darkreader/versions/",
- "weekly_downloads": 24544
+ "weekly_downloads": 25706
},
"notes": null
},
@@ -326,7 +326,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/5/5474/5474073.png?modified=…"
}
],
- "average_daily_users": 690147,
+ "average_daily_users": 730697,
"categories": {
"android": [
"security-privacy"
@@ -459,10 +459,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.6651,
- "bayesian_average": 4.66260537524599,
- "count": 2189,
- "text_count": 436
+ "average": 4.6633,
+ "bayesian_average": 4.6608034421408995,
+ "count": 2207,
+ "text_count": 440
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/reviews/",
"requires_payment": false,
@@ -491,7 +491,7 @@
"type": "extension",
"url": "https://www.eff.org/https-everywhere",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/versions/",
- "weekly_downloads": 11296
+ "weekly_downloads": 11823
},
"notes": null
},
@@ -507,7 +507,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/6/6937/6937656.png?modified=…"
}
],
- "average_daily_users": 224180,
+ "average_daily_users": 238294,
"categories": {
"android": [
"security-privacy"
@@ -519,7 +519,7 @@
"contributions_url": "",
"created": "2014-06-10T05:46:02Z",
"current_version": {
- "id": 5289638,
+ "id": 5357809,
"compatibility": {
"firefox": {
"min": "56.0a1",
@@ -530,7 +530,7 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/decentraleyes/versions/52…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/decentraleyes/versions/53…",
"is_strict_compatibility_enabled": false,
"license": {
"id": 3338,
@@ -541,23 +541,22 @@
"url": "http://www.mozilla.org/MPL/2.0/"
},
"release_notes": {
- "en-US": "<i>New features:</i>\n\n- Added support for preconfigured enterprise policies.\n\n<i>New languages:</i>\n\n- Added support for the Albanian language.\n- Added partial support for the Sinhala language.\n- Added partial support for the Punjabi language.\n\n<i>Enhancements:</i>\n\n- Improved render performance of the popup panel.\n- Implemented preference prioritization logic.\n- Added additional resources to the staging environment.\n- Added dark mode-support to the welcome page.\n\n<i>Other changes:</i>\n\n- Applied a minor security update to the audit tool.\n- Applied various performance optimizations and stability improvements.\n- Improved and extended various existing localizations.",
- "nl": ""
+ "en-US": "<i>New languages:</i>\n\n- Added support for the Vietnamese language.\n\n<i>Enhancements:</i>\n\n- Improved popup panel display logic.\n\n<i>Bugfixes:</i>\n\n- Restored support for older versions of Firefox.\n\n<i>Other changes:</i>\n\n- Improved and extended various existing localizations.\n- Applied a minor design-related change to the options page.\n- Replaced remaining calls to a deprecated function."
},
"reviewed": null,
- "version": "2.0.16",
+ "version": "2.0.17",
"files": [
{
- "id": 3833987,
- "created": "2021-09-02T02:21:27Z",
- "hash": "sha256:fa87ceac1242c26a40c07e31be62d519c4e2cd6ffb5c1f83248cc924766465c9",
+ "id": 3902154,
+ "created": "2022-01-30T20:08:38Z",
+ "hash": "sha256:e7f16ddc458eb2bc5bea75832305895553fca53c2565b6f1d07d5d9620edaff1",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 6939989,
+ "size": 6941339,
"status": "public",
- "url": "https://addons.mozilla.org/firefox/downloads/file/3833987/decentraleyes-2.0…",
+ "url": "https://addons.mozilla.org/firefox/downloads/file/3902154/decentraleyes-2.0…",
"permissions": [
"*://*/*",
"privacy",
@@ -603,6 +602,7 @@
"sv-SE": "Webbplatser har alltmer börjat förlita sig mycket på tredjeparter för att tillhandahålla material. Avbryta förfrågningar från annonser eller trackers går vanligtvis utan problem, men att blockera sidans innehåll kan, inte ovÀntat, få sidor att sluta fungera. Syftet med detta tillÀgg Àr att ta bort mellanhanden genom att tillhandahålla blixtsnabb leverans av lokala (paketerade) filer för att förbÀttra integritet på nÀtet.\n\n     ⢠Skyddar integriteten genom att undvika stora leveransnÀtverk som hÀvdar att de erbjuder gratis tjÀnster.\n     ⢠Kompletterar vanliga blockerare som uBlock Origin (rekommenderas), Adblock Plus, med flera.\n     ⢠Fungerar direkt ur lådan; absolut ingen tidigare konfiguration krÀvs.\n\n<i>Obs: Decentraleyes Àr ingen dunderkur, men det hindrar en hel del webbplatser från att få dig att skicka dessa typer av förfrågningar. I slutÀndan kan du göra Decentraleyes blockera förfrågningar om
eventuella saknade CDN-resurser ocksÃ¥.</i>\n\n   > Enklare introduktion: <a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4745aba6c…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>Ãr jag för nÀrvarande skyddad?</b>\n\nFöljande <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">testverktyget</a> visar om du Àr ordentligt skyddad. Det Àr det rekommenderade och förmodligen det snabbaste sÀttet att bekrÀfta att tillÀgget Àr installerat, aktiverat och korrekt konfigurerat.\n\n   > LÀnk till testverktyg: <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https://decentraley
es.org/test</a>\n\n<b>Vanliga frÃ¥gor</b>\n\n   > LÀnk till vanliga frÃ¥gor: <a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>Teknisk information</b>\n\n- NÀtverk som stöds: Google Hosted Libraries, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Public Resources och UpYun Libraries.\n\n- Samlade resurser: AngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js och Web Font Loader.\n\n<b>Personlig support</b>\n\nÃr din frÃ¥ga inte listad ovan, eller har du nÃ¥gon annan anledning att kontakta mig personligen? Du kan alltid nÃ¥ mig pÃ¥ <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.c
om</a>. Felrapporter och förslag vÀlkomnas varmt och jag svarar pÃ¥ alla e-postmeddelanden.\n\nAnvÀnd gÀrna <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">den hÀr publika PGP-nyckeln</a> för krypterad kommunikation.\n\n   > LÀnk till publik PGP-nyckel: <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>Uppskattar du detta tillÀgg?</b>\n\nDecentraleyes Àr och kommer alltid att vara gratis. Du kan stödja dess fortsatta utveckling genom att ge en donation, genom att hjÀlpa till pÃ¥ GitLab eller bara sprida kunskap om tillÀgget (vilket gör under). All hjÀlp uppskattas hjÀrtligt!\n\n     ⢠GitLab: <a href=\"https://outgoing.prod.mozaw
s.net/v1/26434c016cfe12000d62fedab907c037c0263b2e24b6351ccf2f6343cf5759b9/https%3A//git.synz.io/Synzvato/decentraleyes\" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\n     ⢠Donera: <a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa7198c7d0a8a9effcbd…" rel=\"nofollow\">https://decentraleyes.org/donate</a>",
"tr": "Web siteleri giderek daha çok bÃŒyÃŒk ÌçÌncÃŒ taraf içerik daÄıtıcılarına itibar etmeye baÅladı. Reklamlar veya iz sÃŒrÃŒcÃŒler için istekleri engellemek genellikle sorunsuzdur, fakat gerçek içeriÄi engellemek, bekleneceÄi ÃŒzere, sayfaların iÅleyiÅini bozmaktadır. Bu eklentinin amacı çevrimiçi mahremiyeti artırmak için yerel (bÃŒtÃŒnleÅik) dosyaları ıÅık hızında sunarak aracıları aradan çıkarmaktır.\n\n     ⢠Ãcretsiz hizmet sunduÄunu iddia eden bÃŒyÃŒk daÄıtım aÄlarını aradan çıkararak mahremiyeti korur.\n     ⢠uBlock Origin (önerilir), Adblock Plus, vb. gibi olaÄan engelleyicileri tamamlar.\n     ⢠Kutudan çıktıÄı gibi çalıÅır; ön ayarlamaya ihtiyaç duymaz.\n\n<i>Not: Decentraleyes sihirli çözÃŒm deÄildir, ama birçok web sitesinin sizi bu istekleri göndermeye zorlamasını engeller. Son olarak, Decentraleyes'ın herhangi eksik bir CDN kaynaÄı için istekleri engellemesini de
saÄlayabilirsiniz.</i>\n\n   > Basit tanıtım: <a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4745aba6c…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>Åu Anda Korunuyor Muyum?</b>\n\nAÅaÄıdaki <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">test yardımcı programı</a> dÃŒzgÃŒn Åekilde korunmuÅ iseniz size gösterir. Bu, eklentinin yÃŒklÃŒ, etkin ve doÄru yapılandırılmıŠolup olmadıÄını görmek için önerilen ve muhtemelen en hızlı yol budur.\n\n   > Test yardımcı programı için tam baÄlantı: <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https
://decentraleyes.org/test</a>\n\n<b>Sıkça Sorulan Sorular</b>\n\n   > SSS için tam baÄlantı: <a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>Teknik bilgi</b>\n\n- Desteklenen AÄlar: Google Tarafından Barındırılan KÃŒtÃŒphaneler, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Kamusal Kaynaklar ve UpYun KÃŒtÃŒphaneleri.\n\n- BÃŒtÃŒnleÅik Kaynaklar: AngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js ve Web Font YÃŒkleyici.\n\n<b>KiÅisel Destek</b>\n\nSorunuz yukarıda listelenenlerden biri deÄil mi, veya Åahsen bana ulaÅmak için baÅka bir sebebiniz var mı? Her zaman bana b
uradan ulaÅabilirsiniz <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.com</a>. Hata raporlarına veya önerilere çok açıÄım ve her bir e-postayı yanıtlıyorum.\n\nKullanmaktan çekinmeyin <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">bu genel PGP anahtarı</a> Åifreli iletiÅim içindir.\n\n   > Genel PGP anahtarına tam baÄlantı: <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>Bu Eklenti HoÅunuza Gitti Mi?</b>\n\nDecentraleyes ÃŒcretsizdir ve her zaman öyle kalacaktır, ama sÃŒrekli geliÅtirilmesini bir baÄıÅı yaparak, GitLab ÃŒzerinde katkı sunarak veya onu yayarak (ki harikalar yaratabilir) destekleyebilirsiniz. Herh
angi bir yardımdan bÃŒyÃŒk mutluluk duyacaÄız!\n\n     ⢠GitLab: <a href=\"https://outgoing.prod.mozaws.net/v1/26434c016cfe12000d62fedab907c037c0263b2…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\n     ⢠BaÄıŠyap: <a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa7198c7d0a8a9effcbd…" rel=\"nofollow\">https://decentraleyes.org/donate</a>",
"uk": "ÐебÑайÑО ÐŽÐµÐŽÐ°Ð»Ñ ÑаÑÑÑÑе пПклаЎаÑÑÑÑÑ ÐœÐ° велОкÑ, ÑÑПÑÐŸÐœÐœÑ ÑеÑвÑÑО пПÑÑаÑÐ°ÐœÐœÑ ÐºÐŸÐœÑеМÑÑ. РблПкÑваММÑÐŒ ÑеклаЌО ÑО запОÑÑв ÑÑÐµÐ¶ÐµÐœÐœÑ Ð·Ð°Ð·Ð²ÐžÑай Ме Ð²ÐžÐœÐžÐºÐ°Ñ Ð¿ÑПблеЌ, ПЎМак ÑÑлÑÑÑÑÐ²Ð°ÐœÐœÑ ÐºÐŸÐœÑеМÑÑ ÐŽÐ»Ñ Ð²ÑЎПбÑÐ°Ð¶ÐµÐœÐœÑ ÑÑПÑÑМПк ПÑевОЎМП Ð»Ð°ÐŒÐ°Ñ Ð¿ÑаÑезЎаÑМÑÑÑÑ ÑайÑÑв. ЊÑÐ»Ð»Ñ ÑÑПгП ЎПЎаÑÐºÑ Ñ Ð¿ÑОбÑаÑО пПÑеÑеЎМОкÑв, МаÑПЌÑÑÑÑ ÐŒÐžÑÑÑвП пПÑÑавлÑÑÑО ÑеÑÑÑÑО ÐŽÐ»Ñ Ð²ÑЎПбÑÐ°Ð¶ÐµÐœÐœÑ ÑайÑÑв, ÑÐºÑ Ð·Ð±ÐµÑÑгаÑÑÑÑÑ Ð»ÐŸÐºÐ°Ð»ÑМП Ма кПЌп'ÑÑеÑÑ, ÑП в ÑÐ²ÐŸÑ ÑеÑÐ³Ñ Ð¿ÐŸÐºÑаÑÑÑ Ð²Ð°ÑÑ Ð¿ÑОваÑМÑÑÑÑ Ð² ЌеÑежÑ.\n\n     ⢠ÐаÑ
ОÑÐ°Ñ Ð¿ÑОваÑМÑÑÑÑ ÑлÑÑ
ПЌ ÑÐœÐžÐºÐ°ÐœÐœÑ Ð²ÐµÐ»ÐžÐºÐžÑ
ЌеÑеж ЎПпÑÐ°Ð²Ð»ÐµÐœÐœÑ Ñ ÑПзпÐ
ŸÐ²ÑÑÐŽÐ¶ÐµÐœÐœÑ ÐºÐŸÐœÑеМÑÑ (CDN), ÑÐºÑ Ð·Ð°ÑвлÑÑÑÑ, ÑП ÑÑ
ÐœÑ ÑеÑвÑÑО бÑÑÑÐŒÑП безкПÑÑПвМÑ.\n     ⢠ÐПпПвМÑÑ Ð·Ð²ÐžÑÐ°Ð¹ÐœÑ Ð±Ð»ÐŸÐºÑвалÑМОкО, ÑÐ°ÐºÑ Ñк: uBlock Origin (ÑекПЌеМЎПваМП), Adblok Plus ÑПÑП.\n     ⢠ÐÑаÑÑÑ ÐŸÐŽÑÐ°Ð·Ñ Ð· кПÑПбкО; Ме пПÑÑебÑÑ Ð¶ÐŸÐŽÐœÐžÑ
пПпеÑеЎМÑÑ
МалаÑÑÑваМÑ.\n\n<i>ÐÑОЌÑÑка: Decentraleyes Ме Ñ ÑÑÑÐ±ÐœÐŸÑ ÐºÑлеÑ, але вÑМ забПÑПМÑÑ Ð±Ð°Ð³Ð°ÑÑПЌ вебÑайÑаЌ ÑПбОÑО вОÑеПпОÑÐ°ÐœÑ Ð·Ð°Ð¿ÐžÑО. ÐÑеÑÑПÑ, вО ЌПжеÑе МалаÑÑÑваÑО Decentraleyes блПкÑваÑО ÑÑÑ Ð·Ð°Ð¿ÐžÑО ЎП CDN, МавÑÑÑ ÑкÑП ÑеÑÑÑÑО вÑÐŽÑÑÑÐœÑ Ð»ÐŸÐºÐ°Ð»ÑМП.</i>\n\n   > ÐÑПÑÑÑÑе ПзМайПЌлеММÑ: <a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4745aba6c…
s%3A//git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction\" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>ЧО заÑ
ОÑеМОй Ñ Ð·Ð°Ñаз?</b>\n\nÐаÑÑÑпМа <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">ÑеÑÑПва ÑÑОлÑÑа</a> пПкаже ваЌ ÑО вО ЎПÑÑаÑМÑП заÑ
ОÑеМÑ. Ње ÑекПЌеМЎПваМОй Ñ, ЌПжлОвП, МайÑвОЎÑОй ÑпПÑÑб пеÑевÑÑОÑО ÑО Ñей ЎПЎаÑПк вÑÑаМПвлеМОй, акÑОвМОй Ñ ÐºÐŸÑекÑМП МалаÑÑПваМОй.\n\n   > ÐПвМе пПÑÐžÐ»Ð°ÐœÐœÑ ÐœÐ° ÑеÑÑÐŸÐ²Ñ ÑÑОлÑÑÑ: <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https://decentraleyes.org/test</a>\n
\n<b>ЧаÑÑÑ Ð·Ð°Ð¿ÐžÑаММÑ</b>\n\n   > ÐПвМе пПÑÐžÐ»Ð°ÐœÐœÑ ÐœÐ° ÑаÑÑÑ Ð¿ÐžÑаММÑ: <a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>ТеÑ
МÑÑМа ÑМÑПÑЌаÑÑÑ</b>\n\n- ÐеÑежÑ, ÑП пÑÐŽÑÑОЌÑÑÑÑÑÑ: Google Hosted Libraries, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Public Resources, Ñа UpYun Libraries.\n\n- ÐМÑегÑÐŸÐ²Ð°ÐœÑ ÑеÑÑÑÑО: AngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js, Ñа Web Font Loader.\n\n<b>ÐеÑÑПМалÑМа пÑÐŽÑÑОЌка</b>\n\nÐÑЎпПвÑÐŽÑ ÐœÐ° ваÑе пОÑÐ°ÐœÐœÑ ÐœÐµÐŒÐ°Ñ
в ÑекÑÑÑ Ð²ÐžÑе абП Ñ Ð²Ð°Ñ Ñ Ð±ÑÐŽÑ-ÑÐºÑ ÑМÑÑ Ð¿ÑОÑОМО зв'ÑзаÑОÑÑ Ð·Ñ ÐŒÐœÐŸÑ ÐŸÑПбОÑÑП? Ð¢ÐŸÐŽÑ Ð²Ðž ЌПжеÑе Ñе зÑПбОÑО пП ÑÑй аЎÑеÑÑ <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.com</a>. ÐПвÑÐŽÐŸÐŒÐ»ÐµÐœÐœÑ Ð¿ÑП пПЌОлкО абП пÑПпПзОÑÑÑ ÑОÑП вÑÑаÑÑÑÑÑ, Ñ Ð²ÑЎпПвÑÐŽÐ°Ñ ÐœÐ° кПжеМ ПÑÑОЌаМОй лОÑÑ.\n\nÐе вагайÑеÑÑ Ð²ÐžÐºÐŸÑОÑÑПвÑваÑО <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">Ñей пÑблÑÑМОй PGP клÑÑ</a> ÐŽÐ»Ñ Ð·Ð°ÑОÑÑПваМПгП звеÑМеММÑ.\n\n   > ÐПвМе пПÑÐžÐ»Ð°ÐœÐœÑ ÐœÐ° пÑблÑÑМОй PGP клÑÑ: <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…
aleyes.org/3f774aff6d/public-key.txt\" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>ÐаЌ пПЎПбаÑÑÑÑÑ Ñей ЎПЎаÑПк?</b>\n\nDecentraleyes Ñ Ñ Ð·Ð°Ð²Ð¶ÐŽÐž бÑЎе безкПÑÑПвМОЌ, пÑПÑе вО ЌПжеÑе пÑÐŽÑÑОЌаÑО йПгП МевпОММОй пÑПÑÐµÑ ÑПзÑПбкО ÑлÑÑ
ПЌ гÑПÑПвПгП вМеÑкÑ, пÑОйМÑвÑО ÑÑаÑÑÑ Ñ ÑПзÑПбÑÑ ÐœÐ° GitLab, абП пПÑОÑÑÑÑО Ñей ЎПЎаÑПк ÑеÑеЎ ÑМÑОÑ
лÑЎей (ÑП ÑПбОÑÑ ÐŽÐžÐ²Ð°). ЩОÑа вЎÑÑМÑÑÑÑ Ð·Ð° бÑÐŽÑ-ÑÐºÑ ÐŽÐŸÐ¿ÐŸÐŒÐŸÐ³Ñ!\n\n     ⢠GitLab: <a href=\"https://outgoing.prod.mozaws.net/v1/26434c016cfe12000d62fedab907c037c0263b2…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\n     ⢠ÐÑÐŽÑÑОЌаÑО: <a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa719
8c7d0a8a9effcbd09b31c9f48af1c75b3f23f8a6/https%3A//decentraleyes.org/donate\" rel=\"nofollow\">https://decentraleyes.org/donate</a>",
+ "vi": "Các trang web Äang ngà y cà ng phụ thuá»c nhiá»u hÆ¡n và o các bên thứ ba lá»n cho viá»c cung cấp ná»i dung. Viá»c há»§y yêu cầu cho quảng cáo hoặc trình theo dõi thưá»ng khÃŽng gặp vấn Äá» gì, tuy nhiên viá»c chặn hẳn ná»i dung, như Äã Äoán, là m há»ng các trang. Mục ÄÃch cá»§a tiá»n Ãch nà y là Äá» cắt bá» phÃa trung gian bằng cách cung cấp nhanh chóng các (gói) tá»p cục bá» nhằm cải thiá»n quyá»n riêng tư trá»±c tuyến.\n\n     ⢠Bảo vá» quyá»n riêng tư bằng cách né tránh các mạng lưá»i phân phá»i lá»n mà tá»± nháºn rằng há» cung cấp dá»ch vụ miá»
n phÃ.\n     ⢠Bá» sung các phần má»m chặn thÃŽng thưá»ng như uBlock Origin (nên dùng), Adblock Plus, v.v.\n     ⢠Cứ thế hoạt Äá»ng thÃŽi; hoà n toà n khÃŽng cần cà i chá»nh thêm gì.\n\n<i>Ghi chú: Decentraleyes khÃŽng phải cây gáºy như Ü, nhưng nó vẫn
ngÄn chặn rất nhiá»u trang web khá»i viá»c bắt bạn gá»i các loại yêu cầu nà y. Rá»t cuá»c thì, bạn vẫn có thá» khiến Decentraleyes chặn các yêu cầu cho bất cứ tà i nguyên CDN bá» thiếu nà o.</i>\n\n   > Giá»i thiá»u ÄÆ¡n giản: <a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4745aba6c…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>TÃŽi có Äang ÄÆ°á»£c bảo vá» khÃŽng?</b>\n\n Äá» xem bạn có ÄÆ°á»£c bảo vá» Äúng cách hay khÃŽng, hãy dùng <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">cÃŽng cụ thá»</a> sau Äây. Äây là cách ÄÆ°á»£c khuyến nghá», và có lẜ cÅ©ng là cách nhanh nhất Äá» xem liá»u tiá»n Ãch
bá» sung nà y Äã ÄÆ°á»£c cà i Äặt, ÄÆ°á»£c báºt vÃ ÄÆ°á»£c cấu hình Äúng hay chưa.\n\n   > ÄÆ°á»ng dẫn tá»i cÃŽng cụ thá»: <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https://decentraleyes.org/test</a>\n\n<b>Câu há»i thưá»ng gặp</b>\n\n   > ÄÆ°á»ng dẫn tá»i các câu há»i thưá»ng gặp (FAQ): <a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>ThÃŽng tin kỹ thuáºt</b>\n\n- Mạng ÄÆ°á»£c há» trợ: Google Hosted Libraries, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Public Resources, và UpYun Libraries.\n\n-
Gói tà i nguyên: AngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js, và Web Font Loader.\n\n<b>Há» trợ cá nhân</b>\n\nCâu há»i cá»§a bạn khÃŽng ÄÆ°á»£c liá»t kê á» trên, hoặc bạn có lÜ do nà o khác muá»n liên há» vá»i tÃŽi? Bạn luÃŽn có thá» liên há» tại <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.com</a>. Các báo cáo lá»i hoặc Äá» xuất Äá»u rất ÄÆ°á»£c hoan nghênh, và tÃŽi cÅ©ng sẜ trả lá»i từng email.\n\nBạn có thá» thoải mái sá» dụng <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">khóa PGP cÃŽng khai nà y</a> cho viá»c mã hóa giao tiếp.\n\n   > ÄÆ°á»ng dẫn tá»i khóa PGP cÃŽng khai: <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c376
0afe28f50debb8e19627d7e824b814b/https%3A//decentraleyes.org/3f774aff6d/publ…" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>Bạn có Äang táºn hưá»ng tiá»n Ãch nà y khÃŽng?</b>\n\nDecentraleyes là , và sẜ luÃŽn là miá»
n phÃ, nhưng bạn có thá» há» trợ sá»± phát triá»n liên tục cá»§a nó bằng cách quyên góp, bằng cách Äóng góp trên GitLab, hoặc bằng cách truyá»n bá rá»ng rãi tiá»n Ãch nà y (chÃnh là cái là m nên Äiá»u kỳ diá»u). Chúng tÃŽi rất biết Æ¡n bất cứ sá»± trợ giúp nà o!\n\n     ⢠GitLab: <a href=\"https://outgoing.prod.mozaws.net/v1/26434c016cfe12000d62fedab907c037c0263b2…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\n     ⢠Ịng há»: <a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa7198c7d0a8a9effcbd…
aleyes.org/donate\" rel=\"nofollow\">https://decentraleyes.org/donate</a>",
"zh-CN": "è¶æ¥è¶å€ççœç«åŒå§æŽå äŸèµå€§åç¬¬äžæ¹æ¥äº€ä»å
容ãåæ¶å¯¹å¹¿åæè·èžªåšç请æ±é垞没æé®é¢ïŒäœå±èœå®é
å
容åçæåœç¶äŒæå页é¢ãæ€æ©å±çç®çæ¯æªå»äžéŽäººïŒæäŸè¶
é«éçæ¬å°ïŒèªåžŠçïŒæä»¶äº€ä»ä»¥æ¹åçœäžéç§ã\n\n     ⢠åé¿å£°ç§°ä¿æ€éç§å¹¶å
莹æå¡ç倧å亀ä»çœç»ä»¥ä¿æ€æšçéç§ã\n     ⢠èŸ
å©åžžè§è¿æ»€åšïŒäŸåŠ uBlock Origin (æšè)ïŒAdblock Plus çã\n     ⢠å³è£
å³çšïŒäœ¿çšåç»å¯¹äžéèŠä»»äœé
眮ã\n\n<i>泚æïŒDecentraleyes äžæ¯äžçµè¯ïŒäœå®çç¡®èœé²æ¢è®žå€çœç«è®©äœ åéæ€ç±»è¯·æ±ãæåïŒäœ è¿å¯ä»¥è®© Decentraleyes å±èœä»»äœçŒºå€±ç CDN èµæºã</i>\n\n   > æŽç®çç®ä»ïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4745aba6c…" rel=\"nofollow
\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>æç®åæ¯åŠåå°ä¿æ€?</b>\n\nè¿äžª <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">æµè¯å·¥å
·</a> èœåè¯äœ äœ æ¯åŠåå°ä¿æ€ãæä»¬æšèæšçšè¿äžªç®åãå¿«éçæ¹åŒïŒæ£æ¥æ¬éå ç»ä»¶æ¯åŠå·²è¢«å®è£
ãå¯çšå¹¶æ£ç¡®é
眮ã\n\n   > æµè¯å·¥å
·ç宿ŽçœåïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https://decentraleyes.org/test</a>\n\n<b>åžžè§é®é¢åè§£ç</b>\n\n   > åžžè§é®é¢é¡µé¢ç宿ŽéŸæ¥ïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…" rel=\"nofollow\">https:
//git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>ææ¯ä¿¡æ¯</b>\n\n- æ¯æççœç»ïŒGoogle Hosted Libraries, Microsoft Ajax CDN, CDNJS (Cloudflare), jQuery CDN (MaxCDN), jsDelivr (MaxCDN), Yandex CDN, Baidu CDN, Sina Public Resources, å UpYun Librariesã\n\n- æå
çèµæºïŒAngularJS, Backbone.js, Dojo, Ember.js, Ext Core, jQuery, jQuery UI, Modernizr, MooTools, Prototype, Scriptaculous, SWFObject, Underscore.js å Web Font Loaderã\n\n<b>äžªäººæ¯æ</b>\n\näœ çé®é¢äžè¿°æ²¡æè§£çïŒæè
äœ æå
¶ä»çç±èŠåç¬èç³»æïŒæšéæ¶å¯ä»¥èç³»æ: <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.com</a>ãå忬¢è¿æåºBugæ¥åæå»ºè®®ïŒæä¹äŒå倿¯äžå°çµåé®ä»¶ã\n\n欢è¿äœ¿çš <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">æ€ PGP å
¬é¥</a> äžæè¿è¡å å¯éä
¿¡ã\n\n   > PGP å
¬é¥å®æŽéŸæ¥ïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>äœ åæ¬¢è¿äžªæ©å±åïŒ</b>\n\nDecentraleyes ç®åæ¯å¹¶äžå°æ°žè¿æ¯å
莹çãäœäœ ä¹å¯ä»¥æ¯æå®çåŒåïŒæ¯åŠææ¬ŸïŒåš GitLab 莡ç®ïŒæè
äŒ æè¿äžªèœ¯ä»¶ïŒåªææ¯åç§°ïŒãä»»äœåž®å©éœäžèææ¿ïŒ\n\n     ⢠GitLabïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/26434c016cfe12000d62fedab907c037c0263b2…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\nÂ Â Â Â Â â¢ ææ¬ŸïŒ<a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa7198c7d0a8a9effcbd…" rel=\"nofollow\">https://decentraleyes.org/donat
e</a>",
"zh-TW": "èš±å€ç¶²ç«å·²é挞éå§äŸé ç¬¬äžæ¹å€§ç¶²ç«çæåäŸå³éå
§å®¹ãåæ¶è廣åæåæè¿œè¹€ç¶²ç«éçé£ç·éåžžäžææä»éºŒåé¡ïŒç¶èå°éç¶²é ç¶äžç寊éå
§å®¹å°±åŸæå¯èœæé æç¶²é é¯èª€ãæ€éå å
ä»¶çç®æšæ¯èŠééåšæ¬æ©æºåäžä»œåžžçšççšåŒåº«ïŒè®æšå¯ç¡é éé網路ååŸå³å¯å¿«éèŒå
¥éäºçšåŒåº«ïŒä¹æ¹åäºç·äžé±ç§ã\n\n     ⢠é¿å
é£ç·è³å®£çš±å
è²»ç倧åçå
§å®¹å³é網路ïŒä»¥ä¿è·æšçé±ç§ã\n     ⢠å¯èåžžèŠçå°éåšïŒäŸåŠ uBlock OriginïŒæšèŠäœ¿çšïŒãAdblock Plus ççäžå䜿çšïŒåèœäºè£ã\n     ⢠éšè£å³çšïŒäžéç¹å¥èšå®ã\n\n<i>èš»: Decentraleyes äžæ¯è¬èœïŒäœç確å¯é¿å
倧éç¶²ç«è®æšéåºéé¡è«æ±ãæçµïŒæšéå¯ä»¥è® Decentraleyes å°é猺å°ç CDN è³æºè«æ±ã</i>\n\n   > ç°¡å®ä»ç޹: <a href=\"https://outgoing.prod.mozaws.net/v1/d22d502c3b43fb2f96a0310a4f001f4
745aba6cf82e0ad5b78c2145db00476fd/https%3A//git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction\" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Simple-Introduction</a>\n\n<b>æç®åæ¯åŠåå°ä¿è·ïŒ</b>\n\néå <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">å°å·¥å
·</a> å¯é¡¯ç€ºæšæ¯åŠæ£ç¢ºåå°ä¿è·ãæšèŠæšéééåç°¡äŸ¿çæ¹åŒäŸç¢ºèªæ¯åŠå·²å®è£ãåçšã䞊æ£ç¢ºèšå®å®æéå¥éå å
ä»¶ã\n\n   > 枬詊工å
·ç宿Žéçµ: <a href=\"https://outgoing.prod.mozaws.net/v1/221301c720e1488012efd45e7bd7ec2124fb4e2…" rel=\"nofollow\">https://decentraleyes.org/test</a>\n\n<b>åžžèŠåé¡é</b>\n\n   > åžžèŠåé¡ç宿Žéçµ: <a href=\"https://outgoing.prod.mozaws.net/v1/1a6f38b165b3e86d666a5f770656e66788a71b6…
25/https%3A//git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions\" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes/wikis/Frequently-Asked-Questions</a>\n\n<b>æè¡è³èš</b>\n\n- æ¯æŽçå³é網路: Google Hosted LibrariesãMicrosoft Ajax CDNãCDNJS (Cloudflare)ãjQuery CDN (MaxCDN)ãjsDelivr (MaxCDN)ãYandex CDNãBaidu CDNãSina Public Resources 以å UpYun Librariesã\n\n- å
§å»ºè³æº: AngularJSãBackbone.jsãDojoãEmber.jsãExt CoreãjQueryãjQuery UIãModernizrãMooToolsãPrototypeãScriptaculousãSWFObjectãUnderscore.js 以å Web Font Loader çã\n\n<b>åäººæ¯æŽ</b>\n\nè¥æšçåé¡äžåšäžé¢ïŒæéæå
¶ä»å顿³é£çµ¡ææ¬äººåïŒæšå¯ä»¥å¯ä¿¡å° <a href=\"/\" rel=\"nofollow\">decentraleyes(a)protonmail.com</a>ãä¹éåžžæ¡è¿æšåå ± Bug ææ¯æäŸå»ºè°ïŒææåèŠæ¯äžå°ä¿¡ã\n\næ¡è¿äœ¿çš <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…
e824b814b/https%3A//decentraleyes.org/3f774aff6d/public-key.txt\" rel=\"nofollow\">æ€ PGP å
¬é°</a> é²è¡å å¯éèšã\n\n   > PGP å
¬é°ç宿Žéçµ: <a href=\"https://outgoing.prod.mozaws.net/v1/33b2d4ef799a5e03c5dcb380ecb55c3760afe28…" rel=\"nofollow\">https://decentraleyes.org/3f774aff6d/public-key.txt</a>\n\n<b>æšåæ¡éå¥éå å
ä»¶åïŒ</b>\n\nDecentraleyes ç®åå
è²»ïŒäžå°æ°žé å
è²»ãæšå¯ä»¥ééææ¬Ÿãåš GitLab è²¢ç»çšåŒç¢Œæå¹«å©å®£å³ïŒäŸæ¯æŽéå¥éå å
ä»¶çæ°žçºçŒå±ãéåžžæè¬æšçä»»äœå¹«å©ïŒ\n\n     ⢠GitLab: <a href=\"https://outgoing.prod.mozaws.net/v1/26434c016cfe12000d62fedab907c037c0263b2…" rel=\"nofollow\">https://git.synz.io/Synzvato/decentraleyes</a>\nÂ Â Â Â Â â¢ ææ¬Ÿ: <a href=\"https://outgoing.prod.mozaws.net/v1/d41865bc77319d73d03fa7198c7d0a8a
9effcbd09b31c9f48af1c75b3f23f8a6/https%3A//decentraleyes.org/donate\" rel=\"nofollow\">https://decentraleyes.org/donate</a>"
},
@@ -645,7 +645,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2021-09-03T09:18:28Z",
+ "last_updated": "2022-01-31T20:45:40Z",
"name": {
"ar": "Decentraleyes",
"bg": "Decentraleyes",
@@ -676,6 +676,7 @@
"sv-SE": "Decentraleyes",
"tr": "Decentraleyes",
"uk": "Decentraleyes",
+ "vi": "Decentraleyes",
"zh-CN": "Decentraleyes",
"zh-TW": "Decentraleyes"
},
@@ -721,10 +722,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.8099,
- "bayesian_average": 4.805137452044962,
- "count": 1189,
- "text_count": 226
+ "average": 4.8109,
+ "bayesian_average": 4.806163057596681,
+ "count": 1206,
+ "text_count": 228
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/reviews/",
"requires_payment": false,
@@ -761,6 +762,7 @@
"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, взаЌÑМ ÐœÐ°ÐŽÐ°Ñ Ð»ÐŸÐºÐ°Ð»ÑÐœÑ ÑайлО ÐŽÐ»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑÐµÐœÐœÑ ÑпÑавМПÑÑÑ ÑайÑÑв. ÐПпПвМÑÑ Ð·Ð²ÐžÑÐœÑ Ð±Ð»ÐŸÐºÐ°ÑПÑО кПМÑеМÑÑ.",
+ "vi": "Bảo vá» bạn khá»i bá» theo dõi thÃŽng qua viá»c phân phá»i ná»i dung \"miá»
n phÃ\", táºp trung. Nó ngÄn nhiá»u yêu cầu Äến các mạng lưá»i như Google Hosted Libraries, và giao các tá»p cục bá» Äá» giữ các trang web khá»i bá» lá»i. Bá» sung cho các trình chặn ná»i dung.",
"zh-CN": "ä¿æ€æšå
åéäžåŒçå
容亀ä»çœç»ïŒCDNïŒçè·èžªãå®å¯ä»¥æŠæªè®žå€ç§éŸå CDN ç请æ±ïŒèœ¬èæåæ¬å°æäŸçæä»¶ïŒä»è鲿¢çœç«åèœåæãèŸ
å©åžžè§çå
å®¹è¿æ»€è§åã",
"zh-TW": "ä¿è·æšäžåãå
è²»ããäžå¿åçå
§å®¹å³é網路ïŒCDNïŒçè¿œè¹€ãæ€éå å
ä»¶å¯é²æ¢æšçç芜åšéåºè«æ±å° Google Hosted Libraries éé¡çæåïŒäžŠå𿬿©æäŸçšåŒåº«ä»¥éå°çžåçææïŒèäžé æç¶²é é¯èª€ãå¯è£å
äžè¬å
§å®¹å°éåšçåèœã"
},
@@ -795,6 +797,7 @@
"sv-SE": "https://decentraleyes.org",
"tr": "https://decentraleyes.org",
"uk": "https://decentraleyes.org",
+ "vi": "https://decentraleyes.org",
"zh-CN": "https://decentraleyes.org",
"zh-TW": "https://decentraleyes.org"
},
@@ -807,7 +810,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/versions/",
- "weekly_downloads": 4750
+ "weekly_downloads": 4600
},
"notes": null
},
@@ -823,7 +826,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/5/5474/5474073.png?modified=…"
}
],
- "average_daily_users": 973188,
+ "average_daily_users": 1047445,
"categories": {
"android": [
"security-privacy"
@@ -1345,10 +1348,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.7993,
- "bayesian_average": 4.796428745055322,
- "count": 1968,
- "text_count": 387
+ "average": 4.7922,
+ "bayesian_average": 4.789383427482703,
+ "count": 2021,
+ "text_count": 400
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/reviews/",
"requires_payment": false,
@@ -1372,7 +1375,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/versions/",
- "weekly_downloads": 16349
+ "weekly_downloads": 17114
},
"notes": null
},
@@ -1388,7 +1391,7 @@
"picture_url": null
}
],
- "average_daily_users": 5191457,
+ "average_daily_users": 5616569,
"categories": {
"android": [
"security-privacy"
@@ -1400,18 +1403,18 @@
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
"current_version": {
- "id": 5341891,
+ "id": 5362670,
"compatibility": {
"firefox": {
- "min": "60.0",
+ "min": "68.0",
"max": "*"
},
"android": {
- "min": "60.0",
+ "min": "68.0",
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/ublock-origin/versions/53…",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/ublock-origin/versions/53…",
"is_strict_compatibility_enabled": false,
"license": {
"id": 6,
@@ -1422,22 +1425,22 @@
"url": "http://www.gnu.org/licenses/gpl-3.0.html"
},
"release_notes": {
- "en-US": "See complete release notes for <a href=\"https://outgoing.prod.mozaws.net/v1/90bb2b83a5130b536588d759f90b137cbd7523e…" rel=\"nofollow\">1.40.2</a>.\n\n<b>Closed as fixed:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/ae662bdc4a6203c3e24028f680e9b6fdbb19b7b…" rel=\"nofollow\">localhost: breakage</a></li></ul>\n<a href=\"https://outgoing.prod.mozaws.net/v1/a10383476cb962cc4f0e0b9f32bba6d8ae0a175…" rel=\"nofollow\">Commits history since last version</a>."
+ "en-US": "See complete release notes for <a href=\"https://outgoing.prod.mozaws.net/v1/8f1a1c9bde802fd173764201fe3c408fe936094…" rel=\"nofollow\">1.41.2</a>.\n\n<b>Notes</b>\n\nMinimum supported browser version has been bumped up Firefox 68.\n\n<b>New</b>\n\n<b>Dark mode</b>\n\nSupport for dark mode added to the <em>Settings</em> pane, under the (new) <em>Appearance</em> section. The new setting can be either <em>Auto</em>, <em>Light</em>, or <em>Dark</em>.\n\nIn addition, there is a new setting to control the accent color used by uBO throughout its user interface. For example, changing the accent color changes the look of the popup panel.\n\n<b>Behavior at browser launch</b>\n\nA new setting in <em>\"Filter lists\"</em> pane to control whether uBO should wait for all filter lists to be loaded before unsuspending network activity. By default, at browser launch uBO waits for all filter lists
to be loaded before unsuspending network activity so as to ensure web pages are properly filtered at launch.\n\nThe new setting allows to opt out of network activity suspension at launch, i.e. allowing web pages to load without waiting for filter lists to be fully loaded, of course at the cost of potentially not filtering properly those web pages.\n\n<b>Closed as fixed:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/2eab71586632eb640a895bec1b39be79077afd6…" rel=\"nofollow\">Logger incorrectly reporting <code>header=</code> filters</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/42bbec08988dab83ae4dafa0798eae142de7ed6…" rel=\"nofollow\">Picker is broken by quotation mark in attribute</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/d4e64acbfe1c46e4f275c5996fa356e3841dd73…
a138363c5a1/https%3A//github.com/uBlockOrigin/uBlock-issues/issues/1918%23i…" rel=\"nofollow\">Use \"âŠ\" instead of \"...\"</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/bab74682cd729207a20d88c4a4062b80312acfc…" rel=\"nofollow\">Fix bad detection of unnecessary trailing <code>|</code></a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/7c1a491f8edec5894e63b0e6b04e85a22592ff1…" rel=\"nofollow\">Unexplained popup block on streamlare</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/68625ccb914fa8a8ceb5575470af83fec911b66…" rel=\"nofollow\">Scrollbars appear in click2load.html</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/365fdd7916a792aa069cddd9e1a5e5dbd0a579e…
b72f1b4c6328e3dc/https%3A//github.com/uBlockOrigin/uBlock-issues/issues/185…" rel=\"nofollow\">Element Zapper denies on a specific website</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/d7b163312b5f8028fd69980302a9e655899d367…" rel=\"nofollow\">Prevent uBO from hiding html or body when matched by a generic cosmetic filter</a> (final fix)</li><li><a href=\"https://outgoing.prod.mozaws.net/v1/cdbd62b27ed42f78ab4f4966ada9560c8d2cadc…" rel=\"nofollow\">Dark Mode support</a></li></ul>\n<b>Notable commits without an entry in the issue tracker:</b>\n\n<ul><li><a href=\"https://outgoing.prod.mozaws.net/v1/382e7cf88882727789d14c5be75b206a537be20…" rel=\"nofollow\">Add a redirectable script that sets canRunAds true</a>\n <ul> <li>
<a href=\"https://outgoing.prod.mozaws.net/v1/18e2bbf0ef4779ce63340bdce8f17718a250718…" rel=\"nofollow\">Related commit</a> (contributed by @Yuki2718)\n </li></ul></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/83a72eea2b6f4714daac8d93f8d30cbed96617c…" rel=\"nofollow\">Work toward bringing dark theme closer to a stable release</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/8ad5936e192ccea4f3f085c76d75092ae198a9f…" rel=\"nofollow\">Raise minimum versions of browsers</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/ec36e87e6528a3b741a45c833a35fe710c037b8…
1578c0dcdf662f5c5cddd5a7d81\" rel=\"nofollow\">Improve dealing with ambiguity in regex-based-looking network filters</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/6d2bb828ee7b7f312a08f5673598b051ad2e72c…" rel=\"nofollow\">Improve google-analytics shim</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/5c3ba5b510e147ecf3111b1acfa256cf1d998db…" rel=\"nofollow\">Fix regression causing regex-based filters to be case sensitive</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/7d7cc9c5b291fb2585bd531aa70139a36203b84…" rel=\"nofollow\">Add shim for FingerprintJS (aka Fingerprint v3) </a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/d
d4f21a7b6195aa575427d6da5051075664e58eeb28918a693b534fc8e33938c/https%3A//g…" rel=\"nofollow\">Disable the suspending of network requests when installing the extension</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/810553680cb033078ceb67123d580374838a7eb…" rel=\"nofollow\">Do not select background images as best candidate in picker</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/b61ce516eb9943cd301adddafb0f5bb795aa3b9…" rel=\"nofollow\">Add \"blockedDetails\" section to troubleshooting information</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/8ac61cb733558e013223612b1003542bb7221e7…
12ee84957cf2545a6de9353\" rel=\"nofollow\">Remove \"ABP X Files\" from stock filter lists</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/087a2413630067a9e96de488b95fb402c35893e…" rel=\"nofollow\">Add setting to control suspension on network activity at launch</a></li><li><a href=\"https://outgoing.prod.mozaws.net/v1/0b74d2e26c9f2ac6dcea7342fe82ddfc68c7f1c…" rel=\"nofollow\">Make FilterJustOrigin derive from FilterOriginHitSet</a></li></ul>\n<a href=\"https://outgoing.prod.mozaws.net/v1/b2646c023bf1885a71d15d36ac28d885170e845…" rel=\"nofollow\">Commits history since last version</a>."
},
"reviewed": null,
- "version": "1.40.2",
+ "version": "1.41.2",
"files": [
{
- "id": 3886236,
- "created": "2021-12-26T12:44:41Z",
- "hash": "sha256:837915929c950651e46ed5cc30aa9faed84136e7715e74369a2eadf328bea065",
+ "id": 3907015,
+ "created": "2022-02-10T17:20:04Z",
+ "hash": "sha256:0ff07ab9f13d793ee8e5796937b3f06fa80bdcbec40d742374b0ce7ad04ff46b",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 2961920,
+ "size": 2990953,
"status": "public",
- "url": "https://addons.mozilla.org/firefox/downloads/file/3886236/ublock_origin-1.4…",
+ "url": "https://addons.mozilla.org/firefox/downloads/file/3907015/ublock_origin-1.4…",
"permissions": [
"dns",
"menus",
@@ -1551,7 +1554,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2022-01-11T16:21:16Z",
+ "last_updated": "2022-02-10T18:06:03Z",
"name": {
"ar": "uBlock Origin",
"bg": "uBlock Origin",
@@ -1696,10 +1699,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.7716,
- "bayesian_average": 4.771167323690879,
- "count": 12979,
- "text_count": 3480
+ "average": 4.7727,
+ "bayesian_average": 4.7722698916892465,
+ "count": 13179,
+ "text_count": 3535
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/reviews/",
"requires_payment": false,
@@ -1761,7 +1764,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/versions/",
- "weekly_downloads": 125806
+ "weekly_downloads": 130353
},
"notes": null
},
@@ -1777,7 +1780,7 @@
"picture_url": null
}
],
- "average_daily_users": 87644,
+ "average_daily_users": 90982,
"categories": {
"android": [
"photos-media"
@@ -1874,10 +1877,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.5126,
- "bayesian_average": 4.507501759055358,
- "count": 1030,
- "text_count": 390
+ "average": 4.514,
+ "bayesian_average": 4.508879840067731,
+ "count": 1033,
+ "text_count": 392
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/video-background-play-fix/re…",
"requires_payment": false,
@@ -1899,7 +1902,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/video-background-play-fix/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/video-background-play-fix/ve…",
- "weekly_downloads": 253
+ "weekly_downloads": 277
},
"notes": null
},
@@ -1915,7 +1918,7 @@
"picture_url": null
}
],
- "average_daily_users": 92805,
+ "average_daily_users": 97346,
"categories": {
"android": [
"experimental",
@@ -2033,10 +2036,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.4497,
- "bayesian_average": 4.435310659280604,
- "count": 358,
- "text_count": 99
+ "average": 4.4429,
+ "bayesian_average": 4.428818352287396,
+ "count": 368,
+ "text_count": 101
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-possum/reviews/",
"requires_payment": false,
@@ -2058,7 +2061,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-possum/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/privacy-possum/versions/",
- "weekly_downloads": 1674
+ "weekly_downloads": 1492
},
"notes": null
},
@@ -2074,7 +2077,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/12/12929/12929064.png?modifi…"
}
],
- "average_daily_users": 196402,
+ "average_daily_users": 206601,
"categories": {
"android": [
"photos-media",
@@ -2291,10 +2294,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.6529,
- "bayesian_average": 4.6476691311094935,
- "count": 1040,
- "text_count": 203
+ "average": 4.6569,
+ "bayesian_average": 4.6516867041491325,
+ "count": 1055,
+ "text_count": 208
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/search_by_image/reviews/",
"requires_payment": false,
@@ -2315,7 +2318,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/search_by_image/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/search_by_image/versions/",
- "weekly_downloads": 3713
+ "weekly_downloads": 3623
},
"notes": null
},
@@ -2338,7 +2341,7 @@
"picture_url": null
}
],
- "average_daily_users": 69156,
+ "average_daily_users": 72119,
"categories": {
"android": [
"other"
@@ -2620,10 +2623,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.4399,
- "bayesian_average": 4.43514347208329,
- "count": 1082,
- "text_count": 293
+ "average": 4.4415,
+ "bayesian_average": 4.436746886056066,
+ "count": 1094,
+ "text_count": 296
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/google-search-fixer/reviews/",
"requires_payment": false,
@@ -2643,7 +2646,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/google-search-fixer/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/google-search-fixer/versions/",
- "weekly_downloads": 108
+ "weekly_downloads": 37
},
"notes": null
},
@@ -2659,7 +2662,7 @@
"picture_url": "https://addons.mozilla.org/user-media/userpics/0/0/143.png?modified=1506804…"
}
],
- "average_daily_users": 348098,
+ "average_daily_users": 369234,
"categories": {
"android": [
"performance",
@@ -2673,7 +2676,7 @@
"contributions_url": "https://www.paypal.me/NoScript?utm_content=product-page-contribute&utm_medi…",
"created": "2005-05-13T10:51:32Z",
"current_version": {
- "id": 5343208,
+ "id": 5362989,
"compatibility": {
"firefox": {
"min": "59.0",
@@ -2684,7 +2687,7 @@
"max": "*"
}
},
- "edit_url": "https://addons.mozilla.org/en-US/developers/addon/noscript/versions/5343208",
+ "edit_url": "https://addons.mozilla.org/en-US/developers/addon/noscript/versions/5362989",
"is_strict_compatibility_enabled": false,
"license": {
"id": 13,
@@ -2695,22 +2698,22 @@
"url": "http://www.gnu.org/licenses/gpl-2.0.html"
},
"release_notes": {
- "en-US": "v 11.2.14\n============================================================\nx [nscl] Updated SyncMessage fixes conflict with other\n content blockers (thanks gwarser, barbaz and Baraoic)"
+ "en-US": "v 11.2.24rc1\n============================================================\nx [nscl] Avoid unnecessary window patching"
},
"reviewed": null,
- "version": "11.2.14",
+ "version": "11.2.24",
"files": [
{
- "id": 3887553,
- "created": "2021-12-29T21:36:54Z",
- "hash": "sha256:47399b94f57dde1162f74a49679c7cb3b6dfe684d4eee49842e65eae64e9982b",
+ "id": 3907334,
+ "created": "2022-02-10T23:13:36Z",
+ "hash": "sha256:be96f5efb1103ba978643348df1255e4f4409dd5d1a494222502be99f20da1d3",
"is_restart_required": false,
"is_webextension": true,
"is_mozilla_signed_extension": false,
"platform": "all",
- "size": 657255,
+ "size": 659553,
"status": "public",
- "url": "https://addons.mozilla.org/firefox/downloads/file/3887553/noscript_security…",
+ "url": "https://addons.mozilla.org/firefox/downloads/file/3907334/noscript_security…",
"permissions": [
"contextMenus",
"storage",
@@ -2775,7 +2778,7 @@
},
"is_disabled": false,
"is_experimental": false,
- "last_updated": "2021-12-30T08:43:35Z",
+ "last_updated": "2022-02-11T11:27:15Z",
"name": {
"de": "NoScript",
"el": "NoScript",
@@ -2863,10 +2866,10 @@
"category": "recommended"
},
"ratings": {
- "average": 4.4086,
- "bayesian_average": 4.405844933901775,
- "count": 1855,
- "text_count": 725
+ "average": 4.407,
+ "bayesian_average": 4.4042376055924235,
+ "count": 1865,
+ "text_count": 729
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/noscript/reviews/",
"requires_payment": false,
@@ -2902,7 +2905,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/noscript/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/noscript/versions/",
- "weekly_downloads": 9181
+ "weekly_downloads": 8955
},
"notes": null
},
@@ -2918,7 +2921,7 @@
"picture_url": null
}
],
- "average_daily_users": 126321,
+ "average_daily_users": 130864,
"categories": {
"android": [
"performance",
@@ -3030,10 +3033,10 @@
"category": "recommended"
},
"ratings": {
- "average": 3.9132,
- "bayesian_average": 3.908896818499659,
- "count": 1025,
- "text_count": 366
+ "average": 3.9086,
+ "bayesian_average": 3.904281831064806,
+ "count": 1029,
+ "text_count": 369
},
"ratings_url": "https://addons.mozilla.org/en-US/firefox/addon/youtube-high-definition/revi…",
"requires_payment": false,
@@ -3052,7 +3055,7 @@
"type": "extension",
"url": "https://addons.mozilla.org/en-US/firefox/addon/youtube-high-definition/",
"versions_url": "https://addons.mozilla.org/en-US/firefox/addon/youtube-high-definition/vers…",
- "weekly_downloads": 1454
+ "weekly_downloads": 1601
},
"notes": null
}
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index 9a711b7..3748f55 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -78,9 +78,9 @@ input_files:
enable: '[% ! 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.mozilla.org/firefox/downloads/file/3907334/noscript_security…
name: noscript
- sha256sum: 627ad134968a395fd585a6455087c1c1c461b993a4db0c1471f4c5d2c0cc1177
+ sha256sum: be96f5efb1103ba978643348df1255e4f4409dd5d1a494222502be99f20da1d3
- filename: 'RelativeLink/start-tor-browser.desktop'
enable: '[% c("var/linux") %]'
- filename: 'RelativeLink/execdesktop'
1
0

[tor-browser-build/master] Bug 40429: Make an error when incrementals are missing in hash_incrementals
by richard@torproject.org 10 Feb '22
by richard@torproject.org 10 Feb '22
10 Feb '22
commit c2601c6205ca89dd5f5a2c658b73d090e707f050
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Thu Feb 10 13:36:12 2022 +0100
Bug 40429: Make an error when incrementals are missing in hash_incrementals
---
projects/release/hash_incrementals | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/projects/release/hash_incrementals b/projects/release/hash_incrementals
index 4ab0f4d..7744ddf 100644
--- a/projects/release/hash_incrementals
+++ b/projects/release/hash_incrementals
@@ -9,7 +9,13 @@
[% ELSE -%]
cd [% shell_quote(path(dest_dir)) %]/[% c("var/signed_status") %]/[% c("version") %]-[% c("var/torbrowser_build") %]
[% END -%]
-sha256sum `ls -1 | grep '\.incremental\.mar$' | sort` > sha256sums-[% c("var/signed_status") %]-build.incrementals.txt
+if ls -1 | grep -q '\.incremental\.mar$'
+then
+ sha256sum `ls -1 | grep '\.incremental\.mar$' | sort` > sha256sums-[% c("var/signed_status") %]-build.incrementals.txt
+else
+ echo 'No incrementals were found' >&2
+ exit 1
+fi
[% IF c("var/sign_build") -%]
export HOME="$old_HOME"
gpg -abs [% c("var/sign_build_gpg_opts") %] sha256sums-[% c("var/signed_status") %]-build.incrementals.txt
1
0

[tor-browser-build/master] Merge remote-tracking branch 'gitlab-tpo/merge-requests/403'
by boklm@torproject.org 10 Feb '22
by boklm@torproject.org 10 Feb '22
10 Feb '22
commit e1d065e3059feab31816a930f49ab5066336d650
Merge: e3eb982 ddb8212
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Thu Feb 10 13:39:50 2022 +0100
Merge remote-tracking branch 'gitlab-tpo/merge-requests/403'
README | 6 ++++++
doc/BUILD_ERRORS.txt | 19 +++++++++++++++++++
2 files changed, 25 insertions(+)
1
0

[tor-browser-build/master] Bug 40298: Add documentation about subuid and subgid
by boklm@torproject.org 10 Feb '22
by boklm@torproject.org 10 Feb '22
10 Feb '22
commit ddb8212aeaaa10ff21faa84312ccc533d44f8100
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Thu Feb 10 09:14:37 2022 +0100
Bug 40298: Add documentation about subuid and subgid
---
README | 6 ++++++
doc/BUILD_ERRORS.txt | 19 +++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/README b/README
index 5407b0c..1e7a4b9 100644
--- a/README
+++ b/README
@@ -53,6 +53,12 @@ To enable them you can use the following command as root:
You can enable them permanently by adding the setting to /etc/sysctl.d/
+The user you use to build needs to have a range of subordinate uids and
+gids in /etc/subuid and /etc/subgid. Most of the time they are added by
+default when the user is created. If it was not the case, you can use
+usermod(8) with the --add-subuids and --add-subgids options. See also
+the subuid(5) and subgid(5) man pages.
+
Starting a build
----------------
diff --git a/doc/BUILD_ERRORS.txt b/doc/BUILD_ERRORS.txt
index 83f2257..8bad9ea 100644
--- a/doc/BUILD_ERRORS.txt
+++ b/doc/BUILD_ERRORS.txt
@@ -43,3 +43,22 @@ rm /etc/resolv.conf
Restart network-manager
sudo service network-manager restart
+
+
+Could not find uid in /etc/subuid
+---------------------------------
+
+In some cases you can have the error:
+
+ Error: Error starting remote:
+ Error: Could not find uid in /etc/subuid
+ Error: failed to set uidmap
+
+The user you use to build needs to have a range of subordinate uids and
+gids in /etc/subuid and /etc/subgid. Most of the time they are added by
+default when the user is created. If it was not the case, you can use
+usermod(8) with the --add-subuids and --add-subgids options. See also
+the subuid(5) and subgid(5) man pages.
+
+Note that the root user is not exempted from the requirement for a
+valid /etc/subuid and /etc/subgid entry, if you are building as root.
1
0

[tor-launcher/master] Added country code strings to network-settings.dtd and other
by richard@torproject.org 10 Feb '22
by richard@torproject.org 10 Feb '22
10 Feb '22
commit 5fcd4edb836fcab3db21139e670bddc77811e30c
Author: Richard Pospesel <richard(a)torproject.org>
Date: Wed Jan 19 19:09:33 2022 +0100
Added country code strings to network-settings.dtd and other
new about:torconnect strings
needed for tor-browser#40773
---
src/chrome/locale/en-US/network-settings.dtd | 259 +++++++++++++++++++++++++++
1 file changed, 259 insertions(+)
diff --git a/src/chrome/locale/en-US/network-settings.dtd b/src/chrome/locale/en-US/network-settings.dtd
index c5844d2..c1cadc9 100644
--- a/src/chrome/locale/en-US/network-settings.dtd
+++ b/src/chrome/locale/en-US/network-settings.dtd
@@ -94,3 +94,262 @@
<!ENTITY torConnect.connectedConcise "Connected">
<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
+<!ENTITY torConnect.configureConnection "Configure Connection…">
+<!ENTITY torConnect.tryBridge "Try a Bridge">
+
+<!-- #40773 about:torconnect country names -->
+<!-- LOCALIZTION NOTE (countries.XX): The country names should be translated such that:
+- some form of the 'official' name is preferred (we try to call countries what they call themselves)
+- the name can be easily found within a sorted list (eg: in English we prefer 'Netherlands' over 'The Netherlands' as most English speakers would not skip down to the 'T' section of the list to find the Netherlands, similarly 'Venezuela' vs 'Bolivarian Republic of Venezuela'). The names in this list will displayed to the user in a sorted order using String.prototype.localeCompare(); see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Ob… for details.
+
+Thank you!
+ -->
+<!ENTITY countries.ad "Andorra">
+<!ENTITY countries.ae "United Arab Emirates">
+<!ENTITY countries.af "Afghanistan">
+<!ENTITY countries.ag "Antigua and Barbuda">
+<!ENTITY countries.ai "Anguilla">
+<!ENTITY countries.al "Albania">
+<!ENTITY countries.am "Armenia">
+<!ENTITY countries.ao "Angola">
+<!ENTITY countries.aq "Antarctica">
+<!ENTITY countries.ar "Argentina">
+<!ENTITY countries.as "American Samoa">
+<!ENTITY countries.at "Austria">
+<!ENTITY countries.au "Australia">
+<!ENTITY countries.aw "Aruba">
+<!ENTITY countries.ax "Åland Islands">
+<!ENTITY countries.az "Azerbaijan">
+<!ENTITY countries.ba "Bosnia and Herzegovina">
+<!ENTITY countries.bb "Barbados">
+<!ENTITY countries.bd "Bangladesh">
+<!ENTITY countries.be "Belgium">
+<!ENTITY countries.bf "Burkina Faso">
+<!ENTITY countries.bg "Bulgaria">
+<!ENTITY countries.bh "Bahrain">
+<!ENTITY countries.bi "Burundi">
+<!ENTITY countries.bj "Benin">
+<!ENTITY countries.bl "Saint Barthélemy">
+<!ENTITY countries.bm "Bermuda">
+<!ENTITY countries.bn "Brunei Darussalam">
+<!ENTITY countries.bo "Bolivia (Plurinational State of)">
+<!ENTITY countries.bq "Bonaire, Sint Eustatius and Saba">
+<!ENTITY countries.br "Brazil">
+<!ENTITY countries.bs "Bahamas">
+<!ENTITY countries.bt "Bhutan">
+<!ENTITY countries.bv "Bouvet Island">
+<!ENTITY countries.bw "Botswana">
+<!ENTITY countries.by "Belarus">
+<!ENTITY countries.bz "Belize">
+<!ENTITY countries.ca "Canada">
+<!ENTITY countries.cc "Cocos (Keeling) Islands">
+<!ENTITY countries.cd "Congo (Kinshasa)">
+<!ENTITY countries.cf "Central African Republic">
+<!ENTITY countries.cg "Congo (Brazzaville)">
+<!ENTITY countries.ch "Switzerland">
+<!ENTITY countries.ci "Côte d'Ivoire">
+<!ENTITY countries.ck "Cook Islands">
+<!ENTITY countries.cl "Chile">
+<!ENTITY countries.cm "Cameroon">
+<!ENTITY countries.cn "China">
+<!ENTITY countries.co "Colombia">
+<!ENTITY countries.cr "Costa Rica">
+<!ENTITY countries.cu "Cuba">
+<!ENTITY countries.cv "Cabo Verde">
+<!ENTITY countries.cw "Curaçao">
+<!ENTITY countries.cx "Christmas Island">
+<!ENTITY countries.cy "Cyprus">
+<!ENTITY countries.cz "Czechia">
+<!ENTITY countries.de "Germany">
+<!ENTITY countries.dj "Djibouti">
+<!ENTITY countries.dk "Denmark">
+<!ENTITY countries.dm "Dominica">
+<!ENTITY countries.do "Dominican Republic">
+<!ENTITY countries.dz "Algeria">
+<!ENTITY countries.ec "Ecuador">
+<!ENTITY countries.ee "Estonia">
+<!ENTITY countries.eg "Egypt">
+<!ENTITY countries.eh "Western Sahara">
+<!ENTITY countries.er "Eritrea">
+<!ENTITY countries.es "Spain">
+<!ENTITY countries.et "Ethiopia">
+<!ENTITY countries.fi "Finland">
+<!ENTITY countries.fj "Fiji">
+<!ENTITY countries.fk "Falkland Islands (Malvinas)">
+<!ENTITY countries.fm "Micronesia (Federated States of)">
+<!ENTITY countries.fo "Faroe Islands">
+<!ENTITY countries.fr "France">
+<!ENTITY countries.ga "Gabon">
+<!ENTITY countries.gb "United Kingdom">
+<!ENTITY countries.gd "Grenada">
+<!ENTITY countries.ge "Georgia">
+<!ENTITY countries.gf "French Guiana">
+<!ENTITY countries.gg "Guernsey">
+<!ENTITY countries.gh "Ghana">
+<!ENTITY countries.gi "Gibraltar">
+<!ENTITY countries.gl "Greenland">
+<!ENTITY countries.gm "Gambia">
+<!ENTITY countries.gn "Guinea">
+<!ENTITY countries.gp "Guadeloupe">
+<!ENTITY countries.gq "Equatorial Guinea">
+<!ENTITY countries.gr "Greece">
+<!ENTITY countries.gs "South Georgia and the South Sandwich Islands">
+<!ENTITY countries.gt "Guatemala">
+<!ENTITY countries.gu "Guam">
+<!ENTITY countries.gw "Guinea-Bissau">
+<!ENTITY countries.gy "Guyana">
+<!ENTITY countries.hk "Hong Kong">
+<!ENTITY countries.hm "Heard Island and McDonald Islands">
+<!ENTITY countries.hn "Honduras">
+<!ENTITY countries.hr "Croatia">
+<!ENTITY countries.ht "Haiti">
+<!ENTITY countries.hu "Hungary">
+<!ENTITY countries.id "Indonesia">
+<!ENTITY countries.ie "Ireland">
+<!ENTITY countries.il "Israel">
+<!ENTITY countries.im "Isle of Man">
+<!ENTITY countries.in "India">
+<!ENTITY countries.io "British Indian Ocean Territory">
+<!ENTITY countries.iq "Iraq">
+<!ENTITY countries.ir "Iran (Islamic Republic of)">
+<!ENTITY countries.is "Iceland">
+<!ENTITY countries.it "Italy">
+<!ENTITY countries.je "Jersey">
+<!ENTITY countries.jm "Jamaica">
+<!ENTITY countries.jo "Jordan">
+<!ENTITY countries.jp "Japan">
+<!ENTITY countries.ke "Kenya">
+<!ENTITY countries.kg "Kyrgyzstan">
+<!ENTITY countries.kh "Cambodia">
+<!ENTITY countries.ki "Kiribati">
+<!ENTITY countries.km "Comoros">
+<!ENTITY countries.kn "Saint Kitts and Nevis">
+<!ENTITY countries.kp "Korea (Democratic People's Republic of)">
+<!ENTITY countries.kr "Korea (Republic of)">
+<!ENTITY countries.kw "Kuwait">
+<!ENTITY countries.ky "Cayman Islands">
+<!ENTITY countries.kz "Kazakhstan">
+<!ENTITY countries.la "Lao People's Democratic Republic">
+<!ENTITY countries.lb "Lebanon">
+<!ENTITY countries.lc "Saint Lucia">
+<!ENTITY countries.li "Liechtenstein">
+<!ENTITY countries.lk "Sri Lanka">
+<!ENTITY countries.lr "Liberia">
+<!ENTITY countries.ls "Lesotho">
+<!ENTITY countries.lt "Lithuania">
+<!ENTITY countries.lu "Luxembourg">
+<!ENTITY countries.lv "Latvia">
+<!ENTITY countries.ly "Libya">
+<!ENTITY countries.ma "Morocco">
+<!ENTITY countries.mc "Monaco">
+<!ENTITY countries.md "Moldova (Republic of)">
+<!ENTITY countries.me "Montenegro">
+<!ENTITY countries.mf "Saint Martin (French part)">
+<!ENTITY countries.mg "Madagascar">
+<!ENTITY countries.mh "Marshall Islands">
+<!ENTITY countries.mk "North Macedonia">
+<!ENTITY countries.ml "Mali">
+<!ENTITY countries.mm "Myanmar">
+<!ENTITY countries.mn "Mongolia">
+<!ENTITY countries.mo "Macao">
+<!ENTITY countries.mp "Northern Mariana Islands">
+<!ENTITY countries.mq "Martinique">
+<!ENTITY countries.mr "Mauritania">
+<!ENTITY countries.ms "Montserrat">
+<!ENTITY countries.mt "Malta">
+<!ENTITY countries.mu "Mauritius">
+<!ENTITY countries.mv "Maldives">
+<!ENTITY countries.mw "Malawi">
+<!ENTITY countries.mx "Mexico">
+<!ENTITY countries.my "Malaysia">
+<!ENTITY countries.mz "Mozambique">
+<!ENTITY countries.na "Namibia">
+<!ENTITY countries.nc "New Caledonia">
+<!ENTITY countries.ne "Niger">
+<!ENTITY countries.nf "Norfolk Island">
+<!ENTITY countries.ng "Nigeria">
+<!ENTITY countries.ni "Nicaragua">
+<!ENTITY countries.nl "Netherlands">
+<!ENTITY countries.no "Norway">
+<!ENTITY countries.np "Nepal">
+<!ENTITY countries.nr "Nauru">
+<!ENTITY countries.nu "Niue">
+<!ENTITY countries.nz "New Zealand">
+<!ENTITY countries.om "Oman">
+<!ENTITY countries.pa "Panama">
+<!ENTITY countries.pe "Peru">
+<!ENTITY countries.pf "French Polynesia">
+<!ENTITY countries.pg "Papua New Guinea">
+<!ENTITY countries.ph "Philippines">
+<!ENTITY countries.pk "Pakistan">
+<!ENTITY countries.pl "Poland">
+<!ENTITY countries.pm "Saint Pierre and Miquelon">
+<!ENTITY countries.pn "Pitcairn">
+<!ENTITY countries.pr "Puerto Rico">
+<!ENTITY countries.ps "Palestine">
+<!ENTITY countries.pt "Portugal">
+<!ENTITY countries.pw "Palau">
+<!ENTITY countries.py "Paraguay">
+<!ENTITY countries.qa "Qatar">
+<!ENTITY countries.re "Réunion">
+<!ENTITY countries.ro "Romania">
+<!ENTITY countries.rs "Serbia">
+<!ENTITY countries.ru "Russian Federation">
+<!ENTITY countries.rw "Rwanda">
+<!ENTITY countries.sa "Saudi Arabia">
+<!ENTITY countries.sb "Solomon Islands">
+<!ENTITY countries.sc "Seychelles">
+<!ENTITY countries.sd "Sudan">
+<!ENTITY countries.se "Sweden">
+<!ENTITY countries.sg "Singapore">
+<!ENTITY countries.sh "Saint Helena, Ascension and Tristan da Cunha">
+<!ENTITY countries.si "Slovenia">
+<!ENTITY countries.sj "Svalbard and Jan Mayen">
+<!ENTITY countries.sk "Slovakia">
+<!ENTITY countries.sl "Sierra Leone">
+<!ENTITY countries.sm "San Marino">
+<!ENTITY countries.sn "Senegal">
+<!ENTITY countries.so "Somalia">
+<!ENTITY countries.sr "Suriname">
+<!ENTITY countries.ss "South Sudan">
+<!ENTITY countries.st "Sao Tome and Principe">
+<!ENTITY countries.sv "El Salvador">
+<!ENTITY countries.sx "Sint Maarten (Dutch part)">
+<!ENTITY countries.sy "Syrian Arab Republic">
+<!ENTITY countries.sz "Eswatini">
+<!ENTITY countries.tc "Turks and Caicos Islands">
+<!ENTITY countries.td "Chad">
+<!ENTITY countries.tf "French Southern Territories">
+<!ENTITY countries.tg "Togo">
+<!ENTITY countries.th "Thailand">
+<!ENTITY countries.tj "Tajikistan">
+<!ENTITY countries.tk "Tokelau">
+<!ENTITY countries.tl "Timor-Leste">
+<!ENTITY countries.tm "Turkmenistan">
+<!ENTITY countries.tn "Tunisia">
+<!ENTITY countries.to "Tonga">
+<!ENTITY countries.tr "Turkey">
+<!ENTITY countries.tt "Trinidad and Tobago">
+<!ENTITY countries.tv "Tuvalu">
+<!ENTITY countries.tw "Taiwan">
+<!ENTITY countries.tz "Tanzania (United Republic of)">
+<!ENTITY countries.ua "Ukraine">
+<!ENTITY countries.ug "Uganda">
+<!ENTITY countries.um "United States Minor Outlying Islands">
+<!ENTITY countries.us "United States of America">
+<!ENTITY countries.uy "Uruguay">
+<!ENTITY countries.uz "Uzbekistan">
+<!ENTITY countries.va "Vatican City">
+<!ENTITY countries.vc "Saint Vincent and the Grenadines">
+<!ENTITY countries.ve "Venezuela (Bolivarian Republic of)">
+<!ENTITY countries.vg "Virgin Islands (British)">
+<!ENTITY countries.vi "Virgin Islands (U.S.)">
+<!ENTITY countries.vn "Vietnam (Socialist Republic of)">
+<!ENTITY countries.vu "Vanuatu">
+<!ENTITY countries.wf "Wallis and Futuna">
+<!ENTITY countries.ws "Samoa">
+<!ENTITY countries.ye "Yemen">
+<!ENTITY countries.yt "Mayotte">
+<!ENTITY countries.za "South Africa">
+<!ENTITY countries.zm "Zambia">
+<!ENTITY countries.zw "Zimbabwe">
1
0
commit e3eb98257a9581c1dc71e6e8dda586f32586485b
Author: Richard Pospesel <richard(a)torproject.org>
Date: Thu Feb 10 12:40:35 2022 +0100
Tag -build2
---
rbm.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm.conf b/rbm.conf
index 40943dd..cd9b40e 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -61,7 +61,7 @@ var:
torbrowser_version: '11.5a4'
torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 11.5a3
+ - 11.5a2
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0

[tor-browser-build/master] Release prep for 11.5a4 (desktop only)
by richard@torproject.org 09 Feb '22
by richard@torproject.org 09 Feb '22
09 Feb '22
commit aa65127fa1291bf580e84a8fcab3396ae381fe9c
Author: Richard Pospesel <richard(a)torproject.org>
Date: Wed Feb 9 14:03:25 2022 +0100
Release prep for 11.5a4 (desktop only)
Version bumps and changelog update
---
projects/firefox/config | 4 +-
projects/go/config | 4 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 55 ++++++++++++++++++++++
projects/tor-browser/config | 4 +-
projects/tor-launcher/config | 2 +-
rbm.conf | 4 +-
6 files changed, 64 insertions(+), 9 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 0f28c7d..4365c43 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -8,7 +8,7 @@ git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- firefox_platform_version: 91.5.0
+ firefox_platform_version: 91.6.0
firefox_version: '[% c("var/firefox_platform_version") %]esr'
torbrowser_branch: 11.5
branding_directory: 'browser/branding/alpha'
@@ -50,7 +50,7 @@ targets:
branding_directory: 'browser/branding/official'
nightly:
- git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2'
+ git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-1'
tag_gpg_id: 0
var:
branding_directory: 'browser/branding/nightly'
diff --git a/projects/go/config b/projects/go/config
index b4e2c96..187606a 100644
--- a/projects/go/config
+++ b/projects/go/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 1.17.5
+version: 1.17.6
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
var:
@@ -118,7 +118,7 @@ input_files:
enable: '[% ! c("var/linux") %]'
- URL: 'https://golang.org/dl/go[% c("version") %].src.tar.gz'
name: go
- sha256sum: 3defb9a09bed042403195e872dcbc8c6fae1485963332279668ec52e80a95a2d
+ sha256sum: 4dc1bbf3ff61f0c1ff2b19355e6d88151a70126268a47c761477686ef94748c8
- URL: 'https://golang.org/dl/go[% c("var/go14_version") %].src.tar.gz'
name: go14
sha256sum: 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index f55d6ea..476d139 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,57 @@
+Tor Browser 11.5a4 - February 15 2022
+ * Windows + OS X + Linux
+ * Update Firefox to 91.6.0esr
+ * Update NoScript to 11.2.19
+ * Tor Launcher 0.2.33
+ * Bug 40562: Reorganize patchset [tor-browser]
+ * Bug 40598: Remove legacy settings read from TorSettings module [tor-browser]
+ * Bug 40679: Missing features on first-time launch in esr91 [tor-browser]
+ * Added extensions.torlauncher.launch_delay debug pref to simulate slow tor daemon launch [tor-launcher]
+ * Bug 40752: Misleading UX when about:tor as New Tab [tor-browser]
+ * Bug 40775: about:ion should no tbe labeled as a Tor Browser page [tor-browser]
+ * Bug 40793: moved Tor configuration options from old-configure.in to moz.configure [tor-browser]
+ * Bug 40795: Revert Deutsche Welle v2 redirect [tor-browser]
+ * Build System
+ * Windows + OS X + Linux
+ * Update Go to 1.17.6
+ * Bug 40416: Pick up obfsproxy 0.0.12 [tor-browser-build]
+
+Tor Browser 11.0.6 - February 8 2022
+ * Windows + OS X + Linux
+ * Update Firefox to 91.6.0esr
+ * Update NoScript to 11.2.16
+ * Tor Launcher 0.2.33
+ * Bug 40795: Revert Deutsche Welle v2 redirect [tor-browser]
+ * Bug 40679: Missing features on first-time launch in esr91 [tor-browser]
+ * Added extensions.torlauncher.launch_delay debug pref to simulate slow tor daemon launch [tor-launcher]
+ * Build System
+ * Windows + OS X + Linux + Android
+ * Update Go to 1.16.13
+ * Bug 40413: Removed lsb_release from Python build script [tor-browser-build]
+ * Bug 40416: Pick up obfsproxy 0.0.12 [tor-browser-build]
+
+Tor Browser 11.0.5 - February 3 2022
+ * Android
+ * Update Fenix to 94.1.1
+ * Update Tor to 0.4.6.9
+ * Update NoScript to 11.2.16
+ * Update OpenSSL to 1.1.1m
+ * Bug 40006: Add new default obfs4 bridge "deusexmachina" [tor-android-service]
+ * Bug 40198: Spoof English toggle now overlaps with locale list [fenix]
+ * Bug 40393: Point to a forked version of pion/dtls with fingerprinting fix [tor-browser-build]
+ * Bug 40394: Bump version of Snowflake to 221f1c41 [tor-browser-build]
+ * Bug 40398: Jetify tor-android-service packages [tor-browser-build]
+ * Bug 40682: Disable network.proxy.allow_bypass [tor-browser]
+ * Bug 40736: Disable third-party cookies in Private Browsing Mode [tor-browser]
+ * Build System
+ * Android
+ * Bug 40366: Use bullseye to build https-everywhere [tor-browser-build]
+ * Bug 40368: Use system's python3 for android builds [tor-browser-build]
+ * Bug 40373: Update components for mozilla93 [tor-browser-build]
+ * Bug 40379: Update components for mozilla94 [tor-browser-build]
+ * Bug 40395: Update node to 12.22.1 [tor-browser-build]
+ * Bug 40403: Update Go to 1.16.12 [tor-browser-build]
+
Tor Browser 11.5a3 - January 14 2022
* Android
* Update Fenix to 94.1.1
@@ -19,6 +73,7 @@ Tor Browser 11.5a3 - January 14 2022
* Bug 40373: Update components for mozilla93 [tor-browser-build]
* Bug 40379: Update components for mozilla94 [tor-browser-build]
* Bug 40395: Update node to 12.22.1 [tor-browser-build]
+ * Bug 40413: Removed lsb_release from Python build script [tor-browser-build]
Tor Browser 11.5a2 - January 11 2022
* Windows + OS X + Linux
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index 76823b6..9a711b7 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -78,9 +78,9 @@ input_files:
enable: '[% ! 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: 47399b94f57dde1162f74a49679c7cb3b6dfe684d4eee49842e65eae64e9982b
+ sha256sum: 627ad134968a395fd585a6455087c1c1c461b993a4db0c1471f4c5d2c0cc1177
- filename: 'RelativeLink/start-tor-browser.desktop'
enable: '[% c("var/linux") %]'
- filename: 'RelativeLink/execdesktop'
diff --git a/projects/tor-launcher/config b/projects/tor-launcher/config
index 3fa9cfc..5e9a426 100644
--- a/projects/tor-launcher/config
+++ b/projects/tor-launcher/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 0.2.32
+version: 0.2.33
git_url: https://git.torproject.org/tor-launcher.git
git_hash: '[% c("version") %]'
gpg_keyring: torbutton.gpg
diff --git a/rbm.conf b/rbm.conf
index 46e2881..40943dd 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -58,10 +58,10 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '11.5a3'
+ torbrowser_version: '11.5a4'
torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 11.5a1
+ - 11.5a3
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0

[tor-browser/tor-browser-91.6.0esr-11.5-1] Bug 25658: Replace security slider with security level UI
by richard@torproject.org 09 Feb '22
by richard@torproject.org 09 Feb '22
09 Feb '22
commit 3c054057fd7c9198b6c1b8cec1740969c95cc132
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Mar 4 16:09:51 2019 -0800
Bug 25658: Replace security slider with security level UI
This patch adds a new 'securitylevel' component to Tor Browser intended
to replace the torbutton 'Security Slider'.
This component adds a new Security Level toolbar button which visually
indicates the current global security level via icon (as defined by the
extensions.torbutton.security_slider pref), a drop-down hanger with a
short description of the current security level, and a new section in
the about:preferences#privacy page where users can change their current
security level. In addition, the hanger and the preferences page will
show a visual warning when the user has modified prefs associated with
the security level and provide a one-click 'Restore Defaults' button to
get the user back on recommended settings.
Strings used by this patch are pulled from the torbutton extension, but
en-US defaults are provided if there is an error loading from the
extension. With this patch applied, the usual work-flow of "./mach build
&& ./mach run" work as expected, even if the torbutton extension is
disabled.
---
browser/base/content/browser.js | 10 +
browser/base/content/browser.xhtml | 2 +
browser/base/content/main-popupset.inc.xhtml | 1 +
browser/base/content/navigator-toolbox.inc.xhtml | 2 +
browser/components/moz.build | 1 +
browser/components/preferences/preferences.xhtml | 1 +
browser/components/preferences/privacy.inc.xhtml | 2 +
browser/components/preferences/privacy.js | 20 +
.../securitylevel/content/securityLevel.js | 527 +++++++++++++++++++++
.../securitylevel/content/securityLevelButton.css | 18 +
.../content/securityLevelButton.inc.xhtml | 7 +
.../securitylevel/content/securityLevelIcon.svg | 40 ++
.../securitylevel/content/securityLevelPanel.css | 74 +++
.../content/securityLevelPanel.inc.xhtml | 47 ++
.../content/securityLevelPreferences.css | 52 ++
.../content/securityLevelPreferences.inc.xhtml | 67 +++
browser/components/securitylevel/jar.mn | 6 +
browser/components/securitylevel/moz.build | 1 +
browser/modules/TorStrings.jsm | 4 +
.../themes/shared/customizableui/panelUI.inc.css | 3 +-
20 files changed, 884 insertions(+), 1 deletion(-)
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index ef8a19198767..abca251bf3aa 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -224,6 +224,11 @@ XPCOMUtils.defineLazyScriptGetter(
["DownloadsButton", "DownloadsIndicatorView"],
"chrome://browser/content/downloads/indicator.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["SecurityLevelButton"],
+ "chrome://browser/content/securitylevel/securityLevel.js"
+);
XPCOMUtils.defineLazyScriptGetter(
this,
"gEditItemOverlay",
@@ -1760,6 +1765,9 @@ var gBrowserInit = {
// doesn't flicker as the window is being shown.
DownloadsButton.init();
+ // Init the SecuritySettingsButton
+ SecurityLevelButton.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
@@ -2493,6 +2501,8 @@ var gBrowserInit = {
DownloadsButton.uninit();
+ SecurityLevelButton.uninit();
+
TorBootstrapUrlbar.uninit();
gAccessibilityServiceIndicator.uninit();
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index f16307365728..627e6ac0f8a0 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -21,6 +21,8 @@
<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/content/tabbrowser.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/content/downloads/downloads.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPanel.css"?>
+<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelButton.css"?>
<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
index e5bf9460b75d..3fc665c65d79 100644
--- a/browser/base/content/main-popupset.inc.xhtml
+++ b/browser/base/content/main-popupset.inc.xhtml
@@ -520,6 +520,7 @@
#include ../../components/controlcenter/content/protectionsPanel.inc.xhtml
#include ../../components/downloads/content/downloadsPanel.inc.xhtml
#include ../../../devtools/startup/enableDevToolsPopup.inc.xhtml
+#include ../../components/securitylevel/content/securityLevelPanel.inc.xhtml
#include browser-allTabsMenu.inc.xhtml
<tooltip id="dynamic-shortcut-tooltip"
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index e7f63116ff39..6ac72cb889bc 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -413,6 +413,8 @@
</box>
</toolbarbutton>
+#include ../../components/securitylevel/content/securityLevelButton.inc.xhtml
+
<toolbarbutton id="fxa-toolbar-menu-button" class="toolbarbutton-1 chromeclass-toolbar-additional subviewbutton-nav"
badged="true"
onmousedown="gSync.toggleAccountPanel(this, event)"
diff --git a/browser/components/moz.build b/browser/components/moz.build
index d15ff3051593..ec8fab7fbc8f 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -48,6 +48,7 @@ DIRS += [
"protocolhandler",
"resistfingerprinting",
"search",
+ "securitylevel",
"sessionstore",
"shell",
"syncedtabs",
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 0923005c8b90..0139abf95cbd 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/securitylevel/securityLevelPreferences.css"?>
<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
<!DOCTYPE html [
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index 8d51e60cb32b..d2cf2ea9c89c 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -919,6 +919,8 @@
<html:h1 data-l10n-id="security-header"/>
</hbox>
+#include ../securitylevel/content/securityLevelPreferences.inc.xhtml
+
<!-- addons, forgery (phishing) UI Security -->
<groupbox id="browsingProtectionGroup" data-category="panePrivacy" hidden="true">
<label><html:h2 data-l10n-id="security-browsing-protection"/></label>
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index 35b37b099e93..bce7bb7e8a9c 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -80,6 +80,13 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
+// TODO: module import via ChromeUtils.defineModuleGetter
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["SecurityLevelPreferences"],
+ "chrome://browser/content/securitylevel/securityLevel.js"
+);
+
XPCOMUtils.defineLazyServiceGetter(
this,
"listManager",
@@ -308,6 +315,18 @@ function setUpContentBlockingWarnings() {
var gPrivacyPane = {
_pane: null,
+ /**
+ * Show the Security Level UI
+ */
+ _initSecurityLevel() {
+ SecurityLevelPreferences.init();
+ let unload = () => {
+ window.removeEventListener("unload", unload);
+ SecurityLevelPreferences.uninit();
+ };
+ window.addEventListener("unload", unload);
+ },
+
/**
* Whether the prompt to restart Firefox should appear when changing the autostart pref.
*/
@@ -503,6 +522,7 @@ var gPrivacyPane = {
this.trackingProtectionReadPrefs();
this.networkCookieBehaviorReadPrefs();
this._initTrackingProtectionExtensionControl();
+ this._initSecurityLevel();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/components/securitylevel/content/securityLevel.js b/browser/components/securitylevel/content/securityLevel.js
new file mode 100644
index 000000000000..8b8babe5b58e
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevel.js
@@ -0,0 +1,527 @@
+"use strict";
+
+ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ CustomizableUI: "resource:///modules/CustomizableUI.jsm",
+ PanelMultiView: "resource:///modules/PanelMultiView.jsm",
+});
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+/*
+ Security Level Prefs
+
+ Getters and Setters for relevant torbutton prefs
+*/
+const SecurityLevelPrefs = {
+ security_slider_pref : "extensions.torbutton.security_slider",
+ security_custom_pref : "extensions.torbutton.security_custom",
+
+ get securitySlider() {
+ try {
+ return Services.prefs.getIntPref(this.security_slider_pref);
+ } catch(e) {
+ // init pref to 4 (standard)
+ const val = 4;
+ Services.prefs.setIntPref(this.security_slider_pref, val);
+ return val;
+ }
+ },
+
+ set securitySlider(val) {
+ Services.prefs.setIntPref(this.security_slider_pref, val);
+ },
+
+ get securityCustom() {
+ try {
+ return Services.prefs.getBoolPref(this.security_custom_pref);
+ } catch(e) {
+ // init custom to false
+ const val = false;
+ Services.prefs.setBoolPref(this.security_custom_pref, val);
+ return val;
+ }
+ },
+
+ set securityCustom(val) {
+ Services.prefs.setBoolPref(this.security_custom_pref, val);
+ },
+}; /* Security Level Prefs */
+
+/*
+ Security Level Button Code
+
+ Controls init and update of the security level toolbar button
+*/
+
+const SecurityLevelButton = {
+ _securityPrefsBranch : null,
+
+ _populateXUL : function(securityLevelButton) {
+ if (securityLevelButton != null) {
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.securityLevel);
+ securityLevelButton.setAttribute("label", TorStrings.securityLevel.securityLevel);
+ }
+ },
+
+ _configUIFromPrefs : function(securityLevelButton) {
+ if (securityLevelButton != null) {
+ let securitySlider = SecurityLevelPrefs.securitySlider;
+ securityLevelButton.removeAttribute("level");
+ const securityCustom = SecurityLevelPrefs.securityCustom;
+ switch(securitySlider) {
+ case 4:
+ securityLevelButton.setAttribute("level", `standard${securityCustom ? "_custom" : ""}`);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.standard.tooltip);
+ break;
+ case 2:
+ securityLevelButton.setAttribute("level", `safer${securityCustom ? "_custom" : ""}`);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safer.tooltip);
+ break;
+ case 1:
+ securityLevelButton.setAttribute("level", `safest${securityCustom ? "_custom" : ""}`);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safest.tooltip);
+ break;
+ }
+ }
+ },
+
+ get button() {
+ let button = document.getElementById("security-level-button");
+ if (!button) {
+ return null;
+ }
+ return button;
+ },
+
+ get anchor() {
+ let anchor = this.button.icon;
+ if (!anchor) {
+ return null;
+ }
+
+ anchor.setAttribute("consumeanchor", SecurityLevelButton.button.id);
+ return anchor;
+ },
+
+ init : function() {
+ // set the initial class based off of the current pref
+ let button = this.button;
+ this._populateXUL(button);
+ this._configUIFromPrefs(button);
+
+ this._securityPrefsBranch = Services.prefs.getBranch("extensions.torbutton.");
+ this._securityPrefsBranch.addObserver("", this, false);
+
+ CustomizableUI.addListener(this);
+
+ SecurityLevelPanel.init();
+ },
+
+ uninit : function() {
+ CustomizableUI.removeListener(this);
+
+ this._securityPrefsBranch.removeObserver("", this);
+ this._securityPrefsBranch = null;
+
+ SecurityLevelPanel.uninit();
+ },
+
+ observe : function(subject, topic, data) {
+ switch(topic) {
+ case "nsPref:changed":
+ if (data === "security_slider" || data === "security_custom") {
+ this._configUIFromPrefs(this.button);
+ }
+ break;
+ }
+ },
+
+ // callback for entering the 'Customize Firefox' screen to set icon
+ onCustomizeStart : function(window) {
+ let navigatorToolbox = document.getElementById("navigator-toolbox");
+ let button = navigatorToolbox.palette.querySelector("#security-level-button");
+ this._populateXUL(button);
+ this._configUIFromPrefs(button);
+ },
+
+ // callback when CustomizableUI modifies DOM
+ onWidgetAfterDOMChange : function(aNode, aNextNode, aContainer, aWasRemoval) {
+ if (aNode.id == "security-level-button" && !aWasRemoval) {
+ this._populateXUL(aNode);
+ this._configUIFromPrefs(aNode);
+ }
+ },
+
+ // for when the toolbar button needs to be activated and displays the Security Level panel
+ //
+ // In the toolbarbutton xul you'll notice we register this callback for both onkeypress and
+ // onmousedown. We do this to match the behavior of other panel spawning buttons such as Downloads,
+ // Library, and the Hamburger menus. Using oncommand alone would result in only getting fired
+ // after onclick, which is mousedown followed by mouseup.
+ onCommand : function(aEvent) {
+ // snippet borrowed from /browser/components/downloads/content/indicator.js DownloadsIndicatorView.onCommand(evt)
+ if (
+ // On Mac, ctrl-click will send a context menu event from the widget, so
+ // we don't want to bring up the panel when ctrl key is pressed.
+ (aEvent.type == "mousedown" &&
+ (aEvent.button != 0 ||
+ (AppConstants.platform == "macosx" && aEvent.ctrlKey))) ||
+ (aEvent.type == "keypress" && aEvent.key != " " && aEvent.key != "Enter")
+ ) {
+ return;
+ }
+
+ // we need to set this attribute for the button to be shaded correctly to look like it is pressed
+ // while the security level panel is open
+ this.button.setAttribute("open", "true");
+ SecurityLevelPanel.show();
+ aEvent.stopPropagation();
+ },
+}; /* Security Level Button */
+
+/*
+ Security Level Panel Code
+
+ Controls init and update of the panel in the security level hanger
+*/
+
+const SecurityLevelPanel = {
+ _securityPrefsBranch : null,
+ _panel : null,
+ _anchor : null,
+ _populated : false,
+
+ _selectors: Object.freeze({
+ panel: "panel#securityLevel-panel",
+ icon: "vbox#securityLevel-vbox>vbox",
+ header: "h1#securityLevel-header",
+ level: "label#securityLevel-level",
+ custom: "label#securityLevel-custom",
+ summary: "description#securityLevel-summary",
+ learnMore: "label#securityLevel-learnMore",
+ restoreDefaults: "button#securityLevel-restoreDefaults",
+ advancedSecuritySettings: "button#securityLevel-advancedSecuritySettings",
+ }),
+
+ _populateXUL : function() {
+ let selectors = this._selectors;
+
+ this._elements = {
+ panel: document.querySelector(selectors.panel),
+ icon: document.querySelector(selectors.icon),
+ header: document.querySelector(selectors.header),
+ levelLabel: document.querySelector(selectors.level),
+ customLabel: document.querySelector(selectors.custom),
+ summaryDescription: document.querySelector(selectors.summary),
+ learnMoreLabel: document.querySelector(selectors.learnMore),
+ restoreDefaultsButton: document.querySelector(selectors.restoreDefaults),
+ changeButton: document.querySelector(selectors.advancedSecuritySettings),
+ };
+ let elements = this._elements;
+
+ elements.header.textContent = TorStrings.securityLevel.securityLevel;
+ elements.customLabel.setAttribute("value", TorStrings.securityLevel.customWarning);
+ elements.learnMoreLabel.setAttribute("value", TorStrings.securityLevel.learnMore);
+ elements.learnMoreLabel.setAttribute("href", TorStrings.securityLevel.learnMoreURL);
+ elements.restoreDefaultsButton.setAttribute("label", TorStrings.securityLevel.restoreDefaults);
+ elements.changeButton.setAttribute("label", TorStrings.securityLevel.change);
+
+ this._configUIFromPrefs();
+ this._populated = true;
+ },
+
+ _configUIFromPrefs : function() {
+ // get security prefs
+ let securitySlider = SecurityLevelPrefs.securitySlider;
+ let securityCustom = SecurityLevelPrefs.securityCustom;
+
+ // get the panel elements we need to populate
+ let elements = this._elements;
+ let icon = elements.icon;
+ let labelLevel = elements.levelLabel;
+ let labelCustomWarning = elements.customLabel;
+ let summary = elements.summaryDescription;
+ let buttonRestoreDefaults = elements.restoreDefaultsButton;
+ let buttonAdvancedSecuritySettings = elements.changeButton;
+
+ // only visible when user is using custom settings
+ labelCustomWarning.hidden = !securityCustom;
+ buttonRestoreDefaults.hidden = !securityCustom;
+
+ // Descriptions change based on security level
+ switch(securitySlider) {
+ // standard
+ case 4:
+ icon.setAttribute("level", "standard");
+ labelLevel.setAttribute("value", TorStrings.securityLevel.standard.level);
+ summary.textContent = TorStrings.securityLevel.standard.summary;
+ break;
+ // safer
+ case 2:
+ icon.setAttribute("level", "safer");
+ labelLevel.setAttribute("value", TorStrings.securityLevel.safer.level);
+ summary.textContent = TorStrings.securityLevel.safer.summary;
+ break;
+ // safest
+ case 1:
+ icon.setAttribute("level", "safest");
+ labelLevel.setAttribute("value", TorStrings.securityLevel.safest.level);
+ summary.textContent = TorStrings.securityLevel.safest.summary;
+ break;
+ }
+
+ // override the summary text with custom warning
+ if (securityCustom) {
+ summary.textContent = TorStrings.securityLevel.custom.summary;
+ }
+ },
+
+ init : function() {
+ this._securityPrefsBranch = Services.prefs.getBranch("extensions.torbutton.");
+ this._securityPrefsBranch.addObserver("", this, false);
+ },
+
+ uninit : function() {
+ this._securityPrefsBranch.removeObserver("", this);
+ this._securityPrefsBranch = null;
+ },
+
+ show : function() {
+ // we have to defer this until after the browser has finished init'ing before
+ // we can populate the panel
+ if (!this._populated) {
+ this._populateXUL();
+ }
+
+ let panel = document.getElementById("securityLevel-panel");
+ panel.hidden = false;
+ PanelMultiView.openPopup(panel, SecurityLevelButton.anchor, "bottomcenter topright",
+ 0, 0, false, null).catch(Cu.reportError);
+ },
+
+ hide : function() {
+ let panel = document.getElementById("securityLevel-panel");
+ PanelMultiView.hidePopup(panel);
+ },
+
+ restoreDefaults : function() {
+ SecurityLevelPrefs.securityCustom = false;
+ // hide and reshow so that layout re-renders properly
+ this.hide();
+ this.show(this._anchor);
+ },
+
+ openAdvancedSecuritySettings : function() {
+ openPreferences("privacy-securitylevel");
+ this.hide();
+ },
+
+ // callback when prefs change
+ observe : function(subject, topic, data) {
+ switch(topic) {
+ case "nsPref:changed":
+ if (data == "security_slider" || data == "security_custom") {
+ this._configUIFromPrefs();
+ }
+ break;
+ }
+ },
+
+ // callback when the panel is displayed
+ onPopupShown : function(event) {
+ SecurityLevelButton.button.setAttribute("open", "true");
+ },
+
+ // callback when the panel is hidden
+ onPopupHidden : function(event) {
+ SecurityLevelButton.button.removeAttribute("open");
+ }
+}; /* Security Level Panel */
+
+/*
+ Security Level Preferences Code
+
+ Code to handle init and update of security level section in about:preferences#privacy
+*/
+
+const SecurityLevelPreferences =
+{
+ _securityPrefsBranch : null,
+
+ _populateXUL : function() {
+ let groupbox = document.getElementById("securityLevel-groupbox");
+
+ let labelHeader = groupbox.querySelector("#securityLevel-header");
+ labelHeader.textContent = TorStrings.securityLevel.securityLevel;
+
+ let spanOverview = groupbox.querySelector("#securityLevel-overview");
+ spanOverview.textContent = TorStrings.securityLevel.overview;
+
+ let labelLearnMore = groupbox.querySelector("#securityLevel-learnMore");
+ labelLearnMore.setAttribute("value", TorStrings.securityLevel.learnMore);
+ labelLearnMore.setAttribute("href", TorStrings.securityLevel.learnMoreURL);
+
+ let radiogroup = document.getElementById("securityLevel-radiogroup");
+ radiogroup.addEventListener("command", SecurityLevelPreferences.selectSecurityLevel);
+
+ let populateRadioElements = function(vboxQuery, stringStruct) {
+ let vbox = groupbox.querySelector(vboxQuery);
+
+ let radio = vbox.querySelector("radio");
+ radio.setAttribute("label", stringStruct.level);
+
+ let customWarning = vbox.querySelector("#securityLevel-customWarning");
+ customWarning.setAttribute("value", TorStrings.securityLevel.customWarning);
+
+ let labelSummary = vbox.querySelector("#securityLevel-summary");
+ labelSummary.textContent = stringStruct.summary;
+
+ let labelRestoreDefaults = vbox.querySelector("#securityLevel-restoreDefaults");
+ labelRestoreDefaults.setAttribute("value", TorStrings.securityLevel.restoreDefaults);
+ labelRestoreDefaults.addEventListener("click", SecurityLevelPreferences.restoreDefaults);
+
+ let description1 = vbox.querySelector("#securityLevel-description1");
+ if (description1) {
+ description1.textContent = stringStruct.description1;
+ }
+ let description2 = vbox.querySelector("#securityLevel-description2");
+ if (description2) {
+ description2.textContent = stringStruct.description2;
+ }
+ let description3 = vbox.querySelector("#securityLevel-description3");
+ if (description3) {
+ description3.textContent = stringStruct.description3;
+ }
+ };
+
+ populateRadioElements("#securityLevel-vbox-standard", TorStrings.securityLevel.standard);
+ populateRadioElements("#securityLevel-vbox-safer", TorStrings.securityLevel.safer);
+ populateRadioElements("#securityLevel-vbox-safest", TorStrings.securityLevel.safest);
+ },
+
+ _configUIFromPrefs : function() {
+ // read our prefs
+ let securitySlider = SecurityLevelPrefs.securitySlider;
+ let securityCustom = SecurityLevelPrefs.securityCustom;
+
+ // get our elements
+ let groupbox = document.getElementById("securityLevel-groupbox");
+
+ let radiogroup = groupbox.querySelector("#securityLevel-radiogroup");
+ let labelStandardCustom = groupbox.querySelector("#securityLevel-vbox-standard label#securityLevel-customWarning");
+ let labelSaferCustom = groupbox.querySelector("#securityLevel-vbox-safer label#securityLevel-customWarning");
+ let labelSafestCustom = groupbox.querySelector("#securityLevel-vbox-safest label#securityLevel-customWarning");
+ let labelStandardRestoreDefaults = groupbox.querySelector("#securityLevel-vbox-standard label#securityLevel-restoreDefaults");
+ let labelSaferRestoreDefaults = groupbox.querySelector("#securityLevel-vbox-safer label#securityLevel-restoreDefaults");
+ let labelSafestRestoreDefaults = groupbox.querySelector("#securityLevel-vbox-safest label#securityLevel-restoreDefaults");
+
+ // hide custom label by default until we know which level we're at
+ labelStandardCustom.hidden = true;
+ labelSaferCustom.hidden = true;
+ labelSafestCustom.hidden = true;
+
+ labelStandardRestoreDefaults.hidden = true;
+ labelSaferRestoreDefaults.hidden = true;
+ labelSafestRestoreDefaults.hidden = true;
+
+ switch(securitySlider) {
+ // standard
+ case 4:
+ radiogroup.value = "standard";
+ labelStandardCustom.hidden = !securityCustom;
+ labelStandardRestoreDefaults.hidden = !securityCustom;
+ break;
+ // safer
+ case 2:
+ radiogroup.value = "safer";
+ labelSaferCustom.hidden = !securityCustom;
+ labelSaferRestoreDefaults.hidden = !securityCustom;
+ break;
+ // safest
+ case 1:
+ radiogroup.value = "safest";
+ labelSafestCustom.hidden = !securityCustom;
+ labelSafestRestoreDefaults.hidden = !securityCustom;
+ break;
+ }
+ },
+
+ init : function() {
+ // populate XUL with localized strings
+ this._populateXUL();
+
+ // read prefs and populate UI
+ this._configUIFromPrefs();
+
+ // register for pref chagnes
+ this._securityPrefsBranch = Services.prefs.getBranch("extensions.torbutton.");
+ this._securityPrefsBranch.addObserver("", this, false);
+ },
+
+ uninit : function() {
+ // unregister for pref change events
+ this._securityPrefsBranch.removeObserver("", this);
+ this._securityPrefsBranch = null;
+ },
+
+ // callback for when prefs change
+ observe : function(subject, topic, data) {
+ switch(topic) {
+ case "nsPref:changed":
+ if (data == "security_slider" ||
+ data == "security_custom") {
+ this._configUIFromPrefs();
+ }
+ break;
+ }
+ },
+
+ selectSecurityLevel : function() {
+ // radio group elements
+ let radiogroup = document.getElementById("securityLevel-radiogroup");
+
+ // update pref based on selected radio option
+ switch (radiogroup.value) {
+ case "standard":
+ SecurityLevelPrefs.securitySlider = 4;
+ break;
+ case "safer":
+ SecurityLevelPrefs.securitySlider = 2;
+ break;
+ case "safest":
+ SecurityLevelPrefs.securitySlider = 1;
+ break;
+ }
+
+ SecurityLevelPreferences.restoreDefaults();
+ },
+
+ restoreDefaults : function() {
+ SecurityLevelPrefs.securityCustom = false;
+ },
+}; /* Security Level Prefereces */
+
+Object.defineProperty(this, "SecurityLevelButton", {
+ value: SecurityLevelButton,
+ enumerable: true,
+ writable: false
+});
+
+Object.defineProperty(this, "SecurityLevelPanel", {
+ value: SecurityLevelPanel,
+ enumerable: true,
+ writable: false
+});
+
+Object.defineProperty(this, "SecurityLevelPreferences", {
+ value: SecurityLevelPreferences,
+ enumerable: true,
+ writable: false
+});
diff --git a/browser/components/securitylevel/content/securityLevelButton.css b/browser/components/securitylevel/content/securityLevelButton.css
new file mode 100644
index 000000000000..38701250e9c9
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelButton.css
@@ -0,0 +1,18 @@
+toolbarbutton#security-level-button[level="standard"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard");
+}
+toolbarbutton#security-level-button[level="safer"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer");
+}
+toolbarbutton#security-level-button[level="safest"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest");
+}
+toolbarbutton#security-level-button[level="standard_custom"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard_custom");
+}
+toolbarbutton#security-level-button[level="safer_custom"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer_custom");
+}
+toolbarbutton#security-level-button[level="safest_custom"] {
+ list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest_custom");
+}
\ No newline at end of file
diff --git a/browser/components/securitylevel/content/securityLevelButton.inc.xhtml b/browser/components/securitylevel/content/securityLevelButton.inc.xhtml
new file mode 100644
index 000000000000..96ee1ec0ca49
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelButton.inc.xhtml
@@ -0,0 +1,7 @@
+<toolbarbutton id="security-level-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
+ badged="true"
+ removable="true"
+ onmousedown="SecurityLevelButton.onCommand(event);"
+ onkeypress="SecurityLevelButton.onCommand(event);"
+ closemenu="none"
+ cui-areatype="toolbar"/>
diff --git a/browser/components/securitylevel/content/securityLevelIcon.svg b/browser/components/securitylevel/content/securityLevelIcon.svg
new file mode 100644
index 000000000000..38cdbcb68afc
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelIcon.svg
@@ -0,0 +1,40 @@
+<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">
+ <style>
+ use:not(:target) {
+ display: none;
+ }
+ </style>
+ <defs>
+ <g id="standard_icon" stroke="none" stroke-width="1">
+ <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd" />
+ </g>
+ <g id="safer_icon" stroke="none" stroke-width="1">
+ <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd"/>
+ <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4-2.28572c.16666-.09523.37403.02511.37403.21707v10.0766c-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/>
+ </g>
+ <g id="safest_icon" stroke="none" stroke-width="1">
+ <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd"/>
+ <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4.25-2.42857c.07685-.04392.17121-.04392.24806 0l4.24997 2.42857c.0779.04451.126.12734.126.21706v.40411c0 1.43511-.5582 3.23363-1.5795 4.77628-.8665 1.3087-1.90846 2.2025-2.9205 2.6105-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/>
+ </g>
+ <g id="standard_custom_icon" stroke="none" stroke-width="1">
+ <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/>
+ <circle cx="13" cy="3" fill="#ffbd2e" r="3"/>
+ </g>
+ <g id="safer_custom_icon" stroke="none" stroke-width="1">
+ <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/>
+ <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4-2.28572c.16666-.09523.37403.02511.37403.21707v10.0766c-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/>
+ <circle cx="13" cy="3" fill="#ffbd2e" r="3"/>
+ </g>
+ <g id="safest_custom_icon" stroke="none" stroke-width="1">
+ <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/>
+ <path d="m8.77266 3.44151-.64863-.37064c-.07685-.04392-.17121-.04392-.24806 0l-4.25 2.42857c-.0779.04451-.12597.12735-.12597.21706v.40412c0 1.4351.55818 3.23362 1.57952 4.77618.86648 1.3087 1.90844 2.2026 2.92048 2.6106 1.01204-.408 2.054-1.3018 2.9205-2.6106.7761-1.17217 1.2847-2.49215 1.4843-3.68816-1.9219-.26934-3.43158-1.82403-3.63214-3.76713z"/>
+ <circle cx="13" cy="3" fill="#ffbd2e" r="3"/>
+ </g>
+ </defs>
+ <use id="standard" fill="context-fill" fill-opacity="context-fill-opacity" href="#standard_icon" />
+ <use id="safer" fill="context-fill" fill-opacity="context-fill-opacity" href="#safer_icon" />
+ <use id="safest" fill="context-fill" fill-opacity="context-fill-opacity" href="#safest_icon" />
+ <use id="standard_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#standard_custom_icon" />
+ <use id="safer_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#safer_custom_icon" />
+ <use id="safest_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#safest_custom_icon" />
+</svg>
diff --git a/browser/components/securitylevel/content/securityLevelPanel.css b/browser/components/securitylevel/content/securityLevelPanel.css
new file mode 100644
index 000000000000..6462c02f1594
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelPanel.css
@@ -0,0 +1,74 @@
+/* Security Level CSS */
+
+panelview#securityLevel-panelview {
+ width: 25em;
+}
+
+vbox#securityLevel-vbox > vbox {
+ background-repeat: no-repeat;
+ /* icon center-line should be in-line with right margin */
+ /* -margin + panelWidth - imageWidth/2 */
+ background-position: calc(-16px + 25em - 4.5em) 0.4em;
+ background-size: 9em 9em;
+ -moz-context-properties: fill, fill-opacity;
+ fill-opacity: 1;
+ fill: var(--button-bgcolor);
+ min-height: 10em;
+}
+
+vbox#securityLevel-vbox > vbox[level="standard"] {
+ background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard");
+}
+vbox#securityLevel-vbox > vbox[level="safer"] {
+ background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer");
+}
+vbox#securityLevel-vbox > vbox[level="safest"] {
+ background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest");
+}
+
+vbox#securityLevel-vbox > toolbarseparator {
+ margin-inline: 16px;
+}
+
+vbox#securityLevel-vbox > vbox {
+ margin-inline: 0;
+ padding-inline: 16px;
+}
+
+vbox#securityLevel-vbox > vbox * {
+ margin-inline: 0;
+}
+
+vbox#securityLevel-vbox > vbox > hbox {
+}
+
+label#securityLevel-level {
+ font-size: 1.25em;
+ font-weight: 600;
+ padding-top: 0.15em;
+}
+
+label#securityLevel-custom {
+ border-radius: 4px;
+ background-color: var(--yellow-50);
+ color: black;
+ font-size: 1em;
+ height: 1.6em;
+ line-height: 1.0em;
+ padding: 0.4em 0.5em;
+ margin-left: 1em!important;
+}
+
+description#securityLevel-summary {
+ margin-top: 1em;
+ padding-right: 5em;
+}
+
+vbox#securityLevel-vbox > hbox.panel-footer {
+ display: flex;
+}
+
+
+button#securityLevel-advancedSecuritySettings {
+ margin-block: 0;
+}
diff --git a/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml b/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
new file mode 100644
index 000000000000..02d93b738ff5
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
@@ -0,0 +1,47 @@
+<panel id="securityLevel-panel"
+ role="group"
+ type="arrow"
+ orient="vertical"
+ level="top"
+ hidden="true"
+ class="panel-no-padding"
+ onpopupshown="SecurityLevelPanel.onPopupShown(event);"
+ onpopuphidden="SecurityLevelPanel.onPopupHidden(event);">
+ <panelmultiview mainViewId="securityLevel-panelview">
+ <panelview id="securityLevel-panelview" descriptionheightworkaround="true">
+ <vbox id="securityLevel-vbox">
+ <box class="panel-header">
+ <html:h1 id="securityLevel-header"/>
+ </box>
+ <toolbarseparator></toolbarseparator>
+ <vbox>
+ <hbox>
+ <label id="securityLevel-level"/>
+ <vbox>
+ <spacer flex="1"/>
+ <label id="securityLevel-custom"/>
+ <spacer flex="1"/>
+ </vbox>
+ <spacer flex="1"/>
+ </hbox>
+ <description id="securityLevel-summary"/>
+ <hbox>
+ <label
+ id="securityLevel-learnMore"
+ class="learnMore text-link"
+ onclick="SecurityLevelPanel.hide();"
+ is="text-link"/>
+ <spacer/>
+ </hbox>
+ </vbox>
+ <hbox class="panel-footer">
+ <button id="securityLevel-restoreDefaults"
+ oncommand="SecurityLevelPanel.restoreDefaults();"/>
+ <button id="securityLevel-advancedSecuritySettings"
+ default="true"
+ oncommand="SecurityLevelPanel.openAdvancedSecuritySettings();"/>
+ </hbox>
+ </vbox>
+ </panelview>
+ </panelmultiview>
+</panel>
diff --git a/browser/components/securitylevel/content/securityLevelPreferences.css b/browser/components/securitylevel/content/securityLevelPreferences.css
new file mode 100644
index 000000000000..12a7cccffe09
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelPreferences.css
@@ -0,0 +1,52 @@
+label#securityLevel-customWarning {
+ border-radius: 4px;
+ background-color: var(--yellow-50);
+ color: black;
+ font-size: 1em;
+ height: 1.6em;
+ padding: 0.4em 0.5em;
+}
+
+radiogroup#securityLevel-radiogroup description {
+ color: var(--in-content-page-color)!important;
+}
+
+radiogroup#securityLevel-radiogroup radio {
+ font-weight: bold;
+}
+
+radiogroup#securityLevel-radiogroup > vbox {
+ border: 1px solid var(--in-content-box-border-color);
+ border-radius: 4px;
+ margin: 3px 0;
+ padding: 9px;
+}
+
+radiogroup#securityLevel-radiogroup[value=standard] > vbox#securityLevel-vbox-standard,
+radiogroup#securityLevel-radiogroup[value=safer] > vbox#securityLevel-vbox-safer,
+radiogroup#securityLevel-radiogroup[value=safest] > vbox#securityLevel-vbox-safest {
+ --section-highlight-background-color: color-mix(in srgb, var(--in-content-accent-color) 20%, transparent);
+ background-color: var(--section-highlight-background-color);
+ border: 1px solid var(--in-content-accent-color);
+
+}
+
+vbox#securityLevel-descriptionList {
+ display: none;
+ margin-inline-start:
+}
+
+radiogroup#securityLevel-radiogroup[value=safer] > vbox#securityLevel-vbox-safer > vbox#securityLevel-descriptionList,
+radiogroup#securityLevel-radiogroup[value=safest] > vbox#securityLevel-vbox-safest > vbox#securityLevel-descriptionList {
+ display: inherit;
+}
+
+vbox#securityLevel-descriptionList > description {
+ display: list-item;
+}
+
+vbox#securityLevel-vbox-standard,
+vbox#securityLevel-vbox-safer,
+vbox#securityLevel-vbox-safest {
+ margin-top: 0.4em;
+}
diff --git a/browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml b/browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
new file mode 100644
index 000000000000..b050dad81621
--- /dev/null
+++ b/browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
@@ -0,0 +1,67 @@
+<groupbox id="securityLevel-groupbox" data-category="panePrivacy" hidden="true">
+ <label><html:h2 id="securityLevel-header"/></label>
+ <vbox data-subcategory="securitylevel" flex="1">
+ <description flex="1">
+ <html:span id="securityLevel-overview" class="tail-with-learn-more"/>
+ <label id="securityLevel-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+ <radiogroup id="securityLevel-radiogroup">
+ <vbox id="securityLevel-vbox-standard">
+ <hbox>
+ <radio value="standard"/>
+ <vbox>
+ <spacer flex="1"/>
+ <label id="securityLevel-customWarning"/>
+ <spacer flex="1"/>
+ </vbox>
+ <spacer flex="1"/>
+ </hbox>
+ <description flex="1" class="indent">
+ <html:span id="securityLevel-summary" class="tail-with-learn-more"/>
+ <label id="securityLevel-restoreDefaults"
+ class="learnMore text-link"/>
+ </description>
+ </vbox>
+ <vbox id="securityLevel-vbox-safer">
+ <hbox>
+ <radio value="safer"/>
+ <vbox>
+ <spacer flex="1"/>
+ <label id="securityLevel-customWarning"/>
+ <spacer flex="1"/>
+ </vbox>
+ </hbox>
+ <description flex="1" class="indent">
+ <html:span id="securityLevel-summary" class="tail-with-learn-more"/>
+ <label id="securityLevel-restoreDefaults"
+ class="learnMore text-link"/>
+ </description>
+ <vbox id="securityLevel-descriptionList" class="indent">
+ <description id="securityLevel-description1" class="indent"/>
+ <description id="securityLevel-description2" class="indent"/>
+ <description id="securityLevel-description3" class="indent"/>
+ </vbox>
+ </vbox>
+ <vbox id="securityLevel-vbox-safest">
+ <hbox>
+ <radio value="safest"/>
+ <vbox>
+ <spacer flex="1"/>
+ <label id="securityLevel-customWarning"/>
+ <spacer flex="1"/>
+ </vbox>
+ </hbox>
+ <description flex="1" class="indent">
+ <html:span id="securityLevel-summary" class="tail-with-learn-more"/>
+ <label id="securityLevel-restoreDefaults"
+ class="learnMore text-link"/>
+ </description>
+ <vbox id="securityLevel-descriptionList" class="indent">
+ <description id="securityLevel-description1" class="indent"/>
+ <description id="securityLevel-description2" class="indent"/>
+ <description id="securityLevel-description3" class="indent"/>
+ </vbox>
+ </vbox>
+ </radiogroup>
+ </vbox>
+</groupbox>
diff --git a/browser/components/securitylevel/jar.mn b/browser/components/securitylevel/jar.mn
new file mode 100644
index 000000000000..61aa4169f9ec
--- /dev/null
+++ b/browser/components/securitylevel/jar.mn
@@ -0,0 +1,6 @@
+browser.jar:
+ content/browser/securitylevel/securityLevel.js (content/securityLevel.js)
+ content/browser/securitylevel/securityLevelPanel.css (content/securityLevelPanel.css)
+ content/browser/securitylevel/securityLevelButton.css (content/securityLevelButton.css)
+ content/browser/securitylevel/securityLevelPreferences.css (content/securityLevelPreferences.css)
+ content/browser/securitylevel/securityLevelIcon.svg (content/securityLevelIcon.svg)
diff --git a/browser/components/securitylevel/moz.build b/browser/components/securitylevel/moz.build
new file mode 100644
index 000000000000..2661ad7cb9f3
--- /dev/null
+++ b/browser/components/securitylevel/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm
index 96d3de8186e2..0ccbbb41a782 100644
--- a/browser/modules/TorStrings.jsm
+++ b/browser/modules/TorStrings.jsm
@@ -230,6 +230,10 @@ var TorStrings = {
"advanced_security_settings",
"Advanced Security Settings\u2026"
),
+ change: getString(
+ "change",
+ "Change\u2026"
+ ),
};
return retval;
})() /* Security Level Strings */,
diff --git a/browser/themes/shared/customizableui/panelUI.inc.css b/browser/themes/shared/customizableui/panelUI.inc.css
index e1d64c707518..abecf34cdb92 100644
--- a/browser/themes/shared/customizableui/panelUI.inc.css
+++ b/browser/themes/shared/customizableui/panelUI.inc.css
@@ -1430,7 +1430,8 @@ menuitem.panel-subview-footer@menuStateActive@,
#editBookmarkPanel toolbarseparator,
#downloadsPanel-mainView toolbarseparator,
.cui-widget-panelview menuseparator,
-.cui-widget-panel toolbarseparator {
+.cui-widget-panel toolbarseparator,
+#securityLevel-panel toolbarseparator {
appearance: none;
min-height: 0;
border-top: 1px solid var(--panel-separator-color);
1
0