lists.torproject.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

tbb-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

January 2024

  • 1 participants
  • 128 discussions
[Git][tpo/applications/tor-browser-build][maint-13.0] Bug 41067: Use Capture::Tiny instead of IO::CaptureOutput
by richard (@richard) 31 Jan '24

31 Jan '24
richard pushed to branch maint-13.0 at The Tor Project / Applications / tor-browser-build Commits: 74602df1 by Nicolas Vigier at 2024-01-31T08:51:48+00:00 Bug 41067: Use Capture::Tiny instead of IO::CaptureOutput The IO::CaptureOutput perl module is deprecated, so we switch to Capture::Tiny. We also remove some uses of IO::CaptureOutput where it was not needed. - - - - - 8 changed files: - README - rbm.conf - tools/clean-old - tools/dmg2mar - tools/download-torbrowser - tools/signing/machines-setup/setup-signing-machine - tools/update-responses/README.md - tools/update-responses/update_responses Changes: ===================================== README ===================================== @@ -21,7 +21,7 @@ You also need a few perl modules installed: - Getopt::Long - Template - IO::Handle -- IO::CaptureOutput +- Capture::Tiny - JSON - File::Temp - Path::Tiny @@ -41,7 +41,7 @@ If you are running Debian or Ubuntu, you can install them with: # apt-get install libdata-dump-perl libdata-uuid-perl libdatetime-perl \ libdigest-sha-perl libfile-copy-recursive-perl \ - libfile-slurp-perl libio-all-perl libio-captureoutput-perl \ + libfile-slurp-perl libio-all-perl libcapture-tiny-perl \ libio-handle-util-perl libjson-perl \ libparallel-forkmanager-perl libpath-tiny-perl \ libsort-versions-perl libstring-shellquote-perl \ @@ -51,7 +51,7 @@ If you are running Debian or Ubuntu, you can install them with: If you are running an Arch based system, you should be able to install them with: # pacman -S perl-datetime perl-path-tiny perl-yaml perl-yaml-libyaml \ - perl-yaml-tiny perl-template-toolkit perl-io-captureoutput \ + perl-yaml-tiny perl-template-toolkit perl-capture-tiny \ perl-file-copy-recursive perl-string-shellquote \ perl-sort-versions perl-data-uuid perl-data-dump perl-json \ perl-digest-sha1 perl-io-all perl-file-slurp perl-sys-syscall \ ===================================== rbm.conf ===================================== @@ -705,7 +705,6 @@ gpg_allow_expired_keys: 1 --- | # This part of the file contains options written in perl - use IO::CaptureOutput qw(capture_exec); ( var_p => { nightly_torbrowser_version => sub { ===================================== tools/clean-old ===================================== @@ -1,6 +1,5 @@ #!/usr/bin/perl -w use strict; -use IO::CaptureOutput qw(capture_exec); use FindBin; use lib "$FindBin::Bin/../rbm/lib"; use RBM; ===================================== tools/dmg2mar ===================================== @@ -29,7 +29,7 @@ # $ export "PATH=$p7zipdir/bin:$PATH" use strict; -use IO::CaptureOutput qw(capture_exec); +use Capture::Tiny qw(capture); use File::Slurp; use File::Find; use Parallel::ForkManager; @@ -48,6 +48,15 @@ sub exit_error { exit (exists $_[1] ? $_[1] : 1); } +sub capture_exec { + my @cmd = @_; + my ($stdout, $stderr, $exit) = capture { + system(@cmd); + }; + return ($stdout, $stderr, $exit == 0, $exit) if wantarray(); + return $stdout; +} + sub osname { my ($osname) = capture_exec('uname', '-s'); my ($arch) = capture_exec('uname', '-m'); ===================================== tools/download-torbrowser ===================================== @@ -6,7 +6,6 @@ use strict; use English; use LWP::Simple; -use IO::CaptureOutput qw(capture_exec); use File::Temp; use File::Basename qw(fileparse); use FindBin; ===================================== tools/signing/machines-setup/setup-signing-machine ===================================== @@ -100,7 +100,7 @@ authorized_keys richard richard.pub # Install rbm deps install_packages libyaml-libyaml-perl libtemplate-perl libdatetime-perl \ libio-handle-util-perl libio-all-perl \ - libio-captureoutput-perl libjson-perl libpath-tiny-perl \ + libcapture-tiny-perl libjson-perl libpath-tiny-perl \ libstring-shellquote-perl libsort-versions-perl \ libdigest-sha-perl libdata-uuid-perl libdata-dump-perl \ libfile-copy-recursive-perl libfile-slurp-perl ===================================== tools/update-responses/README.md ===================================== @@ -13,14 +13,14 @@ Dependencies The following perl modules need to be installed to run the script: FindBin YAML::XS File::Slurp Digest::SHA XML::Writer File::Temp - IO::CaptureOutput Parallel::ForkManager XML::LibXML LWP JSON + Capture::Tiny Parallel::ForkManager XML::LibXML LWP JSON On Debian / Ubuntu you can install them with: ``` # apt-get install libfindbin-libs-perl libyaml-libyaml-perl \ libfile-slurp-perl libdigest-sha-perl libxml-writer-perl \ - libio-captureoutput-perl libparallel-forkmanager-perl \ + libcapture-tiny-perl libparallel-forkmanager-perl \ libxml-libxml-perl libwww-perl libjson-perl ``` @@ -28,7 +28,7 @@ On Red Hat / Fedora you can install them with: ``` # for module in FindBin YAML::XS File::Slurp Digest::SHA XML::Writer \ - File::Temp IO::CaptureOutput Parallel::ForkManager \ + File::Temp Capture::Tiny Parallel::ForkManager \ XML::LibXML LWP JSON do yum install "perl($module)"; done ``` ===================================== tools/update-responses/update_responses ===================================== @@ -14,7 +14,7 @@ use File::Copy; use File::Temp; use File::Find; use POSIX qw(setlocale LC_ALL); -use IO::CaptureOutput qw(capture_exec); +use Capture::Tiny qw(capture); use Parallel::ForkManager; use File::Basename; use XML::LibXML '1.70'; @@ -265,9 +265,11 @@ sub create_incremental_mar { local $ENV{MOZ_PRODUCT_VERSION} = $new_version; local $ENV{MAR_CHANNEL_ID} = get_config($config, $new_version, $os, 'mar_channel_id'); local $ENV{TMPDIR} = $tmpdir; - my ($out, $err, $success) = capture_exec('make_incremental_update.sh', - $mar_file_path, "$tmpdir/A", "$tmpdir/B"); - if (!$success) { + my ($out, $err, $exit) = capture { + system('make_incremental_update.sh', + $mar_file_path, "$tmpdir/A", "$tmpdir/B"); + }; + if ($exit) { unlink $mar_file_path if -f $mar_file_path; exit_error "making incremental mar:\n" . $err; } @@ -490,9 +492,11 @@ sub extract_martools { $martools_tmpdir = get_tmpdir($config); my $old_cwd = getcwd; chdir $martools_tmpdir; - my (undef, undef, $success) = capture_exec('unzip', $marzip); + my (undef, undef, $exit) = capture { + system('unzip', $marzip); + }; chdir $old_cwd; - exit_error "Error extracting $marzip" unless $success; + exit_error "Error extracting $marzip" if $exit; $ENV{PATH} = "$martools_tmpdir/mar-tools:$initPATH"; if ($initLD_LIBRARY_PATH) { $ENV{LD_LIBRARY_PATH} = "$initLD_LIBRARY_PATH:$martools_tmpdir/mar-tools"; View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/7… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/7… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41067: Use Capture::Tiny instead of IO::CaptureOutput
by richard (@richard) 30 Jan '24

30 Jan '24
richard pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 0ed7a191 by Nicolas Vigier at 2024-01-30T11:49:05+01:00 Bug 41067: Use Capture::Tiny instead of IO::CaptureOutput The IO::CaptureOutput perl module is deprecated, so we switch to Capture::Tiny. We also remove some uses of IO::CaptureOutput where it was not needed. - - - - - 8 changed files: - README - rbm.conf - tools/clean-old - tools/dmg2mar - tools/download-torbrowser - tools/signing/machines-setup/setup-signing-machine - tools/update-responses/README.md - tools/update-responses/update_responses Changes: ===================================== README ===================================== @@ -21,7 +21,7 @@ You also need a few perl modules installed: - Getopt::Long - Template - IO::Handle -- IO::CaptureOutput +- Capture::Tiny - JSON - File::Temp - Path::Tiny @@ -41,7 +41,7 @@ If you are running Debian or Ubuntu, you can install them with: # apt-get install libdata-dump-perl libdata-uuid-perl libdatetime-perl \ libdigest-sha-perl libfile-copy-recursive-perl \ - libfile-slurp-perl libio-all-perl libio-captureoutput-perl \ + libfile-slurp-perl libio-all-perl libcapture-tiny-perl \ libio-handle-util-perl libjson-perl \ libparallel-forkmanager-perl libpath-tiny-perl \ libsort-versions-perl libstring-shellquote-perl \ @@ -51,7 +51,7 @@ If you are running Debian or Ubuntu, you can install them with: If you are running Fedora, CentOS or RHEL, you can install them with: # dnf install "perl(YAML::XS)" "perl(File::Basename)" "perl(Getopt::Long)" \ - "perl(Template)" "perl(IO::Handle)" "perl(IO::CaptureOutput)" \ + "perl(Template)" "perl(IO::Handle)" "perl(Capture::Tiny)" \ "perl(JSON)" "perl(File::Temp)" "perl(Path::Tiny)" \ "perl(File::Path)" "perl(File::Slurp)" \ "perl(File::Copy::Recursive)" "perl(String::ShellQuote)" @@ -62,7 +62,7 @@ If you are running Fedora, CentOS or RHEL, you can install them with: If you are running an Arch based system, you should be able to install them with: # pacman -S perl-datetime perl-path-tiny perl-yaml perl-yaml-libyaml \ - perl-yaml-tiny perl-template-toolkit perl-io-captureoutput \ + perl-yaml-tiny perl-template-toolkit perl-capture-tiny \ perl-file-copy-recursive perl-string-shellquote \ perl-sort-versions perl-data-uuid perl-data-dump perl-json \ perl-digest-sha1 perl-io-all perl-file-slurp perl-sys-syscall \ ===================================== rbm.conf ===================================== @@ -704,7 +704,6 @@ gpg_allow_expired_keys: 1 --- | # This part of the file contains options written in perl - use IO::CaptureOutput qw(capture_exec); ( var_p => { nightly_torbrowser_version => sub { ===================================== tools/clean-old ===================================== @@ -1,6 +1,5 @@ #!/usr/bin/perl -w use strict; -use IO::CaptureOutput qw(capture_exec); use FindBin; use lib "$FindBin::Bin/../rbm/lib"; use RBM; ===================================== tools/dmg2mar ===================================== @@ -29,7 +29,7 @@ # $ export "PATH=$p7zipdir/bin:$PATH" use strict; -use IO::CaptureOutput qw(capture_exec); +use Capture::Tiny qw(capture); use File::Slurp; use File::Find; use Parallel::ForkManager; @@ -48,6 +48,15 @@ sub exit_error { exit (exists $_[1] ? $_[1] : 1); } +sub capture_exec { + my @cmd = @_; + my ($stdout, $stderr, $exit) = capture { + system(@cmd); + }; + return ($stdout, $stderr, $exit == 0, $exit) if wantarray(); + return $stdout; +} + sub osname { my ($osname) = capture_exec('uname', '-s'); my ($arch) = capture_exec('uname', '-m'); ===================================== tools/download-torbrowser ===================================== @@ -6,7 +6,6 @@ use strict; use English; use LWP::Simple; -use IO::CaptureOutput qw(capture_exec); use File::Temp; use File::Basename qw(fileparse); use FindBin; ===================================== tools/signing/machines-setup/setup-signing-machine ===================================== @@ -100,7 +100,7 @@ authorized_keys richard richard.pub # Install rbm deps install_packages libyaml-libyaml-perl libtemplate-perl libdatetime-perl \ libio-handle-util-perl libio-all-perl \ - libio-captureoutput-perl libjson-perl libpath-tiny-perl \ + libcapture-tiny-perl libjson-perl libpath-tiny-perl \ libstring-shellquote-perl libsort-versions-perl \ libdigest-sha-perl libdata-uuid-perl libdata-dump-perl \ libfile-copy-recursive-perl libfile-slurp-perl ===================================== tools/update-responses/README.md ===================================== @@ -13,14 +13,14 @@ Dependencies The following perl modules need to be installed to run the script: FindBin YAML::XS File::Slurp Digest::SHA XML::Writer File::Temp - IO::CaptureOutput Parallel::ForkManager XML::LibXML LWP JSON + Capture::Tiny Parallel::ForkManager XML::LibXML LWP JSON On Debian / Ubuntu you can install them with: ``` # apt-get install libfindbin-libs-perl libyaml-libyaml-perl \ libfile-slurp-perl libdigest-sha-perl libxml-writer-perl \ - libio-captureoutput-perl libparallel-forkmanager-perl \ + libcapture-tiny-perl libparallel-forkmanager-perl \ libxml-libxml-perl libwww-perl libjson-perl ``` @@ -28,7 +28,7 @@ On Red Hat / Fedora you can install them with: ``` # for module in FindBin YAML::XS File::Slurp Digest::SHA XML::Writer \ - File::Temp IO::CaptureOutput Parallel::ForkManager \ + File::Temp Capture::Tiny Parallel::ForkManager \ XML::LibXML LWP JSON do yum install "perl($module)"; done ``` ===================================== tools/update-responses/update_responses ===================================== @@ -14,7 +14,7 @@ use File::Copy; use File::Temp; use File::Find; use POSIX qw(setlocale LC_ALL); -use IO::CaptureOutput qw(capture_exec); +use Capture::Tiny qw(capture); use Parallel::ForkManager; use File::Basename; use XML::LibXML '1.70'; @@ -265,9 +265,11 @@ sub create_incremental_mar { local $ENV{MOZ_PRODUCT_VERSION} = $new_version; local $ENV{MAR_CHANNEL_ID} = get_config($config, $new_version, $os, 'mar_channel_id'); local $ENV{TMPDIR} = $tmpdir; - my ($out, $err, $success) = capture_exec('make_incremental_update.sh', - $mar_file_path, "$tmpdir/A", "$tmpdir/B"); - if (!$success) { + my ($out, $err, $exit) = capture { + system('make_incremental_update.sh', + $mar_file_path, "$tmpdir/A", "$tmpdir/B"); + }; + if ($exit) { unlink $mar_file_path if -f $mar_file_path; exit_error "making incremental mar:\n" . $err; } @@ -490,9 +492,11 @@ sub extract_martools { $martools_tmpdir = get_tmpdir($config); my $old_cwd = getcwd; chdir $martools_tmpdir; - my (undef, undef, $success) = capture_exec('unzip', $marzip); + my (undef, undef, $exit) = capture { + system('unzip', $marzip); + }; chdir $old_cwd; - exit_error "Error extracting $marzip" unless $success; + exit_error "Error extracting $marzip" if $exit; $ENV{PATH} = "$martools_tmpdir/mar-tools:$initPATH"; if ($initLD_LIBRARY_PATH) { $ENV{LD_LIBRARY_PATH} = "$initLD_LIBRARY_PATH:$martools_tmpdir/mar-tools"; View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-13.0] Update rbm for rbm#40068 and rbm#40069
by boklm (@boklm) 30 Jan '24

30 Jan '24
boklm pushed to branch maint-13.0 at The Tor Project / Applications / tor-browser-build Commits: cfa73f9c by Nicolas Vigier at 2024-01-30T16:46:23+01:00 Update rbm for rbm#40068 and rbm#40069 - - - - - 1 changed file: - rbm Changes: ===================================== rbm ===================================== @@ -1 +1 @@ -Subproject commit b5e5b04aaf677c4bacfb5ace45598313286bfdf6 +Subproject commit 067c30ee4cf3baa1c0b7e3674d785cf9e5bec8fe View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/c… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/c… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/rbm][main] Bug 40069: Fix encoding of stdout and stderr
by richard (@richard) 30 Jan '24

30 Jan '24
richard pushed to branch main at The Tor Project / Applications / RBM Commits: 067c30ee by Nicolas Vigier at 2024-01-30T12:50:32+01:00 Bug 40069: Fix encoding of stdout and stderr Set stdout and stder encoding based on nl_langinfo, or LC_ALL and LANG locale environment variables, as suggested on https://perldoc.perl.org/open. - - - - - 1 changed file: - rbm Changes: ===================================== rbm ===================================== @@ -1,6 +1,7 @@ #!/usr/bin/perl -w use strict; +use open OUT => ':locale'; use File::Basename; use lib dirname($0) . '/lib'; use RBM; View it on GitLab: https://gitlab.torproject.org/tpo/applications/rbm/-/commit/067c30ee4cf3baa… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/rbm/-/commit/067c30ee4cf3baa… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser-update-responses][main] alpha: new version, 13.5a4
by richard (@richard) 30 Jan '24

30 Jan '24
richard pushed to branch main at The Tor Project / Applications / mullvad-browser-update-responses Commits: 4a352531 by Richard Pospesel at 2024-01-30T11:59:07+00:00 alpha: new version, 13.5a4 - - - - - 29 changed files: - update_1/alpha/.htaccess - − update_1/alpha/13.0a6-13.5a3-linux-x86_64-ALL.xml - − update_1/alpha/13.0a6-13.5a3-macos-ALL.xml - − update_1/alpha/13.0a6-13.5a3-windows-x86_64-ALL.xml - − update_1/alpha/13.5a1-13.5a3-linux-x86_64-ALL.xml - − update_1/alpha/13.5a1-13.5a3-macos-ALL.xml - − update_1/alpha/13.5a1-13.5a3-windows-x86_64-ALL.xml - + update_1/alpha/13.5a1-13.5a4-linux-x86_64-ALL.xml - + update_1/alpha/13.5a1-13.5a4-macos-ALL.xml - + update_1/alpha/13.5a1-13.5a4-windows-x86_64-ALL.xml - − update_1/alpha/13.5a2-13.5a3-linux-x86_64-ALL.xml - − update_1/alpha/13.5a2-13.5a3-macos-ALL.xml - − update_1/alpha/13.5a2-13.5a3-windows-x86_64-ALL.xml - + update_1/alpha/13.5a2-13.5a4-linux-x86_64-ALL.xml - + update_1/alpha/13.5a2-13.5a4-macos-ALL.xml - + update_1/alpha/13.5a2-13.5a4-windows-x86_64-ALL.xml - + update_1/alpha/13.5a3-13.5a4-linux-x86_64-ALL.xml - + update_1/alpha/13.5a3-13.5a4-macos-ALL.xml - + update_1/alpha/13.5a3-13.5a4-windows-x86_64-ALL.xml - − update_1/alpha/13.5a3-linux-x86_64-ALL.xml - − update_1/alpha/13.5a3-macos-ALL.xml - − update_1/alpha/13.5a3-windows-x86_64-ALL.xml - + update_1/alpha/13.5a4-linux-x86_64-ALL.xml - + update_1/alpha/13.5a4-macos-ALL.xml - + update_1/alpha/13.5a4-windows-x86_64-ALL.xml - update_1/alpha/download-linux-x86_64.json - update_1/alpha/download-macos.json - update_1/alpha/download-windows-x86_64.json - update_1/alpha/downloads.json Changes: ===================================== update_1/alpha/.htaccess ===================================== @@ -1,22 +1,22 @@ RewriteEngine On -RewriteRule ^[^/]+/13.5a3/ no-update.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.0a6/ALL 13.0a6-13.5a3-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.5a1/ALL 13.5a1-13.5a3-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.5a2/ALL 13.5a2-13.5a3-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/[^/]+/ALL 13.5a3-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/ 13.5a3-linux-x86_64-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.0a6/ALL 13.0a6-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.5a1/ALL 13.5a1-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.5a2/ALL 13.5a2-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/[^/]+/ALL 13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/ 13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.0a6/ALL 13.0a6-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.5a1/ALL 13.5a1-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.5a2/ALL 13.5a2-13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/[^/]+/ALL 13.5a3-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/ 13.5a3-macos-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.0a6/ALL 13.0a6-13.5a3-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.5a1/ALL 13.5a1-13.5a3-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.5a2/ALL 13.5a2-13.5a3-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/[^/]+/ALL 13.5a3-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/ 13.5a3-windows-x86_64-ALL.xml [last] +RewriteRule ^[^/]+/13.5a4/ no-update.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.5a1/ALL 13.5a1-13.5a4-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.5a2/ALL 13.5a2-13.5a4-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.5a3/ALL 13.5a3-13.5a4-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/[^/]+/ALL 13.5a4-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/ 13.5a4-linux-x86_64-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.5a1/ALL 13.5a1-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.5a2/ALL 13.5a2-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.5a3/ALL 13.5a3-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/[^/]+/ALL 13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/ 13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.5a1/ALL 13.5a1-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.5a2/ALL 13.5a2-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.5a3/ALL 13.5a3-13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/[^/]+/ALL 13.5a4-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/ 13.5a4-macos-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.5a1/ALL 13.5a1-13.5a4-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.5a2/ALL 13.5a2-13.5a4-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.5a3/ALL 13.5a3-13.5a4-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/[^/]+/ALL 13.5a4-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/ 13.5a4-windows-x86_64-ALL.xml [last] ===================================== update_1/alpha/13.0a6-13.5a3-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3_…" hashFunction="SHA512" hashValue="ad2914a4f0c2b78f7d740fc8d1077767e3c42f12857fbda706c87b5f52cb2e4a415aaa0e4e732764f2fe463ae335b73fe52db6943b02e50fafef11fc42864475" size="106795579" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64--13.0a6…" hashFunction="SHA512" hashValue="d06ef52fb1061cc60e2b4455845cef391a956b12827d6687e80ef82b685dd7e4b08b163426d4692733c8bc8fc0b69d1c32d840d39638eb99866d83c8c716e100" size="9198850" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.0a6-13.5a3-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3_ALL.mar" hashFunction="SHA512" hashValue="b3c91729bb0f42aab67440d4119f2574d917c501b0ee958d41eb36914acdf9c2ba40d1aa12755a84744b073941d4ccc1c792e86007fbe05fb545e53dd96aac5f" size="114855415" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos--13.0a6-13.5a3…" hashFunction="SHA512" hashValue="ef939f5a129df1a0b253e9ccd5d2d43389d6cdf1883da2cb81e3dd24cb756ba378935630c1234ed5223da078aaf6f980fefdb66ef2cc0b94375dbf61902e06c3" size="14294193" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.0a6-13.5a3-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="a6ce2a3d2ed55b42354f6559e9cf48f5971728d13f83070331bda042a114bb02d0e06b5dd7dad2db6fc3376ec152d0f92a7fb87d21cf00da398a9bb5577dc1f5" size="88815824" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64--13.0…" hashFunction="SHA512" hashValue="28c5d75219d14249a9363cf42518ea6954dd00f76fa8100d3c7a52c72430eeb8f370176376082fda5df19b62c36f4ed7373979ab2b3f52bb31d118278abdfb45" size="9817942" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a3-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3_…" hashFunction="SHA512" hashValue="ad2914a4f0c2b78f7d740fc8d1077767e3c42f12857fbda706c87b5f52cb2e4a415aaa0e4e732764f2fe463ae335b73fe52db6943b02e50fafef11fc42864475" size="106795579" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64--13.5a1…" hashFunction="SHA512" hashValue="b60a8436420fc9e904499ca9c073e792c207a6b9ef94433bff2f9895c12f482fdfb70d6511c72d548d597562dda90b59e9afd96c7789785f8e8ac5a342423bd4" size="8508777" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a3-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3_ALL.mar" hashFunction="SHA512" hashValue="b3c91729bb0f42aab67440d4119f2574d917c501b0ee958d41eb36914acdf9c2ba40d1aa12755a84744b073941d4ccc1c792e86007fbe05fb545e53dd96aac5f" size="114855415" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos--13.5a1-13.5a3…" hashFunction="SHA512" hashValue="238d6a426fc36ab8f117032c54198dfcd36272d03f7e2ed0c2e9b139bfa2ffb6197b3082e57dae827226b137305e10a244de4a3619c8b88d4c00799c41cb3505" size="13597253" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a3-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="a6ce2a3d2ed55b42354f6559e9cf48f5971728d13f83070331bda042a114bb02d0e06b5dd7dad2db6fc3376ec152d0f92a7fb87d21cf00da398a9bb5577dc1f5" size="88815824" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64--13.5…" hashFunction="SHA512" hashValue="9e289c8b83afbdd9b09bcadbcd93f3f66c36d2ea7965cfd04a6a4e492d0541f3a652361c8db099e2d11a6db0c07023c2acfae478defbb6660c41deb17e45900c" size="9179529" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a4-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4_…" hashFunction="SHA512" hashValue="f4807be1248046f3115f381dbead91fdf8731f3f3ffc76a7eb7bf32eb58f37e3e4cd76861bf6783c53662de6dfd8e3f5e2e193ae49c2828ca8c70eaad512ae9c" size="107916327" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64--13.5a1…" hashFunction="SHA512" hashValue="7929965bcf3f97ffe3a856248271d3dcbb5999b228858b75f3e1d993bfcfe5d06efecce70f1325edd1fde4edabd0d556b44e6ee56149a0f73e54c55bd773b34a" size="15875405" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a4-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4_ALL.mar" hashFunction="SHA512" hashValue="05aa6ee66d4dea52c6fec07d45cb0bc96dc813b3f86db418eb86ecf6dccd44e85c0fb1c7c2450d50b35b1ad8da0a7d16ed16f2083fef7e3e1135774ad278908b" size="115308515" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos--13.5a1-13.5a4…" hashFunction="SHA512" hashValue="e49a99198e0046cc0133a69991bc204ec89e4fe07216be40d7a669ecd3b8ac26c889de3a0d161b6be726105369e46d2e92c84177cdde14df968005a5aafe1b1f" size="17266465" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a1-13.5a4-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="2681c3052302fa2e791e6c82d2ad48569d8f1622400bd433efe31e7757e8002c0f5c1f2930949f89ee059bc61b2cea2101d56b67f2c506eb6222a0ff709948f6" size="89263680" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64--13.5…" hashFunction="SHA512" hashValue="69038008b474bf188b13e1c41331de90f0b591f93f961145b744d9df552a423b5e1c17ad36db608e53a68c31249e9c9f31ddba6b7ab066b91ea44aa0c2b17640" size="12871701" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a3-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3_…" hashFunction="SHA512" hashValue="ad2914a4f0c2b78f7d740fc8d1077767e3c42f12857fbda706c87b5f52cb2e4a415aaa0e4e732764f2fe463ae335b73fe52db6943b02e50fafef11fc42864475" size="106795579" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64--13.5a2…" hashFunction="SHA512" hashValue="8a7d10996b6b801f1d2858c200049ddf95117ccdcaacc3cb8b5e818312f4b195b231f18bd8f61e5cb1513c1f1791ece281fe503209250896c430c1766b1797af" size="5627360" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a3-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3_ALL.mar" hashFunction="SHA512" hashValue="b3c91729bb0f42aab67440d4119f2574d917c501b0ee958d41eb36914acdf9c2ba40d1aa12755a84744b073941d4ccc1c792e86007fbe05fb545e53dd96aac5f" size="114855415" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos--13.5a2-13.5a3…" hashFunction="SHA512" hashValue="e2441d94986928b77ec1606b07cfca59e56f1cba1e6f466e14c8482fff7e33ec0aa78429787b25ba3d0f573060c6bfaad6a6094a26cd28e60c8e2a38891fff18" size="10532560" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a3-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="a6ce2a3d2ed55b42354f6559e9cf48f5971728d13f83070331bda042a114bb02d0e06b5dd7dad2db6fc3376ec152d0f92a7fb87d21cf00da398a9bb5577dc1f5" size="88815824" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64--13.5…" hashFunction="SHA512" hashValue="07b3258657393586dce54e2c508de7e87969fb6516988dd992573ef57585e9f99a0798afdd1c0c5100f4485c42664e2c88f4566c8022c0c7ba3d90a315fd9cbc" size="6257559" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a4-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4_…" hashFunction="SHA512" hashValue="f4807be1248046f3115f381dbead91fdf8731f3f3ffc76a7eb7bf32eb58f37e3e4cd76861bf6783c53662de6dfd8e3f5e2e193ae49c2828ca8c70eaad512ae9c" size="107916327" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64--13.5a2…" hashFunction="SHA512" hashValue="615a7a213ae930ab0072f3e4f0eb6ff823e371fb2931e6ea50ab82b47a30acbdc2904e790bd186886da8540e2dc89fa5f8383938acb9de3a81a7552f53527577" size="14878410" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a4-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4_ALL.mar" hashFunction="SHA512" hashValue="05aa6ee66d4dea52c6fec07d45cb0bc96dc813b3f86db418eb86ecf6dccd44e85c0fb1c7c2450d50b35b1ad8da0a7d16ed16f2083fef7e3e1135774ad278908b" size="115308515" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos--13.5a2-13.5a4…" hashFunction="SHA512" hashValue="dcabe3438794aae6e64d72bfe836ad65cf8454e6db2aef9acaaa07d83d341912a5bf9ccf1b3125ff0cc00846fe6b79b0d775e0d47c3bf1f5777a97356a7148c7" size="16017493" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a2-13.5a4-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="2681c3052302fa2e791e6c82d2ad48569d8f1622400bd433efe31e7757e8002c0f5c1f2930949f89ee059bc61b2cea2101d56b67f2c506eb6222a0ff709948f6" size="89263680" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64--13.5…" hashFunction="SHA512" hashValue="ffe9a835049d044d17e66bcb06c035f145c7cd6913de0f23755fda6a164406bc86fa9dc5297a9fec7eac1b23014f742e9733bd4ddf7cd89a7a979525b2570657" size="11825429" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a3-13.5a4-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4_…" hashFunction="SHA512" hashValue="f4807be1248046f3115f381dbead91fdf8731f3f3ffc76a7eb7bf32eb58f37e3e4cd76861bf6783c53662de6dfd8e3f5e2e193ae49c2828ca8c70eaad512ae9c" size="107916327" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64--13.5a3…" hashFunction="SHA512" hashValue="5d8408d9e6e701a3ba9ff4e697b55f23d86e6909aa406b23730772631893cb5b6ca8f472fa5a2ffa448bcbf055375afc0775ad82d583ee45a1a1d64e8a3db761" size="13991539" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a3-13.5a4-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4_ALL.mar" hashFunction="SHA512" hashValue="05aa6ee66d4dea52c6fec07d45cb0bc96dc813b3f86db418eb86ecf6dccd44e85c0fb1c7c2450d50b35b1ad8da0a7d16ed16f2083fef7e3e1135774ad278908b" size="115308515" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos--13.5a3-13.5a4…" hashFunction="SHA512" hashValue="bf3ef67f38db8d9bb85f07dc92c2ee3e70e767c1954c07e9538c1bb6a84a1c98ca1ce280977b78cf90154ceb96e68bb905667e01407de581e1d5556a2ccea26c" size="14099283" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a3-13.5a4-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="2681c3052302fa2e791e6c82d2ad48569d8f1622400bd433efe31e7757e8002c0f5c1f2930949f89ee059bc61b2cea2101d56b67f2c506eb6222a0ff709948f6" size="89263680" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64--13.5…" hashFunction="SHA512" hashValue="55cd47c65f8c38296547bad978c4fae0e51733de4f7970e1ac9f4d01083ebdc06eecee506bf92f6eb2e64c476fa707c5af33ea0c7838acf44217b8706102471e" size="9557366" type="partial"></patch></update></updates> ===================================== update_1/alpha/13.5a3-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3_…" hashFunction="SHA512" hashValue="ad2914a4f0c2b78f7d740fc8d1077767e3c42f12857fbda706c87b5f52cb2e4a415aaa0e4e732764f2fe463ae335b73fe52db6943b02e50fafef11fc42864475" size="106795579" type="complete"></patch></update></updates> ===================================== update_1/alpha/13.5a3-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3_ALL.mar" hashFunction="SHA512" hashValue="b3c91729bb0f42aab67440d4119f2574d917c501b0ee958d41eb36914acdf9c2ba40d1aa12755a84744b073941d4ccc1c792e86007fbe05fb545e53dd96aac5f" size="114855415" type="complete"></patch></update></updates> ===================================== update_1/alpha/13.5a3-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.5a3" appVersion="13.5a3" platformVersion="115.6.0" buildID="20231219113348" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a3" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="a6ce2a3d2ed55b42354f6559e9cf48f5971728d13f83070331bda042a114bb02d0e06b5dd7dad2db6fc3376ec152d0f92a7fb87d21cf00da398a9bb5577dc1f5" size="88815824" type="complete"></patch></update></updates> ===================================== update_1/alpha/13.5a4-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4_…" hashFunction="SHA512" hashValue="f4807be1248046f3115f381dbead91fdf8731f3f3ffc76a7eb7bf32eb58f37e3e4cd76861bf6783c53662de6dfd8e3f5e2e193ae49c2828ca8c70eaad512ae9c" size="107916327" type="complete"></patch></update></updates> ===================================== update_1/alpha/13.5a4-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4_ALL.mar" hashFunction="SHA512" hashValue="05aa6ee66d4dea52c6fec07d45cb0bc96dc813b3f86db418eb86ecf6dccd44e85c0fb1c7c2450d50b35b1ad8da0a7d16ed16f2083fef7e3e1135774ad278908b" size="115308515" type="complete"></patch></update></updates> ===================================== update_1/alpha/13.5a4-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.5a4" appVersion="13.5a4" platformVersion="115.7.0" buildID="20240129155630" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.5a4" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-13.5a…" hashFunction="SHA512" hashValue="2681c3052302fa2e791e6c82d2ad48569d8f1622400bd433efe31e7757e8002c0f5c1f2930949f89ee059bc61b2cea2101d56b67f2c506eb6222a0ff709948f6" size="89263680" type="complete"></patch></update></updates> ===================================== update_1/alpha/download-linux-x86_64.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3.…","git_tag":"mb-13.5a3-build1","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3.…","version":"13.5a3"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4.…","git_tag":"mb-13.5a4-build1","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4.…","version":"13.5a4"} \ No newline at end of file ===================================== update_1/alpha/download-macos.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3.dmg","git_tag":"mb-13.5a3-build1","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3.dmg.asc","version":"13.5a3"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4.dmg","git_tag":"mb-13.5a4-build1","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4.dmg.asc","version":"13.5a4"} \ No newline at end of file ===================================== update_1/alpha/download-windows-x86_64.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-porta…","git_tag":"mb-13.5a3-build1","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-porta…","version":"13.5a3"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-porta…","git_tag":"mb-13.5a4-build1","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-porta…","version":"13.5a4"} \ No newline at end of file ===================================== update_1/alpha/downloads.json ===================================== @@ -1 +1 @@ -{"downloads":{"linux-x86_64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3.…","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-linux-x86_64-13.5a3.…"}},"macos":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3.dmg","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-macos-13.5a3.dmg.asc"}},"win64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-porta…","sig":"https://cdn.mullvad.net/browser/13.5a3/mullvad-browser-windows-x86_64-porta…"}}},"tag":"mb-13.5a3-build1","version":"13.5a3"} \ No newline at end of file +{"downloads":{"linux-x86_64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4.…","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-linux-x86_64-13.5a4.…"}},"macos":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4.dmg","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-macos-13.5a4.dmg.asc"}},"win64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-porta…","sig":"https://cdn.mullvad.net/browser/13.5a4/mullvad-browser-windows-x86_64-porta…"}}},"tag":"mb-13.5a4-build1","version":"13.5a4"} \ No newline at end of file View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] 2 commits: Fixed indentation in README.
by Pier Angelo Vendrame (@pierov) 30 Jan '24

30 Jan '24
Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 81929890 by Pier Angelo Vendrame at 2024-01-30T10:34:43+01:00 Fixed indentation in README. - - - - - e486334e by NoisyCoil at 2024-01-30T10:34:51+01:00 Bug 41038: Add RPM dependencies to README. Tested in Fedora 39. - - - - - 1 changed file: - README Changes: ===================================== README ===================================== @@ -48,6 +48,17 @@ If you are running Debian or Ubuntu, you can install them with: libtemplate-perl libxml-libxml-perl libxml-writer-perl \ libyaml-libyaml-perl git mercurial uidmap zstd +If you are running Fedora, CentOS or RHEL, you can install them with: + +# dnf install "perl(YAML::XS)" "perl(File::Basename)" "perl(Getopt::Long)" \ + "perl(Template)" "perl(IO::Handle)" "perl(IO::CaptureOutput)" \ + "perl(JSON)" "perl(File::Temp)" "perl(Path::Tiny)" \ + "perl(File::Path)" "perl(File::Slurp)" \ + "perl(File::Copy::Recursive)" "perl(String::ShellQuote)" + "perl(Sort::Versions)" "perl(Digest::SHA)" "perl(Data::UUID)" \ + "perl(Data::Dump)" "perl(DateTime)" "perl(XML::Writer)" \ + "perl(Parallel::ForkManager)" perl-ph mercurial git zstd + If you are running an Arch based system, you should be able to install them with: # pacman -S perl-datetime perl-path-tiny perl-yaml perl-yaml-libyaml \ @@ -228,10 +239,9 @@ be done with the following command: # apt-get install build-essential python3 automake libtool zip unzip \ autoconf2.13 openjdk-11-jdk gettext-base autotools-dev \ - automake autoconf libtool autopoint libssl-dev \ - pkg-config zlib1g-dev libparallel-forkmanager-perl \ - libfile-slurp-perl bzip2 xz-utils apksigner yasm wget \ - bison gyp tcl python3-venv 7zip jq + automake autoconf libtool autopoint libssl-dev pkg-config \ + zlib1g-dev libparallel-forkmanager-perl libfile-slurp-perl bzip2 \ + xz-utils apksigner yasm wget bison gyp tcl python3-venv 7zip jq Note that Debian Bullseye requires the bullseye-backports repository to get the 7zip package. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41072: Set correct updater_url for Mullvad Browser nightly builds
by boklm (@boklm) 30 Jan '24

30 Jan '24
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: f1ecbc88 by Nicolas Vigier at 2024-01-30T09:05:17+01:00 Bug 41072: Set correct updater_url for Mullvad Browser nightly builds - - - - - 1 changed file: - projects/firefox/config Changes: ===================================== projects/firefox/config ===================================== @@ -89,6 +89,7 @@ targets: branding_directory_prefix: 'mb' gitlab_project: https://gitlab.torproject.org/tpo/applications/mullvad-browser updater_url: 'https://cdn.mullvad.net/browser/update_responses/update_1/' + nightly_updates_publish_dir_prefix: mullvadbrowser- linux-x86_64: var: View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41073: Add required packages for container-less build
by boklm (@boklm) 30 Jan '24

30 Jan '24
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 056eeab3 by Mynacol at 2024-01-30T08:38:35+01:00 Bug 41073: Add required packages for container-less build jq and 7zip are both absolutely required, 7zip just recently. bison, tcl, gyp and python3-venv are scattered around as dependency. wget is also definitely required, but it&#39;s not available in a minimal docker image. Besides this, python3, not python2 is required, similarly jdk 11 instead of 8. - - - - - 1 changed file: - README Changes: ===================================== README ===================================== @@ -222,15 +222,19 @@ of containers: the container-image project is still called, but it will just create an empty file instead of a real container image. The build without containers is currently only supported for the Android -builds, and will require that you run Debian Buster and install build -dependencies for all the components that are built. This can be done -with the following command: +builds, and will require that you run Debian Bullseye or Bookworm and +install build dependencies for all the components that are built. This can +be done with the following command: - # apt-get install build-essential python automake libtool zip unzip \ - autoconf2.13 openjdk-8-jdk gettext-base autotools-dev \ + # apt-get install build-essential python3 automake libtool zip unzip \ + autoconf2.13 openjdk-11-jdk gettext-base autotools-dev \ automake autoconf libtool autopoint libssl-dev \ pkg-config zlib1g-dev libparallel-forkmanager-perl \ - libfile-slurp-perl bzip2 xz-utils apksigner yasm + libfile-slurp-perl bzip2 xz-utils apksigner yasm wget \ + bison gyp tcl python3-venv 7zip jq + +Note that Debian Bullseye requires the bullseye-backports repository to +get the 7zip package. Common Build Errors View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/0… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] fixup! Add Tor integration and UI
by Dan Ballard (@dan) 30 Jan '24

30 Jan '24
Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: faf7e9bd by clairehurst at 2024-01-29T16:07:17-07:00 fixup! Add Tor integration and UI - - - - - 30 changed files: - − fenix/app/src/beta/ic_launcher_monochrome-playstore.png - − fenix/app/src/debug/ic_launcher-web.png - − fenix/app/src/main/ic_launcher-web.png - fenix/app/src/main/java/org/mozilla/fenix/experiments/view/ResearchSurfaceSurvey.kt - − fenix/app/src/main/res/drawable-hdpi/ic_logo_wordmark_normal.png - − fenix/app/src/main/res/drawable-hdpi/ic_logo_wordmark_private.png - − fenix/app/src/main/res/drawable-hdpi/onboarding_default_browser.webp - − fenix/app/src/main/res/drawable-hdpi/onboarding_notification.webp - − fenix/app/src/main/res/drawable-hdpi/onboarding_sync.webp - − fenix/app/src/main/res/drawable-ldrtl/onboarding_dark_theme.xml - − fenix/app/src/main/res/drawable-ldrtl/onboarding_light_theme.xml - − fenix/app/src/main/res/drawable-mdpi/ic_logo_wordmark_normal.png - − fenix/app/src/main/res/drawable-mdpi/ic_logo_wordmark_private.png - − fenix/app/src/main/res/drawable-night/ic_logo_wordmark_normal.xml - − fenix/app/src/main/res/drawable-xhdpi/ic_logo_wordmark_normal.png - − fenix/app/src/main/res/drawable-xhdpi/ic_logo_wordmark_private.png - − fenix/app/src/main/res/drawable-xhdpi/onboarding_default_browser.webp - − fenix/app/src/main/res/drawable-xhdpi/onboarding_notification.webp - − fenix/app/src/main/res/drawable-xhdpi/onboarding_sync.webp - − fenix/app/src/main/res/drawable-xxhdpi/ic_logo_wordmark_normal.png - − fenix/app/src/main/res/drawable-xxhdpi/ic_logo_wordmark_private.png - − fenix/app/src/main/res/drawable-xxhdpi/onboarding_default_browser.webp - − fenix/app/src/main/res/drawable-xxhdpi/onboarding_notification.webp - − fenix/app/src/main/res/drawable-xxhdpi/onboarding_sync.webp - − fenix/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark_normal.png - − fenix/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark_private.png - − fenix/app/src/main/res/drawable/ic_firefox.xml - − fenix/app/src/main/res/drawable/ic_launcher_monochrome.xml - − fenix/app/src/main/res/drawable/ic_scan.xml - − fenix/app/src/main/res/drawable/ic_wordmark_logo.png The diff was not included because it is too large. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/faf… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/faf… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.7.0esr-13.5-1] 4 commits: fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in...
by richard (@richard) 29 Jan '24

29 Jan '24
richard pushed to branch tor-browser-115.7.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: e16caa30 by Henry Wilkes at 2024-01-29T18:34:30+00:00 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection Bug 41913: Add basic validation to user provided bridge dialog, and a confirmation step. - - - - - 6fe742ee by Henry Wilkes at 2024-01-29T18:34:30+00:00 fixup! Tor Browser strings Bug 41913: Add strings for user provided bridge dialog. - - - - - 7abc2cc1 by Henry Wilkes at 2024-01-29T18:34:30+00:00 fixup! Bug 40597: Implement TorSettings module Bug 41913: Add public validateBridgeLines method. - - - - - fd4565d1 by Henry Wilkes at 2024-01-29T18:34:30+00:00 fixup! Add TorStrings module for localization Bug 41913: Remove old strings for user provided bridge addresses. - - - - - 12 changed files: - browser/components/preferences/preferences.xhtml - + browser/components/torpreferences/content/bridgemoji/BridgeEmoji.js - browser/components/torpreferences/content/connectionPane.js - browser/components/torpreferences/content/connectionPane.xhtml - browser/components/torpreferences/content/provideBridgeDialog.js - browser/components/torpreferences/content/provideBridgeDialog.xhtml - browser/components/torpreferences/content/torPreferences.css - browser/components/torpreferences/jar.mn - browser/locales/en-US/browser/tor-browser.ftl - toolkit/modules/TorSettings.sys.mjs - toolkit/modules/TorStrings.sys.mjs - toolkit/torbutton/chrome/locale/en-US/settings.properties Changes: ===================================== browser/components/preferences/preferences.xhtml ===================================== @@ -70,6 +70,7 @@ <script type="module" src="chrome://global/content/elements/moz-support-link.mjs"/> <script src="chrome://browser/content/migration/migration-wizard.mjs" type="module"></script> <script type="module" src="chrome://global/content/elements/moz-toggle.mjs"/> + <script src="chrome://browser/content/torpreferences/bridgemoji/BridgeEmoji.js"/> </head> <html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" ===================================== browser/components/torpreferences/content/bridgemoji/BridgeEmoji.js ===================================== @@ -0,0 +1,199 @@ +"use strict"; + +{ + /** + * Element to display a single bridge emoji, with a localized name. + */ + class BridgeEmoji extends HTMLElement { + static #activeInstances = new Set(); + static #observer(subject, topic, data) { + if (topic === "intl:app-locales-changed") { + BridgeEmoji.#updateEmojiLangCode(); + } + } + + static #addActiveInstance(inst) { + if (this.#activeInstances.size === 0) { + Services.obs.addObserver(this.#observer, "intl:app-locales-changed"); + this.#updateEmojiLangCode(); + } + this.#activeInstances.add(inst); + } + + static #removeActiveInstance(inst) { + this.#activeInstances.delete(inst); + if (this.#activeInstances.size === 0) { + Services.obs.removeObserver(this.#observer, "intl:app-locales-changed"); + } + } + + /** + * The language code for emoji annotations. + * + * null if unset. + * + * @type {string?} + */ + static #emojiLangCode = null; + /** + * A promise that resolves to two JSON structures for bridge-emojis.json and + * annotations.json, respectively. + * + * @type {Promise} + */ + static #emojiPromise = Promise.all([ + fetch( + "chrome://browser/content/torpreferences/bridgemoji/bridge-emojis.json" + ).then(response => response.json()), + fetch( + "chrome://browser/content/torpreferences/bridgemoji/annotations.json" + ).then(response => response.json()), + ]); + + static #unknownStringPromise = null; + + /** + * Update #emojiLangCode. + */ + static async #updateEmojiLangCode() { + let langCode; + const emojiAnnotations = (await BridgeEmoji.#emojiPromise)[1]; + // Find the first desired locale we have annotations for. + // Add "en" as a fallback. + for (const bcp47 of [...Services.locale.appLocalesAsBCP47, "en"]) { + langCode = bcp47; + if (langCode in emojiAnnotations) { + break; + } + // Remove everything after the dash, if there is one. + langCode = bcp47.replace(/-.*/, ""); + if (langCode in emojiAnnotations) { + break; + } + } + if (langCode !== this.#emojiLangCode) { + this.#emojiLangCode = langCode; + this.#unknownStringPromise = document.l10n.formatValue( + "tor-bridges-emoji-unknown" + ); + for (const inst of this.#activeInstances) { + inst.update(); + } + } + } + + /** + * Update the bridge emoji to show their corresponding emoji with an + * annotation that matches the current locale. + */ + async update() { + if (!this.#active) { + return; + } + + if (!BridgeEmoji.#emojiLangCode) { + // No lang code yet, wait until it is updated. + return; + } + + const doc = this.ownerDocument; + const [unknownString, [emojiList, emojiAnnotations]] = await Promise.all([ + BridgeEmoji.#unknownStringPromise, + BridgeEmoji.#emojiPromise, + ]); + + const emoji = emojiList[this.#index]; + let emojiName; + if (!emoji) { + // Unexpected. + this.#img.removeAttribute("src"); + } else { + const cp = emoji.codePointAt(0).toString(16); + this.#img.setAttribute( + "src", + `chrome://browser/content/torpreferences/bridgemoji/svgs/${cp}.svg` + ); + emojiName = emojiAnnotations[BridgeEmoji.#emojiLangCode][cp]; + } + if (!emojiName) { + doc.defaultView.console.error(`No emoji for index ${this.#index}`); + emojiName = unknownString; + } + doc.l10n.setAttributes(this, "tor-bridges-emoji-cell", { + emojiName, + }); + } + + /** + * The index for this bridge emoji. + * + * @type {integer?} + */ + #index = null; + /** + * Whether we are active (i.e. in the DOM). + * + * @type {boolean} + */ + #active = false; + /** + * The image element. + * + * @type {HTMLImgElement?} + */ + #img = null; + + constructor(index) { + super(); + this.#index = index; + } + + connectedCallback() { + if (!this.#img) { + this.#img = this.ownerDocument.createElement("img"); + this.#img.classList.add("tor-bridges-emoji-icon"); + this.#img.setAttribute("alt", ""); + this.appendChild(this.#img); + } + + this.#active = true; + BridgeEmoji.#addActiveInstance(this); + this.update(); + } + + disconnectedCallback() { + this.#active = false; + BridgeEmoji.#removeActiveInstance(this); + } + + /** + * Create four bridge emojis for the given address. + * + * @param {string} bridgeLine - The bridge address. + * + * @returns {BridgeEmoji[4]} - The bridge emoji elements. + */ + static createForAddress(bridgeLine) { + // JS uses UTF-16. While most of these emojis are surrogate pairs, a few + // ones fit one UTF-16 character. So we could not use neither indices, + // nor substr, nor some function to split the string. + // FNV-1a implementation that is compatible with other languages + const prime = 0x01000193; + const offset = 0x811c9dc5; + let hash = offset; + const encoder = new TextEncoder(); + for (const byte of encoder.encode(bridgeLine)) { + hash = Math.imul(hash ^ byte, prime); + } + + return [ + ((hash & 0x7f000000) >> 24) | (hash < 0 ? 0x80 : 0), + (hash & 0x00ff0000) >> 16, + (hash & 0x0000ff00) >> 8, + hash & 0x000000ff, + ].map(index => new BridgeEmoji(index)); + } + } + + customElements.define("tor-bridge-emoji", BridgeEmoji); +} ===================================== browser/components/torpreferences/content/connectionPane.js ===================================== @@ -299,12 +299,10 @@ const gBridgeGrid = { this._active = true; - Services.obs.addObserver(this, "intl:app-locales-changed"); Services.obs.addObserver(this, TorProviderTopics.BridgeChanged); this._grid.classList.add("grid-active"); - this._updateEmojiLangCode(); this._updateConnectedBridge(); }, @@ -322,7 +320,6 @@ const gBridgeGrid = { this._grid.classList.remove("grid-active"); - Services.obs.removeObserver(this, "intl:app-locales-changed"); Services.obs.removeObserver(this, TorProviderTopics.BridgeChanged); }, @@ -337,9 +334,6 @@ const gBridgeGrid = { this._updateRows(); } break; - case "intl:app-locales-changed": - this._updateEmojiLangCode(); - break; case TorProviderTopics.BridgeChanged: this._updateConnectedBridge(); break; @@ -573,97 +567,6 @@ const gBridgeGrid = { } }, - /** - * The language code for emoji annotations. - * - * null if unset. - * - * @type {string?} - */ - _emojiLangCode: null, - /** - * A promise that resolves to two JSON structures for bridge-emojis.json and - * annotations.json, respectively. - * - * @type {Promise} - */ - _emojiPromise: Promise.all([ - fetch( - "chrome://browser/content/torpreferences/bridgemoji/bridge-emojis.json" - ).then(response => response.json()), - fetch( - "chrome://browser/content/torpreferences/bridgemoji/annotations.json" - ).then(response => response.json()), - ]), - - /** - * Update _emojiLangCode. - */ - async _updateEmojiLangCode() { - let langCode; - const emojiAnnotations = (await this._emojiPromise)[1]; - // Find the first desired locale we have annotations for. - // Add "en" as a fallback. - for (const bcp47 of [...Services.locale.appLocalesAsBCP47, "en"]) { - langCode = bcp47; - if (langCode in emojiAnnotations) { - break; - } - // Remove everything after the dash, if there is one. - langCode = bcp47.replace(/-.*/, ""); - if (langCode in emojiAnnotations) { - break; - } - } - if (langCode !== this._emojiLangCode) { - this._emojiLangCode = langCode; - for (const row of this._rows) { - this._updateRowEmojis(row); - } - } - }, - - /** - * Update the bridge emojis to show their corresponding emoji with an - * annotation that matches the current locale. - * - * @param {BridgeGridRow} row - The row to update the emojis of. - */ - async _updateRowEmojis(row) { - if (!this._emojiLangCode) { - // No lang code yet, wait until it is updated. - return; - } - - const [emojiList, emojiAnnotations] = await this._emojiPromise; - const unknownString = await document.l10n.formatValue( - "tor-bridges-emoji-unknown" - ); - - for (const { cell, img, index } of row.emojis) { - const emoji = emojiList[index]; - let emojiName; - if (!emoji) { - // Unexpected. - img.removeAttribute("src"); - } else { - const cp = emoji.codePointAt(0).toString(16); - img.setAttribute( - "src", - `chrome://browser/content/torpreferences/bridgemoji/svgs/${cp}.svg` - ); - emojiName = emojiAnnotations[this._emojiLangCode][cp]; - } - if (!emojiName) { - console.error(`No emoji for index ${index}`); - emojiName = unknownString; - } - document.l10n.setAttributes(cell, "tor-bridges-emoji-cell", { - emojiName, - }); - } - }, - /** * Create a new row for the grid. * @@ -688,23 +591,14 @@ const gBridgeGrid = { }; const emojiBlock = row.element.querySelector(".tor-bridges-emojis-block"); - row.emojis = makeBridgeId(bridgeLine).map(index => { - const cell = document.createElement("span"); - // Each emoji is its own cell, we rely on the fact that makeBridgeId - // always returns four indices. + const BridgeEmoji = customElements.get("tor-bridge-emoji"); + for (const cell of BridgeEmoji.createForAddress(bridgeLine)) { + // Each emoji is its own cell, we rely on the fact that createForAddress + // always returns four elements. cell.setAttribute("role", "gridcell"); cell.classList.add("tor-bridges-grid-cell", "tor-bridges-emoji-cell"); - - const img = document.createElement("img"); - img.classList.add("tor-bridges-emoji-icon"); - // Accessible name will be set on the cell itself. - img.setAttribute("alt", ""); - - cell.appendChild(img); - emojiBlock.appendChild(cell); - // Image and text is set in _updateRowEmojis. - return { cell, img, index }; - }); + emojiBlock.append(cell); + } for (const [columnIndex, element] of row.element .querySelectorAll(".tor-bridges-grid-cell") @@ -735,7 +629,6 @@ const gBridgeGrid = { this._initRowMenu(row); this._updateRowStatus(row); - this._updateRowEmojis(row); return row; }, @@ -1870,13 +1763,13 @@ const gBridgeSettings = { "chrome://browser/content/torpreferences/provideBridgeDialog.xhtml", { mode }, result => { - if (!result.bridgeStrings) { + if (!result.bridges?.length) { return null; } return setTorSettings(() => { TorSettings.bridges.enabled = true; TorSettings.bridges.source = TorBridgeSource.UserProvided; - TorSettings.bridges.bridge_strings = result.bridgeStrings; + TorSettings.bridges.bridge_strings = result.bridges; }); } ); @@ -2292,32 +2185,3 @@ const gConnectionPane = (function () { }; return retval; })(); /* gConnectionPane */ - -/** - * Convert the given bridgeString into an array of emoji indices between 0 and - * 255. - * - * @param {string} bridgeString - The bridge string. - * - * @returns {integer[]} - A list of emoji indices between 0 and 255. - */ -function makeBridgeId(bridgeString) { - // JS uses UTF-16. While most of these emojis are surrogate pairs, a few - // ones fit one UTF-16 character. So we could not use neither indices, - // nor substr, nor some function to split the string. - // FNV-1a implementation that is compatible with other languages - const prime = 0x01000193; - const offset = 0x811c9dc5; - let hash = offset; - const encoder = new TextEncoder(); - for (const byte of encoder.encode(bridgeString)) { - hash = Math.imul(hash ^ byte, prime); - } - - return [ - ((hash & 0x7f000000) >> 24) | (hash < 0 ? 0x80 : 0), - (hash & 0x00ff0000) >> 16, - (hash & 0x0000ff00) >> 8, - hash & 0x000000ff, - ]; -} ===================================== browser/components/torpreferences/content/connectionPane.xhtml ===================================== @@ -218,6 +218,7 @@ </html:div> <html:div id="tor-bridges-grid-display" + class="tor-bridges-grid" role="grid" aria-labelledby="tor-bridges-current-heading" ></html:div> ===================================== browser/components/torpreferences/content/provideBridgeDialog.js ===================================== @@ -4,14 +4,17 @@ const { TorStrings } = ChromeUtils.importESModule( "resource://gre/modules/TorStrings.sys.mjs" ); -const { TorSettings, TorBridgeSource } = ChromeUtils.importESModule( - "resource://gre/modules/TorSettings.sys.mjs" -); +const { TorSettings, TorBridgeSource, validateBridgeLines } = + ChromeUtils.importESModule("resource://gre/modules/TorSettings.sys.mjs"); const { TorConnect, TorConnectTopics } = ChromeUtils.importESModule( "resource://gre/modules/TorConnect.sys.mjs" ); +const { TorParsers } = ChromeUtils.importESModule( + "resource://gre/modules/TorParsers.sys.mjs" +); + const gProvideBridgeDialog = { init() { this._result = window.arguments[0]; @@ -33,72 +36,264 @@ const gProvideBridgeDialog = { document.l10n.setAttributes(document.documentElement, titleId); - const learnMore = document.createXULElement("label"); - learnMore.className = "learnMore text-link"; - learnMore.setAttribute("is", "text-link"); - learnMore.setAttribute("value", TorStrings.settings.learnMore); - learnMore.addEventListener("click", () => { - window.top.openTrustedLinkIn( - TorStrings.settings.learnMoreBridgesURL, - "tab" - ); - }); - - const pieces = TorStrings.settings.provideBridgeDescription.split("%S"); - document - .getElementById("torPreferences-provideBridge-description") - .replaceChildren(pieces[0], learnMore, pieces[1] || ""); + document.l10n.setAttributes( + document.getElementById("user-provide-bridge-textarea-label"), + // TODO change string when we can also accept Lox share codes. + "user-provide-bridge-dialog-textarea-addresses-label" + ); - this._textarea = document.getElementById( - "torPreferences-provideBridge-textarea" + this._dialog = document.getElementById("user-provide-bridge-dialog"); + this._acceptButton = this._dialog.getButton("accept"); + this._textarea = document.getElementById("user-provide-bridge-textarea"); + this._errorEl = document.getElementById( + "user-provide-bridge-error-message" + ); + this._resultDescription = document.getElementById( + "user-provide-result-description" + ); + this._bridgeGrid = document.getElementById( + "user-provide-bridge-grid-display" ); - this._textarea.setAttribute( - "placeholder", - TorStrings.settings.provideBridgePlaceholder + this._rowTemplate = document.getElementById( + "user-provide-bridge-row-template" ); - this._textarea.addEventListener("input", () => this.onValueChange()); - if (TorSettings.bridges.source == TorBridgeSource.UserProvided) { - this._textarea.value = TorSettings.bridges.bridge_strings.join("\n"); + if (mode === "edit") { + // Only expected if the bridge source is UseProvided, but verify to be + // sure. + if (TorSettings.bridges.source == TorBridgeSource.UserProvided) { + this._textarea.value = TorSettings.bridges.bridge_strings.join("\n"); + } + } else { + // Set placeholder if not editing. + document.l10n.setAttributes( + this._textarea, + // TODO: change string when we can also accept Lox share codes. + "user-provide-bridge-dialog-textarea-addresses" + ); } - const dialog = document.getElementById( - "torPreferences-provideBridge-dialog" - ); - dialog.addEventListener("dialogaccept", e => { - this._result.accepted = true; - }); + this._textarea.addEventListener("input", () => this.onValueChange()); - this._acceptButton = dialog.getButton("accept"); + this._dialog.addEventListener("dialogaccept", event => + this.onDialogAccept(event) + ); Services.obs.addObserver(this, TorConnectTopics.StateChange); - this.onValueChange(); - this.onAcceptStateChange(); + this.setPage("entry"); + this.checkValue(); }, uninit() { Services.obs.removeObserver(this, TorConnectTopics.StateChange); }, + /** + * Set the page to display. + * + * @param {string} page - The page to show. + */ + setPage(page) { + this._page = page; + this._dialog.classList.toggle("show-entry-page", page === "entry"); + this._dialog.classList.toggle("show-result-page", page === "result"); + if (page === "entry") { + this._textarea.focus(); + } else { + // Move focus to the <xul:window> element. + // In particular, we do not want to keep the focus on the (same) accept + // button (with now different text). + document.documentElement.focus(); + } + + this.updateAcceptDisabled(); + this.onAcceptStateChange(); + }, + + /** + * Callback for whenever the input value changes. + */ onValueChange() { - // TODO: Do some proper value parsing and error reporting. See - // tor-browser#40552. - const value = this._textarea.value.trim(); - this._acceptButton.disabled = !value; - this._result.bridgeStrings = value; + this.updateAcceptDisabled(); + // Reset errors whenever the value changes. + this.updateError(null); }, + /** + * Callback for whenever the accept button may need to change. + */ onAcceptStateChange() { - const connect = TorConnect.canBeginBootstrap; - this._result.connect = connect; - - this._acceptButton.setAttribute( - "label", - connect - ? TorStrings.settings.bridgeButtonConnect - : TorStrings.settings.bridgeButtonAccept + if (this._page === "entry") { + document.l10n.setAttributes( + this._acceptButton, + "user-provide-bridge-dialog-next-button" + ); + this._result.connect = false; + } else { + this._acceptButton.removeAttribute("data-l10n-id"); + const connect = TorConnect.canBeginBootstrap; + this._result.connect = connect; + + this._acceptButton.setAttribute( + "label", + connect + ? TorStrings.settings.bridgeButtonConnect + : TorStrings.settings.bridgeButtonAccept + ); + } + }, + + /** + * Callback for whenever the accept button's might need to be disabled. + */ + updateAcceptDisabled() { + this._acceptButton.disabled = + this._page === "entry" && validateBridgeLines(this._textarea.value).empty; + }, + + /** + * Callback for when the accept button is pressed. + * + * @param {Event} event - The dialogaccept event. + */ + onDialogAccept(event) { + if (this._page === "result") { + this._result.accepted = true; + // Continue to close the dialog. + return; + } + // Prevent closing the dialog. + event.preventDefault(); + + const bridges = this.checkValue(); + if (!bridges.length) { + // Not valid + return; + } + this._result.bridges = bridges; + this.updateResult(); + this.setPage("result"); + }, + + /** + * The current timeout for updating the error. + * + * @type {integer?} + */ + _updateErrorTimeout: null, + + /** + * Update the displayed error. + * + * @param {object?} error - The error to show, or null if no error should be + * shown. Should include the "type" property. + */ + updateError(error) { + // First clear the existing error. + if (this._updateErrorTimeout !== null) { + clearTimeout(this._updateErrorTimeout); + } + this._updateErrorTimeout = null; + this._errorEl.removeAttribute("data-l10n-id"); + this._errorEl.textContent = ""; + if (error) { + this._textarea.setAttribute("aria-invalid", "true"); + } else { + this._textarea.removeAttribute("aria-invalid"); + } + this._textarea.classList.toggle("invalid-input", !!error); + this._errorEl.classList.toggle("show-error", !!error); + + if (!error) { + return; + } + + let errorId; + let errorArgs; + switch (error.type) { + case "invalid-address": + errorId = "user-provide-bridge-dialog-address-error"; + errorArgs = { line: error.line }; + break; + } + + // Wait a small amount of time to actually set the textContent. Otherwise + // the screen reader (tested with Orca) may not pick up on the change in + // text. + this._updateErrorTimeout = setTimeout(() => { + document.l10n.setAttributes(this._errorEl, errorId, errorArgs); + }, 500); + }, + + /** + * Check the current value in the textarea. + * + * @returns {string[]} - The bridge addresses, if the entry is valid. + */ + checkValue() { + let bridges = []; + let error = null; + const validation = validateBridgeLines(this._textarea.value); + if (!validation.empty) { + // If empty, we just disable the button, rather than show an error. + if (validation.errorLines.length) { + // Report first error. + error = { + type: "invalid-address", + line: validation.errorLines[0], + }; + } else { + bridges = validation.validBridges; + } + } + this.updateError(error); + return bridges; + }, + + /** + * Update the shown result on the last page. + */ + updateResult() { + document.l10n.setAttributes( + this._resultDescription, + // TODO: Use a different id when added through Lox invite. + "user-provide-bridge-dialog-result-addresses" ); + + this._bridgeGrid.replaceChildren(); + + for (const bridgeLine of this._result.bridges) { + let details; + try { + details = TorParsers.parseBridgeLine(bridgeLine); + } catch (e) { + console.error(`Detected invalid bridge line: ${bridgeLine}`, e); + } + + const rowEl = this._rowTemplate.content.children[0].cloneNode(true); + + const emojiBlock = rowEl.querySelector(".tor-bridges-emojis-block"); + const BridgeEmoji = customElements.get("tor-bridge-emoji"); + for (const cell of BridgeEmoji.createForAddress(bridgeLine)) { + // Each emoji is its own cell, we rely on the fact that createForAddress + // always returns four elements. + cell.setAttribute("role", "gridcell"); + cell.classList.add("tor-bridges-grid-cell", "tor-bridges-emoji-cell"); + emojiBlock.append(cell); + } + + // TODO: properly handle "vanilla" bridges? + document.l10n.setAttributes( + rowEl.querySelector(".tor-bridges-type-cell"), + "tor-bridges-type-prefix", + { type: details?.transport ?? "vanilla" } + ); + + rowEl.querySelector(".tor-bridges-address-cell").textContent = bridgeLine; + + this._bridgeGrid.append(rowEl); + } }, observe(subject, topic, data) { ===================================== browser/components/torpreferences/content/provideBridgeDialog.xhtml ===================================== @@ -8,22 +8,77 @@ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" > - <dialog id="torPreferences-provideBridge-dialog" buttons="accept,cancel"> + <dialog + id="user-provide-bridge-dialog" + buttons="accept,cancel" + class="show-entry-page" + > <linkset> <html:link rel="localization" href="browser/tor-browser.ftl" /> </linkset> + <script src="chrome://browser/content/torpreferences/bridgemoji/BridgeEmoji.js" /> <script src="chrome://browser/content/torpreferences/provideBridgeDialog.js" /> - <description> - <html:div id="torPreferences-provideBridge-description" - >&#8203;<br />&#8203;</html:div - > - </description> - <html:textarea - id="torPreferences-provideBridge-textarea" - multiline="true" - rows="3" - /> + <html:div id="user-provide-bridge-entry-page"> + <description id="user-provide-bridge-description"> + <html:span + class="tail-with-learn-more" + data-l10n-id="user-provide-bridge-dialog-description" + ></html:span> + <label + is="text-link" + class="learnMore text-link" + href="about:manual#bridges" + useoriginprincipal="true" + data-l10n-id="user-provide-bridge-dialog-learn-more" + /> + </description> + <html:label + id="user-provide-bridge-textarea-label" + for="user-provide-bridge-textarea" + ></html:label> + <html:textarea + id="user-provide-bridge-textarea" + multiline="true" + rows="3" + aria-describedby="user-provide-bridge-description" + aria-errormessage="user-provide-bridge-error-message" + /> + <html:div id="user-provide-bridge-message-area"> + <html:span + id="user-provide-bridge-error-message" + aria-live="assertive" + ></html:span> + </html:div> + </html:div> + <html:div id="user-provide-bridge-result-page"> + <description id="user-provide-result-description" /> + <!-- NOTE: Unlike #tor-bridge-grid-display, this element is not + - interactive, and not a tab-stop. So we use the "table" role rather + - than "grid". + - NOTE: Using a <html:table> would not allow us the same structural + - freedom, so we use a generic div and add the semantics manually. --> + <html:div + id="user-provide-bridge-grid-display" + class="tor-bridges-grid" + role="table" + ></html:div> + <html:template id="user-provide-bridge-row-template"> + <html:div class="tor-bridges-grid-row" role="row"> + <html:span + class="tor-bridges-type-cell tor-bridges-grid-cell" + role="gridcell" + ></html:span> + <html:span class="tor-bridges-emojis-block" role="none"></html:span> + <html:span class="tor-bridges-grid-end-block" role="none"> + <html:span + class="tor-bridges-address-cell tor-bridges-grid-cell" + role="gridcell" + ></html:span> + </html:span> + </html:div> + </html:template> + </html:div> </dialog> </window> ===================================== browser/components/torpreferences/content/torPreferences.css ===================================== @@ -270,11 +270,14 @@ grid-area: description; } -#tor-bridges-grid-display { +.tor-bridges-grid { display: grid; grid-template-columns: max-content repeat(4, max-content) 1fr; --tor-bridges-grid-column-gap: 8px; --tor-bridges-grid-column-short-gap: 4px; + /* For #tor-bridges-grid-display we want each grid item to have the same + * height so that their focus outlines match. */ + align-items: stretch; } #tor-bridges-grid-display:not(.grid-active) { @@ -283,11 +286,12 @@ .tor-bridges-grid-row { /* We want each row to act as a row of three items in the - * #tor-bridges-grid-display grid layout. + * .tor-bridges-grid grid layout. * We also want a 16px spacing between rows, and 8px spacing between columns, - * which are outside the .tor-bridges-grid-cell's border area. So that - * clicking these gaps will not focus any item, and their focus outlines do - * not overlap. + * which are outside the .tor-bridges-grid-cell's border area. + * + * For #tor-bridges-grid-display this should ensure that clicking these gaps + * will not focus any item, and their focus outlines do not overlap. * Moreover, we also want each row to show its .tor-bridges-options-cell when * the .tor-bridges-grid-row has :hover. * @@ -311,7 +315,8 @@ padding-block: 8px; } -.tor-bridges-grid-cell:focus-visible { +#tor-bridges-grid-display .tor-bridges-grid-cell:focus-visible { + /* #tor-bridges-grid-display has focus management for its cells. */ outline: var(--in-content-focus-outline); outline-offset: var(--in-content-focus-outline-offset); } @@ -662,8 +667,77 @@ groupbox#torPreferences-bridges-group textarea { } /* Provide bridge dialog */ -#torPreferences-provideBridge-textarea { - margin-top: 16px; + +#user-provide-bridge-dialog:not(.show-entry-page) #user-provide-bridge-entry-page { + display: none; +} + +#user-provide-bridge-dialog:not(.show-result-page) #user-provide-bridge-result-page { + display: none; +} + +#user-provide-bridge-entry-page { + flex: 1 0 auto; + display: flex; + flex-direction: column; +} + +#user-provide-bridge-description { + flex: 0 0 auto; +} + +#user-provide-bridge-textarea-label { + margin-block: 16px 6px; + flex: 0 0 auto; + align-self: start; +} + +#user-provide-bridge-textarea { + flex: 1 0 auto; + align-self: stretch; + line-height: 1.3; + margin: 0; +} + +#user-provide-bridge-message-area { + flex: 0 0 auto; + margin-block: 8px 12px; + align-self: end; +} + +#user-provide-bridge-message-area::after { + /* Zero width space, to ensure we are always one line high. */ + content: "\200B"; +} + +#user-provide-bridge-textarea.invalid-input { + border-color: var(--in-content-danger-button-background); + outline-color: var(--in-content-danger-button-background); +} + +#user-provide-bridge-error-message { + color: var(--in-content-error-text-color); +} + +#user-provide-bridge-error-message.not(.show-error) { + display: none; +} + +#user-provide-bridge-result-page { + flex: 1 1 0; + min-height: 0; + display: flex; + flex-direction: column; +} + +#user-provide-result-description { + flex: 0 0 auto; +} + +#user-provide-bridge-grid-display { + flex: 0 1 auto; + overflow: auto; + margin-block: 8px; } /* Connection settings dialog */ ===================================== browser/components/torpreferences/jar.mn ===================================== @@ -22,6 +22,7 @@ browser.jar: content/browser/torpreferences/connectionPane.xhtml (content/connectionPane.xhtml) content/browser/torpreferences/torPreferences.css (content/torPreferences.css) content/browser/torpreferences/bridge-qr-onion-mask.svg (content/bridge-qr-onion-mask.svg) + content/browser/torpreferences/bridgemoji/BridgeEmoji.js (content/bridgemoji/BridgeEmoji.js) content/browser/torpreferences/bridgemoji/bridge-emojis.json (content/bridgemoji/bridge-emojis.json) content/browser/torpreferences/bridgemoji/annotations.json (content/bridgemoji/annotations.json) content/browser/torpreferences/bridgemoji/svgs/ (content/bridgemoji/svgs/*.svg) ===================================== browser/locales/en-US/browser/tor-browser.ftl ===================================== @@ -176,3 +176,19 @@ user-provide-bridge-dialog-add-title = # Used when the user is replacing their existing bridges with new ones. user-provide-bridge-dialog-replace-title = .title = Replace your bridges +# Description shown when adding new bridges, replacing existing bridges, or editing existing bridges. +user-provide-bridge-dialog-description = Use bridges provided by a trusted organisation or someone you know. +# "Learn more" link shown in the "Add new bridges"/"Replace your bridges" dialog. +user-provide-bridge-dialog-learn-more = Learn more +# Short accessible name for the bridge addresses text area. +user-provide-bridge-dialog-textarea-addresses-label = Bridge addresses +# Placeholder shown when adding new bridge addresses. +user-provide-bridge-dialog-textarea-addresses = + .placeholder = Paste your bridge addresses here +# Error shown when one of the address lines is invalid. +# $line (Number) - The line number for the invalid address. +user-provide-bridge-dialog-address-error = Incorrectly formatted bridge address on line { $line }. + +user-provide-bridge-dialog-result-addresses = The following bridges were entered by you. +user-provide-bridge-dialog-next-button = + .label = Next ===================================== toolkit/modules/TorSettings.sys.mjs ===================================== @@ -9,6 +9,7 @@ ChromeUtils.defineESModuleGetters(lazy, { TorProviderBuilder: "resource://gre/modules/TorProviderBuilder.sys.mjs", TorProviderTopics: "resource://gre/modules/TorProviderBuilder.sys.mjs", Lox: "resource://gre/modules/Lox.sys.mjs", + TorParsers: "resource://gre/modules/TorParsers.sys.mjs", }); ChromeUtils.defineLazyGetter(lazy, "logger", () => { @@ -103,26 +104,61 @@ export const TorProxyType = Object.freeze({ * Split a blob of bridge lines into an array with single lines. * Lines are delimited by \r\n or \n and each bridge string can also optionally * have 'bridge' at the beginning. - * We split the text by \r\n, we trim the lines, remove the bridge prefix and - * filter out any remaiing empty item. + * We split the text by \r\n, we trim the lines, remove the bridge prefix. * - * @param {string} aBridgeStrings The text with the lines + * @param {string} bridgeLines The text with the lines * @returns {string[]} An array where each bridge line is an item */ -function parseBridgeStrings(aBridgeStrings) { - // replace carriage returns ('\r') with new lines ('\n') - aBridgeStrings = aBridgeStrings.replace(/\r/g, "\n"); - // then replace contiguous new lines ('\n') with a single one - aBridgeStrings = aBridgeStrings.replace(/[\n]+/g, "\n"); - +function splitBridgeLines(bridgeLines) { // Split on the newline and for each bridge string: trim, remove starting // 'bridge' string. - // Finally, discard entries that are empty strings; empty strings could occur - // if we receive a new line containing only whitespace. - const splitStrings = aBridgeStrings.split("\n"); - return splitStrings - .map(val => val.trim().replace(/^bridge\s+/i, "")) - .filter(bridgeString => bridgeString !== ""); + // Replace whitespace with standard " ". + // NOTE: We only remove the bridge string part if it is followed by a + // non-whitespace. + return bridgeLines.split(/\r?\n/).map(val => + val + .trim() + .replace(/^bridge\s+(\S)/i, "$1") + .replace(/\s+/, " ") + ); +} + +/** + * @typedef {Object} BridgeValidationResult + * + * @property {integer[]} errorLines - The lines that contain errors. Counting + * from 1. + * @property {boolean} empty - Whether the given string contains no bridges. + * @property {string[]} validBridges - The valid bridge lines found. + */ +/** + * Validate the given bridge lines. + * + * @param {string} bridgeLines - The bridge lines to validate, separated by + * newlines. + * + * @returns {BridgeValidationResult} + */ +export function validateBridgeLines(bridgeLines) { + let empty = true; + const errorLines = []; + const validBridges = []; + for (const [index, bridge] of splitBridgeLines(bridgeLines).entries()) { + if (!bridge) { + // Empty line. + continue; + } + empty = false; + try { + // TODO: Have a more comprehensive validation parser. + lazy.TorParsers.parseBridgeLine(bridge); + } catch { + errorLines.push(index + 1); + continue; + } + validBridges.push(bridge); + } + return { empty, errorLines, validBridges }; } /** @@ -269,7 +305,8 @@ class TorSettingsImpl { if (Array.isArray(val)) { return [...val]; } - return parseBridgeStrings(val); + // Split the bridge strings, discarding empty. + return splitBridgeLines(val).filter(val => val); }, copy: val => [...val], equal: (val1, val2) => this.#arrayEqual(val1, val2), ===================================== toolkit/modules/TorStrings.sys.mjs ===================================== @@ -139,10 +139,6 @@ const Loader = { solveTheCaptcha: "Solve the CAPTCHA to request a bridge.", captchaTextboxPlaceholder: "Enter the characters from the image", incorrectCaptcha: "The solution is not correct. Please try again.", - // Provide bridge dialog - provideBridgeDescription: - "Add a bridge provided by a trusted organization or someone you know. If you don’t have a bridge, you can request one from the Tor Project. %S", - provideBridgePlaceholder: "type address:port (one per line)", // Connection settings dialog connectionSettingsDialogTitle: "Connection Settings", connectionSettingsDialogHeader: ===================================== toolkit/torbutton/chrome/locale/en-US/settings.properties ===================================== @@ -75,10 +75,6 @@ settings.solveTheCaptcha=Solve the CAPTCHA to request a bridge. settings.captchaTextboxPlaceholder=Enter the characters from the image settings.incorrectCaptcha=The solution is not correct. Please try again. -# Translation note: %S is a Learn more link. -settings.provideBridgeDescription=Add a bridge provided by a trusted organization or someone you know. If you don’t have a bridge, you can request one from the Tor Project. %S -settings.provideBridgePlaceholder=type address:port (one per line) - # Connection settings dialog settings.connectionSettingsDialogTitle=Connection Settings settings.connectionSettingsDialogHeader=Configure how Tor Browser connects to the Internet @@ -126,3 +122,6 @@ settings.bridgeAddManually=Add a Bridge Manually… # Provide bridge dialog settings.provideBridgeTitleAdd=Add a Bridge Manually +# Translation note: %S is a Learn more link. +settings.provideBridgeDescription=Add a bridge provided by a trusted organization or someone you know. If you don’t have a bridge, you can request one from the Tor Project. %S +settings.provideBridgePlaceholder=type address:port (one per line) View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/366c81… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/366c81… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
  • ← Newer
  • 1
  • 2
  • 3
  • 4
  • 5
  • ...
  • 13
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.