tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2021
- 17 participants
- 1544 discussions

[translation/tails-misc_release] https://gitweb.torproject.org/translation.git/commit/?h=tails-misc_release
by translation@torproject.org 22 Jul '21
by translation@torproject.org 22 Jul '21
22 Jul '21
commit 96cfbd1f9789b5194599a6591c712e2038c8d4da
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jul 22 20:46:32 2021 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tails-misc_release
---
pt_BR.po | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/pt_BR.po b/pt_BR.po
index e2dea080e2..3ef4047773 100644
--- a/pt_BR.po
+++ b/pt_BR.po
@@ -19,6 +19,7 @@
# Igor Bk 13, 2020
# Isabel Ferreira, 2014
# john smith, 2015
+# José Ricardo dos Santos Júnior <hricardo2007(a)yandex.com>, 2021
# Leonardo Vieira de Souza <leonardo.v.souza(a)gmail.com>, 2016
# Lucas Possatti, 2014
# Luciana Dark Blue <lucianadarkblue(a)gmail.com>, 2015
@@ -36,8 +37,8 @@ msgstr ""
"Project-Id-Version: Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-07-01 11:43+0200\n"
-"PO-Revision-Date: 2021-07-16 01:27+0000\n"
-"Last-Translator: Eduardo Addad de Oliveira <eduardoaddad(a)hotmail.com>\n"
+"PO-Revision-Date: 2021-07-22 20:28+0000\n"
+"Last-Translator: José Ricardo dos Santos Júnior <hricardo2007(a)yandex.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/otf/torproject/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
1
0

[translation/tails-misc] https://gitweb.torproject.org/translation.git/commit/?h=tails-misc
by translation@torproject.org 22 Jul '21
by translation@torproject.org 22 Jul '21
22 Jul '21
commit 05bbe46294c160b0ecb7dc3d1d2eb2b619ab2085
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jul 22 20:45:50 2021 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tails-misc
---
pt_BR.po | 35 ++++++++++++++++++-----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/pt_BR.po b/pt_BR.po
index 8d4330cea7..8e0a7520ca 100644
--- a/pt_BR.po
+++ b/pt_BR.po
@@ -19,6 +19,7 @@
# Igor Bk 13, 2020
# Isabel Ferreira, 2014
# john smith, 2015
+# José Ricardo dos Santos Júnior <hricardo2007(a)yandex.com>, 2021
# Leonardo Vieira de Souza <leonardo.v.souza(a)gmail.com>, 2016
# Lucas Possatti, 2014
# Luciana Dark Blue <lucianadarkblue(a)gmail.com>, 2015
@@ -36,8 +37,8 @@ msgstr ""
"Project-Id-Version: Tor Project\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-07-01 11:43+0200\n"
-"PO-Revision-Date: 2021-07-16 01:27+0000\n"
-"Last-Translator: Eduardo Addad de Oliveira <eduardoaddad(a)hotmail.com>\n"
+"PO-Revision-Date: 2021-07-22 20:28+0000\n"
+"Last-Translator: José Ricardo dos Santos Júnior <hricardo2007(a)yandex.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/otf/torproject/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -127,8 +128,8 @@ msgstr "Hora desconhecida"
#, perl-brace-format
msgid "1y"
msgid_plural "{count}y"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1 ano"
+msgstr[1] "{count}ano"
#. Translators: Don't translate {count}, it's a place holder and
#. will be replaced.
@@ -137,8 +138,8 @@ msgstr[1] ""
#, perl-brace-format
msgid "1d"
msgid_plural "{count}d"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1d"
+msgstr[1] "{count}d"
#. Translators: Don't translate {count}, it's a place holder and
#. will be replaced.
@@ -147,8 +148,8 @@ msgstr[1] ""
#, perl-brace-format
msgid "1h"
msgid_plural "{count}h"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1h"
+msgstr[1] "{count}h"
#. Translators: Don't translate {count}, it's a place holder and
#. will be replaced.
@@ -157,8 +158,8 @@ msgstr[1] ""
#, perl-brace-format
msgid "1m"
msgid_plural "{count}m"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1min "
+msgstr[1] "{count}min"
#. Translators: Don't translate {count}, it's a place holder and
#. will be replaced.
@@ -167,8 +168,8 @@ msgstr[1] ""
#, perl-brace-format
msgid "1s"
msgid_plural "{count}s"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "1s"
+msgstr[1] "{count}s"
#. Translators: don't translate {time}, {downloaded}, {size}
#. and {speed}, they are placeholders and will be replaced.
@@ -505,7 +506,7 @@ msgstr "_Anonimato de endereço MAC"
#: config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter/ui/additional_settings.py:250
msgid "_Offline Mode"
-msgstr ""
+msgstr "_Modo offline"
#: config/chroot_local-includes/usr/lib/python3/dist-packages/tailsgreeter/ui/additional_settings.py:259
#: ../config/chroot_local-includes/usr/share/tails/greeter/additional_settings.ui.in:413
@@ -1245,7 +1246,7 @@ msgstr "Arquivos de configuração (Dotfiles)"
#: config/chroot_local-includes/usr/src/persistence-setup/lib/Tails/Persistence/Configuration/Presets.pm:225
msgid "Symlink every file in the Dotfiles folder into the Home folder"
-msgstr ""
+msgstr "Todo arquivo Symlink na pasta Dotfiles para a pasta Home."
#: config/chroot_local-includes/usr/src/persistence-setup/lib/Tails/Persistence/Configuration/Setting.pm:111
msgid "Custom"
@@ -2606,7 +2607,7 @@ msgstr ""
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:702
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:1110
msgid "Connect to _Tor"
-msgstr ""
+msgstr "Conectar ao _Tor"
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:410
msgid "Error connecting to Tor"
@@ -2638,7 +2639,7 @@ msgstr "Se você estiver em uma rede corporativa ou universitária, pode ser nec
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:536
msgid "Configure a Local _Proxy"
-msgstr ""
+msgstr "Configurar um Proxy_Local"
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:574
msgid "• Bridges over email"
@@ -2819,4 +2820,4 @@ msgstr "Porta"
#: ../config/chroot_local-includes/usr/share/tails/tca/main.ui.in:1841
msgid "_Save Proxy Settings"
-msgstr ""
+msgstr "_Salvar Configurações de Proxy"
1
0

[translation/tor-launcher-network-settings] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-network-settings
by translation@torproject.org 22 Jul '21
by translation@torproject.org 22 Jul '21
22 Jul '21
commit f1581e354aa827718ac391ea8b9cedf363b6f5f1
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jul 22 20:17:39 2021 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-networ…
---
pl/network-settings.dtd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pl/network-settings.dtd b/pl/network-settings.dtd
index 111eba8415..a70067d573 100644
--- a/pl/network-settings.dtd
+++ b/pl/network-settings.dtd
@@ -92,5 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Przeglądarka Tor nie może nawiązać połączenia z siecią Tor">
<!ENTITY torConnect.connectingConcise "Trwa łączenie...">
<!ENTITY torConnect.connectedConcise "Połączony">
-<!ENTITY torConnect.notConnectedConcise "Not Connected">
+<!ENTITY torConnect.notConnectedConcise "Niepołączony">
<!ENTITY torConnect.copyLog "Skopiuj dziennik zdarzeń Tor">
1
0

[translation/tor-launcher-network-settings_completed] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-network-settings_completed
by translation@torproject.org 22 Jul '21
by translation@torproject.org 22 Jul '21
22 Jul '21
commit f076246c9952f5703fca84e24e4076e5dc8c6786
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jul 22 19:48:05 2021 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-networ…
---
en/network-settings.dtd | 1 +
1 file changed, 1 insertion(+)
diff --git a/en/network-settings.dtd b/en/network-settings.dtd
index 69249ed667..1b8505478e 100644
--- a/en/network-settings.dtd
+++ b/en/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "">
<!ENTITY torConnect.connectingConcise "">
<!ENTITY torConnect.connectedConcise "">
+<!ENTITY torConnect.notConnectedConcise "">
<!ENTITY torConnect.copyLog "">
1
0

[translation/tor-launcher-network-settings] https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-network-settings
by translation@torproject.org 22 Jul '21
by translation@torproject.org 22 Jul '21
22 Jul '21
commit 8088df230779395c1d622c3bbed80edcbd21f294
Author: Translation commit bot <translation(a)torproject.org>
Date: Thu Jul 22 19:48:03 2021 +0000
https://gitweb.torproject.org/translation.git/commit/?h=tor-launcher-networ…
---
ach/network-settings.dtd | 1 +
af/network-settings.dtd | 1 +
ar/network-settings.dtd | 1 +
ast/network-settings.dtd | 1 +
az/network-settings.dtd | 1 +
be/network-settings.dtd | 1 +
bg/network-settings.dtd | 1 +
bn-BD/network-settings.dtd | 1 +
br/network-settings.dtd | 1 +
bs/network-settings.dtd | 1 +
ca/network-settings.dtd | 1 +
cs/network-settings.dtd | 1 +
cy/network-settings.dtd | 1 +
da/network-settings.dtd | 1 +
de/network-settings.dtd | 1 +
el/network-settings.dtd | 1 +
en-GB/network-settings.dtd | 1 +
en/network-settings.dtd | 1 +
eo/network-settings.dtd | 1 +
es-AR/network-settings.dtd | 1 +
es-ES/network-settings.dtd | 1 +
es-MX/network-settings.dtd | 1 +
et/network-settings.dtd | 1 +
eu/network-settings.dtd | 1 +
fa/network-settings.dtd | 1 +
fi/network-settings.dtd | 1 +
fr/network-settings.dtd | 1 +
fy-NL/network-settings.dtd | 1 +
ga-IE/network-settings.dtd | 1 +
gd/network-settings.dtd | 1 +
gl/network-settings.dtd | 1 +
gu-IN/network-settings.dtd | 1 +
he/network-settings.dtd | 1 +
hi-IN/network-settings.dtd | 1 +
hr/network-settings.dtd | 1 +
hu/network-settings.dtd | 1 +
hy-AM/network-settings.dtd | 1 +
ia/network-settings.dtd | 1 +
id/network-settings.dtd | 1 +
is/network-settings.dtd | 1 +
it/network-settings.dtd | 1 +
ja/network-settings.dtd | 1 +
ka/network-settings.dtd | 1 +
kab/network-settings.dtd | 1 +
kk/network-settings.dtd | 1 +
km/network-settings.dtd | 1 +
kn/network-settings.dtd | 1 +
ko/network-settings.dtd | 1 +
lt/network-settings.dtd | 1 +
lv/network-settings.dtd | 1 +
mk/network-settings.dtd | 1 +
ml/network-settings.dtd | 1 +
mr/network-settings.dtd | 1 +
ms/network-settings.dtd | 1 +
my/network-settings.dtd | 1 +
nb-NO/network-settings.dtd | 1 +
ne/network-settings.dtd | 1 +
nl-BE/network-settings.dtd | 1 +
nl/network-settings.dtd | 1 +
nn-NO/network-settings.dtd | 1 +
oc/network-settings.dtd | 1 +
or/network-settings.dtd | 1 +
pa-IN/network-settings.dtd | 1 +
pl/network-settings.dtd | 1 +
pt-BR/network-settings.dtd | 1 +
pt-PT/network-settings.dtd | 1 +
ro/network-settings.dtd | 1 +
ru/network-settings.dtd | 1 +
si/network-settings.dtd | 1 +
sk/network-settings.dtd | 1 +
sl/network-settings.dtd | 1 +
son/network-settings.dtd | 1 +
sq/network-settings.dtd | 1 +
sr/network-settings.dtd | 1 +
sv-SE/network-settings.dtd | 1 +
sw/network-settings.dtd | 1 +
ta/network-settings.dtd | 1 +
te/network-settings.dtd | 1 +
th/network-settings.dtd | 1 +
tr/network-settings.dtd | 1 +
uk/network-settings.dtd | 1 +
ur/network-settings.dtd | 1 +
uz/network-settings.dtd | 1 +
vi/network-settings.dtd | 1 +
zh-CN/network-settings.dtd | 1 +
zh-HK/network-settings.dtd | 1 +
zh-TW/network-settings.dtd | 1 +
87 files changed, 87 insertions(+)
diff --git a/ach/network-settings.dtd b/ach/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/ach/network-settings.dtd
+++ b/ach/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/af/network-settings.dtd b/af/network-settings.dtd
index cb1ba580c8..58c3f97bf1 100644
--- a/af/network-settings.dtd
+++ b/af/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ar/network-settings.dtd b/ar/network-settings.dtd
index c59c4a4c02..2d0c578924 100644
--- a/ar/network-settings.dtd
+++ b/ar/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "فشل متصفح Tor في إنشاء اتصال بشبكة Tor">
<!ENTITY torConnect.connectingConcise "جاري الاتصال ...">
<!ENTITY torConnect.connectedConcise "متصل">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "انسخ سجلات Tor">
diff --git a/ast/network-settings.dtd b/ast/network-settings.dtd
index 827da52d33..32ea43f6d6 100644
--- a/ast/network-settings.dtd
+++ b/ast/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/az/network-settings.dtd b/az/network-settings.dtd
index bec7b6b062..e8f05284d7 100644
--- a/az/network-settings.dtd
+++ b/az/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Qoşulur...">
<!ENTITY torConnect.connectedConcise "Qoşuldu">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/be/network-settings.dtd b/be/network-settings.dtd
index 0d683968c0..3808c241f6 100644
--- a/be/network-settings.dtd
+++ b/be/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Ідзе злучэнне...">
<!ENTITY torConnect.connectedConcise "Падлучана">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/bg/network-settings.dtd b/bg/network-settings.dtd
index 89d1c96eac..953b43439b 100644
--- a/bg/network-settings.dtd
+++ b/bg/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Свързване…">
<!ENTITY torConnect.connectedConcise "Свързан">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/bn-BD/network-settings.dtd b/bn-BD/network-settings.dtd
index a0667a0efc..54110ebd63 100644
--- a/bn-BD/network-settings.dtd
+++ b/bn-BD/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "সংযুক্ত হচ্ছে ...">
<!ENTITY torConnect.connectedConcise "সংযুক্ত">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/br/network-settings.dtd b/br/network-settings.dtd
index a1cc601abe..95e609bcc5 100644
--- a/br/network-settings.dtd
+++ b/br/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Kevreet">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/bs/network-settings.dtd b/bs/network-settings.dtd
index 519f02390b..096174464f 100644
--- a/bs/network-settings.dtd
+++ b/bs/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Konektovanje…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ca/network-settings.dtd b/ca/network-settings.dtd
index d107b17bc0..f8b29e5a4b 100644
--- a/ca/network-settings.dtd
+++ b/ca/network-settings.dtd
@@ -93,4 +93,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "S'està connectant...">
<!ENTITY torConnect.connectedConcise "Connectat">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/cs/network-settings.dtd b/cs/network-settings.dtd
index e35291fb3d..3d9ddc0e9c 100644
--- a/cs/network-settings.dtd
+++ b/cs/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor prohlížeči se nepodařilo navázat spojení se sítí Tor">
<!ENTITY torConnect.connectingConcise "Spojuji...">
<!ENTITY torConnect.connectedConcise "Připojeno">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Zkopírovat Tor logy">
diff --git a/cy/network-settings.dtd b/cy/network-settings.dtd
index 88ae4880a0..840c598311 100644
--- a/cy/network-settings.dtd
+++ b/cy/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/da/network-settings.dtd b/da/network-settings.dtd
index d9dc4e0557..af6f664cd4 100644
--- a/da/network-settings.dtd
+++ b/da/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser kunne ikke etablere en forbindelse til Tor-netværket">
<!ENTITY torConnect.connectingConcise "Forbinder...">
<!ENTITY torConnect.connectedConcise "Forbundet">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopiér Tor-logge">
diff --git a/de/network-settings.dtd b/de/network-settings.dtd
index 3142ec4e11..8609635f06 100644
--- a/de/network-settings.dtd
+++ b/de/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Verbindung des Tor Browser mit dem Tor-Netzwerk ist fehlgeschlagen">
<!ENTITY torConnect.connectingConcise "Verbinde…">
<!ENTITY torConnect.connectedConcise "Verbunden">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopiere Tor Logs">
diff --git a/el/network-settings.dtd b/el/network-settings.dtd
index bd6cb9a82a..bd2b04e315 100644
--- a/el/network-settings.dtd
+++ b/el/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Η σύνδεση του Tor Browser με το δίκτυο Tor απέτυχε.">
<!ENTITY torConnect.connectingConcise "Γίνεται σύνδεση...">
<!ENTITY torConnect.connectedConcise "Συνδεδεμένος/η">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Αντιγραφή αρχείων καταγραφής του Tor">
diff --git a/en-GB/network-settings.dtd b/en-GB/network-settings.dtd
index d269168848..637f0da3ad 100644
--- a/en-GB/network-settings.dtd
+++ b/en-GB/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/en/network-settings.dtd b/en/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/en/network-settings.dtd
+++ b/en/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/eo/network-settings.dtd b/eo/network-settings.dtd
index 79d0465b0b..b2b2ef2498 100644
--- a/eo/network-settings.dtd
+++ b/eo/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/es-AR/network-settings.dtd b/es-AR/network-settings.dtd
index 15fb36b427..033b979cb4 100644
--- a/es-AR/network-settings.dtd
+++ b/es-AR/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "El Navegador Tor ha fallado al establecer una conexión a la red Tor">
<!ENTITY torConnect.connectingConcise "Conectando...">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copiar registros Tor">
diff --git a/es-ES/network-settings.dtd b/es-ES/network-settings.dtd
index b04784a780..5f5aabcfc8 100644
--- a/es-ES/network-settings.dtd
+++ b/es-ES/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Fallo del Navegador Tor al establecer conexión con la Red Tor.">
<!ENTITY torConnect.connectingConcise "Conectando...">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copiar registros de Tor">
diff --git a/es-MX/network-settings.dtd b/es-MX/network-settings.dtd
index 96af822a8d..48402bbf92 100644
--- a/es-MX/network-settings.dtd
+++ b/es-MX/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/et/network-settings.dtd b/et/network-settings.dtd
index a1c7d2bcd9..08365d314f 100644
--- a/et/network-settings.dtd
+++ b/et/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Ühendatud">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/eu/network-settings.dtd b/eu/network-settings.dtd
index da677940e0..e41895f214 100644
--- a/eu/network-settings.dtd
+++ b/eu/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Konektatzen...">
<!ENTITY torConnect.connectedConcise "Konektatuta">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/fa/network-settings.dtd b/fa/network-settings.dtd
index 4b8214f7a7..ab3d31c70f 100644
--- a/fa/network-settings.dtd
+++ b/fa/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "مرورگر Tor موفق به برقراری ارتباط با شبکه Tor نشده است">
<!ENTITY torConnect.connectingConcise "در حال اتصال...">
<!ENTITY torConnect.connectedConcise "متصل">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "کپی گزارشهای تور">
diff --git a/fi/network-settings.dtd b/fi/network-settings.dtd
index 3ad40942bb..86b55f4f02 100644
--- a/fi/network-settings.dtd
+++ b/fi/network-settings.dtd
@@ -93,4 +93,5 @@ Tässä saattaa kestää muutama minuutti.">
<!ENTITY torConnect.tryAgainMessage "Tor-selain ei pystynyt muodostamaan yhteyttä Tor-verkkoon">
<!ENTITY torConnect.connectingConcise "Yhdistetään...">
<!ENTITY torConnect.connectedConcise "Yhdistetty">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopioi Tor-lokit">
diff --git a/fr/network-settings.dtd b/fr/network-settings.dtd
index 803774d074..52addcca6c 100644
--- a/fr/network-settings.dtd
+++ b/fr/network-settings.dtd
@@ -94,4 +94,5 @@ Selon votre position géographique, un pont pourrait fonctionner mieux qu’un a
<!ENTITY torConnect.tryAgainMessage "Le Navigateur Tor n’a pas réussi à établir une connexion au réseau Tor">
<!ENTITY torConnect.connectingConcise "Connexion…">
<!ENTITY torConnect.connectedConcise "Connecté">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copier les journaux de Tor">
diff --git a/fy-NL/network-settings.dtd b/fy-NL/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/fy-NL/network-settings.dtd
+++ b/fy-NL/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ga-IE/network-settings.dtd b/ga-IE/network-settings.dtd
index ddeb12e604..d1e342c9d9 100644
--- a/ga-IE/network-settings.dtd
+++ b/ga-IE/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/gd/network-settings.dtd b/gd/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/gd/network-settings.dtd
+++ b/gd/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/gl/network-settings.dtd b/gl/network-settings.dtd
index a5467d2b14..a65d5255bc 100644
--- a/gl/network-settings.dtd
+++ b/gl/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Conectando...">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/gu-IN/network-settings.dtd b/gu-IN/network-settings.dtd
index f913160c0c..ec15f8e25e 100644
--- a/gu-IN/network-settings.dtd
+++ b/gu-IN/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/he/network-settings.dtd b/he/network-settings.dtd
index 7b5c0b7457..f4eb623925 100644
--- a/he/network-settings.dtd
+++ b/he/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "דפדפן Tor נכשל בהקמת חיבור אל רשת Tor">
<!ENTITY torConnect.connectingConcise "מתחבר…">
<!ENTITY torConnect.connectedConcise "מחובר">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "העתק יומני Tor">
diff --git a/hi-IN/network-settings.dtd b/hi-IN/network-settings.dtd
index b938066b13..5276e835f1 100644
--- a/hi-IN/network-settings.dtd
+++ b/hi-IN/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "कनेक्ट हो रहा है ...">
<!ENTITY torConnect.connectedConcise "जुड़े हुए">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/hr/network-settings.dtd b/hr/network-settings.dtd
index b3b5334b67..c33eb85652 100644
--- a/hr/network-settings.dtd
+++ b/hr/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Spajam...">
<!ENTITY torConnect.connectedConcise "Spojeno">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/hu/network-settings.dtd b/hu/network-settings.dtd
index 7ba5bafbec..5f973eaaa6 100644
--- a/hu/network-settings.dtd
+++ b/hu/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "A Tor böngészőnek nem sikerül létrehoznia a kapcsolatot a Tor hálózathoz">
<!ENTITY torConnect.connectingConcise "Csatlakozás...">
<!ENTITY torConnect.connectedConcise "Csatlakozva">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Tor logok másolása">
diff --git a/hy-AM/network-settings.dtd b/hy-AM/network-settings.dtd
index accd49265d..0ed53c062a 100644
--- a/hy-AM/network-settings.dtd
+++ b/hy-AM/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Միացվեց">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ia/network-settings.dtd b/ia/network-settings.dtd
index ec34ce709c..21ad66d412 100644
--- a/ia/network-settings.dtd
+++ b/ia/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connectente...">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/id/network-settings.dtd b/id/network-settings.dtd
index 6807a58d9a..ef6649d774 100644
--- a/id/network-settings.dtd
+++ b/id/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser telah gagal membuat koneksi ke Jaringan Tor">
<!ENTITY torConnect.connectingConcise "Menyambung...">
<!ENTITY torConnect.connectedConcise "Terhubung">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Salin Log Tor">
diff --git a/is/network-settings.dtd b/is/network-settings.dtd
index f4c6fe6a57..49f4a587be 100644
--- a/is/network-settings.dtd
+++ b/is/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor-vafranum mistókst að koma á tengingu við Tor-netið">
<!ENTITY torConnect.connectingConcise "Tengist…">
<!ENTITY torConnect.connectedConcise "Tengt">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Afrita Tor-atvikaskrár">
diff --git a/it/network-settings.dtd b/it/network-settings.dtd
index 0443c0e704..d2d60c8447 100644
--- a/it/network-settings.dtd
+++ b/it/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser non è riuscito a stabilire una connessione alla rete Tor">
<!ENTITY torConnect.connectingConcise "Connessione in corso...">
<!ENTITY torConnect.connectedConcise "Connesso">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copia i log di Tor">
diff --git a/ja/network-settings.dtd b/ja/network-settings.dtd
index 8c85e1ccbc..68896bd797 100644
--- a/ja/network-settings.dtd
+++ b/ja/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser は、Tor ネットワークへの接続を確立できませんでした">
<!ENTITY torConnect.connectingConcise "接続中…">
<!ENTITY torConnect.connectedConcise "接続済み">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Tor ログをコピー">
diff --git a/ka/network-settings.dtd b/ka/network-settings.dtd
index 62983994a2..84cb6d2761 100644
--- a/ka/network-settings.dtd
+++ b/ka/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor-ბრაუზერმა ვერ მოახერხა კავშირის დამყარება Tor-ქსელთან">
<!ENTITY torConnect.connectingConcise "უკავშირდება...">
<!ENTITY torConnect.connectedConcise "მიერთებული">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Tor-ის ჩანაწერების ასლი">
diff --git a/kab/network-settings.dtd b/kab/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/kab/network-settings.dtd
+++ b/kab/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/kk/network-settings.dtd b/kk/network-settings.dtd
index c40224f897..b67a4efef7 100644
--- a/kk/network-settings.dtd
+++ b/kk/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Қосылым орнатылуда…">
<!ENTITY torConnect.connectedConcise "Қосылулы">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/km/network-settings.dtd b/km/network-settings.dtd
index 3e77989a59..b39c760ff5 100644
--- a/km/network-settings.dtd
+++ b/km/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "កំពុងតភ្ជាប់...">
<!ENTITY torConnect.connectedConcise "បានភ្ជាប់">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/kn/network-settings.dtd b/kn/network-settings.dtd
index b20acebb24..8e2a5d5217 100644
--- a/kn/network-settings.dtd
+++ b/kn/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ…">
<!ENTITY torConnect.connectedConcise "ಸಂಪರ್ಕಗೊಂಡಿದೆ">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ko/network-settings.dtd b/ko/network-settings.dtd
index 8bf3621578..b19bf79469 100644
--- a/ko/network-settings.dtd
+++ b/ko/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor 브라우저가 Tor 네트워크에 대한 연결을 설정하지 못했음">
<!ENTITY torConnect.connectingConcise "접속중...">
<!ENTITY torConnect.connectedConcise "접속됨">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Tor 로그 복사하기">
diff --git a/lt/network-settings.dtd b/lt/network-settings.dtd
index 9db3741d3c..59cb8e69ea 100644
--- a/lt/network-settings.dtd
+++ b/lt/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Jungiamasi…">
<!ENTITY torConnect.connectedConcise "Prisijungta">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/lv/network-settings.dtd b/lv/network-settings.dtd
index 7f4beec3c9..7b43c50629 100644
--- a/lv/network-settings.dtd
+++ b/lv/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/mk/network-settings.dtd b/mk/network-settings.dtd
index a9aaa33900..09a910c0ff 100644
--- a/mk/network-settings.dtd
+++ b/mk/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser не успеа да воспостави поврзување со Tor мрежата.">
<!ENTITY torConnect.connectingConcise "Се поврзува...">
<!ENTITY torConnect.connectedConcise "Поврзано">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Копирај Tor логови">
diff --git a/ml/network-settings.dtd b/ml/network-settings.dtd
index 4f95c479cc..ea977e9e45 100644
--- a/ml/network-settings.dtd
+++ b/ml/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "കണ്ണെക്റ്റിംഗ് / ബന്ധിപ്പിക്കുന്നു ..">
<!ENTITY torConnect.connectedConcise "ബന്ധിപ്പിച്ചു">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/mr/network-settings.dtd b/mr/network-settings.dtd
index 597e3a41cb..25a536cc68 100644
--- a/mr/network-settings.dtd
+++ b/mr/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "कनेक्ट करीत आहे...">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ms/network-settings.dtd b/ms/network-settings.dtd
index d26eebbb43..be590dd228 100644
--- a/ms/network-settings.dtd
+++ b/ms/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/my/network-settings.dtd b/my/network-settings.dtd
index 16e44f8ebb..b427b01d96 100644
--- a/my/network-settings.dtd
+++ b/my/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "ချိတ်ဆက်နေသည်…">
<!ENTITY torConnect.connectedConcise "ချိတ်ဆက်ပြီးပါပြီ">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/nb-NO/network-settings.dtd b/nb-NO/network-settings.dtd
index db51fcdddf..2f99c223ef 100644
--- a/nb-NO/network-settings.dtd
+++ b/nb-NO/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Kobler til...">
<!ENTITY torConnect.connectedConcise "Tilkoblet">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ne/network-settings.dtd b/ne/network-settings.dtd
index 1b62944a9d..ecb119fb36 100644
--- a/ne/network-settings.dtd
+++ b/ne/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/nl-BE/network-settings.dtd b/nl-BE/network-settings.dtd
index 9dad209dc1..9fea3f35ac 100644
--- a/nl-BE/network-settings.dtd
+++ b/nl-BE/network-settings.dtd
@@ -93,4 +93,5 @@ Dit kan enkele minuten duren.">
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Verbinden…">
<!ENTITY torConnect.connectedConcise "Verbonden">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/nl/network-settings.dtd b/nl/network-settings.dtd
index dd50239888..6d6c58f465 100644
--- a/nl/network-settings.dtd
+++ b/nl/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser kon geen verbinding maken met het Tor Netwerk">
<!ENTITY torConnect.connectingConcise "Bezig met verbinden...">
<!ENTITY torConnect.connectedConcise "Verbonden">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopieer Tor Logboeken">
diff --git a/nn-NO/network-settings.dtd b/nn-NO/network-settings.dtd
index d9bb4be7ad..b6c2c7658e 100644
--- a/nn-NO/network-settings.dtd
+++ b/nn-NO/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/oc/network-settings.dtd b/oc/network-settings.dtd
index 56f69c1f31..3ec1893044 100644
--- a/oc/network-settings.dtd
+++ b/oc/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connexion…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/or/network-settings.dtd b/or/network-settings.dtd
index 300b87312b..d95cc3b524 100644
--- a/or/network-settings.dtd
+++ b/or/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "ସଂଯୁକ୍ତ">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/pa-IN/network-settings.dtd b/pa-IN/network-settings.dtd
index 9ebac7aa7d..7038077047 100644
--- a/pa-IN/network-settings.dtd
+++ b/pa-IN/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/pl/network-settings.dtd b/pl/network-settings.dtd
index 58745fd614..111eba8415 100644
--- a/pl/network-settings.dtd
+++ b/pl/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Przeglądarka Tor nie może nawiązać połączenia z siecią Tor">
<!ENTITY torConnect.connectingConcise "Trwa łączenie...">
<!ENTITY torConnect.connectedConcise "Połączony">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Skopiuj dziennik zdarzeń Tor">
diff --git a/pt-BR/network-settings.dtd b/pt-BR/network-settings.dtd
index f04f36fe50..86e8f4f5f7 100644
--- a/pt-BR/network-settings.dtd
+++ b/pt-BR/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "O navegador Tor não conseguiu estabelecer uma conexão com a rede Tor">
<!ENTITY torConnect.connectingConcise "Conectando...">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copiar registros Tor">
diff --git a/pt-PT/network-settings.dtd b/pt-PT/network-settings.dtd
index bc9c06e2fa..2f34d8ac8c 100644
--- a/pt-PT/network-settings.dtd
+++ b/pt-PT/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "A conectar…">
<!ENTITY torConnect.connectedConcise "Conectado">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ro/network-settings.dtd b/ro/network-settings.dtd
index 075e5307d9..a452bdf8a5 100644
--- a/ro/network-settings.dtd
+++ b/ro/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Se conectează...">
<!ENTITY torConnect.connectedConcise "Conectat">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ru/network-settings.dtd b/ru/network-settings.dtd
index d331ed965f..45107ed8cd 100644
--- a/ru/network-settings.dtd
+++ b/ru/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Браузеру Tor не удалось установить соединение с сетью Tor">
<!ENTITY torConnect.connectingConcise "Соединение...">
<!ENTITY torConnect.connectedConcise "Подключено">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Копирование журналов Tor">
diff --git a/si/network-settings.dtd b/si/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/si/network-settings.dtd
+++ b/si/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/sk/network-settings.dtd b/sk/network-settings.dtd
index f59858a21e..6ad69d5a1f 100644
--- a/sk/network-settings.dtd
+++ b/sk/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Pripojené">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/sl/network-settings.dtd b/sl/network-settings.dtd
index 81ea0a4532..9fb24d6a99 100644
--- a/sl/network-settings.dtd
+++ b/sl/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Povezan">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/son/network-settings.dtd b/son/network-settings.dtd
index 73d32e0b76..66c650e1df 100644
--- a/son/network-settings.dtd
+++ b/son/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/sq/network-settings.dtd b/sq/network-settings.dtd
index b96babbdcf..a0b7a246b0 100644
--- a/sq/network-settings.dtd
+++ b/sq/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Shfletuesi Tor dështoi në vendosjen e një lidhjeje me Rrjetin Tor">
<!ENTITY torConnect.connectingConcise "Duke u kyqur...">
<!ENTITY torConnect.connectedConcise "I lidhur">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopjo Regjistra Tor-i">
diff --git a/sr/network-settings.dtd b/sr/network-settings.dtd
index 9334d0e294..ad3f3ea173 100644
--- a/sr/network-settings.dtd
+++ b/sr/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/sv-SE/network-settings.dtd b/sv-SE/network-settings.dtd
index c4220834cd..3bddadbead 100644
--- a/sv-SE/network-settings.dtd
+++ b/sv-SE/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser har misslyckats med att upprätta en anslutning till Tor-nätverket">
<!ENTITY torConnect.connectingConcise "Ansluter...">
<!ENTITY torConnect.connectedConcise "Ansluten">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Kopiera Tor-loggar">
diff --git a/sw/network-settings.dtd b/sw/network-settings.dtd
index c1ea496a3e..751f0ef346 100644
--- a/sw/network-settings.dtd
+++ b/sw/network-settings.dtd
@@ -93,4 +93,5 @@ nenosiri">
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Kuunganishwa...">
<!ENTITY torConnect.connectedConcise "Kushikamana">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ta/network-settings.dtd b/ta/network-settings.dtd
index b2d31a1283..100afc3d7c 100644
--- a/ta/network-settings.dtd
+++ b/ta/network-settings.dtd
@@ -93,4 +93,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "இணைக்கிறது...">
<!ENTITY torConnect.connectedConcise "இணைக்கப்பட்டது">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/te/network-settings.dtd b/te/network-settings.dtd
index 44faccd925..dab96bf5d7 100644
--- a/te/network-settings.dtd
+++ b/te/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "సంబంధిత">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/th/network-settings.dtd b/th/network-settings.dtd
index 22a296c69d..fc16fb65db 100644
--- a/th/network-settings.dtd
+++ b/th/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "กำลังเชื่อมต่อ...">
<!ENTITY torConnect.connectedConcise "เชื่อมต่อสำเร็จ">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/tr/network-settings.dtd b/tr/network-settings.dtd
index 4ebd5e96a6..d475da6a26 100644
--- a/tr/network-settings.dtd
+++ b/tr/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser, Tor ağı ile bağlantı kuramadı">
<!ENTITY torConnect.connectingConcise "Bağlantı kuruluyor…">
<!ENTITY torConnect.connectedConcise "Bağlantı kuruldu">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Tor günlüklerini kopyala">
diff --git a/uk/network-settings.dtd b/uk/network-settings.dtd
index 5b40c117a8..707bb6ff8c 100644
--- a/uk/network-settings.dtd
+++ b/uk/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Під'єднання...">
<!ENTITY torConnect.connectedConcise "Під'єднано">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/ur/network-settings.dtd b/ur/network-settings.dtd
index 3468d9a132..f2e44b404d 100644
--- a/ur/network-settings.dtd
+++ b/ur/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "مربوط ہو رہا ہے۔۔۔">
<!ENTITY torConnect.connectedConcise "منسلک ہو چکا ہے">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/uz/network-settings.dtd b/uz/network-settings.dtd
index 35ee5a5c40..7ad5a34b28 100644
--- a/uz/network-settings.dtd
+++ b/uz/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Ulanmoqda…">
<!ENTITY torConnect.connectedConcise "Ulandi">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/vi/network-settings.dtd b/vi/network-settings.dtd
index b1deec2fbf..7ebfc5e3d6 100644
--- a/vi/network-settings.dtd
+++ b/vi/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Đang kết nối...">
<!ENTITY torConnect.connectedConcise "Đã kết nối">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/zh-CN/network-settings.dtd b/zh-CN/network-settings.dtd
index 4e5d12ec1b..2d03c5d191 100644
--- a/zh-CN/network-settings.dtd
+++ b/zh-CN/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor 浏览器未能与 Tor 网络建立连接">
<!ENTITY torConnect.connectingConcise "正在连接…">
<!ENTITY torConnect.connectedConcise "已连接">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "复制 Tor 日志">
diff --git a/zh-HK/network-settings.dtd b/zh-HK/network-settings.dtd
index ce9e790604..be062e796b 100644
--- a/zh-HK/network-settings.dtd
+++ b/zh-HK/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "已連線">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
diff --git a/zh-TW/network-settings.dtd b/zh-TW/network-settings.dtd
index ba74226dcd..9a7119cde1 100644
--- a/zh-TW/network-settings.dtd
+++ b/zh-TW/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "連接中…">
<!ENTITY torConnect.connectedConcise "已連缐">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
1
0

[Git][tpo/applications/android-components][android-components-91.0.1-11.0-1] 12 commits: Bug 40005: Modify Default toolbar menu
by Matthew Finkel (@sysrqb) 22 Jul '21
by Matthew Finkel (@sysrqb) 22 Jul '21
22 Jul '21
Matthew Finkel pushed to branch android-components-91.0.1-11.0-1 at The Tor Project / Applications / android-components
Commits:
9130802a by Matthew Finkel at 2021-07-14T17:39:01+02:00
Bug 40005: Modify Default toolbar menu
- - - - -
448c7c3e by Alex Catarineu at 2021-07-14T17:39:03+02:00
Bug 40007: Port external helper app prompting
Together with the corresponding fenix patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.
- - - - -
1a234718 by Alex Catarineu at 2021-07-14T17:39:05+02:00
Bug 40002: Ensure system download manager is not used
- - - - -
1661b6ef by Alex Catarineu at 2021-07-14T17:39:06+02:00
Bug 40009: Change the default search engines
This matches the search engines from desktop, that is:
DDG as the default, then YouTube, Google, DDGOnion,
Startpage, Twitter, Wikipedia and Yahoo.
- - - - -
0b4838c1 by Alex Catarineu at 2021-07-14T17:39:08+02:00
Modify Addon support
Bug 40011: Hide option for disallowing addons in private mode
Bug 40016: Allow inheriting from AddonCollectionProvider
This will allow implementing our own AddonsProvider in fenix.
- - - - -
01a33c82 by Georg Koppen at 2021-07-14T17:39:09+02:00
Bug 40013: Add option do overwrite timestamp in extension version
- - - - -
81fc3d4b by Alex Catarineu at 2021-07-14T17:39:11+02:00
Bug 40015: Port padlock states for .onion services
- - - - -
096ab357 by Alex Catarineu at 2021-07-14T17:39:13+02:00
Bug 40021: Force telemetry=false in Fennec settings migration
- - - - -
68c62527 by Alex Catarineu at 2021-07-14T17:39:14+02:00
Bug 40022: Migrate Tor security level from Fennec
- - - - -
94924df0 by Matthew Finkel at 2021-07-14T17:39:16+02:00
Modify Tracking Protection configuration
Bug 40020: Disable third-party cookies
Bug 40024: Disable tracking protection by default
- - - - -
d25092c3 by Matthew Finkel at 2021-07-14T17:39:17+02:00
Bug 40023: Stop PrivateNotificationService
- - - - -
5853be27 by Matthew Finkel at 2021-07-14T17:39:19+02:00
Add support for new GeckoView interfaces
Bug 40006: Expose Security Level interface
Bug 40019: Expose spoofEnglish pref
Bug 34439: Isolate Icon loader on Android
- - - - -
30 changed files:
- build.gradle
- components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
- components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/fetch/GeckoViewFetchClient.kt
- components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt
- components/browser/menu/src/main/java/mozilla/components/browser/menu/WebExtensionBrowserMenuBuilder.kt
- + components/browser/search/src/main/assets/searchplugins/ddg-onion.xml
- + components/browser/search/src/main/assets/searchplugins/startpage.xml
- + components/browser/search/src/main/assets/searchplugins/yahoo.xml
- components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt
- components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/SiteSecurityIconView.kt
- components/browser/toolbar/src/main/res/drawable/mozac_ic_site_security.xml
- components/browser/toolbar/src/main/res/values/attrs_browser_toolbar.xml
- components/concept/engine/src/main/java/mozilla/components/concept/engine/EngineSession.kt
- components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
- components/concept/fetch/src/main/java/mozilla/components/concept/fetch/Request.kt
- components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
- components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AddonCollectionProvider.kt
- components/feature/addons/src/main/res/layout/mozac_feature_addons_fragment_dialog_addon_installed.xml
- components/feature/app-links/build.gradle
- components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksFeature.kt
- components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksUseCases.kt
- components/feature/contextmenu/src/main/java/mozilla/components/feature/contextmenu/ContextMenuCandidate.kt
- components/feature/downloads/build.gradle
- components/feature/downloads/src/main/java/mozilla/components/feature/downloads/AbstractFetchDownloadService.kt
- components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadsFeature.kt
- components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt
- components/feature/search/src/main/assets/search/list.json
- components/feature/search/src/main/assets/searchplugins/ddg.xml
- components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarPresenter.kt
- components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/Context.kt
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-launcher/master] Merge remote-tracking branch 'richardgl/40547'
by sysrqb@torproject.org 22 Jul '21
by sysrqb@torproject.org 22 Jul '21
22 Jul '21
commit 474998734f19c7cef3b10abf874d523cd7940260
Merge: ed8c1e7 9bc9139
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu Jul 22 18:50:20 2021 +0000
Merge remote-tracking branch 'richardgl/40547'
src/chrome/locale/en-US/network-settings.dtd | 1 +
1 file changed, 1 insertion(+)
1
0

[tor-launcher/master] tor-browser#40547 - added 'Tor Not Connected' string for urlbar TorConnect box
by sysrqb@torproject.org 22 Jul '21
by sysrqb@torproject.org 22 Jul '21
22 Jul '21
commit 9bc9139710184fde5887e4d89b3c0f9ac360e468
Author: Richard Pospesel <richard(a)torproject.org>
Date: Thu Jul 22 13:25:19 2021 +0200
tor-browser#40547 - added 'Tor Not Connected' string for urlbar TorConnect box
---
src/chrome/locale/en-US/network-settings.dtd | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/chrome/locale/en-US/network-settings.dtd b/src/chrome/locale/en-US/network-settings.dtd
index 73d32e0..66c650e 100644
--- a/src/chrome/locale/en-US/network-settings.dtd
+++ b/src/chrome/locale/en-US/network-settings.dtd
@@ -92,4 +92,5 @@
<!ENTITY torConnect.tryAgainMessage "Tor Browser has failed to establish a connection to the Tor Network">
<!ENTITY torConnect.connectingConcise "Connecting…">
<!ENTITY torConnect.connectedConcise "Connected">
+<!ENTITY torConnect.notConnectedConcise "Not Connected">
<!ENTITY torConnect.copyLog "Copy Tor Logs">
1
0

[tor-browser/tor-browser-78.12.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 22 Jul '21
by sysrqb@torproject.org 22 Jul '21
22 Jul '21
commit 73d57c01c2bfe398c02586ae76dab677d843df22
Author: Richard Pospesel <richard(a)torproject.org>
Date: Fri Jul 16 17:32:01 2021 +0200
fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
---
browser/actors/NetErrorParent.jsm | 6 +-
browser/base/content/browser.js | 5 +-
browser/components/BrowserGlue.jsm | 32 +-
browser/components/torconnect/TorConnectParent.jsm | 200 +++++----
.../torconnect/content/aboutTorConnect.js | 466 +++++++++-----------
.../torconnect/content/aboutTorConnect.xhtml | 9 -
.../torconnect/content/torBootstrapUrlbar.js | 195 ++++-----
.../components/torpreferences/content/torPane.js | 8 +-
browser/components/urlbar/UrlbarInput.jsm | 6 +-
browser/modules/TorConnect.jsm | 477 +++++++++++++++++++--
browser/modules/TorProtocolService.jsm | 101 +++--
.../processsingleton/MainProcessSingleton.jsm | 5 +
toolkit/modules/RemotePageAccessManager.jsm | 28 +-
13 files changed, 941 insertions(+), 597 deletions(-)
diff --git a/browser/actors/NetErrorParent.jsm b/browser/actors/NetErrorParent.jsm
index fa3cbf23fcb7..6dce9af5aad0 100644
--- a/browser/actors/NetErrorParent.jsm
+++ b/browser/actors/NetErrorParent.jsm
@@ -17,8 +17,8 @@ const { SessionStore } = ChromeUtils.import(
);
const { HomePage } = ChromeUtils.import("resource:///modules/HomePage.jsm");
-const { TorProtocolService } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
+const { TorConnect } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
);
const PREF_SSL_IMPACT_ROOTS = [
@@ -324,7 +324,7 @@ class NetErrorParent extends JSWindowActorParent {
}
break;
case "ShouldShowTorConnect":
- return TorProtocolService.shouldShowTorConnect();
+ return TorConnect.shouldShowTorConnect;
}
return undefined;
}
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 916cd69320cb..996ef6dcdd7f 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -77,7 +77,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
TabModalPrompt: "chrome://global/content/tabprompts.jsm",
TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm",
TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm",
- TorProtocolService: "resource:///modules/TorProtocolService.jsm",
+ TorConnect: "resource:///modules/TorConnect.jsm",
Translation: "resource:///modules/translation/TranslationParent.jsm",
OnionAliasStore: "resource:///modules/OnionAliasStore.jsm",
UITour: "resource:///modules/UITour.jsm",
@@ -2494,7 +2494,8 @@ var gBrowserInit = {
let uri = window.arguments[0];
let defaultArgs = BrowserHandler.defaultArgs;
- if (TorProtocolService.shouldShowTorConnect()) {
+ if (TorConnect.shouldShowTorConnect) {
+ TorConnect.setURIsToLoad(uri);
return "about:torconnect";
}
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 8735783cee2b..cb77f4d82a3e 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -17,31 +17,6 @@ const { AppConstants } = ChromeUtils.import(
"resource://gre/modules/AppConstants.jsm"
);
-// TorProtocolService and TorConnect modules need to be lazily-loaded
-// here because they will trigger generation of the random password used
-// to talk to the tor daemon in tor-launcher. Generating the random
-// password will initialize the cryptographic service ( nsNSSComponent )
-//
-// If this service is init'd before the profile has been setup, it will
-// use the fallback init path which behaves as if security.nocertdb=true
-//
-// We make these module getters so init happens when they are needed
-// (when init'ing the OnionAliasStore). With theze getters, the password
-// generation is triggered in torbutton after the 'profile-after-change'
-// topic (so after the profile is initialized)
-
-ChromeUtils.defineModuleGetter(
- this,
- "TorProtocolService",
- "resource:///modules/TorProtocolService.jsm"
-);
-
-ChromeUtils.defineModuleGetter(
- this,
- "TorConnect",
- "resource:///modules/TorConnect.jsm"
-);
-
ChromeUtils.defineModuleGetter(
this,
"ActorManagerParent",
@@ -2531,14 +2506,17 @@ BrowserGlue.prototype = {
{
task: () => {
- if (TorProtocolService.isBootstrapDone() || !TorProtocolService.ownsTorDaemon) {
+ const { TorConnect, TorConnectTopics } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
+ );
+ if (!TorConnect.shouldShowTorConnect) {
// we will take this path when the user is using the legacy tor launcher or
// when Tor Browser didn't launch its own tor.
OnionAliasStore.init();
} else {
// this path is taken when using about:torconnect, we wait to init
// after we are bootstrapped and connected to tor
- const topic = "torconnect:bootstrap-complete";
+ const topic = TorConnectTopics.BootstrapComplete;
let bootstrapObserver = {
observe(aSubject, aTopic, aData) {
if (aTopic === topic) {
diff --git a/browser/components/torconnect/TorConnectParent.jsm b/browser/components/torconnect/TorConnectParent.jsm
index c34fab76ddbb..3937bf3ebcf8 100644
--- a/browser/components/torconnect/TorConnectParent.jsm
+++ b/browser/components/torconnect/TorConnectParent.jsm
@@ -3,123 +3,139 @@
var EXPORTED_SYMBOLS = ["TorConnectParent"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { TorProtocolService } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
-);
const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
-const { TorLauncherUtil } = ChromeUtils.import(
- "resource://torlauncher/modules/tl-util.jsm"
-);
-
-const { TorConnect } = ChromeUtils.import(
+const { TorConnect, TorConnectTopics, TorConnectState } = ChromeUtils.import(
"resource:///modules/TorConnect.jsm"
);
-const kTorProcessReadyTopic = "TorProcessIsReady";
-const kTorProcessExitedTopic = "TorProcessExited";
-const kTorProcessDidNotStartTopic = "TorProcessDidNotStart";
-const kTorShowProgressPanelTopic = "TorShowProgressPanel";
-const kTorBootstrapStatusTopic = "TorBootstrapStatus";
-const kTorBootstrapErrorTopic = "TorBootstrapError";
-const kTorLogHasWarnOrErrTopic = "TorLogHasWarnOrErr";
-
-const gActiveTopics = [
- kTorProcessReadyTopic,
- kTorProcessExitedTopic,
- kTorProcessDidNotStartTopic,
- kTorShowProgressPanelTopic,
- kTorBootstrapStatusTopic,
- kTorBootstrapErrorTopic,
- kTorLogHasWarnOrErrTopic,
- "torconnect:bootstrap-complete",
-];
-
-const gTorLauncherPrefs = {
+const TorLauncherPrefs = Object.freeze({
quickstart: "extensions.torlauncher.quickstart",
-}
+});
+
+/*
+This object is basically a marshalling interface between the TorConnect module
+and a particular about:torconnect page
+*/
class TorConnectParent extends JSWindowActorParent {
constructor(...args) {
super(...args);
const self = this;
- this.gObserver = {
- observe(aSubject, aTopic, aData) {
- const obj = aSubject?.wrappedJSObject;
- if (obj) {
- obj.handled = true;
- }
- self.sendAsyncMessage(aTopic, obj);
- },
- };
- for (const topic of gActiveTopics) {
- Services.obs.addObserver(this.gObserver, topic);
- }
+ this.state = {
+ State: TorConnect.state,
+ ErrorMessage: TorConnect.errorMessage,
+ ErrorDetails: TorConnect.errorDetails,
+ BootstrapProgress: TorConnect.bootstrapProgress,
+ BootstrapStatus: TorConnect.bootstrapStatus,
+ ShowCopyLog: TorConnect.logHasWarningOrError,
+ QuickStartEnabled: Services.prefs.getBoolPref(TorLauncherPrefs.quickstart, false),
+ };
- this.quickstartObserver = {
+ // JSWindowActiveParent derived objects cannot observe directly, so create a member
+ // object to do our observing for us
+ //
+ // This object converts the various lifecycle events from the TorConnect module, and
+ // maintains a state object which we pass down to our about:torconnect page, which uses
+ // the state object to update its UI
+ this.torConnectObserver = {
observe(aSubject, aTopic, aData) {
- if (aTopic === "nsPref:changed" &&
- aData == gTorLauncherPrefs.quickstart) {
- self.sendAsyncMessage("TorQuickstartPrefChanged", Services.prefs.getBoolPref(gTorLauncherPrefs.quickstart));
+ let obj = aSubject?.wrappedJSObject;
+
+ // update our state struct based on received torconnect topics and forward on
+ // to aboutTorConnect.js
+ switch(aTopic) {
+ case TorConnectTopics.StateChange: {
+ self.state.State = obj.state;
+ // clear any previous error information if we are bootstrapping
+ if (self.state.State === TorConnectState.Bootstrapping) {
+ self.state.ErrorMessage = null;
+ self.state.ErrorDetails = null;
+ }
+ break;
+ }
+ case TorConnectTopics.BootstrapProgress: {
+ self.state.BootstrapProgress = obj.progress;
+ self.state.BootstrapStatus = obj.status;
+ self.state.ShowCopyLog = obj.hasWarnings;
+ break;
+ }
+ case TorConnectTopics.BootstrapComplete: {
+ // tells about:torconnect pages to close themselves
+ // this flag will only be set if an about:torconnect page
+ // reaches the Bootstrapped state, so if a user
+ // navigates to about:torconnect manually after bootstrap, the page
+ // will not auto-close on them
+ self.state.Close = true;
+ break;
+ }
+ case TorConnectTopics.BootstrapError: {
+ self.state.ErrorMessage = obj.message;
+ self.state.ErrorDetails = obj.details;
+ self.state.ShowCopyLog = true;
+ break;
+ }
+ case TorConnectTopics.FatalError: {
+ // TODO: handle
+ break;
+ }
+ case "nsPref:changed": {
+ if (aData === TorLauncherPrefs.quickstart) {
+ self.state.QuickStartEnabled = Services.prefs.getBoolPref(TorLauncherPrefs.quickstart);
+ }
+ break;
+ }
+ default: {
+ console.log(`TorConnect: unhandled observe topic '${aTopic}'`);
+ }
}
+
+ self.sendAsyncMessage("torconnect:state-change", self.state);
},
+ };
+
+ // observe all of the torconnect:.* topics
+ for (const key in TorConnectTopics) {
+ const topic = TorConnectTopics[key];
+ Services.obs.addObserver(this.torConnectObserver, topic);
}
- Services.prefs.addObserver(gTorLauncherPrefs.quickstart, this.quickstartObserver);
+ Services.prefs.addObserver(TorLauncherPrefs.quickstart, this.torConnectObserver);
}
willDestroy() {
- for (const topic of gActiveTopics) {
- Services.obs.removeObserver(this.gObserver, topic);
+ // stop observing all of our torconnect:.* topics
+ for (const key in TorConnectTopics) {
+ const topic = TorConnectTopics[key];
+ Services.obs.removeObserver(this.torConnectObserver, topic);
}
- }
-
-
- _OpenTorAdvancedPreferences() {
- const win = this.browsingContext.top.embedderElement.ownerGlobal;
- win.openTrustedLinkIn("about:preferences#tor", "tab");
- }
-
- _TorCopyLog() {
- // Copy tor log messages to the system clipboard.
- const chSvc = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
- Ci.nsIClipboardHelper
- );
- const countObj = { value: 0 };
- chSvc.copyString(TorProtocolService.getLog(countObj));
- const count = countObj.value;
- return TorLauncherUtil.getFormattedLocalizedString(
- "copiedNLogMessagesShort",
- [count],
- 1
- );
+ Services.prefs.removeObserver(TorLauncherPrefs.quickstart, this.torConnectObserver);
}
receiveMessage(message) {
switch (message.name) {
- case "TorBootstrapErrorOccurred":
- return TorProtocolService.torBootstrapErrorOccurred();
- case "TorRetrieveBootstrapStatus":
- return TorProtocolService.retrieveBootstrapStatus();
- case "OpenTorAdvancedPreferences":
- return this._OpenTorAdvancedPreferences();
- case "GetLocalizedBootstrapStatus":
- const { status, keyword } = message.data;
- return TorLauncherUtil.getLocalizedBootstrapStatus(status, keyword);
- case "TorCopyLog":
- return this._TorCopyLog();
- case "TorIsNetworkDisabled":
- return TorProtocolService.isNetworkDisabled();
- case "TorStopBootstrap":
- return TorProtocolService.torStopBootstrap();
- case "TorConnect":
- return TorProtocolService.connect();
- case "GetDirection":
- return Services.locale.isAppLocaleRTL ? "rtl" : "ltr";
- case "GetTorStrings":
- return TorStrings;
- case "TorLogHasWarnOrErr":
- return TorProtocolService.torLogHasWarnOrErr();
+ case "torconnect:set-quickstart":
+ Services.prefs.setBoolPref(TorLauncherPrefs.quickstart, message.data);
+ break;
+ case "torconnect:open-tor-preferences":
+ TorConnect.openTorPreferences();
+ break;
+ case "torconnect:copy-tor-logs":
+ return TorConnect.copyTorLogs();
+ case "torconnect:cancel-bootstrap":
+ TorConnect.cancelBootstrap();
+ break;
+ case "torconnect:begin-bootstrap":
+ TorConnect.beginBootstrap();
+ break;
+ case "torconnect:get-init-args":
+ // called on AboutTorConnect.init(), pass down all state data it needs to init
+ return {
+ TorStrings: TorStrings,
+ TorConnectState: TorConnectState,
+ Direction: Services.locale.isAppLocaleRTL ? "rtl" : "ltr",
+ State: this.state,
+ };
}
return undefined;
}
diff --git a/browser/components/torconnect/content/aboutTorConnect.js b/browser/components/torconnect/content/aboutTorConnect.js
index 19fd335ccd13..8b269d2fc82b 100644
--- a/browser/components/torconnect/content/aboutTorConnect.js
+++ b/browser/components/torconnect/content/aboutTorConnect.js
@@ -2,299 +2,258 @@
/* eslint-env mozilla/frame-script */
-const kTorProcessReadyTopic = "TorProcessIsReady";
-const kTorProcessExitedTopic = "TorProcessExited";
-const kTorProcessDidNotStartTopic = "TorProcessDidNotStart";
-const kTorBootstrapStatusTopic = "TorBootstrapStatus";
-const kTorBootstrapErrorTopic = "TorBootstrapError";
-const kTorLogHasWarnOrErrTopic = "TorLogHasWarnOrErr";
-const kTorQuickstartPrefChanged = "TorQuickstartPrefChanged";
-
-const TorLauncherPrefs = {
- quickstart: "extensions.torlauncher.quickstart",
- prompt_at_startup: "extensions.torlauncher.prompt_at_startup",
-}
+// populated in AboutTorConnect.init()
+let TorStrings = {};
+let TorConnectState = {};
class AboutTorConnect {
- log(...args) {
- console.log(...args);
- }
-
- logError(...args) {
- console.error(...args);
- }
+ selectors = Object.freeze({
+ textContainer: {
+ title: "div.title",
+ titleText: "h1.title-text",
+ },
+ progress: {
+ description: "p#connectShortDescText",
+ meter: "div#progressBackground",
+ },
+ copyLog: {
+ link: "span#copyLogLink",
+ tooltip: "div#copyLogTooltip",
+ tooltipText: "span#copyLogTooltipText",
+ },
+ quickstart: {
+ checkbox: "input#quickstartCheckbox",
+ label: "label#quickstartCheckboxLabel",
+ },
+ buttons: {
+ connect: "button#connectButton",
+ cancel: "button#cancelButton",
+ advanced: "button#advancedButton",
+ },
+ })
+
+ elements = Object.freeze({
+ title: document.querySelector(this.selectors.textContainer.title),
+ titleText: document.querySelector(this.selectors.textContainer.titleText),
+ progressDescription: document.querySelector(this.selectors.progress.description),
+ progressMeter: document.querySelector(this.selectors.progress.meter),
+ copyLogLink: document.querySelector(this.selectors.copyLog.link),
+ copyLogTooltip: document.querySelector(this.selectors.copyLog.tooltip),
+ copyLogTooltipText: document.querySelector(this.selectors.copyLog.tooltipText),
+ quickstartCheckbox: document.querySelector(this.selectors.quickstart.checkbox),
+ quickstartLabel: document.querySelector(this.selectors.quickstart.label),
+ connectButton: document.querySelector(this.selectors.buttons.connect),
+ cancelButton: document.querySelector(this.selectors.buttons.cancel),
+ advancedButton: document.querySelector(this.selectors.buttons.advanced),
+ })
+
+ beginBootstrap() {
+ this.hide(this.elements.connectButton);
+ this.show(this.elements.cancelButton);
+ this.elements.cancelButton.focus();
+ RPMSendAsyncMessage("torconnect:begin-bootstrap");
+ }
+
+ cancelBootstrap() {
+ RPMSendAsyncMessage("torconnect:cancel-bootstrap");
+ }
+
+ /*
+ Element helper methods
+ */
+
+ show(element) {
+ element.removeAttribute("hidden");
+ }
+
+ hide(element) {
+ element.setAttribute("hidden", "true");
+ }
+
+ setTitle(title, error) {
+ this.elements.titleText.textContent = title;
+ document.title = title;
- logDebug(...args) {
- console.debug(...args);
+ if (error) {
+ this.elements.title.classList.add("error");
+ } else {
+ this.elements.title.classList.remove("error");
+ }
}
- getElem(id) {
- return document.getElementById(id);
- }
- get elemProgressContent() {
- return this.getElem("progressContent");
- }
- get elemProgressDesc() {
- return this.getElem("connectShortDescText");
- }
- get elemProgressMeter() {
- return this.getElem("progressBackground");
- }
- get elemCopyLogLink() {
- return this.getElem("copyLogLink");
- }
- get elemCopyLogTooltip() {
- return this.getElem("copyLogTooltip");
- }
- get elemCopyLogTooltipText() {
- return this.getElem("copyLogTooltipText");
- }
- get elemQuickstartCheckbox() {
- return this.getElem("quickstartCheckbox");
- }
- get elemQuickstartLabel() {
- return this.getElem("quickstartCheckboxLabel");
- }
- get elemConnectButton() {
- return this.getElem("connectButton");
- }
- get elemAdvancedButton() {
- return this.getElem("advancedButton");
- }
- get elemCancelButton() {
- return this.getElem("cancelButton");
- }
- get elemTextContainer() {
- return this.getElem("text-container");
- }
- get elemTitle() {
- return this.elemTextContainer.getElementsByClassName("title")[0];
+ setProgress(description, visible, percent) {
+ this.elements.progressDescription.textContent = description;
+ if (visible) {
+ this.show(this.elements.progressMeter);
+ this.elements.progressMeter.style.width = `${percent}%`;
+ } else {
+ this.hide(this.elements.progressMeter);
+ }
}
- static get STATE_INITIAL() {
- return "STATE_INITIAL";
- }
+ /*
+ These methods update the UI based on the current TorConnect state
+ */
- static get STATE_BOOTSTRAPPING() {
- return "STATE_BOOTSTRAPPING";
- }
+ updateUI(state) {
+ console.log(state);
- static get STATE_BOOTSTRAPPED() {
- return "STATE_BOOTSTRAPPED";
- }
+ // calls update_$state()
+ this[`update_${state.State}`](state);
- static get STATE_BOOTSTRAP_ERROR() {
- return "STATE_BOOTSTRAP_ERROR";
+ if (state.ShowCopyLog) {
+ this.showCopyLog();
+ }
+ this.elements.quickstartCheckbox.checked = state.QuickStartEnabled;
}
- get state() {
- return this._state;
- }
+ /* Per-state updates */
- setInitialUI() {
- this.setTitle(this.torStrings.torConnect.torConnect);
- this.elemProgressDesc.textContent =
- this.torStrings.settings.torPreferencesDescription;
- this.showElem(this.elemConnectButton);
- this.elemConnectButton.focus();
- this.showElem(this.elemAdvancedButton);
- this.hideElem(this.elemCopyLogLink);
- this.hideElem(this.elemCancelButton);
- this.hideElem(this.elemProgressContent);
- this.hideElem(this.elemProgressMeter);
- this.elemTitle.classList.remove("error");
- }
+ update_Initial(state) {
+ const hasError = false;
+ const showProgressbar = false;
- setBootstrappingUI() {
- this.setTitle(this.torStrings.torConnect.torConnecting);
- this.hideElem(this.elemConnectButton);
- this.hideElem(this.elemAdvancedButton);
- this.hideElem(this.elemCopyLogLink);
- this.showElem(this.elemCancelButton);
- this.elemCancelButton.focus();
- this.showElem(this.elemProgressContent);
- this.showElem(this.elemProgressMeter);
- this.elemTitle.classList.remove("error");
+ this.setTitle(TorStrings.torConnect.torConnect, hasError);
+ this.setProgress(TorStrings.settings.torPreferencesDescription, showProgressbar);
+ this.hide(this.elements.copyLogLink);
+ this.hide(this.elements.connectButton);
+ this.hide(this.elements.advancedButton);
+ this.hide(this.elements.cancelButton);
}
- setBootstrapErrorUI() {
- this.setTitle(this.torStrings.torConnect.torBootstrapFailed);
- this.elemConnectButton.textContent = this.torStrings.torConnect.tryAgain;
- this.showElem(this.elemConnectButton);
- this.hideElem(this.elemCancelButton);
- this.showElem(this.elemAdvancedButton);
- this.elemAdvancedButton.focus();
- this.showElem(this.elemProgressContent);
- this.hideElem(this.elemProgressMeter);
- this.elemTitle.classList.add("error");
- }
+ update_Configuring(state) {
+ const hasError = state.ErrorMessage != null;
+ const showProgressbar = false;
- set state(state) {
- const oldState = this.state;
- if (oldState === state) {
- return;
- }
- this._state = state;
- switch (this.state) {
- case AboutTorConnect.STATE_INITIAL:
- this.setInitialUI();
- break;
- case AboutTorConnect.STATE_BOOTSTRAPPING:
- this.setBootstrappingUI();
- break;
- case AboutTorConnect.STATE_BOOTSTRAP_ERROR:
- this.setBootstrapErrorUI();
- break;
- case AboutTorConnect.STATE_BOOTSTRAPPED:
- window.close();
- break;
+ if (hasError) {
+ this.setTitle(state.ErrorMessage, hasError);
+ this.setProgress(state.ErrorDetails, showProgressbar);
+ this.show(this.elements.copyLogLink);
+ this.elements.connectButton.textContent = TorStrings.torConnect.tryAgain;
+ } else {
+ this.setTitle(TorStrings.torConnect.torConnect, hasError);
+ this.setProgress(TorStrings.settings.torPreferencesDescription, showProgressbar);
+ this.hide(this.elements.copyLogLink);
+ this.elements.connectButton.textContent = TorStrings.torConnect.torConnectButton;
}
+ this.show(this.elements.connectButton);
+ this.elements.connectButton.focus();
+ this.show(this.elements.advancedButton);
+ this.hide(this.elements.cancelButton);
}
- async showErrorMessage(aErrorObj) {
- if (aErrorObj && aErrorObj.message) {
- this.setTitle(aErrorObj.message);
- if (aErrorObj.details) {
- this.elemProgressDesc.textContent = aErrorObj.details;
- }
- }
-
- this.showCopyLog();
- this.showElem(this.elemConnectButton);
+ update_AutoConfiguring(state) {
+ // TODO: noop until this state is used
}
- showElem(elem) {
- elem.removeAttribute("hidden");
- }
+ update_Bootstrapping(state) {
+ const hasError = false;
+ const showProgressbar = true;
- hideElem(elem) {
- elem.setAttribute("hidden", "true");
+ this.setTitle(state.BootstrapStatus ? state.BootstrapStatus : TorStrings.torConnect.torConnecting, hasError);
+ this.setProgress(TorStrings.settings.torPreferencesDescription, showProgressbar, state.BootstrapProgress);
+ if (state.ShowCopyLog) {
+ this.show(this.elements.copyLogLink);
+ } else {
+ this.hide(this.elements.copyLogLink);
+ }
+ this.hide(this.elements.connectButton);
+ this.hide(this.elements.advancedButton);
+ this.show(this.elements.cancelButton);
+ this.elements.cancelButton.focus();
}
- async connect() {
- // reset the text to original description
- // in case we are trying again after an error (clears out error text)
- this.elemProgressDesc.textContent =
- this.torStrings.settings.torPreferencesDescription;
+ update_Error(state) {
+ const hasError = true;
+ const showProgressbar = false;
- this.state = AboutTorConnect.STATE_BOOTSTRAPPING;
- const error = await RPMSendQuery("TorConnect");
- if (error) {
- if (error.details) {
- this.showErrorMessage({ message: error.details }, true);
- this.showSaveSettingsError(error.details);
- }
- }
+ this.setTitle(state.ErrorMessage, hasError);
+ this.setProgress(state.ErrorDetails, showProgressbar);
+ this.show(this.elements.copyLogLink);
+ this.elements.connectButton.textContent = TorStrings.torConnect.tryAgain;
+ this.show(this.elements.connectButton);
+ this.show(this.elements.advancedButton);
+ this.hide(this.elements.cancelButton);
}
- showCopyLog() {
- this.elemCopyLogLink.removeAttribute("hidden");
+ update_FatalError(state) {
+ // TODO: noop until this state is used
}
- async updateBootstrapProgress(status) {
- let labelText = await RPMSendQuery("GetLocalizedBootstrapStatus", {
- status,
- keyword: "TAG",
- });
- let percentComplete = status.PROGRESS ? status.PROGRESS : 0;
- this.elemProgressMeter.style.width = `${percentComplete}%`;
-
- if (await RPMSendQuery("TorBootstrapErrorOccurred")) {
- this.state = AboutTorConnect.STATE_BOOTSTRAP_ERROR;
- return;
- } else if (await RPMSendQuery("TorIsNetworkDisabled")) {
- // If tor network is not connected, let's go to the initial state, even
- // if bootstrap state is greater than 0.
- this.state = AboutTorConnect.STATE_INITIAL;
- return;
- } else if (percentComplete > 0) {
- this.state = AboutTorConnect.STATE_BOOTSTRAPPING;
- }
+ update_Bootstrapped(state) {
+ const hasError = false;
+ const showProgressbar = true;
- // Due to async, status might have changed. Do not override desc if so.
- if (this.state === AboutTorConnect.STATE_BOOTSTRAPPING) {
- this.hideElem(this.elemConnectButton);
+ this.setTitle(TorStrings.torConnect.torConnected, hasError);
+ this.setProgress(TorStrings.settings.torPreferencesDescription, showProgressbar, 100);
+ this.hide(this.elements.connectButton);
+ this.hide(this.elements.advancedButton);
+ this.hide(this.elements.cancelButton);
+
+ // only close the window if directed
+ if (state.Close) {
+ window.close();
}
}
- stopTorBootstrap() {
- RPMSendAsyncMessage("TorStopBootstrap");
+ update_Disabled(state) {
+ // TODO: we should probably have some UX here if a user goes to about:torconnect when
+ // it isn't in use (eg using tor-launcher or system tor)
}
- setTitle(title) {
- const titleElement = document.querySelector(".title-text");
- titleElement.textContent = title;
- document.title = title;
- }
+ async initElements(direction, quickstart) {
- async initElements() {
- this.elemAdvancedButton.textContent = this.torStrings.torConnect.torConfigure;
- this.elemAdvancedButton.addEventListener("click", () => {
- RPMSendAsyncMessage("OpenTorAdvancedPreferences");
- });
+ document.documentElement.setAttribute("dir", direction);
- // sets the text content while keping the child elements intact
- this.elemCopyLogLink.childNodes[0].nodeValue =
- this.torStrings.torConnect.copyLog;
- this.elemCopyLogLink.addEventListener("click", async (event) => {
- const copiedMessage = await RPMSendQuery("TorCopyLog");
- aboutTorConnect.elemCopyLogTooltipText.textContent = copiedMessage;
- aboutTorConnect.elemCopyLogTooltip.style.visibility = "visible";
+ // sets the text content while keeping the child elements intact
+ this.elements.copyLogLink.childNodes[0].nodeValue =
+ TorStrings.torConnect.copyLog;
+ this.elements.copyLogLink.addEventListener("click", async (event) => {
+ const copiedMessage = await RPMSendQuery("torconnect:copy-tor-logs");
+ this.elements.copyLogTooltipText.textContent = copiedMessage;
+ this.elements.copyLogTooltipText.style.visibility = "visible";
// clear previous timeout if one already exists
- if (aboutTorConnect.copyLogTimeoutId) {
- clearTimeout(aboutTorConnect.copyLogTimeoutId);
+ if (this.copyLogTimeoutId) {
+ clearTimeout(this.copyLogTimeoutId);
}
// hide tooltip after X ms
const TOOLTIP_TIMEOUT = 2000;
- aboutTorConnect.copyLogTimeoutId = setTimeout(function() {
- aboutTorConnect.elemCopyLogTooltip.style.visibility = "hidden";
- aboutTorConnect.copyLogTimeoutId = 0;
+ this.copyLogTimeoutId = setTimeout(function() {
+ this.elements.copyLogTooltipText.style.visibility = "hidden";
+ this.copyLogTimeoutId = 0;
}, TOOLTIP_TIMEOUT);
});
+ this.elements.quickstartCheckbox.checked = quickstart
+ this.elements.quickstartCheckbox.addEventListener("change", () => {
+ const quickstart = this.elements.quickstartCheckbox.checked;
+ RPMSendAsyncMessage("torconnect:set-quickstart", quickstart);
+ });
+ this.elements.quickstartLabel.textContent = TorStrings.settings.quickstartCheckbox;
- this.elemQuickstartLabel.textContent = this.torStrings.settings.quickstartCheckbox;
- this.elemQuickstartCheckbox.addEventListener("change", () => {
- const quickstart = this.elemQuickstartCheckbox.checked;
- RPMSetBoolPref(TorLauncherPrefs.quickstart, quickstart);
+ this.elements.connectButton.textContent =
+ TorStrings.torConnect.torConnectButton;
+ this.elements.connectButton.addEventListener("click", () => {
+ this.beginBootstrap();
});
- this.elemQuickstartCheckbox.checked = await RPMGetBoolPref(TorLauncherPrefs.quickstart);
- this.elemConnectButton.textContent =
- this.torStrings.torConnect.torConnectButton;
- this.elemConnectButton.addEventListener("click", () => {
- this.connect();
+ this.elements.advancedButton.textContent = TorStrings.torConnect.torConfigure;
+ this.elements.advancedButton.addEventListener("click", () => {
+ RPMSendAsyncMessage("torconnect:open-tor-preferences");
});
- this.elemCancelButton.textContent = this.torStrings.torConnect.cancel;
- this.elemCancelButton.addEventListener("click", () => {
- this.stopTorBootstrap();
+ this.elements.cancelButton.textContent = TorStrings.torConnect.cancel;
+ this.elements.cancelButton.addEventListener("click", () => {
+ this.cancelBootstrap();
});
}
initObservers() {
- RPMAddMessageListener(kTorBootstrapErrorTopic, ({ data }) => {
- this.showCopyLog();
- this.stopTorBootstrap();
- this.showErrorMessage(data);
- });
- RPMAddMessageListener(kTorLogHasWarnOrErrTopic, () => {
- this.showCopyLog();
- });
- RPMAddMessageListener(kTorProcessDidNotStartTopic, ({ data }) => {
- this.showErrorMessage(data);
- });
- RPMAddMessageListener(kTorBootstrapStatusTopic, ({ data }) => {
- this.updateBootstrapProgress(data);
- });
- RPMAddMessageListener(kTorQuickstartPrefChanged, ({ data }) => {
- // update checkbox with latest quickstart pref value
- this.elemQuickstartCheckbox.checked = data;
- });
- RPMAddMessageListener("torconnect:bootstrap-complete", () => {
- this.state = AboutTorConnect.STATE_BOOTSTRAPPED;
+ // TorConnectParent feeds us state blobs to we use to update our UI
+ RPMAddMessageListener("torconnect:state-change", ({ data }) => {
+ this.updateUI(data);
});
}
@@ -304,34 +263,25 @@ class AboutTorConnect {
// integers, so we must resort to a string compare here :(
// see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code for relevant documentation
if (evt.code === "Escape") {
- this.stopTorBootstrap();
+ this.cancelBootstrap();
}
};
}
async init() {
- this.torStrings = await RPMSendQuery("GetTorStrings");
- document.documentElement.setAttribute(
- "dir",
- await RPMSendQuery("GetDirection")
- );
- this.initElements();
+
+ let args = await RPMSendQuery("torconnect:get-init-args");
+
+ // various constants
+ TorStrings = Object.freeze(args.TorStrings);
+ TorConnectState = Object.freeze(args.TorConnectState);
+
+ this.initElements(args.Direction);
this.initObservers();
this.initKeyboardShortcuts();
- this.state = AboutTorConnect.STATE_INITIAL;
-
- // Request the most recent bootstrap status info so that a
- // TorBootstrapStatus notification is generated as soon as possible.
- RPMSendAsyncMessage("TorRetrieveBootstrapStatus");
-
- // quickstart is the user set pref for starting tor automatically
- // prompt_at_startup will be set to false after successful bootstrap, and true on error
- // by tor-launcher, so we want to keep the connect screen up when prompt_at_startup is true
- /// even if quickstart is enabled so user can potentially resolve errors on next launch
- if (await RPMGetBoolPref(TorLauncherPrefs.quickstart) &&
- !await RPMGetBoolPref(TorLauncherPrefs.prompt_at_startup)) {
- this.connect();
- }
+
+ // populate UI based on current state
+ this.updateUI(args.State);
}
}
diff --git a/browser/components/torconnect/content/aboutTorConnect.xhtml b/browser/components/torconnect/content/aboutTorConnect.xhtml
index 0a0721afb7db..595bbdf9a70a 100644
--- a/browser/components/torconnect/content/aboutTorConnect.xhtml
+++ b/browser/components/torconnect/content/aboutTorConnect.xhtml
@@ -19,15 +19,6 @@
</div>
</div>
- <div id="progressContent" hidden="true">
- <div class="tbb-header" pack="center">
- <image class="tbb-logo"/>
- </div>
- <div flex="1">
- <div id="progressDesc"/>
- </div>
- </div>
-
<div id="copyLogContainer">
<span id="copyLogLink" hidden="true">
<div id="copyLogTooltip">
diff --git a/browser/components/torconnect/content/torBootstrapUrlbar.js b/browser/components/torconnect/content/torBootstrapUrlbar.js
index 55a595b2dbab..e4fd6f5ab910 100644
--- a/browser/components/torconnect/content/torBootstrapUrlbar.js
+++ b/browser/components/torconnect/content/torBootstrapUrlbar.js
@@ -2,135 +2,88 @@
"use strict";
- const TorConnectionStatus = {
- invalid: -1,
- offline: 0,
- connecting: 1,
- connected: 2,
- failure: 3,
- };
-var TorBootstrapUrlbar;
+const { TorConnect, TorConnectTopics, TorConnectState } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
+);
+const { TorStrings } = ChromeUtils.import(
+ "resource:///modules/TorStrings.jsm"
+);
-{
- const { TorProtocolService } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
- );
- const { TorLauncherUtil } = ChromeUtils.import(
- "resource://torlauncher/modules/tl-util.jsm"
- );
- const { TorStrings } = ChromeUtils.import(
- "resource:///modules/TorStrings.jsm"
- );
-
- const kTorProcessReadyTopic = "TorProcessIsReady";
- const kTorProcessExitedTopic = "TorProcessExited";
- const kTorProcessDidNotStartTopic = "TorProcessDidNotStart";
- const kTorBootstrapStatusTopic = "TorBootstrapStatus";
- const kTorBootstrapErrorTopic = "TorBootstrapError";
-
- const gActiveTopics = [
- kTorProcessReadyTopic,
- kTorProcessExitedTopic,
- kTorProcessDidNotStartTopic,
- kTorBootstrapStatusTopic,
- kTorBootstrapErrorTopic,
- ];
-
- TorBootstrapUrlbar = {
- _connectionStatus: TorConnectionStatus.invalid,
- get ConnectionStatus() {
- return this._connectionStatus;
+var TorBootstrapUrlbar = {
+ selectors: Object.freeze({
+ torConnect: {
+ box: "hbox#torconnect-box",
+ label: "label#torconnect-label",
},
+ }),
- _torConnectBox : null,
- get TorConnectBox() {
- if (!this._torConnectBox) {
- this._torConnectBox =
- browser.ownerGlobal.document.getElementById("torconnect-box");
- }
- return this._torConnectBox;
- },
+ elements: null,
- _torConnectLabel : null,
- get TorConnectLabel() {
- if (!this._torConnectLabel) {
- this._torConnectLabel =
- browser.ownerGlobal.document.getElementById("torconnect-label");
+ updateTorConnectBox: function(state) {
+ switch(state)
+ {
+ case TorConnectState.Initial:
+ case TorConnectState.Configuring:
+ case TorConnectState.AutoConfiguring:
+ case TorConnectState.Error:
+ case TorConnectState.FatalError: {
+ this.elements.torConnectBox.removeAttribute("hidden");
+ this.elements.torConnectLabel.textContent = TorStrings.torConnect.offline;
+ this.elements.inputContainer.setAttribute("torconnect", "offline");
+ break;
}
- return this._torConnectLabel;
- },
-
- _updateConnectionStatus(percentComplete = 0) {
- if (TorProtocolService.ownsTorDaemon &&
- !TorLauncherUtil.useLegacyLauncher) {
- if (TorProtocolService.isNetworkDisabled()) {
- if (TorProtocolService.torBootstrapErrorOccurred()) {
- this._connectionStatus = TorConnectionStatus.failure;
- } else {
- this._connectionStatus = TorConnectionStatus.offline;
- }
- } else if (percentComplete < 100) {
- this._connectionStatus = TorConnectionStatus.connecting;
- } else if (percentComplete === 100) {
- this._connectionStatus = TorConnectionStatus.connected;
- }
+ case TorConnectState.Bootstrapping: {
+ this.elements.torConnectBox.removeAttribute("hidden");
+ this.elements.torConnectLabel.textContent =
+ TorStrings.torConnect.torConnectingConcise;
+ this.elements.inputContainer.setAttribute("torconnect", "connecting");
+ break;
}
- else
- {
- this._connectionStatus = TorConnectionStatus.invalid;
+ case TorConnectState.Bootstrapped: {
+ this.elements.torConnectBox.removeAttribute("hidden");
+ this.elements.torConnectLabel.textContent =
+ TorStrings.torConnect.torConnectedConcise;
+ this.elements.inputContainer.setAttribute("torconnect", "connected");
+ // hide torconnect box after 5 seconds
+ setTimeout(() => {
+ this.elements.torConnectBox.setAttribute("hidden", "true");
+ }, 5000);
+ break;
}
-
- switch(this._connectionStatus)
- {
- case TorConnectionStatus.failure:
- case TorConnectionStatus.offline:
- this.TorConnectBox.removeAttribute("hidden");
- this.TorConnectLabel.textContent = TorStrings.torConnect.offline;
- gURLBar._inputContainer.setAttribute("torconnect", "offline");
- break;
- case TorConnectionStatus.connecting:
- this.TorConnectLabel.textContent =
- TorStrings.torConnect.torConnectingConcise;
- gURLBar._inputContainer.setAttribute("torconnect", "connecting");
- break;
- case TorConnectionStatus.connected:
- this.TorConnectLabel.textContent =
- TorStrings.torConnect.torConnectedConcise;
- gURLBar._inputContainer.setAttribute("torconnect", "connected");
- // hide torconnect box after 5 seconds
- let self = this;
- setTimeout(function() {
- self.TorConnectBox.setAttribute("hidden", "true");
- }, 5000);
- break;
+ case TorConnectState.Disabled: {
+ this.elements.torConnectBox.setAttribute("hidden", "true");
+ break;
}
- },
+ default:
+ break;
+ }
+ },
- observe(aSubject, aTopic, aData) {
+ observe: function(aSubject, aTopic, aData) {
+ if (aTopic === TorConnectTopics.StateChange) {
const obj = aSubject?.wrappedJSObject;
+ this.updateTorConnectBox(obj?.state);
+ }
+ },
+
+ init: function() {
+ if (TorConnect.shouldShowTorConnect) {
+ // browser isn't populated until init
+ this.elements = Object.freeze({
+ torConnectBox: browser.ownerGlobal.document.querySelector(this.selectors.torConnect.box),
+ torConnectLabel: browser.ownerGlobal.document.querySelector(this.selectors.torConnect.label),
+ inputContainer: gURLBar._inputContainer,
+ })
+ Services.obs.addObserver(this, TorConnectTopics.StateChange);
+ this.observing = true;
+ this.updateTorConnectBox(TorConnect.state);
+ }
+ },
+
+ uninit: function() {
+ if (this.observing) {
+ Services.obs.removeObserver(this, TorConnectTopics.StateChange);
+ }
+ },
+};
- switch (aTopic) {
- case kTorProcessReadyTopic:
- case kTorProcessExitedTopic:
- case kTorProcessDidNotStartTopic:
- case kTorBootstrapErrorTopic:
- this._updateConnectionStatus();
- break;
- case kTorBootstrapStatusTopic:
- let percentComplete = obj.PROGRESS ? obj.PROGRESS : 0;
- this._updateConnectionStatus(percentComplete);
- break;
- }
- },
- init() {
- for (const topic of gActiveTopics) {
- Services.obs.addObserver(this, topic);
- }
- },
- uninit() {
- for (const topic of gActiveTopics) {
- Services.obs.removeObserver(this, topic);
- }
- },
- };
-}
diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js
index 01609ddda090..59ecdec6d1d9 100644
--- a/browser/components/torpreferences/content/torPane.js
+++ b/browser/components/torpreferences/content/torPane.js
@@ -6,6 +6,10 @@ const { TorProtocolService } = ChromeUtils.import(
"resource:///modules/TorProtocolService.jsm"
);
+const { TorConnect } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
+);
+
const {
TorBridgeSource,
TorBridgeSettings,
@@ -188,14 +192,14 @@ const gTorPane = (function() {
this._messageBoxButton = prefpane.querySelector(selectors.messageBox.button);
// wire up connect button
this._messageBoxButton.addEventListener("click", () => {
- TorProtocolService.connect();
+ TorConnect.beginBootstrap();
let win = Services.wm.getMostRecentWindow("navigator:browser");
// switch to existing about:torconnect tab or create a new one
win.switchToTabHavingURI("about:torconnect", true);
});
let populateMessagebox = () => {
- if (TorProtocolService.shouldShowTorConnect()) {
+ if (TorConnect.shouldShowTorConnect) {
// set messagebox style and text
if (TorProtocolService.torBootstrapErrorOccurred()) {
this._messageBox.className = "error";
diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm
index f727c386701c..60b5b9163d67 100644
--- a/browser/components/urlbar/UrlbarInput.jsm
+++ b/browser/components/urlbar/UrlbarInput.jsm
@@ -10,8 +10,8 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
-const { TorProtocolService } = ChromeUtils.import(
- "resource:///modules/TorProtocolService.jsm"
+const { TorConnect } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
);
// in certain scenarios we want user input uris to open in a new tab if they do so from the
@@ -24,7 +24,7 @@ function maybeUpdateOpenLocationForTorConnect(openUILinkWhere, currentURI, desti
// we are trying to open in same tab
openUILinkWhere === "current" &&
// only if user still has not bootstrapped
- TorProtocolService.shouldShowTorConnect() &&
+ TorConnect.shouldShowTorConnect &&
// and user is not just navigating to about:torconnect
destinationURI !== "about:torconnect") {
return "tab";
diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm
index 3125c84558db..5d2b826cfa10 100644
--- a/browser/modules/TorConnect.jsm
+++ b/browser/modules/TorConnect.jsm
@@ -1,6 +1,6 @@
"use strict";
-var EXPORTED_SYMBOLS = ["TorConnect"];
+var EXPORTED_SYMBOLS = ["TorConnect", "TorConnectTopics", "TorConnectState"];
const { Services } = ChromeUtils.import(
"resource://gre/modules/Services.jsm"
@@ -10,53 +10,476 @@ const { BrowserWindowTracker } = ChromeUtils.import(
"resource:///modules/BrowserWindowTracker.jsm"
);
-const { TorProtocolService } = ChromeUtils.import(
+const { TorProtocolService, TorProcessStatus } = ChromeUtils.import(
"resource:///modules/TorProtocolService.jsm"
);
-// TODO: move the bootstrap state management out of each of the individual
-// about:torconnect pages and stick it here
-var TorConnect = (() => {
+const { TorLauncherUtil } = ChromeUtils.import(
+ "resource://torlauncher/modules/tl-util.jsm"
+);
+
+/* Browser observer topis */
+const BrowserTopics = Object.freeze({
+ ProfileAfterChange: "profile-after-change",
+});
+
+/* tor-launcher observer topics */
+const TorTopics = Object.freeze({
+ ProcessIsReady: "TorProcessIsReady",
+ BootstrapStatus: "TorBootstrapStatus",
+ BootstrapError: "TorBootstrapError",
+ ProcessExited: "TorProcessExited",
+ LogHasWarnOrErr: "TorLogHasWarnOrErr",
+});
+
+/* Relevant prefs used by tor-launcher */
+const TorLauncherPrefs = Object.freeze({
+ quickstart: "extensions.torlauncher.quickstart",
+ prompt_at_startup: "extensions.torlauncher.prompt_at_startup",
+});
+
+const TorConnectState = Object.freeze({
+ /* Our initial state */
+ Initial: "Initial",
+ /* In-between initial boot and bootstrapping, users can change tor network settings during this state */
+ Configuring: "Configuring",
+ /* Geo-location and setting bridges/etc */
+ AutoConfiguring: "AutoConfiguring",
+ /* Tor is bootstrapping */
+ Bootstrapping: "Bootstrapping",
+ /* Passthrough state back to Configuring or Fatal */
+ Error: "Error",
+ /* An unrecoverable error */
+ FatalError: "FatalError",
+ /* Final state, after successful bootstrap */
+ Bootstrapped: "Bootstrapped",
+ /* If we are using System tor or the legacy Tor-Launcher */
+ Disabled: "Disabled",
+});
+
+/*
+
+ TorConnect State Transitions
+
+ ┌──────────────────────┐
+ │ Disabled │
+ └──────────────────────┘
+ ▲
+ │ legacyOrSystemTor()
+ │
+ ┌──────────────────────┐
+ ┌────────────────────── │ Initial │ ───────────────────────────┐
+ │ └──────────────────────┘ │
+ │ │ │
+ │ │ beginBootstrap() │
+ │ ▼ │
+┌────────────────┐ │ bootstrapComplete() ┌────────────────────────────────────────────────┐ │ beginBootstrap()
+│ Bootstrapped │ ◀──┼────────────────────── │ Bootstrapping │ ◀┼─────────────────┐
+└────────────────┘ │ └────────────────────────────────────────────────┘ │ │
+ │ │ ▲ │ │ │
+ │ │ cancelBootstrap() │ beginBootstrap() └────┼─────────────┐ │
+ │ ▼ │ │ │ │
+ │ beginConfigure() ┌────────────────────────────────────────────────┐ │ │ │
+ └─────────────────────▶ │ │ │ │ │
+ │ │ │ │ │
+ beginConfigure() │ │ │ │ │
+ ┌──────────────────────────▶ │ Configuring │ │ │ │
+ │ │ │ │ │ │
+ │ │ │ │ │ │
+ │ ┌─────────────────────▶ │ │ │ │ │
+ │ │ └────────────────────────────────────────────────┘ │ │ │
+ │ │ │ │ │ │ │
+ │ │ cancelAutoconfigure() │ autoConfigure() │ ┌────┼─────────────┼───┘
+ │ │ ▼ │ │ │ │
+ │ │ ┌──────────────────────┐ │ │ │ │
+ │ └────────────────────── │ AutoConfiguring │ ─┼────────────────────┘ │ │
+ │ └──────────────────────┘ │ │ │
+ │ │ │ │ onError() │
+ │ │ onError() │ onError() │ │
+ │ ▼ ▼ │ │
+ │ ┌────────────────────────────────────────────────┐ │ │
+ └─────────────────────────── │ Error │ ◀┘ │
+ └────────────────────────────────────────────────┘ │
+ │ ▲ onError() │
+ │ onFatalError() └──────────────────┘
+ ▼
+ ┌──────────────────────┐
+ │ FatalError │
+ └──────────────────────┘
+
+*/
+
+
+/* Maps allowed state transitions
+ TorConnectStateTransitions[state] maps to an array of allowed states to transition to
+*/
+const TorConnectStateTransitions =
+ Object.freeze(new Map([
+ [TorConnectState.Initial,
+ [TorConnectState.Disabled,
+ TorConnectState.Bootstrapping,
+ TorConnectState.Configuring,
+ TorConnectState.Error]],
+ [TorConnectState.Configuring,
+ [TorConnectState.AutoConfiguring,
+ TorConnectState.Bootstrapping,
+ TorConnectState.Error]],
+ [TorConnectState.AutoConfiguring,
+ [TorConnectState.Configuring,
+ TorConnectState.Bootstrapping,
+ TorConnectState.Error]],
+ [TorConnectState.Bootstrapping,
+ [TorConnectState.Configuring,
+ TorConnectState.Bootstrapped,
+ TorConnectState.Error]],
+ [TorConnectState.Error,
+ [TorConnectState.Configuring,
+ TorConnectState.FatalError]],
+ // terminal states
+ [TorConnectState.FatalError, []],
+ [TorConnectState.Bootstrapped, []],
+ [TorConnectState.Disabled, []],
+ ]));
+
+/* Topics Notified by the TorConnect module */
+const TorConnectTopics = Object.freeze({
+ StateChange: "torconnect:state-change",
+ BootstrapProgress: "torconnect:bootstrap-progress",
+ BootstrapComplete: "torconnect:bootstrap-complete",
+ BootstrapError: "torconnect:bootstrap-error",
+ FatalError: "torconnect:fatal-error",
+});
+
+const TorConnect = (() => {
let retval = {
- init : function() {
- let topics = [
- "TorBootstrapStatus",
- ];
- for(const topic of topics) {
- Services.obs.addObserver(this, topic);
+ _state: TorConnectState.Initial,
+ _bootstrapProgress: 0,
+ _bootstrapStatus: null,
+ _errorMessage: null,
+ _errorDetails: null,
+ _logHasWarningOrError: false,
+ // init to about:tor as fallback in case setURIsToLoad is somehow never called
+ _urisToLoad: ["about:tor"],
+
+ /* These functions are called after transitioning to a new state */
+ _transitionCallbacks: Object.freeze(new Map([
+ /* Initial is never transitioned to */
+ [TorConnectState.Initial, null],
+ /* Configuring */
+ [TorConnectState.Configuring, (self) => {
+ // TODO move this to the transition function
+ if (this._state === TorConnectState.Bootstrapping) {
+ TorProtocolService.torStopBootstrap();
+ }
+ }],
+ /* AutoConfiguring */
+ [TorConnectState.AutoConfiguring, (self) => {
+
+ }],
+ /* Bootstrapping */
+ [TorConnectState.Bootstrapping, (self) => {
+ let error = TorProtocolService.connect();
+ if (error) {
+ self.onError(error.message, error.details);
+ } else {
+ self._errorMessage = self._errorDetails = null;
+ }
+ }],
+ /* Bootstrapped */
+ [TorConnectState.Bootstrapped, (self) => {
+ // open home page(s) in new tabs
+ const win = BrowserWindowTracker.getTopWindow()
+
+ let location="tab";
+ for (const uri of self._urisToLoad) {
+ win.openTrustedLinkIn(uri, location);
+ // open subsequent tabs behind first tab
+ location = "tabshifted";
+ }
+ Services.obs.notifyObservers(null, TorConnectTopics.BootstrapComplete);
+ }],
+ /* Error */
+ [TorConnectState.Error, (self, errorMessage, errorDetails, fatal) => {
+ self._errorMessage = errorMessage;
+ self._errorDetails = errorDetails;
+
+ Services.obs.notifyObservers({message: errorMessage, details: errorDetails}, TorConnectTopics.BootstrapError);
+ if (fatal) {
+ self.onFatalError();
+ } else {
+ self.beginConfigure();
+ }
+ }],
+ /* FatalError */
+ [TorConnectState.FatalError, (self) => {
+ Services.obs.notifyObservers(null, TorConnectTopics.FatalError);
+ }],
+ /* Disabled */
+ [TorConnectState.Disabled, (self) => {
+
+ }],
+ ])),
+
+ _changeState: function(newState, ...args) {
+ const oldState = this._state;
+
+ // ensure this is a valid state transition
+ if (!TorConnectStateTransitions.get(oldState)?.includes(newState)) {
+ throw Error(`TorConnect: Attempted invalid state transition from ${oldState} to ${newState}`);
}
+
+ console.log(`TorConnect: transitioning state from ${oldState} to ${newState}`);
+
+ // call our transition function and forward any args
+ this._transitionCallbacks.get(newState)(this, ...args);
+
+ // finally, set our new state
+ this._state = newState;
+
+ Services.obs.notifyObservers({state: newState}, TorConnectTopics.StateChange);
+ },
+
+ // init should be called on app-startup in MainProcessingSingleton.jsm
+ init : function() {
+ console.log("TorConnect: Init");
+
+ // delay remaining init until after profile-after-change
+ Services.obs.addObserver(this, BrowserTopics.ProfileAfterChange);
},
observe: function(subject, topic, data) {
+ console.log(`TorConnect: observed ${topic}`);
+
switch(topic) {
- case "TorBootstrapStatus":
- const obj = subject?.wrappedJSObject;
- if (obj?.PROGRESS === 100) {
- // open home page(s) in new tabs
- const win = BrowserWindowTracker.getTopWindow()
- const urls = Services.prefs.getStringPref("browser.startup.homepage").split('|');
-
- let location="tab";
- for(const url of urls) {
- win.openTrustedLinkIn(url, location);
- // open subsequent tabs behind first tab
- location = "tabshifted";
+
+ /* Determine which state to move to from Initial */
+ case BrowserTopics.ProfileAfterChange: {
+ if (TorLauncherUtil.useLegacyLauncher || !TorProtocolService.ownsTorDaemon) {
+ // Disabled
+ this.legacyOrSystemTor();
+ } else {
+ // register the Tor topics we always care about
+ for (const topicKey in TorTopics) {
+ const topic = TorTopics[topicKey];
+ Services.obs.addObserver(this, topic);
+ console.log(`TorConnect: observing topic '${topic}'`);
}
- Services.obs.notifyObservers(null, "torconnect:bootstrap-complete");
+ if (TorProtocolService.torProcessStatus == TorProcessStatus.Running) {
+ if (this.shouldQuickStart) {
+ // Quickstart
+ this.beginBootstrap();
+ } else {
+ // Configuring
+ this.beginConfigure();
+ }
+ }
}
+
+ Services.obs.removeObserver(this, topic);
break;
+ }
+ /* Transition out of Initial if Tor daemon wasn't running yet in BrowserTopics.ProfileAfterChange */
+ case TorTopics.ProcessIsReady: {
+ if (this.state === TorConnectState.Initial)
+ {
+ if (this.shouldQuickStart) {
+ // Quickstart
+ this.beginBootstrap();
+ } else {
+ // Configuring
+ this.beginConfigure();
+ }
+ }
+ break;
+ }
+ /* Updates our bootstrap status */
+ case TorTopics.BootstrapStatus: {
+ if (this._state != TorConnectState.Bootstrapping) {
+ console.log(`TorConnect: observed ${TorTopics.BootstrapStatus} topic while in state TorConnectState.${this._state}`);
+ break;
+ }
+
+ const obj = subject?.wrappedJSObject;
+ if (obj) {
+ this._bootstrapProgress= obj.PROGRESS;
+ this._bootstrapStatus = TorLauncherUtil.getLocalizedBootstrapStatus(obj, "TAG");
+
+ console.log(`TorConnect: Bootstrapping ${this._bootstrapProgress}% complete (${this._bootstrapStatus})`);
+ Services.obs.notifyObservers({
+ progress: this._bootstrapProgress,
+ status: this._bootstrapStatus,
+ hasWarnings: this._logHasWarningOrError
+ }, TorConnectTopics.BootstrapProgress);
+
+ if (this._bootstrapProgress === 100) {
+ this.bootstrapComplete();
+ }
+ }
+ break;
+ }
+ /* Handle bootstrap error*/
+ case TorTopics.BootstrapError: {
+ const obj = subject?.wrappedJSObject;
+ TorProtocolService.torStopBootstrap();
+ this.onError(obj.message, obj.details);
+ break;
+ }
+ case TorTopics.LogHasWarnOrErr: {
+ this._logHasWarningOrError = true;
+ break;
+ }
default:
// ignore
break;
}
},
- shouldShowTorConnect : function() {
- return TorProtocolService.shouldShowTorConnect();
+ /*
+ Various getters
+ */
+
+ get shouldShowTorConnect() {
+ // TorBrowser must control the daemon
+ return (TorProtocolService.ownsTorDaemon &&
+ // and we're not using the legacy launcher
+ !TorLauncherUtil.useLegacyLauncher &&
+ // legacy checks, TODO: maybe this should be in terms of our own state?
+ (TorProtocolService.isNetworkDisabled() || !TorProtocolService.isBootstrapDone()));
+ },
+
+ get shouldQuickStart() {
+ // quickstart must be enabled
+ return Services.prefs.getBoolPref(TorLauncherPrefs.quickstart, false) &&
+ // and the previous bootstrap attempt must have succeeded
+ !Services.prefs.getBoolPref(TorLauncherPrefs.prompt_at_startup, true);
+ },
+
+ get state() {
+ return this._state;
+ },
+
+ get bootstrapProgress() {
+ return this._bootstrapProgress;
+ },
+
+ get bootstrapStatus() {
+ return this._bootstrapStatus;
+ },
+
+ get errorMessage() {
+ return this._errorMessage;
+ },
+
+ get errorDetails() {
+ return this._errorDetails;
+ },
+
+ get logHasWarningOrError() {
+ return this._logHasWarningOrError;
+ },
+
+ /*
+ These functions tell TorConnect to transition states
+ */
+
+ legacyOrSystemTor: function() {
+ console.log("TorConnect: legacyOrSystemTor()");
+ this._changeState(TorConnectState.Disabled);
+ },
+
+ beginBootstrap: function() {
+ console.log("TorConnect: beginBootstrap()");
+ this._changeState(TorConnectState.Bootstrapping);
+ },
+
+ beginConfigure: function() {
+ console.log("TorConnect: beginConfigure()");
+ this._changeState(TorConnectState.Configuring);
+ },
+
+ autoConfigure: function() {
+ console.log("TorConnect: autoConfigure()");
+ // TODO: implement
+ throw Error("TorConnect: not implemented");
+ },
+
+ cancelAutoConfigure: function() {
+ console.log("TorConnect: cancelAutoConfigure()");
+ // TODO: implement
+ throw Error("TorConnect: not implemented");
+ },
+
+ cancelBootstrap: function() {
+ console.log("TorConnect: cancelBootstrap()");
+ this._changeState(TorConnectState.Configuring);
+ },
+
+ bootstrapComplete: function() {
+ console.log("TorConnect: bootstrapComplete()");
+ this._changeState(TorConnectState.Bootstrapped);
+ },
+
+ onError: function(message, details) {
+ console.log("TorConnect: onError()");
+ this._changeState(TorConnectState.Error, message, details, false);
+ },
+
+ onFatalError: function() {
+ console.log("TorConnect: onFatalError()");
+ // TODO: implement
+ throw Error("TorConnect: not implemented");
+ },
+
+ /*
+ Further external commands and helper methods
+ */
+ openTorPreferences: function() {
+ const win = BrowserWindowTracker.getTopWindow()
+ win.openTrustedLinkIn("about:preferences#tor", "tab");
+ },
+
+ copyTorLogs: function() {
+ // Copy tor log messages to the system clipboard.
+ const chSvc = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+ );
+ const countObj = { value: 0 };
+ chSvc.copyString(TorProtocolService.getLog(countObj));
+ const count = countObj.value;
+ return TorLauncherUtil.getFormattedLocalizedString(
+ "copiedNLogMessagesShort",
+ [count],
+ 1
+ );
+ },
+
+ // called from browser.js on browser startup, passed in either the user's homepage(s)
+ // or uris passed via command-line
+ setURIsToLoad: function(uriVariant) {
+ // convert the object we get from browser.js
+ let uris = ((v) => {
+ if (v instanceof Ci.nsIArray) {
+ // Transform the nsIArray of nsISupportsString's into a JS Array of
+ // JS strings.
+ return Array.from(
+ v.enumerate(Ci.nsISupportsString),
+ supportStr => supportStr.data
+ );
+ } else if (v instanceof Ci.nsISupportsString) {
+ return [v.data];
+ } else if (typeof v === "string") {
+ return v.split("|");
+ }
+ // about:tor as safe fallback
+ return ["about:tor"];
+ })(uriVariant);
+
+ console.log(`TorConnect: will load after bootstrap => ${uris.join(", ")}`);
+ this._urisToLoad = uris;
},
};
retval.init();
return retval;
-})(); /* TorConnect */
\ No newline at end of file
+})(); /* TorConnect */
diff --git a/browser/modules/TorProtocolService.jsm b/browser/modules/TorProtocolService.jsm
index fc7f2c884aa2..e6c78b9a0eb1 100644
--- a/browser/modules/TorProtocolService.jsm
+++ b/browser/modules/TorProtocolService.jsm
@@ -2,26 +2,59 @@
"use strict";
-var EXPORTED_SYMBOLS = ["TorProtocolService"];
+var EXPORTED_SYMBOLS = ["TorProtocolService", "TorProcessStatus"];
-const { TorLauncherUtil } = ChromeUtils.import(
- "resource://torlauncher/modules/tl-util.jsm"
+const { Services } = ChromeUtils.import(
+ "resource://gre/modules/Services.jsm"
);
-var TorProtocolService = {
- _tlps: Cc["@torproject.org/torlauncher-protocol-service;1"].getService(
- Ci.nsISupports
- ).wrappedJSObject,
+// see tl-process.js
+const TorProcessStatus = Object.freeze({
+ Unknown: 0,
+ Starting: 1,
+ Running: 2,
+ Exited: 3,
+});
+
+/* Browser observer topis */
+const BrowserTopics = Object.freeze({
+ ProfileAfterChange: "profile-after-change",
+});
- _tlproc: Cc["@torproject.org/torlauncher-process-service;1"].getService(
- Ci.nsISupports
- ).wrappedJSObject,
+var TorProtocolService = {
+ _TorLauncherUtil: function() {
+ let { TorLauncherUtil } = ChromeUtils.import(
+ "resource://torlauncher/modules/tl-util.jsm"
+ );
+ return TorLauncherUtil;
+ }(),
+ _TorLauncherProtocolService: null,
+ _TorProcessService: null,
// maintain a map of tor settings set by Tor Browser so that we don't
// repeatedly set the same key/values over and over
// this map contains string keys to primitive or array values
_settingsCache: new Map(),
+ init() {
+ Services.obs.addObserver(this, BrowserTopics.ProfileAfterChange);
+ },
+
+ observe(subject, topic, data) {
+ if (topic === BrowserTopics.ProfileAfterChange) {
+ // we have to delay init'ing this or else the crypto service inits too early without a profile
+ // which breaks the password manager
+ this._TorLauncherProtocolService = Cc["@torproject.org/torlauncher-protocol-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ this._TorProcessService = Cc["@torproject.org/torlauncher-process-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject,
+
+ Services.obs.removeObserver(this, topic);
+ }
+ },
+
_typeof(aValue) {
switch (typeof aValue) {
case "boolean":
@@ -124,7 +157,7 @@ var TorProtocolService = {
}
let errorObject = {};
- if (!this._tlps.TorSetConfWithReply(settingsObject, errorObject)) {
+ if (!this._TorLauncherProtocolService.TorSetConfWithReply(settingsObject, errorObject)) {
throw new Error(errorObject.details);
}
@@ -137,8 +170,8 @@ var TorProtocolService = {
_readSetting(aSetting) {
this._assertValidSettingKey(aSetting);
- let reply = this._tlps.TorGetConf(aSetting);
- if (this._tlps.TorCommandSucceeded(reply)) {
+ let reply = this._TorLauncherProtocolService.TorGetConf(aSetting);
+ if (this._TorLauncherProtocolService.TorCommandSucceeded(reply)) {
return reply.lineArray;
}
throw new Error(reply.lineArray.join("\n"));
@@ -207,22 +240,22 @@ var TorProtocolService = {
getLog(countObj) {
countObj = countObj || { value: 0 };
- let torLog = this._tlps.TorGetLog(countObj);
+ let torLog = this._TorLauncherProtocolService.TorGetLog(countObj);
return torLog;
},
// true if we launched and control tor, false if using system tor
get ownsTorDaemon() {
- return TorLauncherUtil.shouldStartAndOwnTor;
+ return this._TorLauncherUtil.shouldStartAndOwnTor;
},
// Assumes `ownsTorDaemon` is true
isNetworkDisabled() {
- const reply = TorProtocolService._tlps.TorGetConfBool(
+ const reply = TorProtocolService._TorLauncherProtocolService.TorGetConfBool(
"DisableNetwork",
true
);
- if (TorProtocolService._tlps.TorCommandSucceeded(reply)) {
+ if (TorProtocolService._TorLauncherProtocolService.TorCommandSucceeded(reply)) {
return reply.retVal;
}
return true;
@@ -232,22 +265,22 @@ var TorProtocolService = {
let settings = {};
settings.DisableNetwork = false;
let errorObject = {};
- if (!this._tlps.TorSetConfWithReply(settings, errorObject)) {
+ if (!this._TorLauncherProtocolService.TorSetConfWithReply(settings, errorObject)) {
throw new Error(errorObject.details);
}
},
sendCommand(cmd) {
- return this._tlps.TorSendCommand(cmd);
+ return this._TorLauncherProtocolService.TorSendCommand(cmd);
},
retrieveBootstrapStatus() {
- return this._tlps.TorRetrieveBootstrapStatus();
+ return this._TorLauncherProtocolService.TorRetrieveBootstrapStatus();
},
_GetSaveSettingsErrorMessage(aDetails) {
try {
- return TorLauncherUtil.getSaveSettingsErrorMessage(aDetails);
+ return this._TorLauncherUtil.getSaveSettingsErrorMessage(aDetails);
} catch (e) {
console.log("GetSaveSettingsErrorMessage error", e);
return "Unexpected Error";
@@ -258,7 +291,7 @@ var TorProtocolService = {
let result = false;
const error = {};
try {
- result = this._tlps.TorSetConfWithReply(settings, error);
+ result = this._TorLauncherProtocolService.TorSetConfWithReply(settings, error);
} catch (e) {
console.log("TorSetConfWithReply error", e);
error.details = this._GetSaveSettingsErrorMessage(e.message);
@@ -267,23 +300,15 @@ var TorProtocolService = {
},
isBootstrapDone() {
- return this._tlproc.mIsBootstrapDone;
+ return this._TorProcessService.mIsBootstrapDone;
},
clearBootstrapError() {
- return this._tlproc.TorClearBootstrapError();
- },
-
- shouldShowTorConnect() {
- return (
- this.ownsTorDaemon &&
- !TorLauncherUtil.useLegacyLauncher &&
- (this.isNetworkDisabled() || !this.isBootstrapDone())
- );
+ return this._TorProcessService.TorClearBootstrapError();
},
torBootstrapErrorOccurred() {
- return this._tlproc.TorBootstrapErrorOccurred;
+ return this._TorProcessService.TorBootstrapErrorOccurred;
},
// Resolves to null if ok, or an error otherwise
@@ -306,7 +331,7 @@ var TorProtocolService = {
},
torLogHasWarnOrErr() {
- return this._tlps.TorLogHasWarnOrErr;
+ return this._TorLauncherProtocolService.TorLogHasWarnOrErr;
},
torStopBootstrap() {
@@ -327,4 +352,12 @@ var TorProtocolService = {
}
this.retrieveBootstrapStatus();
},
+
+ get torProcessStatus() {
+ if (this._TorProcessService) {
+ return this._TorProcessService.TorProcessStatus;
+ }
+ return TorProcessStatus.Unknown;
+ },
};
+TorProtocolService.init();
\ No newline at end of file
diff --git a/toolkit/components/processsingleton/MainProcessSingleton.jsm b/toolkit/components/processsingleton/MainProcessSingleton.jsm
index db1e2dc8f568..ea9288dccbb3 100644
--- a/toolkit/components/processsingleton/MainProcessSingleton.jsm
+++ b/toolkit/components/processsingleton/MainProcessSingleton.jsm
@@ -24,6 +24,11 @@ MainProcessSingleton.prototype = {
null
);
+ ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm",
+ null
+ );
+
// Load this script early so that console.* is initialized
// before other frame scripts.
Services.mm.loadFrameScript(
diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm
index 0927391c2ba7..54230e1175ec 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -181,28 +181,18 @@ let RemotePageAccessManager = {
RPMRemoveMessageListener: ["*"],
},
"about:torconnect": {
- RPMAddMessageListener: ["*"],
+ RPMAddMessageListener: [
+ "torconnect:state-change",
+ ],
RPMSendAsyncMessage: [
- "OpenTorAdvancedPreferences",
- "TorRetrieveBootstrapStatus",
- "TorStopBootstrap",
+ "torconnect:open-tor-preferences",
+ "torconnect:begin-bootstrap",
+ "torconnect:cancel-bootstrap",
+ "torconnect:set-quickstart",
],
RPMSendQuery: [
- "GetDirection",
- "GetLocalizedBootstrapStatus",
- "GetTorStrings",
- "TorBootstrapErrorOccurred",
- "TorConnect",
- "TorCopyLog",
- "TorIsNetworkDisabled",
- "TorLogHasWarnOrErr",
- ],
- RPMGetBoolPref: [
- "extensions.torlauncher.quickstart",
- "extensions.torlauncher.prompt_at_startup",
- ],
- RPMSetBoolPref: [
- "extensions.torlauncher.quickstart",
+ "torconnect:get-init-args",
+ "torconnect:copy-tor-logs",
],
},
},
1
0

[tor-browser/tor-browser-78.12.0esr-11.0-1] Merge remote-tracking branch 'richardgl/geolocation_refactor' into tor-browser-78.12.0esr-11.0-1
by sysrqb@torproject.org 22 Jul '21
by sysrqb@torproject.org 22 Jul '21
22 Jul '21
commit d54c4f1cf20e6166280e37567f7fa362ec596923
Merge: 1eaade2adee6 73d57c01c2bf
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu Jul 22 17:45:34 2021 +0000
Merge remote-tracking branch 'richardgl/geolocation_refactor' into tor-browser-78.12.0esr-11.0-1
browser/actors/NetErrorParent.jsm | 6 +-
browser/base/content/browser.js | 5 +-
browser/components/BrowserGlue.jsm | 32 +-
browser/components/torconnect/TorConnectParent.jsm | 200 +++++----
.../torconnect/content/aboutTorConnect.js | 466 +++++++++-----------
.../torconnect/content/aboutTorConnect.xhtml | 9 -
.../torconnect/content/torBootstrapUrlbar.js | 195 ++++-----
.../components/torpreferences/content/torPane.js | 8 +-
browser/components/urlbar/UrlbarInput.jsm | 6 +-
browser/modules/TorConnect.jsm | 477 +++++++++++++++++++--
browser/modules/TorProtocolService.jsm | 101 +++--
.../processsingleton/MainProcessSingleton.jsm | 5 +
toolkit/modules/RemotePageAccessManager.jsm | 28 +-
13 files changed, 941 insertions(+), 597 deletions(-)
1
0