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

[tor-browser/tor-browser-89.0-10.5-1] Bug 21431: Clean-up system extensions shipped in Firefox
by sysrqb@torproject.org 26 May '21
by sysrqb@torproject.org 26 May '21
26 May '21
commit b93797bd6a084996c2f0ad2b2465921d5da5deb5
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue May 23 17:05:29 2017 -0400
Bug 21431: Clean-up system extensions shipped in Firefox
Only ship the pdfjs extension.
---
browser/components/BrowserGlue.jsm | 6 ++++++
browser/extensions/moz.build | 9 +--------
browser/installer/package-manifest.in | 1 -
browser/locales/Makefile.in | 8 --------
browser/locales/jar.mn | 7 -------
5 files changed, 7 insertions(+), 24 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 106ab4cc8da1..b4153484fd76 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -1972,6 +1972,9 @@ BrowserGlue.prototype = {
const ID = "screenshots(a)mozilla.org";
const _checkScreenshotsPref = async () => {
let addon = await AddonManager.getAddonByID(ID);
+ if (!addon) {
+ return;
+ }
let disabled = Services.prefs.getBoolPref(PREF, false);
if (disabled) {
await addon.disable({ allowSystemAddons: true });
@@ -1988,6 +1991,9 @@ BrowserGlue.prototype = {
const ID = "webcompat-reporter(a)mozilla.org";
Services.prefs.addObserver(PREF, async () => {
let addon = await AddonManager.getAddonByID(ID);
+ if (!addon) {
+ return;
+ }
let enabled = Services.prefs.getBoolPref(PREF, false);
if (enabled && !addon.isActive) {
await addon.enable({ allowSystemAddons: true });
diff --git a/browser/extensions/moz.build b/browser/extensions/moz.build
index 9daae31eca43..8b16ddc4a84a 100644
--- a/browser/extensions/moz.build
+++ b/browser/extensions/moz.build
@@ -4,14 +4,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-DIRS += [
- "doh-rollout",
- "formautofill",
- "screenshots",
- "webcompat",
- "report-site-issue",
- "pictureinpicture",
-]
+DIRS += []
if not CONFIG["TOR_BROWSER_DISABLE_TOR_LAUNCHER"]:
DIRS += ["tor-launcher"]
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 184f8fd475ab..39f19b7dab48 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -273,7 +273,6 @@
@RESPATH@/browser/chrome/icons/default/default64.png
@RESPATH@/browser/chrome/icons/default/default128.png
#endif
-@RESPATH@/browser/features/*
; [DevTools Startup Files]
@RESPATH@/browser/chrome/devtools-startup@JAREXT@
diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in
index 496379c4306f..0946188813da 100644
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -58,10 +58,6 @@ l10n-%:
@$(MAKE) -C ../../toolkit/locales l10n-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
@$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
-ifneq (,$(wildcard ../extensions/formautofill/locales))
- @$(MAKE) -C ../extensions/formautofill/locales AB_CD=$* XPI_NAME=locale-$*
-endif
- @$(MAKE) -C ../extensions/report-site-issue/locales AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -C ../../devtools/client/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
@$(MAKE) -C ../../devtools/startup/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
@$(MAKE) l10n AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR)
@@ -75,14 +71,10 @@ chrome-%:
@$(MAKE) -C ../../toolkit/locales chrome-$*
@$(MAKE) -C ../../services/sync/locales chrome AB_CD=$*
@$(MAKE) -C ../../extensions/spellcheck/locales chrome AB_CD=$*
-ifneq (,$(wildcard ../extensions/formautofill/locales))
- @$(MAKE) -C ../extensions/formautofill/locales chrome AB_CD=$*
-endif
@$(MAKE) -C ../../devtools/client/locales chrome AB_CD=$*
@$(MAKE) -C ../../devtools/startup/locales chrome AB_CD=$*
@$(MAKE) chrome AB_CD=$*
@$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales chrome AB_CD=$*
- @$(MAKE) -C ../extensions/report-site-issue/locales chrome AB_CD=$*
package-win32-installer: $(SUBMAKEFILES)
$(MAKE) -C ../installer/windows CONFIG_DIR=l10ngen ZIP_IN='$(ZIP_OUT)' installer
diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
index b539e72b4fa5..b1d87659e76f 100644
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -52,10 +52,3 @@
locale/browser/appstrings.properties (%chrome/overrides/appstrings.properties)
locale/browser/newInstall.dtd (%chrome/browser/newInstall.dtd)
locale/browser/fxmonitor.properties (%chrome/browser/fxmonitor.properties)
-
-#ifdef XPI_NAME
-# Bug 1240628, restructure how l10n repacks work with feature addons
-# This is hacky, but ensures the chrome.manifest chain is complete
-[.] chrome.jar:
-% manifest features/chrome.manifest
-#endif
1
0

[tor-browser/tor-browser-89.0-10.5-1] Bug 21830: Copying large text from web console leaks to /tmp
by sysrqb@torproject.org 26 May '21
by sysrqb@torproject.org 26 May '21
26 May '21
commit 3583cc7af9096c20b402a6bf9be0d89251f2ba09
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Aug 4 05:55:49 2017 +0000
Bug 21830: Copying large text from web console leaks to /tmp
Patch written by Neill Miller
---
widget/nsTransferable.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/widget/nsTransferable.cpp b/widget/nsTransferable.cpp
index c82549a4d1d1..f8ecfbff0983 100644
--- a/widget/nsTransferable.cpp
+++ b/widget/nsTransferable.cpp
@@ -33,6 +33,7 @@ Notes to self:
#include "nsILoadContext.h"
#include "nsXULAppAPI.h"
#include "mozilla/UniquePtr.h"
+#include "mozilla/Preferences.h"
using namespace mozilla;
@@ -195,6 +196,11 @@ nsTransferable::Init(nsILoadContext* aContext) {
if (aContext) {
mPrivateData = aContext->UsePrivateBrowsing();
+ } else {
+ // without aContext here to provide PrivateBrowsing information,
+ // we defer to the active configured setting
+ mPrivateData =
+ mozilla::Preferences::GetBool("browser.privatebrowsing.autostart");
}
#ifdef DEBUG
mInitialized = true;
1
0

[tor-browser/tor-browser-89.0-10.5-1] Bug 30541: Disable WebGL readPixel() for web content
by sysrqb@torproject.org 26 May '21
by sysrqb@torproject.org 26 May '21
26 May '21
commit 21addcc22ff1048b10f97f970a35731148e70e0e
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed May 29 12:29:19 2019 +0000
Bug 30541: Disable WebGL readPixel() for web content
---
dom/canvas/ClientWebGLContext.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp
index 04867cbcec39..f378315f410e 100644
--- a/dom/canvas/ClientWebGLContext.cpp
+++ b/dom/canvas/ClientWebGLContext.cpp
@@ -4626,6 +4626,14 @@ bool ClientWebGLContext::ReadPixels_SharedPrecheck(
return false;
}
+ // Security check passed, but don't let content readPixel calls through for
+ // now, if Resist Fingerprinting Mode is enabled.
+ if (nsContentUtils::ResistFingerprinting(aCallerType)) {
+ JsWarning("readPixels: Not allowed in Resist Fingerprinting Mode");
+ out_error.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ return false;
+ }
+
return true;
}
1
0

[tor-browser/tor-browser-89.0-10.5-1] Bug 26345: Hide tracking protection UI
by sysrqb@torproject.org 26 May '21
by sysrqb@torproject.org 26 May '21
26 May '21
commit 60230f6d5d2246983ab449bbc9d06f67d29fa02f
Author: Alex Catarineu <acat(a)torproject.org>
Date: Tue Sep 10 16:29:31 2019 +0200
Bug 26345: Hide tracking protection UI
---
browser/base/content/browser-siteIdentity.js | 4 ++--
browser/base/content/browser.xhtml | 4 ++--
browser/components/about/AboutRedirector.cpp | 4 ----
browser/components/about/components.conf | 1 -
browser/components/moz.build | 1 -
browser/themes/shared/preferences/privacy.css | 4 ++++
6 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index 6a816a75cae9..f6fdd8674e98 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -960,10 +960,10 @@ var gIdentityHandler = {
gPermissionPanel.refreshPermissionIcons();
}
- // Hide the shield icon if it is a chrome page.
+ // Bug 26345: Hide tracking protection UI.
gProtectionsHandler._trackingProtectionIconContainer.classList.toggle(
"chromeUI",
- this._isSecureInternalUI
+ true
);
},
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index da4188b336e6..6a0e5c0f5831 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -771,7 +771,7 @@
oncommand="gSync.toggleAccountPanel(this, event)"/>
</toolbaritem>
<toolbarseparator class="sync-ui-item"/>
- <toolbaritem>
+ <toolbaritem hidden="true">
<toolbarbutton id="appMenu-protection-report-button"
class="subviewbutton subviewbutton-iconic"
oncommand="gProtectionsHandler.openProtections(); gProtectionsHandler.recordClick('open_full_report', null, 'app_menu');">
@@ -782,7 +782,7 @@
</label>
</toolbarbutton>
</toolbaritem>
- <toolbarseparator id="appMenu-tp-separator"/>
+ <toolbarseparator hidden="true" id="appMenu-tp-separator"/>
<toolbarbutton id="appMenu-new-window-button"
class="subviewbutton subviewbutton-iconic"
label="&newNavigatorCmd.label;"
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index 3b8e1c39f3d5..6e79b6d6e94b 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -126,10 +126,6 @@ static const RedirEntry kRedirMap[] = {
nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
- {"protections", "chrome://browser/content/protections.html",
- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
- nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
- nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS},
{"ion", "chrome://browser/content/ion.html",
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
#ifdef TOR_BROWSER_UPDATE
diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf
index ed67de484aae..17fecfd9a1fb 100644
--- a/browser/components/about/components.conf
+++ b/browser/components/about/components.conf
@@ -21,7 +21,6 @@ pages = [
'policies',
'preferences',
'privatebrowsing',
- 'protections',
'profiling',
'reader',
'restartrequired',
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 1c421b761888..ef09055b990a 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -46,7 +46,6 @@ DIRS += [
"preferences",
"privatebrowsing",
"prompts",
- "protections",
"protocolhandler",
"resistfingerprinting",
"search",
diff --git a/browser/themes/shared/preferences/privacy.css b/browser/themes/shared/preferences/privacy.css
index b3c990d43c25..d9e0cef627f5 100644
--- a/browser/themes/shared/preferences/privacy.css
+++ b/browser/themes/shared/preferences/privacy.css
@@ -77,6 +77,10 @@
/* Content Blocking */
+#trackingGroup {
+ display: none;
+}
+
/* Override styling that sets descriptions as grey */
#trackingGroup description.indent,
#trackingGroup .indent > description {
1
0

[tor-browser/tor-browser-89.0-10.5-1] Bug 31575: Replace Firefox Home (newtab) with about:tor
by sysrqb@torproject.org 26 May '21
by sysrqb@torproject.org 26 May '21
26 May '21
commit c1e81ecd944507f9b84ee85a95fb9fd832590bd5
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Sep 9 13:04:34 2019 +0200
Bug 31575: Replace Firefox Home (newtab) with about:tor
Avoid loading AboutNewTab in BrowserGlue.jsm in order
to avoid several network requests that we do not need. Besides,
about:newtab will now point to about:blank or about:tor (depending
on browser.newtabpage.enabled) and about:home will point to
about:tor.
---
browser/components/BrowserGlue.jsm | 33 ++----------------------
browser/components/newtab/AboutNewTabService.jsm | 15 +----------
browser/components/preferences/home.inc.xhtml | 4 +--
browser/components/preferences/preferences.xhtml | 5 +++-
browser/modules/HomePage.jsm | 2 +-
5 files changed, 10 insertions(+), 49 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index b4153484fd76..e476a201a051 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -18,7 +18,6 @@ const { AppConstants } = ChromeUtils.import(
);
XPCOMUtils.defineLazyModuleGetters(this, {
- AboutNewTab: "resource:///modules/AboutNewTab.jsm",
ActorManagerParent: "resource://gre/modules/ActorManagerParent.jsm",
AddonManager: "resource://gre/modules/AddonManager.jsm",
AppMenuNotifications: "resource://gre/modules/AppMenuNotifications.jsm",
@@ -225,28 +224,6 @@ let JSWINDOWACTORS = {
matches: ["about:newinstall"],
},
- AboutNewTab: {
- parent: {
- moduleURI: "resource:///actors/AboutNewTabParent.jsm",
- },
- child: {
- moduleURI: "resource:///actors/AboutNewTabChild.jsm",
- events: {
- DOMContentLoaded: {},
- pageshow: {},
- visibilitychange: {},
- },
- },
- // The wildcard on about:newtab is for the ?endpoint query parameter
- // that is used for snippets debugging. The wildcard for about:home
- // is similar, and also allows for falling back to loading the
- // about:home document dynamically if an attempt is made to load
- // about:home?jscache from the AboutHomeStartupCache as a top-level
- // load.
- matches: ["about:home*", "about:welcome", "about:newtab*"],
- remoteTypes: ["privilegedabout"],
- },
-
AboutPlugins: {
parent: {
moduleURI: "resource:///actors/AboutPluginsParent.jsm",
@@ -1625,8 +1602,6 @@ BrowserGlue.prototype = {
// the first browser window has finished initializing
_onFirstWindowLoaded: function BG__onFirstWindowLoaded(aWindow) {
- AboutNewTab.init();
-
TabCrashHandler.init();
ProcessHangMonitor.init();
@@ -5262,12 +5237,8 @@ var AboutHomeStartupCache = {
return { pageInputStream: null, scriptInputStream: null };
}
- let state = AboutNewTab.activityStream.store.getState();
- return new Promise(resolve => {
- this._cacheDeferred = resolve;
- this.log.trace("Parent is requesting cache streams.");
- this._procManager.sendAsyncMessage(this.CACHE_REQUEST_MESSAGE, { state });
- });
+ this.log.error("Activity Stream is disabled in Tor Browser.");
+ return { pageInputStream: null, scriptInputStream: null };
},
/**
diff --git a/browser/components/newtab/AboutNewTabService.jsm b/browser/components/newtab/AboutNewTabService.jsm
index 929356c262ee..c600551a0066 100644
--- a/browser/components/newtab/AboutNewTabService.jsm
+++ b/browser/components/newtab/AboutNewTabService.jsm
@@ -422,20 +422,7 @@ class BaseAboutNewTabService {
* the newtab page has no effect on the result of this function.
*/
get defaultURL() {
- // Generate the desired activity stream resource depending on state, e.g.,
- // "resource://activity-stream/prerendered/activity-stream.html"
- // "resource://activity-stream/prerendered/activity-stream-debug.html"
- // "resource://activity-stream/prerendered/activity-stream-noscripts.html"
- return [
- "resource://activity-stream/prerendered/",
- "activity-stream",
- // Debug version loads dev scripts but noscripts separately loads scripts
- this.activityStreamDebug && !this.privilegedAboutProcessEnabled
- ? "-debug"
- : "",
- this.privilegedAboutProcessEnabled ? "-noscripts" : "",
- ".html",
- ].join("");
+ return "about:tor";
}
get welcomeURL() {
diff --git a/browser/components/preferences/home.inc.xhtml b/browser/components/preferences/home.inc.xhtml
index c348e1cf754b..c37dc5e731f6 100644
--- a/browser/components/preferences/home.inc.xhtml
+++ b/browser/components/preferences/home.inc.xhtml
@@ -33,7 +33,7 @@
class="check-home-page-controlled"
data-preference-related="browser.startup.homepage">
<menupopup>
- <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+ <menuitem value="0" label="&aboutTor.title;" />
<menuitem value="2" data-l10n-id="home-mode-choice-custom" />
<menuitem value="1" data-l10n-id="home-mode-choice-blank" />
</menupopup>
@@ -85,7 +85,7 @@
Preferences so we need to handle setting the pref manually.-->
<menulist id="newTabMode" flex="1" data-preference-related="browser.newtabpage.enabled">
<menupopup>
- <menuitem value="0" data-l10n-id="home-mode-choice-default" />
+ <menuitem value="0" label="&aboutTor.title;" />
<menuitem value="1" data-l10n-id="home-mode-choice-blank" />
</menupopup>
</menulist>
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 10faf11bfecd..2d29b382350d 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -14,7 +14,10 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
-<!DOCTYPE html>
+<!DOCTYPE html [
+<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
+ %aboutTorDTD;
+]>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:html="http://www.w3.org/1999/xhtml"
diff --git a/browser/modules/HomePage.jsm b/browser/modules/HomePage.jsm
index 751e6ebb39b3..01317b9e9754 100644
--- a/browser/modules/HomePage.jsm
+++ b/browser/modules/HomePage.jsm
@@ -21,7 +21,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
});
const kPrefName = "browser.startup.homepage";
-const kDefaultHomePage = "about:home";
+const kDefaultHomePage = "about:tor";
const kExtensionControllerPref =
"browser.startup.homepage_override.extensionControlled";
const kHomePageIgnoreListId = "homepage-urls";
1
0

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

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

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

[Git][tpo/applications/fenix][tor-browser-89.0.0b5-10.5-1] Bug 40165: Announce v2 onion service deprecation on about:tor
by Matthew Finkel (@sysrqb) 25 May '21
by Matthew Finkel (@sysrqb) 25 May '21
25 May '21
Matthew Finkel pushed to branch tor-browser-89.0.0b5-10.5-1 at The Tor Project / Applications / fenix
Commits:
848a34d6 by Matthew Finkel at 2021-05-25T22:33:47+00:00
Bug 40165: Announce v2 onion service deprecation on about:tor
- - - - -
11 changed files:
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt
- + app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TorInfoBannerViewHolder.kt
- app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
- + app/src/main/res/drawable/info_banner_padded_background.xml
- + app/src/main/res/drawable/tor_banner_warning_icon.png
- app/src/main/res/layout/fragment_home.xml
- + app/src/main/res/layout/tor_info_banner.xml
- app/src/main/res/values/colors.xml
Changes:
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
=====================================
@@ -23,6 +23,7 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.NoCollectionsMessageViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.PrivateBrowsingDescriptionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TorBootstrapPagerViewHolder
+import org.mozilla.fenix.home.sessioncontrol.viewholders.TorInfoBannerViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabInCollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TopSitePagerViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.ExperimentDefaultBrowserCardViewHolder
@@ -81,6 +82,7 @@ sealed class AdapterItem(@LayoutRes val viewType: Int) {
}
object PrivateBrowsingDescription : AdapterItem(PrivateBrowsingDescriptionViewHolder.LAYOUT_ID)
+ object TorInfoBanner : AdapterItem(TorInfoBannerViewHolder.LAYOUT_ID)
object NoCollectionsMessage : AdapterItem(NoCollectionsMessageViewHolder.LAYOUT_ID)
object TorBootstrap : AdapterItem(TorBootstrapPagerViewHolder.LAYOUT_ID)
@@ -182,6 +184,10 @@ class SessionControlAdapter(
view,
interactor
)
+ TorInfoBannerViewHolder.LAYOUT_ID -> TorInfoBannerViewHolder(
+ view,
+ interactor
+ )
TorBootstrapPagerViewHolder.LAYOUT_ID -> TorBootstrapPagerViewHolder(
view,
components,
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
=====================================
@@ -94,6 +94,11 @@ interface SessionControlController {
*/
fun handlePrivateBrowsingLearnMoreClicked()
+ /**
+ * @see [TabSessionInteractor.onTorInfoBannerLaunchClicked]
+ */
+ fun handleTorInfoBannerLaunchClicked()
+
/**
* @see [TopSiteInteractor.onRenameTopSiteClicked]
*/
@@ -648,4 +653,12 @@ class DefaultSessionControlController(
override fun handleTorNetworkSettingsClicked() {
openTorNetworkSettings()
}
+
+ override fun handleTorInfoBannerLaunchClicked() {
+ activity.openToBrowserAndLoad(
+ searchTermOrURL = SupportUtils.TOR_INFO_BANNER_URL,
+ newTab = true,
+ from = BrowserDirection.FromHome
+ )
+ }
}
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt
=====================================
@@ -18,6 +18,12 @@ interface TabSessionInteractor {
* "Common myths about private browsing" link in private mode.
*/
fun onPrivateBrowsingLearnMoreClicked()
+
+ /**
+ * Shows the Info Banner web page in a new tab. Called when a user clicks on the
+ * "Learn More" button.
+ */
+ fun onTorInfoBannerLaunchClicked()
}
/**
@@ -381,4 +387,8 @@ class SessionControlInteractor(
override fun onTorBootstrapNetworkSettingsClicked() {
controller.handleTorNetworkSettingsClicked()
}
+
+ override fun onTorInfoBannerLaunchClicked() {
+ controller.handleTorInfoBannerLaunchClicked()
+ }
}
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt
=====================================
@@ -70,7 +70,7 @@ private fun showCollections(
}
}
-private fun privateModeAdapterItems() = listOf(AdapterItem.PrivateBrowsingDescription)
+private fun privateModeAdapterItems() = listOf(AdapterItem.TorInfoBanner)
private fun bootstrapAdapterItems() = listOf(AdapterItem.TorBootstrap)
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TorInfoBannerViewHolder.kt
=====================================
@@ -0,0 +1,40 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.fenix.home.sessioncontrol.viewholders
+
+import android.graphics.Typeface
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.style.StyleSpan
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import kotlinx.android.synthetic.main.tor_info_banner.view.*
+import org.mozilla.fenix.R
+import org.mozilla.fenix.home.sessioncontrol.TabSessionInteractor
+
+class TorInfoBannerViewHolder(
+ view: View,
+ private val interactor: TabSessionInteractor
+) : RecyclerView.ViewHolder(view) {
+
+ init {
+ with(view.info_banner_launch_button) {
+ setOnClickListener {
+ interactor.onTorInfoBannerLaunchClicked()
+ }
+ }
+
+ with(view.info_banner_description) {
+ val spannedString: SpannableString = SpannableString(text)
+ spannedString.setSpan(StyleSpan(Typeface.BOLD), 120, 138,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ setText(spannedString)
+ }
+ }
+
+ companion object {
+ const val LAYOUT_ID = R.layout.tor_info_banner
+ }
+}
=====================================
app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
=====================================
@@ -40,6 +40,7 @@ object SupportUtils {
const val DONATE_URL = "https://donate.torproject.org/"
const val TB_MANUAL_URL = "https://tb-manual.torproject.org/mobile-tor"
const val TOR_RELEASES = "https://www.torproject.org/releases/"
+ const val TOR_INFO_BANNER_URL = "https://support.torproject.org/onionservices/#v2-deprecation"
enum class SumoTopic(internal val topicStr: String) {
FENIX_MOVING("sync-delist"),
=====================================
app/src/main/res/drawable/info_banner_padded_background.xml
=====================================
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/info_banner_padded_background_color">
+ <item
+ android:bottom="6dp"
+ android:top="6dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="4dp" />
+ </shape>
+ </item>
+</ripple>
=====================================
app/src/main/res/drawable/tor_banner_warning_icon.png
=====================================
Binary files /dev/null and b/app/src/main/res/drawable/tor_banner_warning_icon.png differ
=====================================
app/src/main/res/layout/fragment_home.xml
=====================================
@@ -94,7 +94,8 @@
android:textColor="#DEFFFFFF"
android:textSize="40sp"
android:lineSpacingMultiplier="1.1"
- app:layout_scrollFlags="scroll" />
+ app:layout_scrollFlags="scroll"
+ android:visibility="gone" />
</com.google.android.material.appbar.AppBarLayout>
=====================================
app/src/main/res/layout/tor_info_banner.xml
=====================================
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/info_banner_wrapper"
+ style="@style/OnboardingCardLightWithPadding"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@+id/info_banner_header_wrapper"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:importantForAccessibility="no">
+
+ <ImageView
+ android:id="@+id/tor_info_banner_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="32dp"
+ android:layout_marginEnd="10dp"
+ android:adjustViewBounds="true"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAccessibility="no"
+ app:srcCompat="@drawable/tor_banner_warning_icon"/>
+
+ <TextView
+ android:id="@+id/info_banner_header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="none"
+ android:lineSpacingExtra="6dp"
+ android:paddingHorizontal="4dp"
+ android:paddingTop="4dp"
+ android:scrollHorizontally="false"
+ android:textAlignment="viewStart"
+ android:textColor="?primaryText"
+ android:textSize="20sp"
+ android:text="" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/info_banner_description"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="none"
+ android:lineSpacingExtra="6dp"
+ android:paddingHorizontal="4dp"
+ android:paddingTop="4dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/info_banner_header_wrapper"
+ android:scrollHorizontally="false"
+ android:textAlignment="viewStart"
+ android:textColor="?primaryText"
+ android:textSize="16sp"
+ android:text="Tor is ending its support for version 2 (v2) Onion Services, and v2 onion sites have since been deprecated. If you're a site administrator, upgrade to a v3 onion service immediately." />
+
+ <Button
+ style="@style/PositiveButton"
+ android:id="@+id/info_banner_launch_button"
+ android:text="Learn More"
+ android:layout_marginTop="16dp"
+ android:textSize="18dp"
+ android:textColor="@android:color/black"
+ android:background="@drawable/info_banner_padded_background"
+ android:fontFamily="Roboto-Medium"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/info_banner_description" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
=====================================
app/src/main/res/values/colors.xml
=====================================
@@ -425,4 +425,7 @@
<!-- Toolbar menu icon colors -->
<color name="toolbar_menu_transparent">@android:color/transparent</color>
+
+ <!-- Tor -->
+ <color name="info_banner_padded_background_color">#A76FFA</color>
</resources>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/848a34d688072…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/848a34d688072…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix][tor-browser-89.0.0b5-10.5-1] 8 commits: Bug 40002: Add GitLab CI
by Matthew Finkel (@sysrqb) 25 May '21
by Matthew Finkel (@sysrqb) 25 May '21
25 May '21
Matthew Finkel pushed to branch tor-browser-89.0.0b5-10.5-1 at The Tor Project / Applications / fenix
Commits:
993e17f6 by Matthew Finkel at 2021-05-13T15:43:36+02:00
Bug 40002: Add GitLab CI
Pin CI builds to runners with 32GB of RAM to avoid OOM conditions.
- - - - -
00b6b448 by Matthew Finkel at 2021-05-13T15:51:48+02:00
Rename as Tor Browser
Bug 40020: Change applicationId
Bug 40020: Change app name
Bug 40020: Change deeplink scheme
Bug 40020: Change App icons
Bug 40073: Use correct branding on About page
Bug 40088: Use Tor Browser logo in migration screen
- - - - -
32ec5fb8 by Matthew Finkel at 2021-05-13T15:52:01+02:00
Disable features and functionality
Bug 33594: Disable data collection by default (Glean)
Bug 40019: Adjust is disabled on Release when data collection is disabled
Bug 34338: Disable the crash reporter
Bug 40014: Neuter Google Advertising ID
Bug 40018: Disable Push service
Bug 40034: Disable PWA onboading
Bug 40072: Disable Tracking Protection
Bug 40061: Do not show "Send to device" in sharing menu
Bug 40109: Reduce requested permissions
Exclude LOCATION and NETWORK_STATE
Bug 40162: Disable Numbus experiments
- - - - -
0838fe56 by Georg Koppen at 2021-05-13T15:52:03+02:00
Modify build system
Bug 40083: Make locale ordering in BuildConfig deterministic
Bug 40042: Add option do overwrite timestamp in extension version
Bug 40059: Use MOZ_BUILD_DATE for versionCode
At the same time we adapt MOZ_BUILD_DATE to our needs where it is
actually used and not in tor-browser-build. This gives us more
flexibility. See: tor-browser-build#40084.
Bug 40067: Fix reproducibility issue in classes2.dex
We make sure our MOZ_BUILD_DATE gets used as a source for showing date
related information on the Fenix about page.
Bug 40071: Show only supported locales
Bug 40064: Use Gecko Beta for Nightly and Debug variants
Bug 40123: Allow building the instrumented tests apks for variants other than debug
This allows to specify the variant of the instrumented tests via
a `testBuildType` gradle argument. It also applies a workaround for
a R8 issue from https://issuetracker.google.com/issues/140851070.
Bug 40143: Use deterministic date in Test apk
The build config was using Date() when generating the Test apk's
versionName.
- - - - -
163cf2e7 by Matthew Finkel at 2021-05-18T13:41:33+00:00
Add Tor integration and UI
Bug 40001: Start Tor as part of the Fenix initialization
Bug 40028: Implement Tor Service controller
Bug 40028: Integrate Tor Controller into HomeFragment
Bug 40028: Implement Tor connect and logger screens
Bug 40028: Implement Tor Onboarding
Bug 40028: Implement new home screen
Bug 40028: Define bootstrapping events and Quick Start
Bug 40041: Implement Tor Network Settings
Bug 40041: Integrate Tor Network Settings
- - - - -
a7cd2b5e by Alex Catarineu at 2021-05-25T22:12:09+00:00
Modify UI/UX
Bug 40015: Modify Home menu
Bug 40016: Hide unwanted Settings
Bug 40016: Modify Default toolbar menu
Bug 40016: Add Donate settings button
Bug 40016: Move Allow Screenshots under Advanced
Bug 40016: Don't install WebCompat webext
Bug 40016: Don't onboard Search Suggestions
Bug 40094: Do not use MasterPasswordTipProvider in HomeFragment
Bug 40095: Hide "Sign in to sync" in bookmarks
Bug 40031: Hide Mozilla-specific items on About page
Bug 40032: Set usesCleartextTraffic as false
Bug 40063: Do not sort search engines alphabetically
Bug 34378: Port external helper app prompting
With the corresponding android-components patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.
Bug 34403: Disable Normal mode by default
Bug 40087: Implement a switch for english locale spoofing
Bug 40144: Hide Download Manager
Bug 40141: Hide EME site permission
- - - - -
ec6d8363 by Alex Catarineu at 2021-05-25T22:12:09+00:00
Modify Add-on support
Bug 40030: Install HTTPS Everywhere and NoScript addons on startup
HTTPS Everywhere is installed as a builtin extension and NoScript as
a regular AMO addon. To avoid unnecessary I/O we only install NoScript
the first time, and rely on the browser addon updating mechanism for
keeping up with new versions. This is the same behaviour that was
implemented in the Fennec-based Tor Browser, where it was installed
as a "distribution addon", which also only occurred once.
Bug 40062: HTTPS Everywhere is not shown as installed
Also 40070: Consider storing the list of recommended addons
This implements our own AddonsProvider, which loads the list of
available addons from assets instead of fetching it from an
endpoint. In this list, we replace https-everywhere by
our https-everywhere-eff, so that the EFF one is shown as installed
in the addons list and the AMO one is not displayed.
Also, we hide the uninstall button for builtin addons.
Bug 40058: Hide option for disallowing addon in private mode
- - - - -
8b770c08 by Matthew Finkel at 2021-05-25T22:12:10+00:00
Add Security Level UI
Bug 40026: Implement Security Level settings
Bug 40026: Integrate Security Level settings
- - - - -
30 changed files:
- + .gitlab-ci.yml
- app/build.gradle
- app/proguard-rules.pro
- app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt
- − app/src/beta/res/drawable/ic_launcher_foreground.xml
- app/src/beta/res/mipmap-hdpi/ic_launcher.png
- app/src/beta/res/mipmap-mdpi/ic_launcher.png
- app/src/beta/res/mipmap-xhdpi/ic_launcher.png
- app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
- app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
- app/src/beta/res/values/static_strings.xml
- app/src/beta/res/xml/shortcuts.xml
- − app/src/debug/res/drawable/ic_launcher_foreground.xml
- app/src/debug/res/xml/shortcuts.xml
- app/src/main/AndroidManifest.xml
- + app/src/main/assets/allowed_addons.json
- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt
- app/src/main/java/org/mozilla/fenix/FenixApplication.kt
- app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
- app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
- app/src/main/java/org/mozilla/fenix/components/Analytics.kt
- app/src/main/java/org/mozilla/fenix/components/Components.kt
- app/src/main/java/org/mozilla/fenix/components/Core.kt
- + app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt
- + app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- app/src/main/java/org/mozilla/fenix/components/metrics/AdjustMetricsService.kt
- app/src/main/java/org/mozilla/fenix/components/metrics/MetricsUtils.kt
- app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
- app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/e8c43d1bf193…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/e8c43d1bf193…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix][tor-browser-88.1.3-10.5-1] Bug 40165: Announce v2 onion service deprecation on about:tor
by Matthew Finkel (@sysrqb) 25 May '21
by Matthew Finkel (@sysrqb) 25 May '21
25 May '21
Matthew Finkel pushed to branch tor-browser-88.1.3-10.5-1 at The Tor Project / Applications / fenix
Commits:
091f3e3d by Matthew Finkel at 2021-05-25T22:04:26+00:00
Bug 40165: Announce v2 onion service deprecation on about:tor
- - - - -
11 changed files:
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt
- + app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TorInfoBannerViewHolder.kt
- app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
- + app/src/main/res/drawable/info_banner_padded_background.xml
- + app/src/main/res/drawable/tor_banner_warning_icon.png
- app/src/main/res/layout/fragment_home.xml
- + app/src/main/res/layout/tor_info_banner.xml
- app/src/main/res/values/colors.xml
Changes:
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
=====================================
@@ -23,6 +23,7 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.NoCollectionsMessageViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.PrivateBrowsingDescriptionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TorBootstrapPagerViewHolder
+import org.mozilla.fenix.home.sessioncontrol.viewholders.TorInfoBannerViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TabInCollectionViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.TopSitePagerViewHolder
import org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding.OnboardingAutomaticSignInViewHolder
@@ -80,6 +81,7 @@ sealed class AdapterItem(@LayoutRes val viewType: Int) {
}
object PrivateBrowsingDescription : AdapterItem(PrivateBrowsingDescriptionViewHolder.LAYOUT_ID)
+ object TorInfoBanner : AdapterItem(TorInfoBannerViewHolder.LAYOUT_ID)
object NoCollectionsMessage : AdapterItem(NoCollectionsMessageViewHolder.LAYOUT_ID)
object TorBootstrap : AdapterItem(TorBootstrapPagerViewHolder.LAYOUT_ID)
@@ -179,6 +181,10 @@ class SessionControlAdapter(
view,
interactor
)
+ TorInfoBannerViewHolder.LAYOUT_ID -> TorInfoBannerViewHolder(
+ view,
+ interactor
+ )
TorBootstrapPagerViewHolder.LAYOUT_ID -> TorBootstrapPagerViewHolder(
view,
components,
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt
=====================================
@@ -93,6 +93,11 @@ interface SessionControlController {
*/
fun handlePrivateBrowsingLearnMoreClicked()
+ /**
+ * @see [TabSessionInteractor.onTorInfoBannerLaunchClicked]
+ */
+ fun handleTorInfoBannerLaunchClicked()
+
/**
* @see [TopSiteInteractor.onRenameTopSiteClicked]
*/
@@ -620,4 +625,12 @@ class DefaultSessionControlController(
override fun handleTorNetworkSettingsClicked() {
openTorNetworkSettings()
}
+
+ override fun handleTorInfoBannerLaunchClicked() {
+ activity.openToBrowserAndLoad(
+ searchTermOrURL = SupportUtils.TOR_INFO_BANNER_URL,
+ newTab = true,
+ from = BrowserDirection.FromHome
+ )
+ }
}
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt
=====================================
@@ -18,6 +18,12 @@ interface TabSessionInteractor {
* "Common myths about private browsing" link in private mode.
*/
fun onPrivateBrowsingLearnMoreClicked()
+
+ /**
+ * Shows the Info Banner web page in a new tab. Called when a user clicks on the
+ * "Learn More" button.
+ */
+ fun onTorInfoBannerLaunchClicked()
}
/**
@@ -361,4 +367,8 @@ class SessionControlInteractor(
override fun onTorBootstrapNetworkSettingsClicked() {
controller.handleTorNetworkSettingsClicked()
}
+
+ override fun onTorInfoBannerLaunchClicked() {
+ controller.handleTorInfoBannerLaunchClicked()
+ }
}
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt
=====================================
@@ -66,7 +66,7 @@ private fun showCollections(
}
}
-private fun privateModeAdapterItems() = listOf(AdapterItem.PrivateBrowsingDescription)
+private fun privateModeAdapterItems() = listOf(AdapterItem.TorInfoBanner)
private fun bootstrapAdapterItems() = listOf(AdapterItem.TorBootstrap)
=====================================
app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TorInfoBannerViewHolder.kt
=====================================
@@ -0,0 +1,40 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.fenix.home.sessioncontrol.viewholders
+
+import android.graphics.Typeface
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.style.StyleSpan
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import kotlinx.android.synthetic.main.tor_info_banner.view.*
+import org.mozilla.fenix.R
+import org.mozilla.fenix.home.sessioncontrol.TabSessionInteractor
+
+class TorInfoBannerViewHolder(
+ view: View,
+ private val interactor: TabSessionInteractor
+) : RecyclerView.ViewHolder(view) {
+
+ init {
+ with(view.info_banner_launch_button) {
+ setOnClickListener {
+ interactor.onTorInfoBannerLaunchClicked()
+ }
+ }
+
+ with(view.info_banner_description) {
+ val spannedString: SpannableString = SpannableString(text)
+ spannedString.setSpan(StyleSpan(Typeface.BOLD), 120, 138,
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ setText(spannedString)
+ }
+ }
+
+ companion object {
+ const val LAYOUT_ID = R.layout.tor_info_banner
+ }
+}
=====================================
app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
=====================================
@@ -38,6 +38,7 @@ object SupportUtils {
const val DONATE_URL = "https://donate.torproject.org/"
const val TB_MANUAL_URL = "https://tb-manual.torproject.org/mobile-tor"
const val TOR_RELEASES = "https://www.torproject.org/releases/"
+ const val TOR_INFO_BANNER_URL = "https://support.torproject.org/onionservices/#v2-deprecation"
enum class SumoTopic(internal val topicStr: String) {
FENIX_MOVING("sync-delist"),
=====================================
app/src/main/res/drawable/info_banner_padded_background.xml
=====================================
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/info_banner_padded_background_color">
+ <item
+ android:bottom="6dp"
+ android:top="6dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="4dp" />
+ </shape>
+ </item>
+</ripple>
=====================================
app/src/main/res/drawable/tor_banner_warning_icon.png
=====================================
Binary files /dev/null and b/app/src/main/res/drawable/tor_banner_warning_icon.png differ
=====================================
app/src/main/res/layout/fragment_home.xml
=====================================
@@ -94,7 +94,8 @@
android:textColor="#DEFFFFFF"
android:textSize="40sp"
android:lineSpacingMultiplier="1.1"
- app:layout_scrollFlags="scroll" />
+ app:layout_scrollFlags="scroll"
+ android:visibility="gone" />
</com.google.android.material.appbar.AppBarLayout>
=====================================
app/src/main/res/layout/tor_info_banner.xml
=====================================
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/info_banner_wrapper"
+ style="@style/OnboardingCardLightWithPadding"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clipChildren="false"
+ android:clipToPadding="false">
+
+ <LinearLayout
+ android:id="@+id/info_banner_header_wrapper"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:importantForAccessibility="no">
+
+ <ImageView
+ android:id="@+id/tor_info_banner_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="32dp"
+ android:layout_marginEnd="10dp"
+ android:adjustViewBounds="true"
+ android:clickable="false"
+ android:focusable="false"
+ android:importantForAccessibility="no"
+ app:srcCompat="@drawable/tor_banner_warning_icon"/>
+
+ <TextView
+ android:id="@+id/info_banner_header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="none"
+ android:lineSpacingExtra="6dp"
+ android:paddingHorizontal="4dp"
+ android:paddingTop="4dp"
+ android:scrollHorizontally="false"
+ android:textAlignment="viewStart"
+ android:textColor="?primaryText"
+ android:textSize="20sp"
+ android:text="" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/info_banner_description"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="none"
+ android:lineSpacingExtra="6dp"
+ android:paddingHorizontal="4dp"
+ android:paddingTop="4dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/info_banner_header_wrapper"
+ android:scrollHorizontally="false"
+ android:textAlignment="viewStart"
+ android:textColor="?primaryText"
+ android:textSize="16sp"
+ android:text="Tor is ending its support for version 2 (v2) Onion Services, and v2 onion sites have since been deprecated. If you're a site administrator, upgrade to a v3 onion service immediately." />
+
+ <Button
+ style="@style/PositiveButton"
+ android:id="@+id/info_banner_launch_button"
+ android:text="Learn More"
+ android:layout_marginTop="16dp"
+ android:textSize="18dp"
+ android:textColor="@android:color/black"
+ android:background="@drawable/info_banner_padded_background"
+ android:fontFamily="Roboto-Medium"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/info_banner_description" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
=====================================
app/src/main/res/values/colors.xml
=====================================
@@ -425,4 +425,7 @@
<!-- Toolbar menu icon colors -->
<color name="toolbar_menu_transparent">@android:color/transparent</color>
+
+ <!-- Tor -->
+ <color name="info_banner_padded_background_color">#A76FFA</color>
</resources>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/091f3e3dea350…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/091f3e3dea350…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser-build/master] Update Tor's git_hash to refer to main.
by boklm@torproject.org 25 May '21
by boklm@torproject.org 25 May '21
25 May '21
commit b17296dcddb9c40de9934a806a2a5137eae9a127
Author: Alexander Færøy <ahf(a)torproject.org>
Date: Tue May 25 13:01:32 2021 +0000
Update Tor's git_hash to refer to main.
See: tpo/core/team#2
Fixes: tpo/applications/tor-browser-build#40280
---
projects/tor/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/tor/config b/projects/tor/config
index 05d5c6d..a469dd8 100644
--- a/projects/tor/config
+++ b/projects/tor/config
@@ -19,7 +19,7 @@ var:
targets:
nightly:
version: '[% c("abbrev") %]'
- git_hash: master
+ git_hash: main
tag_gpg_id: 0
linux-i686:
1
0

[tor-browser/tor-browser-88.0.1-10.5-1] Bug 40432: Prevent probing installed applications
by sysrqb@torproject.org 19 May '21
by sysrqb@torproject.org 19 May '21
19 May '21
commit 3aa43567266170c53c657a18e0836f16bd4d307d
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 18:09:09 2021 +0000
Bug 40432: Prevent probing installed applications
---
.../exthandler/nsExternalHelperAppService.cpp | 30 ++++++++++++++++++----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp
index e1d95acd969d..e6c1084adf91 100644
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -1049,8 +1049,33 @@ nsresult nsExternalHelperAppService::GetFileTokenForPath(
//////////////////////////////////////////////////////////////////////////////////////////////////////
// begin external protocol service default implementation...
//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+static const char kExternalProtocolPrefPrefix[] =
+ "network.protocol-handler.external.";
+static const char kExternalProtocolDefaultPref[] =
+ "network.protocol-handler.external-default";
+
NS_IMETHODIMP nsExternalHelperAppService::ExternalProtocolHandlerExists(
const char* aProtocolScheme, bool* aHandlerExists) {
+
+ // Replicate the same check performed in LoadURI.
+ // Deny load if the prefs say to do so
+ nsAutoCString externalPref(kExternalProtocolPrefPrefix);
+ externalPref += aProtocolScheme;
+ bool allowLoad = false;
+ *aHandlerExists = false;
+ if (NS_FAILED(Preferences::GetBool(externalPref.get(), &allowLoad))) {
+ // no scheme-specific value, check the default
+ if (NS_FAILED(
+ Preferences::GetBool(kExternalProtocolDefaultPref, &allowLoad))) {
+ return NS_OK; // missing default pref
+ }
+ }
+
+ if (!allowLoad) {
+ return NS_OK; // explicitly denied
+ }
+
nsCOMPtr<nsIHandlerInfo> handlerInfo;
nsresult rv = GetProtocolHandlerInfo(nsDependentCString(aProtocolScheme),
getter_AddRefs(handlerInfo));
@@ -1093,11 +1118,6 @@ NS_IMETHODIMP nsExternalHelperAppService::IsExposedProtocol(
return NS_OK;
}
-static const char kExternalProtocolPrefPrefix[] =
- "network.protocol-handler.external.";
-static const char kExternalProtocolDefaultPref[] =
- "network.protocol-handler.external-default";
-
NS_IMETHODIMP
nsExternalHelperAppService::LoadURI(nsIURI* aURI,
nsIPrincipal* aTriggeringPrincipal,
1
0

[tor-browser/tor-browser-78.10.0esr-10.5-1] Bug 40432: Prevent probing installed applications
by sysrqb@torproject.org 19 May '21
by sysrqb@torproject.org 19 May '21
19 May '21
commit 6eceb1111179a348cc5765208cb19ab5d0346292
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 18:09:09 2021 +0000
Bug 40432: Prevent probing installed applications
---
.../exthandler/nsExternalHelperAppService.cpp | 30 ++++++++++++++++++----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp
index 0dcc1d3ed6ab..7ff9c5b626a3 100644
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -1002,8 +1002,33 @@ nsresult nsExternalHelperAppService::GetFileTokenForPath(
//////////////////////////////////////////////////////////////////////////////////////////////////////
// begin external protocol service default implementation...
//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+static const char kExternalProtocolPrefPrefix[] =
+ "network.protocol-handler.external.";
+static const char kExternalProtocolDefaultPref[] =
+ "network.protocol-handler.external-default";
+
NS_IMETHODIMP nsExternalHelperAppService::ExternalProtocolHandlerExists(
const char* aProtocolScheme, bool* aHandlerExists) {
+
+ // Replicate the same check performed in LoadURI.
+ // Deny load if the prefs say to do so
+ nsAutoCString externalPref(kExternalProtocolPrefPrefix);
+ externalPref += aProtocolScheme;
+ bool allowLoad = false;
+ *aHandlerExists = false;
+ if (NS_FAILED(Preferences::GetBool(externalPref.get(), &allowLoad))) {
+ // no scheme-specific value, check the default
+ if (NS_FAILED(
+ Preferences::GetBool(kExternalProtocolDefaultPref, &allowLoad))) {
+ return NS_OK; // missing default pref
+ }
+ }
+
+ if (!allowLoad) {
+ return NS_OK; // explicitly denied
+ }
+
nsCOMPtr<nsIHandlerInfo> handlerInfo;
nsresult rv = GetProtocolHandlerInfo(nsDependentCString(aProtocolScheme),
getter_AddRefs(handlerInfo));
@@ -1046,11 +1071,6 @@ NS_IMETHODIMP nsExternalHelperAppService::IsExposedProtocol(
return NS_OK;
}
-static const char kExternalProtocolPrefPrefix[] =
- "network.protocol-handler.external.";
-static const char kExternalProtocolDefaultPref[] =
- "network.protocol-handler.external-default";
-
NS_IMETHODIMP
nsExternalHelperAppService::LoadURI(nsIURI* aURI,
nsIPrincipal* aTriggeringPrincipal,
1
0

[tor-browser-build/master] Bug 40109: Add a repackaging script for linux64 Tor Browser local builds
by boklm@torproject.org 19 May '21
by boklm@torproject.org 19 May '21
19 May '21
commit 0a9c964b9e6f5681c84fda57f1715702e49b1fbc
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Feb 24 18:25:09 2021 +0100
Bug 40109: Add a repackaging script for linux64 Tor Browser local builds
---
tools/.gitignore | 1 +
tools/repackage_browser.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/tools/.gitignore b/tools/.gitignore
new file mode 100644
index 0000000..69082a7
--- /dev/null
+++ b/tools/.gitignore
@@ -0,0 +1 @@
+_repackaged
diff --git a/tools/repackage_browser.sh b/tools/repackage_browser.sh
new file mode 100755
index 0000000..4787673
--- /dev/null
+++ b/tools/repackage_browser.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+# This script allows you to repackage a Tor Browser bundle using an
+# obj-x86_64-pc-linux-gnu directory from a local tor-browser.git build.
+#
+# This script will download the current Tor Browser version (using
+# var/torbrowser_version from rbm config, or an optional second argument)
+# and repackage it with the specified obj directory.
+#
+# The new repackaged bundle can be found in the _repackaged directory.
+
+set -e
+
+display_usage() {
+ echo -e "\\nUsage: $0 firefox_obj_path [torbrowser-version]\\n"
+}
+if [ $# -lt 1 ] || [ $# -gt 2 ]
+then
+ display_usage
+ exit 1
+fi
+
+DIRNAME="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+OBJ_PATH=$1
+if [ $# -eq 2 ]
+then
+ TOR_VERSION="$2"
+else
+ TOR_VERSION=$("$DIRNAME"/../rbm/rbm showconf tor-browser var/torbrowser_version)
+fi
+TOR_FILENAME=tor-browser-linux64-${TOR_VERSION}_en-US.tar.xz
+TOR_BROWSER_URL=https://dist.torproject.org/torbrowser/"${TOR_VERSION}"/"${TOR_FILENAME}"
+TMPDIR="$(mktemp -d)"
+
+(
+cd "$TMPDIR"
+wget "$TOR_BROWSER_URL"
+wget "$TOR_BROWSER_URL".asc
+gpg --no-default-keyring --keyring "$DIRNAME"/../keyring/torbrowser.gpg --verify "${TOR_FILENAME}".asc "${TOR_FILENAME}"
+
+# From projects/firefox/build: replace firefox binary by the wrapper and strip libraries/binaries
+tar xf "${TOR_FILENAME}"
+cp -r "${OBJ_PATH}"/dist/firefox .
+rm firefox/firefox-bin
+mv firefox/firefox firefox/firefox.real
+for LIB in firefox/*.so firefox/gtk2/*.so firefox/firefox.real firefox/plugin-container firefox/updater
+do
+ strip "$LIB"
+done
+
+# Repackage https-everywhere extension
+mkdir _omni/
+unzip tor-browser_en-US/Browser/omni.ja -d _omni/
+cd _omni/
+zip -Xmr ../firefox/omni.ja chrome/torbutton/content/extensions/https-everywhere/
+cd ..
+rm -rf _omni/
+
+# Overwrite extracted tor-browser with locally built files and move to _repackaged folder
+cp -r firefox/* tor-browser_en-US/Browser
+rm -rf firefox "${TOR_FILENAME}"
+REPACKAGED_DIR="$DIRNAME"/_repackaged/
+mkdir -p "$REPACKAGED_DIR"
+mv tor-browser_en-US "$REPACKAGED_DIR"/tor-browser-"$(date '+%Y%m%d%H%M%S')"
+rm -rf "$TMPDIR"
+)
1
0

[tor-browser-bundle-testsuite/master] Bug 40021: Archive old nightly builds on tb-build-01
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit e7fcf4a4722c88f52069bf2dea6c7feaceba173c
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Tue Mar 23 17:18:07 2021 +0100
Bug 40021: Archive old nightly builds on tb-build-01
---
tools/tb-build-01-start-nightly-build | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/tools/tb-build-01-start-nightly-build b/tools/tb-build-01-start-nightly-build
index 6a37459..1d693e0 100755
--- a/tools/tb-build-01-start-nightly-build
+++ b/tools/tb-build-01-start-nightly-build
@@ -1,10 +1,41 @@
#!/bin/bash
set -e
+today_version=$(date '+tbb-nightly.%Y.%m.%d')
+
cd /home/tb-builder/tor-browser-bundle-testsuite
export RBM_NO_DEBUG=1
./tbb-testsuite --config=tb-build-01.torproject.org "$@"
-/home/tb-builder/tor-browser-bundle-testsuite/clones/tor-browser-build/tools/prune-old-builds --days 1 --weeks 0 --months 0 ~/nightly-builds/tor-browser-builds
+
+# Archive today's build
+archive_dir=~/tor-browser-builds-archive/"$today_version"
+if ! test -d "$archive_dir"
+then
+ mkdir -p "$archive_dir"
+ for dir in ~/nightly-builds/tor-browser-builds/"$today_version"/*
+ do
+ test -d "$dir" || continue
+ dname=$archive_dir/$(basename "$dir")
+ mkdir -p "$dname"
+ test -d "$dir/logs" && cp -a "$dir/logs" "$dname"
+ find "$dir" -maxdepth 1 \( \
+ -name '*.txt' \
+ -o -name '*.asc' \
+ -o -name 'torbrowser-install-*_en-US.exe' \
+ -o -name 'TorBrowser-*_en-US.dmg' \
+ -o -name 'tor-browser-linux*_en-US.tar.xz' \
+ -o -name '*-multi-qa.apk' \
+ \) \
+ -a -execdir cp -a {} "$dname" \;
+ done
+ /home/tb-builder/tor-browser-bundle-testsuite/clones/tor-browser-build/tools/prune-old-builds --days 100 --weeks 30 --months 12 ~/tor-browser-builds-archive
+fi
+
+# Only clean previous builds if we use more than 20GB
+builds_size=$(du -s ~/nightly-builds/tor-browser-builds | cut -f 1)
+test "$builds_size" -gt 20000000 && \
+ /home/tb-builder/tor-browser-bundle-testsuite/clones/tor-browser-build/tools/prune-old-builds --days 1 --weeks 0 --months 0 ~/nightly-builds/tor-browser-builds
+
# sleep for 5m to give time to previous rsync to finish
sleep 5m
/home/tb-builder/tor-browser-bundle-testsuite/tools/rsync-to-tbb-nightlies-master
1
0

[tor-browser/tor-browser-78.10.0esr-10.5-1] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit 5ae4c9537f2a8ec022610ee39a7ee2876915edba
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 19:42:39 2021 +0000
fixup! Bug 10760: Integrate TorButton to TorBrowser core
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 5264bddf8bc7..35d206d3cf47 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 5264bddf8bc71cbb4e88921b55e7b95fa4522b69
+Subproject commit 35d206d3cf47edc4936a00cb00d92a6b7cb66b25
1
0
commit 35d206d3cf47edc4936a00cb00d92a6b7cb66b25
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 19:41:16 2021 +0000
Translations update
---
chrome/locale/ar/torbutton.properties | 10 ++++
chrome/locale/bn-BD/torbutton.properties | 10 ++++
chrome/locale/ca/torbutton.properties | 10 ++++
chrome/locale/cs/torbutton.properties | 10 ++++
chrome/locale/da/torbutton.properties | 10 ++++
chrome/locale/de/torbutton.properties | 10 ++++
chrome/locale/el/torbutton.properties | 28 ++++++----
chrome/locale/es-AR/torbutton.properties | 10 ++++
chrome/locale/es-ES/torbutton.properties | 10 ++++
chrome/locale/eu/torbutton.properties | 10 ++++
chrome/locale/fa/torbutton.properties | 10 ++++
chrome/locale/fr/torbutton.properties | 10 ++++
chrome/locale/ga-IE/torbutton.properties | 10 ++++
chrome/locale/he/browserOnboarding.properties | 2 +-
chrome/locale/he/torbutton.properties | 18 +++++--
chrome/locale/hu/torbutton.properties | 10 ++++
chrome/locale/id/torbutton.properties | 10 ++++
chrome/locale/is/torbutton.properties | 10 ++++
chrome/locale/it/torbutton.properties | 10 ++++
chrome/locale/ja/torbutton.properties | 10 ++++
chrome/locale/ka/torbutton.properties | 10 ++++
chrome/locale/ko/torbutton.properties | 10 ++++
chrome/locale/lt/torbutton.properties | 10 ++++
chrome/locale/mk/torbutton.properties | 10 ++++
chrome/locale/ms/torbutton.properties | 10 ++++
chrome/locale/my/aboutTor.dtd | 2 +-
chrome/locale/my/browserOnboarding.properties | 6 +--
chrome/locale/my/torbutton.dtd | 2 +-
chrome/locale/my/torbutton.properties | 12 ++++-
chrome/locale/nb-NO/torbutton.properties | 10 ++++
chrome/locale/nl/torbutton.properties | 10 ++++
chrome/locale/pl/torbutton.dtd | 4 +-
chrome/locale/pl/torbutton.properties | 76 +++++++++++++++------------
chrome/locale/pt-BR/torbutton.properties | 10 ++++
chrome/locale/ro/torbutton.properties | 10 ++++
chrome/locale/ru/torbutton.properties | 10 ++++
chrome/locale/sv-SE/aboutTor.dtd | 2 +-
chrome/locale/sv-SE/brand.dtd | 6 +--
chrome/locale/sv-SE/torbutton.dtd | 22 ++++----
chrome/locale/sv-SE/torbutton.properties | 16 ++++--
chrome/locale/th/torbutton.properties | 10 ++++
chrome/locale/tr/aboutTor.dtd | 2 +-
chrome/locale/tr/torbutton.properties | 10 ++++
chrome/locale/vi/torbutton.properties | 10 ++++
chrome/locale/zh-CN/torbutton.properties | 10 ++++
chrome/locale/zh-TW/torbutton.properties | 10 ++++
46 files changed, 444 insertions(+), 74 deletions(-)
diff --git a/chrome/locale/ar/torbutton.properties b/chrome/locale/ar/torbutton.properties
index 2e4927ea..5833e548 100644
--- a/chrome/locale/ar/torbutton.properties
+++ b/chrome/locale/ar/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=دائماً
onionLocation.askEverytime=إسأل كل مرة
onionLocation.prioritizeOnionsDescription=إعطاء الأولوية لمواقع .onion إذا توفرت
onionLocation.onionServicesTitle=خدمات البصلة
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=تم نسخ عنوان العملة المشفرة (٪ S) من موقع ويب غير آمن. كان من الممكن تعديله.
+cryptoSafetyPrompt.whatCanHeading=ماذا يمكنك أن تفعل بهذا الشأن?
+cryptoSafetyPrompt.whatCanBody=يمكنك محاولة إعادة الاتصال بدائرة جديدة لإنشاء اتصال آمن، أو قبول المخاطرة واستبعاد هذا التحذير.
+cryptoSafetyPrompt.learnMore=تعرف على المزيد
+cryptoSafetyPrompt.primaryAction=إعادة تحميل علامة التبويب بدائرة جديدة
+cryptoSafetyPrompt.primaryActionAccessKey=ق
+cryptoSafetyPrompt.secondaryAction=رفض التحذير
+cryptoSafetyPrompt.secondaryActionAccessKey=ب
diff --git a/chrome/locale/bn-BD/torbutton.properties b/chrome/locale/bn-BD/torbutton.properties
index 78b6e903..76379bc6 100644
--- a/chrome/locale/bn-BD/torbutton.properties
+++ b/chrome/locale/bn-BD/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Always
onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=ওনিওন সেবা
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=আরও জানুন
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ca/torbutton.properties b/chrome/locale/ca/torbutton.properties
index d2b65db4..f92e627e 100644
--- a/chrome/locale/ca/torbutton.properties
+++ b/chrome/locale/ca/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Sempre
onionLocation.askEverytime=Demana-ho cada vegada
onionLocation.prioritizeOnionsDescription=Prioritza els llocs .onion si se'n coneixen.
onionLocation.onionServicesTitle=Serveis Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Més informació
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/cs/torbutton.properties b/chrome/locale/cs/torbutton.properties
index 28ff96e6..c781906a 100644
--- a/chrome/locale/cs/torbutton.properties
+++ b/chrome/locale/cs/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Vždy
onionLocation.askEverytime=Ptát se vždy
onionLocation.prioritizeOnionsDescription=Upřednostňovat známé .onion stránky.
onionLocation.onionServicesTitle=Služby Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Adresa kryptoměny (%S) byla zkopírována z nezabezpečené webové stránky. Mohla být upravena.
+cryptoSafetyPrompt.whatCanHeading=Co s tím můžete dělat?
+cryptoSafetyPrompt.whatCanBody=Můžete se zkusit znovu připojit pomocí nového okruhu, abyste navázali bezpečné připojení, nebo přijmout riziko a toto varování odmítnout.
+cryptoSafetyPrompt.learnMore=Zjistit více
+cryptoSafetyPrompt.primaryAction=Znovu načíst tab s novým okruhem
+cryptoSafetyPrompt.primaryActionAccessKey=O
+cryptoSafetyPrompt.secondaryAction=Odmítnout varování
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/da/torbutton.properties b/chrome/locale/da/torbutton.properties
index d7023127..52fb9ea9 100644
--- a/chrome/locale/da/torbutton.properties
+++ b/chrome/locale/da/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Altid
onionLocation.askEverytime=Spørg hver gang
onionLocation.prioritizeOnionsDescription=Prioriter .onion-steder når de kendes.
onionLocation.onionServicesTitle=Oniontjenester
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Lær mere
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=B
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/de/torbutton.properties b/chrome/locale/de/torbutton.properties
index 2554e0b7..d2956d75 100644
--- a/chrome/locale/de/torbutton.properties
+++ b/chrome/locale/de/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Immer
onionLocation.askEverytime=Jedes Mal nachfragen
onionLocation.prioritizeOnionsDescription=Priorisiere .onion-Sites, wenn sie bekannt sind.
onionLocation.onionServicesTitle=Onion-Dienste
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Eine Kryptowährungsadresse (%S) wurde von einer unsicheren Website kopiert. Sie könnte verändert worden sein.
+cryptoSafetyPrompt.whatCanHeading=Was kannst du dagegen tun?
+cryptoSafetyPrompt.whatCanBody=Du kannst versuchen, eine neue Verbindung mit einem neuen Kanal herzustellen, um eine sichere Verbindung herzustellen, oder das Risiko annehmen und diese Warnung ignorieren.
+cryptoSafetyPrompt.learnMore=Mehr erfahren
+cryptoSafetyPrompt.primaryAction=Tab mit einem neuen Kanal neu laden
+cryptoSafetyPrompt.primaryActionAccessKey=E
+cryptoSafetyPrompt.secondaryAction=Warnung ignorieren
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/el/torbutton.properties b/chrome/locale/el/torbutton.properties
index 915ded9d..56eb6492 100644
--- a/chrome/locale/el/torbutton.properties
+++ b/chrome/locale/el/torbutton.properties
@@ -69,42 +69,42 @@ onionServices.errorPage.onionSite=Onion σελίδα
onionServices.descNotFound.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
onionServices.descNotFound.header=Η σελίδα Onion δεν βρέθηκε
onionServices.descNotFound=Η πιο πιθανή αιτία είναι ότι η σελίδα onion είναι εκτός σύνδεσης. Επικοινωνήστε με τον διαχειριστή της σελίδας.
-onionServices.descNotFound.longDescription=Details: %S — The requested onion service descriptor can't be found on the hashring and therefore the service is not reachable by the client.
+onionServices.descNotFound.longDescription=Λεπτομέρειες:% S - Ο ζητούμενος περιγραφέας υπηρεσίας onion δεν μπορεί να βρεθεί στον κατακερματισμό και επομένως η υπηρεσία δεν είναι προσβάσιμη από τον πελάτη.
# Tor SOCKS error 0xF1:
onionServices.descInvalid.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
onionServices.descInvalid.header=Η σελίδα Onion δεν είναι προσπελάσιμη
onionServices.descInvalid=Η σελίδα Onion δεν είναι προσπελάσιμη λόγω εσωτερικού σφάλματος.
-onionServices.descInvalid.longDescription=Details: %S — The requested onion service descriptor can't be parsed or signature validation failed.
+onionServices.descInvalid.longDescription=Λεπτομέρειες:% S - Δεν είναι δυνατή η ανάλυση του ζητούμενου περιγραφέα υπηρεσίας κρεμμυδιού ή η επικύρωση υπογραφής απέτυχε.
# Tor SOCKS error 0xF2:
onionServices.introFailed.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
onionServices.introFailed.header=Η σελίδα Onion αποσυνδέθηκε
onionServices.introFailed=Η πιο πιθανή αιτία είναι ότι η σελίδα onion είναι εκτός σύνδεσης. Επικοινωνήστε με τον διαχειριστή της σελίδας.
-onionServices.introFailed.longDescription=Details: %S — Introduction failed, which means that the descriptor was found but the service is no longer connected to the introduction point. It is likely that the service has changed its descriptor or that it is not running.
+onionServices.introFailed.longDescription=Λεπτομέρειες:% S - Η εισαγωγή απέτυχε, πράγμα που σημαίνει ότι βρέθηκε ο περιγραφέας, αλλά η υπηρεσία δεν είναι πλέον συνδεδεμένη με το σημείο εισαγωγής. Είναι πιθανό ότι η υπηρεσία έχει αλλάξει την περιγραφή της ή ότι δεν εκτελείται.
# Tor SOCKS error 0xF3:
onionServices.rendezvousFailed.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
onionServices.rendezvousFailed.header=Αδυναμία σύνδεσης στη σελίδα Onion
onionServices.rendezvousFailed=Η σελίδα onion είναι απασχολημένη ή το δίκτυο Tor είναι υπερφορτωμένο. Προσπαθήστε ξανά αργότερα.
-onionServices.rendezvousFailed.longDescription=Details: %S — The client failed to rendezvous with the service, which means that the client was unable to finalize the connection.
+onionServices.rendezvousFailed.longDescription=Λεπτομέρειες:% S - Ο πελάτης απέτυχε να συναντηθεί με την υπηρεσία, πράγμα που σημαίνει ότι ο πελάτης δεν μπόρεσε να ολοκληρώσει τη σύνδεση.
# Tor SOCKS error 0xF4:
onionServices.clientAuthMissing.pageTitle=Απαιτείται εξουσιοδότηση
onionServices.clientAuthMissing.header=Η σελίδα onion απαιτεί εξουσιοδότηση
onionServices.clientAuthMissing=Η πρόσβαση στη σελίδα onion χρειάζεται ένα κλειδί, αλλά δεν δόθηκε κανένα.
-onionServices.clientAuthMissing.longDescription=Details: %S — The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing.
+onionServices.clientAuthMissing.longDescription=Details: %S - Ο πελάτης έκανε λήψη του ζητούμενου περιγραφέα υπηρεσίας κρεμμυδιού, αλλά δεν μπόρεσε να αποκρυπτογραφήσει το περιεχόμενό του επειδή λείπουν οι πληροφορίες εξουσιοδότησης πελάτη.
# Tor SOCKS error 0xF5:
onionServices.clientAuthIncorrect.pageTitle=Αποτυχία εξουσιοδότησης
onionServices.clientAuthIncorrect.header=Αποτυχία εξουσιοδότησης σελίδας onion
onionServices.clientAuthIncorrect=Το κλειδί που δόθηκε δεν είναι σωστό ή έχει ανακληθεί. Επικοινωνήστε με τον διαχειριστή της σελίδας onion.
-onionServices.clientAuthIncorrect.longDescription=Details: %S — The client was able to download the requested onion service descriptor but was unable to decrypt its content using the provided client authorization information. This may mean that access has been revoked.
+onionServices.clientAuthIncorrect.longDescription=Details: %S - Ο πελάτης μπόρεσε να πραγματοποιήσει λήψη του ζητούμενου περιγραφέα υπηρεσίας onion , αλλά δεν μπόρεσε να αποκρυπτογραφήσει το περιεχόμενό του χρησιμοποιώντας τις παρεχόμενες πληροφορίες εξουσιοδότησης πελάτη. Αυτό μπορεί να σημαίνει ότι η πρόσβαση έχει ανακληθεί.
# Tor SOCKS error 0xF6:
onionServices.badAddress.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
onionServices.badAddress.header=Άκυρη διεύθυνση σελίδας onion
onionServices.badAddress=Η διεύθυνση της σελίδας onion που καταχωρήθηκε δεν είναι έγκυρη. Παρακαλώ ελέγξτε ότι την έχετε εισάγει σωστά.
-onionServices.badAddress.longDescription=Details: %S — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid.
+onionServices.badAddress.longDescription=Details: %S - Η παρεχόμενη διεύθυνση .onion δεν είναι έγκυρη. Αυτό το σφάλμα επιστρέφεται για έναν από τους ακόλουθους λόγους: η διεύθυνση ελέγχου δεν ταιριάζει, το δημόσιο κλειδί ed25519 δεν είναι έγκυρο ή η κωδικοποίηση δεν είναι έγκυρη.
# Tor SOCKS error 0xF7:
onionServices.introTimedOut.pageTitle=Σφάλμα φόρτωσης σελίδας Onion
-onionServices.introTimedOut.header=Onionsite Circuit Creation Timed Out
+onionServices.introTimedOut.header=Εληξε ο χρόνος Onionsite Circuit Creation
onionServices.introTimedOut=Αποτυχία σύνδεσης στη σελίδα onion, πιθανώς εξ' αιτίας κακής σύνδεσης στο δίκτυο.
-onionServices.introTimedOut.longDescription=Details: %S — The connection to the requested onion service timed out while trying to build the rendezvous circuit.
+onionServices.introTimedOut.longDescription=Λεπτομέριες: %S -Η σύνδεση με την ζητούμενη onion service έληξε ενώ προσπαθούσατε να δημιουργήσετε το ραντεβού.
#
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
onionServices.authPrompt.description2=Αίτημα εξουσιοδότησης από %S.
@@ -138,3 +138,13 @@ onionLocation.always=Πάντα
onionLocation.askEverytime=Να ερωτώμαι κάθε φορά
onionLocation.prioritizeOnionsDescription=Να δίνεται προτεραιότητα σε σελίδες .onion όταν είναι γνωστές.
onionLocation.onionServicesTitle=Υπηρεσίες Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Μάθετε περισσότερα
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/es-AR/torbutton.properties b/chrome/locale/es-AR/torbutton.properties
index 70427f36..47411582 100644
--- a/chrome/locale/es-AR/torbutton.properties
+++ b/chrome/locale/es-AR/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Siempre
onionLocation.askEverytime=Preguntá cuando quieras
onionLocation.prioritizeOnionsDescription=Priorizat sitios .onion cuando sean conocidos.
onionLocation.onionServicesTitle=Servicios Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Una dirección de criptomoneda (%S) ha sido copiada desde un sitio web inseguro. Podría haber sido modificada.
+cryptoSafetyPrompt.whatCanHeading= ¿Qué podés hacer acerca de eso?
+cryptoSafetyPrompt.whatCanBody=Podés intentar reconectar con un circuito nuevo para establecer una conexión segura, o aceptar el riesgo e ignorar esta advertencia.
+cryptoSafetyPrompt.learnMore=Aprendé más
+cryptoSafetyPrompt.primaryAction=Recargar pestaña con un Nuevo Circuito
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Ignorar advertencia
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/es-ES/torbutton.properties b/chrome/locale/es-ES/torbutton.properties
index 54a91b52..8e3a1b6b 100644
--- a/chrome/locale/es-ES/torbutton.properties
+++ b/chrome/locale/es-ES/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Siempre
onionLocation.askEverytime=Preguntar siempre
onionLocation.prioritizeOnionsDescription=Priorizar los sitios .onion cuando se conozcan.
onionLocation.onionServicesTitle=Servicios cebolla
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Se ha copiado de un sitio web inseguro una dirección de criptomoneda (%S). Podría haber sido modificada.
+cryptoSafetyPrompt.whatCanHeading=¿Qué puedes hacer?
+cryptoSafetyPrompt.whatCanBody=Puedes conectar con un nuevo circuito para establecer una conexión segura, o aceptar el riesgo y descartar esta advertencia.
+cryptoSafetyPrompt.learnMore=Aprende más
+cryptoSafetyPrompt.primaryAction=Recargar Tab con un nuevo circuito
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Desestimar la advertencia
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/eu/torbutton.properties b/chrome/locale/eu/torbutton.properties
index 55179929..c109d0fb 100644
--- a/chrome/locale/eu/torbutton.properties
+++ b/chrome/locale/eu/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Always
onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=Onion zerbitzuak
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Gehiago jakin
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/fa/torbutton.properties b/chrome/locale/fa/torbutton.properties
index 3f574956..9f1d5793 100644
--- a/chrome/locale/fa/torbutton.properties
+++ b/chrome/locale/fa/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=همیشه
onionLocation.askEverytime=هر بار بپرس
onionLocation.prioritizeOnionsDescription=سایتهای .onion را در صورت شناخت در اولویت قرار بده.
onionLocation.onionServicesTitle=خدمات پیازی
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=اطلاعات بیشتر
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/fr/torbutton.properties b/chrome/locale/fr/torbutton.properties
index 4d9a4b21..aa1e41f7 100644
--- a/chrome/locale/fr/torbutton.properties
+++ b/chrome/locale/fr/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Toujours
onionLocation.askEverytime=Toujours demander
onionLocation.prioritizeOnionsDescription=Prioriser les sites .onion s’ils sont connus
onionLocation.onionServicesTitle=Services onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Une adresse de cryptomonnaie (%S) a été copiée d’un site Web non sécurisé. Elle pourrait avoir été modifiée.
+cryptoSafetyPrompt.whatCanHeading=Que pouvez-vous y faire ?
+cryptoSafetyPrompt.whatCanBody=Vous pouvez essayer de vous reconnecter avec un nouveau circuit afin d’établir une connexion sécurisée ou accepter le risque et ignorer cet avertissement.
+cryptoSafetyPrompt.learnMore=En apprendre davantage
+cryptoSafetyPrompt.primaryAction=Recharger l’onglet avec un nouveau circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Ignorer l’avertissement
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ga-IE/torbutton.properties b/chrome/locale/ga-IE/torbutton.properties
index fa769032..1f1c08fb 100644
--- a/chrome/locale/ga-IE/torbutton.properties
+++ b/chrome/locale/ga-IE/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=I gcónaí
onionLocation.askEverytime=Fiafraigh díom i gcónaí
onionLocation.prioritizeOnionsDescription=Tabhair tús áite do shuímh onion nuair is féidir.
onionLocation.onionServicesTitle=Seirbhísí Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Tuilleadh eolais
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/he/browserOnboarding.properties b/chrome/locale/he/browserOnboarding.properties
index 3f448dfc..2f0949d1 100644
--- a/chrome/locale/he/browserOnboarding.properties
+++ b/chrome/locale/he/browserOnboarding.properties
@@ -34,7 +34,7 @@ onboarding.tour-tor-security-level.next-button=לך אל עצות חוויה
onboarding.tour-tor-expect-differences=עצות חוויה
onboarding.tour-tor-expect-differences.title=צפה למספר הבדלים.
-onboarding.tour-tor-expect-differences.description=עם כל המאפיינים של האבטחה והפרטיות המסופקים ע״י Tor, חוויתך בעת גלישה באינטרנט עשויה להיות מעט שונה. דברים עשויים להיות מעט איטיים יותר, ובהסתמכות על רמת האבטחה שלך, יסודות מסוימים עשויים לא לעבוד או להיטען. ייתכן שתתבקש להוכיח שאתה אנושי ולא רובוט.
+onboarding.tour-tor-expect-differences.description=עם כל המאפיינים של האבטחה והפרטיות המסופקים ע״י Tor, חוויתך בזמן גלישה באינטרנט עשויה להיות מעט שונה. דברים עשויים להיות מעט איטיים יותר, ובהסתמכות על רמת האבטחה שלך, יסודות מסוימים עשויים לא לעבוד או להיטען. ייתכן שתתבקש להוכיח שאתה אנושי ולא רובוט.
onboarding.tour-tor-expect-differences.button=ראה שאלות נפוצות
onboarding.tour-tor-expect-differences.next-button=לך אל שירותי בצל
diff --git a/chrome/locale/he/torbutton.properties b/chrome/locale/he/torbutton.properties
index bb0b80ea..363cbbc9 100644
--- a/chrome/locale/he/torbutton.properties
+++ b/chrome/locale/he/torbutton.properties
@@ -45,7 +45,7 @@ canvas.neverAccessKey=e
profileProblemTitle=בעית פרופיל %S
profileReadOnly=אינך יכול להריץ את %S ממערכת קבצים לקריאה בלבד. אנא העתק את %S למיקום אחר לפני ניסיון להשתמש בו.
profileReadOnlyMac=אינך יכול להריץ את %S ממערכת קבצים לקריאה בלבד. אנא העתק את %S לשולחן העבודה או לתיקיית היישומים שלך לפני ניסיון להשתמש בו.
-profileAccessDenied=ל-%S אין הרשאה כדי לגשת אל הפרופיל. אנא התאם את הרשאות מערכת הקבצים שלך ונסה שוב.
+profileAccessDenied=אל %S אין הרשאה כדי לגשת אל הפרופיל. אנא התאם את הרשאות מערכת הקבצים שלך ונסה שוב.
profileMigrationFailed=מיזוג של הפרופיל הקיים שלך %S נכשל.\nהגדרות חדשות יהיו בשימוש.
# "Downloading update" string for the hamburger menu (see #28885).
@@ -104,7 +104,7 @@ onionServices.badAddress.longDescription=פרטים: %S — כתובת .onion ה
onionServices.introTimedOut.pageTitle=בעיה בטעינת אתר בצל
onionServices.introTimedOut.header=יצירה של מעגל אתר בצל לקחה פסק זמן
onionServices.introTimedOut=חיבור אל אתר הבצל נכשל, כנראה עקב חיבור רשת ירוד.
-onionServices.introTimedOut.longDescription=פרטים: %S — החיבור אל שירות הבצל המבוקש לקח פסק זמן בעת ניסיון לבנות את מעגל המפגש.
+onionServices.introTimedOut.longDescription=פרטים: %S — החיבור אל שירות הבצל המבוקש לקח פסק זמן בזמן ניסיון לבנות את מעגל המפגש.
#
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
onionServices.authPrompt.description2=%S מבקש שתאמת.
@@ -121,7 +121,7 @@ onionServices.authPreferences.dialogIntro=מפתחות עבור אתרי הבצ
onionServices.authPreferences.onionSite=אתר בצל
onionServices.authPreferences.onionKey=מפתח
onionServices.authPreferences.remove=הסר
-onionServices.authPreferences.removeAll=הסר הכל
+onionServices.authPreferences.removeAll=הסר הכול
onionServices.authPreferences.failedToGetKeys=לא היה ניתן לאחזר מפתחות מן tor
onionServices.authPreferences.failedToRemoveKey=לא היה ניתן להסיר מפתח
@@ -132,9 +132,19 @@ onionLocation.notNow=לא עכשיו
onionLocation.notNowAccessKey=n
onionLocation.description=יש גרסה פרטית יותר ומאובטחת יותר של אתר זה שזמינה על גבי רשת Tor באמצעות שירותי בצל. שירותי בצל עוזרים למפרסמי אתרים ולמבקרים שלהם להביס ציתות וצנזורה.
onionLocation.tryThis=נסה שירותי בצל
-onionLocation.onionAvailable=.onion זמין
+onionLocation.onionAvailable=גרסת .onion זמינה
onionLocation.learnMore=למד עוד…
onionLocation.always=תמיד
onionLocation.askEverytime=שאל כל פעם
onionLocation.prioritizeOnionsDescription=תעדף אתרי .onion כאשר הם ידועים.
onionLocation.onionServicesTitle=שירותי בצל
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=כתובת של מטבע מבוזר (%S) הועתקה מתוך אתר בלתי מאובטח. יכול להיות שהיא שונתה.
+cryptoSafetyPrompt.whatCanHeading=מה אתה יכול לעשות לגבי זה?
+cryptoSafetyPrompt.whatCanBody=אתה יכול לנסות להתחבר מחדש עם מגעל חדש כדי להקים חיבור מאובטח, או לקחת את הסיכון ולהשמיט את האזהרה הזאת.
+cryptoSafetyPrompt.learnMore=למד עוד
+cryptoSafetyPrompt.primaryAction=טען מחדש לשונית עם מעגל חדש
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=השמט אזהרה
+cryptoSafetyPrompt.secondaryActionAccessKey=ב׳
diff --git a/chrome/locale/hu/torbutton.properties b/chrome/locale/hu/torbutton.properties
index 7743c262..8c013243 100644
--- a/chrome/locale/hu/torbutton.properties
+++ b/chrome/locale/hu/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Mindig
onionLocation.askEverytime=Kérdezze mindig
onionLocation.prioritizeOnionsDescription=Priorizálja a .oinion oldalt, ha ismert.
onionLocation.onionServicesTitle=Onion Szolgáltatások
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=További információ
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/id/torbutton.properties b/chrome/locale/id/torbutton.properties
index 791df540..96b7302a 100644
--- a/chrome/locale/id/torbutton.properties
+++ b/chrome/locale/id/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Selalu
onionLocation.askEverytime=Tanyakan setiap saat
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=Layanan Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Pelajari Selengkapnya
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/is/torbutton.properties b/chrome/locale/is/torbutton.properties
index 36900946..e2445fdd 100644
--- a/chrome/locale/is/torbutton.properties
+++ b/chrome/locale/is/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Alltaf
onionLocation.askEverytime=Spyrja í hvert skipti
onionLocation.prioritizeOnionsDescription=Gefa .onion-vefjum forgang þegar þeir eru þekktir.
onionLocation.onionServicesTitle=Onion-þjónustur
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Fræðast frekar
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/it/torbutton.properties b/chrome/locale/it/torbutton.properties
index 98d73685..be28d935 100644
--- a/chrome/locale/it/torbutton.properties
+++ b/chrome/locale/it/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Sempre
onionLocation.askEverytime=Chiedi ogni volta
onionLocation.prioritizeOnionsDescription=Dare priorità ai siti .onion quando conosciuti.
onionLocation.onionServicesTitle=Servizi Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=È stato copiato un indirizzo di criptovaluta (%S) da un sito non sicuro. Potrebbe essere stato modificato.
+cryptoSafetyPrompt.whatCanHeading=Cosa puoi fare al riguardo?
+cryptoSafetyPrompt.whatCanBody=Puoi provare a riconnetterti con un nuovo circuito per stabilire una connessione sicura, o accettare il rischio e chiudere questo avviso.
+cryptoSafetyPrompt.learnMore=Per saperne di più
+cryptoSafetyPrompt.primaryAction=Ricarica scheda con un nuovo circuito
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Chiudi avviso
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ja/torbutton.properties b/chrome/locale/ja/torbutton.properties
index 60eda03b..ea893f3c 100644
--- a/chrome/locale/ja/torbutton.properties
+++ b/chrome/locale/ja/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=常に
onionLocation.askEverytime=毎回尋ねる
onionLocation.prioritizeOnionsDescription=存在する場合は .onion サイトを優先的に利用する。
onionLocation.onionServicesTitle=Onion サービス
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=詳細情報
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ka/torbutton.properties b/chrome/locale/ka/torbutton.properties
index f132af86..17f0a2cc 100644
--- a/chrome/locale/ka/torbutton.properties
+++ b/chrome/locale/ka/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=ყოველთვის
onionLocation.askEverytime=შეკითხვა ყოველ ჯერზე
onionLocation.prioritizeOnionsDescription=უპირატესობა .onion-საიტებს ამოცნობისას
onionLocation.onionServicesTitle=Onion-მომსახურებები
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=იხილეთ ვრცლად
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=მ
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=ბ
diff --git a/chrome/locale/ko/torbutton.properties b/chrome/locale/ko/torbutton.properties
index 8a46945f..493064ee 100644
--- a/chrome/locale/ko/torbutton.properties
+++ b/chrome/locale/ko/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=항상
onionLocation.askEverytime=항상 묻기
onionLocation.prioritizeOnionsDescription=알려진 경우 .onion 사이트의 우선 순위를 지정합니다.
onionLocation.onionServicesTitle=Onion 서비스
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=더 알아보기
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/lt/torbutton.properties b/chrome/locale/lt/torbutton.properties
index ce606a43..0c385096 100644
--- a/chrome/locale/lt/torbutton.properties
+++ b/chrome/locale/lt/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Visada
onionLocation.askEverytime=Klausti kiekvieną kartą
onionLocation.prioritizeOnionsDescription=Teikti pirmenybę .onion svetainėms, kai žinoma.
onionLocation.onionServicesTitle=Onion paslaugos
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Sužinoti daugiau
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=Naudotojas B
diff --git a/chrome/locale/mk/torbutton.properties b/chrome/locale/mk/torbutton.properties
index a92218cc..1476692d 100644
--- a/chrome/locale/mk/torbutton.properties
+++ b/chrome/locale/mk/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Секогаш
onionLocation.askEverytime=Прашувај секој пат
onionLocation.prioritizeOnionsDescription=Преферирај .onion веб страна кога се познати.
onionLocation.onionServicesTitle=Onion Услуги
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Научете повеќе
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ms/torbutton.properties b/chrome/locale/ms/torbutton.properties
index 6c69ce76..4da1eaa3 100644
--- a/chrome/locale/ms/torbutton.properties
+++ b/chrome/locale/ms/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Always
onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=Perkhidmatan Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Ketahui lebih lanjut
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/my/aboutTor.dtd b/chrome/locale/my/aboutTor.dtd
index bdde5b28..06bc3410 100644
--- a/chrome/locale/my/aboutTor.dtd
+++ b/chrome/locale/my/aboutTor.dtd
@@ -19,7 +19,7 @@
<!ENTITY aboutTor.torbrowser_user_manual_questions.label "မေးစရာများ ရှိဦးမလား?">
<!ENTITY aboutTor.torbrowser_user_manual_link.label "ကျွန်ုပ်တို့ Tor ဘရောင်ဇာ လက်စွဲစာအုပ်အား ကြည့်ကြည့်ပါ »">
<!-- The next two entities are used within the browser's Help menu. -->
-<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M">
+<!ENTITY aboutTor.torbrowser_user_manual.accesskey "လ">
<!ENTITY aboutTor.torbrowser_user_manual.label "Tor ဘရောင်ဇာ လက်စွဲစာအုပ်">
<!ENTITY aboutTor.tor_mission.label "Tor Project သည် လူ့အခွင့်အရေးနှင့် လွတ်လပ်ရေးခွင့်များကို တိုးတက်စေရန် အမေရိကန် အကျိုးအမြတ်မယူသော ၅၀၁(ဂ)(၃) အဖွဲ့အစည်းတစ်ခု ဖြစ်ပါသည်။ လွတ်လပ်၍ အမည်ဝှက်ကာ အများသုံးနိုင်ပြီး ပုဂ္ဂိုလ်လုံခြုံရေးစောင့်ရှောက်သော နည်းပညာများ အသုံးပြုပါသည်။ ၎င်းနည်းပညာများကို အကန့်အသတ်မရှိစွာ သုံးစွဲနိုင်ခြင်းနှင့် သိပ္ပံဆိုင်ရာနှင့် ပြည်သူများနားလည်နိုင်စေရန် ပံ့
ပိုးထောက်ပံ့ပါသည်။">
diff --git a/chrome/locale/my/browserOnboarding.properties b/chrome/locale/my/browserOnboarding.properties
index 1dbe28c9..3da938f5 100644
--- a/chrome/locale/my/browserOnboarding.properties
+++ b/chrome/locale/my/browserOnboarding.properties
@@ -58,9 +58,9 @@ onboarding.tour-tor-toolbar-update-9.0.next-button=Tor ကွန်ယက်ပ
# Circuit Display onboarding.
onboarding.tor-circuit-display.next=ရှေ့ဆက်ရန်
onboarding.tor-circuit-display.done=ပြီးသွားပြီ
-onboarding.tor-circuit-display.one-of-three=၃ ခုမှ ၁ ခု
-onboarding.tor-circuit-display.two-of-three=၃ ခုမှ ၂ ခု
-onboarding.tor-circuit-display.three-of-three=၃ ခုမှ ၃ ခု
+onboarding.tor-circuit-display.one-of-three=၁ / ၃
+onboarding.tor-circuit-display.two-of-three=၂ / ၃
+onboarding.tor-circuit-display.three-of-three=၃ / ၃
onboarding.tor-circuit-display.intro.title=လမ်းကြောင်းစဥ်များ မည်ကဲ့သို့ အလုပ်လုပ်သနည်း?
onboarding.tor-circuit-display.intro.msg=ဆားကစ်လမ်းကြောင်းများသည် ကျပန်းသတ်မှတ်ထားသော လက်ဆင့်ကမ်းခြင်းများဖြင့် တည်ဆောက်ထားပါသည်။ ၎င်းလက်ဆင့်ကမ်းမှုများသည် ကမ္ဘာအနှံ့ရှိ Tor အသွားအလာများကို လက်ဆင့်ကမ်းနိုင်ရန် ချိန်ညှိထားသည့် ကွန်ပျူတာများဖြစ်ပါသည်။ ဆားကစ်လမ်းကြောင်းများသည် သင့်ကို အင်တာနက်လုံခြုံစွာသုံးစွဲနိုင်စေသည်နှင့် onion ဝန်ဆောင်မှုများနှင့် ချိတ်ဆက်စေနိုင်ပါသည်။
diff --git a/chrome/locale/my/torbutton.dtd b/chrome/locale/my/torbutton.dtd
index 8f54338e..e13de6e9 100644
--- a/chrome/locale/my/torbutton.dtd
+++ b/chrome/locale/my/torbutton.dtd
@@ -1,6 +1,6 @@
<!ENTITY torbutton.context_menu.new_identity "အထောက်အထား အသစ်">
<!ENTITY torbutton.context_menu.new_identity_key "ထ">
-<!ENTITY torbutton.context_menu.new_circuit "New Tor Circuit for this Site">
+<!ENTITY torbutton.context_menu.new_circuit "ဤဆိုဒ်အတွက် Tor လမ်းကြောင်းအသစ်">
<!ENTITY torbutton.context_menu.new_circuit_key "လ">
<!ENTITY torbutton.context_menu.networksettings "Tor ကွန်ယက် အပြင်အဆင်များ...">
<!ENTITY torbutton.context_menu.networksettings.key "ယ">
diff --git a/chrome/locale/my/torbutton.properties b/chrome/locale/my/torbutton.properties
index e8a57655..b19b1b20 100644
--- a/chrome/locale/my/torbutton.properties
+++ b/chrome/locale/my/torbutton.properties
@@ -111,7 +111,7 @@ onionServices.authPrompt.description2=%S သည် သင်အတည်ပြ
onionServices.authPrompt.keyPlaceholder=ဤ onion ဝန်ဆောင်မှုအတွက် သင့် သီးသန့်ကီးကုဒ်အား ရိုက်ထည့်ပေးပါ။
onionServices.authPrompt.done=ပြီးသွားပြီ
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=အကျုံးဝင်သော ကီးကုဒ် ရိုက်ထည့်ပေးပါ ((52 base32 စာလုံးများ သို့မဟုတ် 44 base64 စာလုံးများ)
+onionServices.authPrompt.invalidKey=အကျုံးဝင်သော ကီးကုဒ် ရိုက်ထည့်ပေးပါ (base32 အက္ခရာလုံး ၅၂ လုံး သို့မဟုတ် base64 အက္ခရာလုံး ၄၄ လုံး)
onionServices.authPrompt.failedToSetKey=သင့် ကီးကုဒ်ဖြင့် Tor အား ချိန်ဆပြင်ဆင်၍ မရပါ
onionServices.authPreferences.header=Onion ဝန်ဆောင်မှုများ အတည်ပြုခြင်း
onionServices.authPreferences.overview=အချို့ onion ဝန်ဆောင်မှုများ အသုံးမပြုခင် ကီးကုဒ် (စကားဝှက်လိုမျိုး) ဖြင့် သင့်အထောက်အထားပြရန် လိုအပ်ပါသည်။
@@ -138,3 +138,13 @@ onionLocation.always=အမြဲတမ်း
onionLocation.askEverytime=အချိန်တိုင်းမေးပါ
onionLocation.prioritizeOnionsDescription=.onion ဆိုဒ်များ သိရှိလျှင် ၎င်းတို့ကို ဦးစားပေးပါ။
onionLocation.onionServicesTitle=Onion Services
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=ထပ်မံလေ့လာမယ်
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=ခ
diff --git a/chrome/locale/nb-NO/torbutton.properties b/chrome/locale/nb-NO/torbutton.properties
index df1b6132..febca087 100644
--- a/chrome/locale/nb-NO/torbutton.properties
+++ b/chrome/locale/nb-NO/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Altid
onionLocation.askEverytime=Spør hver gang
onionLocation.prioritizeOnionsDescription=Prioriter. .onion sider når kjent
onionLocation.onionServicesTitle=Løk-tjenester
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Lær mer
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/nl/torbutton.properties b/chrome/locale/nl/torbutton.properties
index 16d2852c..0e38645d 100644
--- a/chrome/locale/nl/torbutton.properties
+++ b/chrome/locale/nl/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Altijd
onionLocation.askEverytime=Elke keer vragen
onionLocation.prioritizeOnionsDescription=.onion-websites prioriteit geven wanneer bekend.
onionLocation.onionServicesTitle=Onion-services
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Een cryptocurrency adres (%S) is gekopieerd vanuit een onbeveiligde website. Het kan veranderd zijn.
+cryptoSafetyPrompt.whatCanHeading=Wat kun je er aan doen?
+cryptoSafetyPrompt.whatCanBody=Je kan proberen opnieuw te verbinden met een nieuw circuit om een beveiligde verbinden op te stellen, of het risico accepteren en deze waarschuwing negeren.
+cryptoSafetyPrompt.learnMore=Meer info
+cryptoSafetyPrompt.primaryAction=Herlaad Tabblad met een Nieuw Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Waarschuwing Negeren
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/pl/torbutton.dtd b/chrome/locale/pl/torbutton.dtd
index 7719281a..80c339f5 100644
--- a/chrome/locale/pl/torbutton.dtd
+++ b/chrome/locale/pl/torbutton.dtd
@@ -2,14 +2,14 @@
<!ENTITY torbutton.context_menu.new_identity_key "o">
<!ENTITY torbutton.context_menu.new_circuit "Nowy obwód dla tej strony">
<!ENTITY torbutton.context_menu.new_circuit_key "c">
-<!ENTITY torbutton.context_menu.networksettings "Ustawienia Sieci Tor...">
+<!ENTITY torbutton.context_menu.networksettings "Ustawienia sieci Tor...">
<!ENTITY torbutton.context_menu.networksettings.key "N">
<!ENTITY torbutton.context_menu.downloadUpdate "Sprawdź czy są aktualizacje Tor Browser...">
<!ENTITY torbutton.context_menu.downloadUpdate.key "u">
<!ENTITY torbutton.context_menu.cookieProtections "Ochrona plików cookie...">
<!ENTITY torbutton.context_menu.cookieProtections.key "c">
<!ENTITY torbutton.button.tooltip "Kliknij tutaj, aby uruchomić Torbutton">
-<!ENTITY torbutton.prefs.security_settings "Ustawienia Bezpieczeństwa Przeglądarki Tor">
+<!ENTITY torbutton.prefs.security_settings "Ustawienia bezpieczeństwa przeglądarki Tor">
<!ENTITY torbutton.cookiedialog.title "Zarządzaj ochroną ciasteczek">
<!ENTITY torbutton.cookiedialog.lockCol "Chronione">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
diff --git a/chrome/locale/pl/torbutton.properties b/chrome/locale/pl/torbutton.properties
index 5d44ae8a..fdf2438b 100644
--- a/chrome/locale/pl/torbutton.properties
+++ b/chrome/locale/pl/torbutton.properties
@@ -1,6 +1,6 @@
torbutton.circuit_display.internet = Internet
torbutton.circuit_display.ip_unknown = IP nieznany
-torbutton.circuit_display.onion_site = strona Onion
+torbutton.circuit_display.onion_site = Strona cebulowa
torbutton.circuit_display.this_browser = Ta przeglądarka
torbutton.circuit_display.relay = Przekaźnik
torbutton.circuit_display.tor_bridge = Mostek
@@ -42,7 +42,7 @@ canvas.neverAccessKey=i
# Profile/startup error messages. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S is the application name.
-profileProblemTitle=%S Problem profilu
+profileProblemTitle=Problem profilu %S
profileReadOnly=Nie możesz uruchomić %S z systemu plików tylko do odczytu. Prosimy o skopiowanie %S do innej lokalizacji przed ponownym jego użyciem.
profileReadOnlyMac=Nie możesz uruchomić %S w systemie plików tylko do odczytu. Prosimy o skopiowanie %S na pulpit, lub do folderu aplikacji przed ponowną próbą uruchomienia.
profileAccessDenied=%S nie posiada uprawnień, aby zobaczyć ten profil. Prosimy zmienić uprawnienia systemu plików i spróbować ponownie.
@@ -54,9 +54,9 @@ profileMigrationFailed=Migracja Twojego isniejącego profilu %S nie powiodła si
updateDownloadingPanelUILabel=Pobieranie aktualizacji %S
# .Onion Page Info prompt. Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=Połączenie zaszyfrowane (usługa Onion, %1$S, %2$S klucze bitowe, %3$S)
-pageInfo_OnionEncryption=Połączenie zaszyfrowane (usługa Onion)
-pageInfo_OnionName=Nazwa Cebuli:
+pageInfo_OnionEncryptionWithBitsAndProtocol=Połączenie zaszyfrowane (usługa cebulowa, %1$S, %2$S klucze bitowe, %3$S)
+pageInfo_OnionEncryption=Połączenie zaszyfrowane (usługa cebulowa)
+pageInfo_OnionName=Nazwa cebulowa:
# Onion services strings. Strings are kept here for ease of translation.
onionServices.learnMore=Dowiedz się więcej
@@ -66,44 +66,44 @@ onionServices.errorPage.onionSite=Strona cebulowa
# LOCALIZATION NOTE: In the longDescription strings, %S will be replaced with
# an error code, e.g., 0xF3.
# Tor SOCKS error 0xF0:
-onionServices.descNotFound.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.descNotFound.header=Nie znaleziono strony cebuli
-onionServices.descNotFound=Najbardziej prawdopodobną przyczyną jest to, że strona cebuli jest offline. Skontaktuj się z administratorem strony cebuli.
+onionServices.descNotFound.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.descNotFound.header=Nie znaleziono strony cebulowej
+onionServices.descNotFound=Najbardziej prawdopodobną przyczyną jest to, że strona cebulowa jest offline. Skontaktuj się z administratorem strony cebulowej.
onionServices.descNotFound.longDescription=Szczegóły: %S — Żądany deskryptor usługi cebulowej nie może zostać znaleziony na hashringu, zatem usługa nie jest osiągalna dla klienta.
# Tor SOCKS error 0xF1:
-onionServices.descInvalid.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.descInvalid.header=Nie można dotrzeć do strony cebuli
-onionServices.descInvalid=Strona cebuli jest nieosiągalna z powodu błędu wewnętrznego.
+onionServices.descInvalid.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.descInvalid.header=Nie można dotrzeć do strony cebulowej
+onionServices.descInvalid=Strona cebulowa jest nieosiągalna z powodu błędu wewnętrznego.
onionServices.descInvalid.longDescription=Szczegóły: %S — Żądany deskryptor usługi cebulowej nie może zostać przeanalizowany lub sprawdzenie poprawności podpisu nie powiodło się.
# Tor SOCKS error 0xF2:
-onionServices.introFailed.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.introFailed.header=Strona cebuli została rozłączona
-onionServices.introFailed=Najbardziej prawdopodobną przyczyną jest to, że strona cebuli jest offline. Skontaktuj się z administratorem strony cebuli.
+onionServices.introFailed.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.introFailed.header=Strona cebulowa została rozłączona
+onionServices.introFailed=Najbardziej prawdopodobną przyczyną jest to, że strona cebulowa jest offline. Skontaktuj się z administratorem strony cebulowej.
onionServices.introFailed.longDescription=Szczegóły: %S - Wprowadzenie nie powiodło się, co oznacza, że znaleziono deskryptor, ale usługa nie jest już połączona z punktem wprowadzenia. Prawdopodobnie usługa zmieniła swój deskryptor lub nie jest uruchomiona.
# Tor SOCKS error 0xF3:
-onionServices.rendezvousFailed.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.rendezvousFailed.header=Nie można połączyć się z witryną Onionsite
-onionServices.rendezvousFailed=Strona onionsite jest zajęta lub sieć Tor jest przeciążona. Spróbuj ponownie później.
+onionServices.rendezvousFailed.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.rendezvousFailed.header=Nie można połączyć się ze stroną cebulową
+onionServices.rendezvousFailed=Strona cebulowa jest zajęta lub sieć Tor jest przeciążona. Spróbuj ponownie później.
onionServices.rendezvousFailed.longDescription=Szczegóły: %S — Klient nie mógł się spotkać z usługą, co oznacza, że klient nie mógł sfinalizować połączenia.
# Tor SOCKS error 0xF4:
onionServices.clientAuthMissing.pageTitle=Wymagana Autoryzacja
-onionServices.clientAuthMissing.header=Strona Onionsite wymaga uwierzytelnienia
-onionServices.clientAuthMissing=Dostęp do onionite wymaga klucza, ale żaden nie został dostarczony.
+onionServices.clientAuthMissing.header=Strona cebulowa wymaga uwierzytelnienia
+onionServices.clientAuthMissing=Dostęp do strony cebulowej wymaga klucza, ale żaden nie został dostarczony.
onionServices.clientAuthMissing.longDescription=Szczegóły: %S — Klient pobrał żądany deskryptor usługi cebulowej, ale nie mógł odszyfrować jego zawartości, ponieważ brakuje informacji autoryzacyjnych klienta.
# Tor SOCKS error 0xF5:
-onionServices.clientAuthIncorrect.pageTitle=Błąd Autoryzacji
-onionServices.clientAuthIncorrect.header=Uwierzytelnianie strony Onionsite nie powiodło się
-onionServices.clientAuthIncorrect=Podany klucz jest niepoprawny lub został odwołany. Skontaktuj się z administratorem strony onionsite.
+onionServices.clientAuthIncorrect.pageTitle=Uwierzytelnianie nie powiodło się
+onionServices.clientAuthIncorrect.header=Uwierzytelnianie strony cebulowej nie powiodło się
+onionServices.clientAuthIncorrect=Podany klucz jest niepoprawny lub został odwołany. Skontaktuj się z administratorem strony cebulowej.
onionServices.clientAuthIncorrect.longDescription=Szczegóły: %S — Klient mógł pobrać żądany deskryptor usługi cebulowej, ale nie był w stanie odszyfrować jego zawartości przy użyciu podanych informacji autoryzacyjnych klienta. Może to oznaczać, że dostęp został cofnięty.
# Tor SOCKS error 0xF6:
-onionServices.badAddress.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.badAddress.header=Nieprawidłowy adres strony cebuli
+onionServices.badAddress.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.badAddress.header=Nieprawidłowy adres strony cebulowej
onionServices.badAddress=Podany adres strony cebulowej jest nieprawidłowy. Sprawdź, czy wpisałeś go poprawnie.
onionServices.badAddress.longDescription=Szczegóły: %S — Podany adres .onion jest nieprawidłowy. Ten błąd jest zwracany z jednego z następujących powodów: suma kontrolna adresu nie jest zgodna, klucz publiczny ed25519 jest nieprawidłowy lub kodowanie jest nieprawidłowe.
# Tor SOCKS error 0xF7:
-onionServices.introTimedOut.pageTitle=Problem z ładowaniem strony Onionsite
-onionServices.introTimedOut.header=Limit czasu tworzenia obwodu cebuli
-onionServices.introTimedOut=Nie udało się połączyć z witryną cebuli, prawdopodobnie z powodu słabego połączenia sieciowego.
+onionServices.introTimedOut.pageTitle=Problem z ładowaniem strony cebulowej
+onionServices.introTimedOut.header=Limit czasu tworzenia obwodu strony cebulowej
+onionServices.introTimedOut=Nie udało się połączyć ze stroną cebulową, prawdopodobnie z powodu słabego połączenia sieciowego.
onionServices.introTimedOut.longDescription=Szczegóły: %S — Upłynął limit czasu połączenia z żądaną usługą cebulową podczas próby zbudowania obwodu spotkania.
#
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
@@ -111,13 +111,13 @@ onionServices.authPrompt.description2=%S żąda uwierzytelnienia.
onionServices.authPrompt.keyPlaceholder=Wprowadź swój klucz prywatny dla tej usługi cebulowej
onionServices.authPrompt.done=Skończone
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Wprowadź poprawny klucz (52 znaki baza32 lub 44 znaki baza64)
+onionServices.authPrompt.invalidKey=Wprowadź poprawny klucz (52 znaki base32 lub 44 znaki base64)
onionServices.authPrompt.failedToSetKey=Konfiguracja Tor przy użyciu twojego klucza nie powiodła się
onionServices.authPreferences.header=Uwierzytelnianie usług cebulowych
onionServices.authPreferences.overview=Niektóre usługi cebulowe wymagają identyfikacji za pomocą klucza (rodzaj hasła) przed uzyskaniem dostępu do nich.
onionServices.authPreferences.savedKeys=Zapisane klucze...
-onionServices.authPreferences.dialogTitle=Klucze Usługi Cebulowej
-onionServices.authPreferences.dialogIntro=Klucze następujących stron cebuli są przechowywane na twoim komputerze
+onionServices.authPreferences.dialogTitle=Klucze usługi cebulowej
+onionServices.authPreferences.dialogIntro=Klucze następujących stron cebulowych są przechowywane na twoim komputerze
onionServices.authPreferences.onionSite=Strona cebulowa
onionServices.authPreferences.onionKey=Klucz
onionServices.authPreferences.remove=Usuń
@@ -126,15 +126,25 @@ onionServices.authPreferences.failedToGetKeys=Nie można odebrać kluczy z Tor
onionServices.authPreferences.failedToRemoveKey=Usunięcie klucza nie powiodło się
# Onion-Location strings.
-onionLocation.alwaysPrioritize=Zawsze ustalaj priorytet cebuli
+onionLocation.alwaysPrioritize=Zawsze traktuj cebule priorytetowo
onionLocation.alwaysPrioritizeAccessKey=u
onionLocation.notNow=Nie teraz
onionLocation.notNowAccessKey=n
onionLocation.description=Bezpieczniejsza wersja tej strony jest dostępna jako usługa cebulowa. Usługi cebulowe pomagają twórcom witryn internetowych oraz odwiedzającym je bronić się przed monitorowaniem ruchu i cenzurą.
-onionLocation.tryThis=Wypróbuj Usługi Cebulowe
+onionLocation.tryThis=Wypróbuj usługi cebulowe
onionLocation.onionAvailable=.onion dostępna
onionLocation.learnMore=Dowiedz się więcej...
onionLocation.always=Zawsze
onionLocation.askEverytime=Pytaj za każdym razem
onionLocation.prioritizeOnionsDescription=Nadaj priorytet witrynom .onion, gdy są znane.
-onionLocation.onionServicesTitle=Usługi onion
+onionLocation.onionServicesTitle=Usługi cebulowe
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Adres kryptowaluty (%S) został skopiowany z niezabezpieczonej strony internetowej. Mogło dojść do zmodyfikowania.
+cryptoSafetyPrompt.whatCanHeading=Co możesz z tym zrobić?
+cryptoSafetyPrompt.whatCanBody=Możesz spróbować ponownie połączyć się z nowym obwodem, aby ustanowić bezpieczne połączenie, lub zaakceptować ryzyko i odrzucić to ostrzeżenie.
+cryptoSafetyPrompt.learnMore=Dowiedz się więcej
+cryptoSafetyPrompt.primaryAction=Załaduj ponownie kartę z nowym obwodem
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Odrzuć ostrzeżenie
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/pt-BR/torbutton.properties b/chrome/locale/pt-BR/torbutton.properties
index 7e3d4309..e1aeeecd 100644
--- a/chrome/locale/pt-BR/torbutton.properties
+++ b/chrome/locale/pt-BR/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Sempre
onionLocation.askEverytime=Perguntar sempre
onionLocation.prioritizeOnionsDescription=Priorize sites .onion quando conhecido.
onionLocation.onionServicesTitle=Serviços Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Saiba Mais
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ro/torbutton.properties b/chrome/locale/ro/torbutton.properties
index ca44efae..a37956f5 100644
--- a/chrome/locale/ro/torbutton.properties
+++ b/chrome/locale/ro/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Întotdeauna
onionLocation.askEverytime=Întreabă de fiecare dată
onionLocation.prioritizeOnionsDescription=Prioritizați site-urile .onion când sunt cunoscute.
onionLocation.onionServicesTitle=Servicii Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Află mai mult
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/ru/torbutton.properties b/chrome/locale/ru/torbutton.properties
index b933f1ea..726479d3 100644
--- a/chrome/locale/ru/torbutton.properties
+++ b/chrome/locale/ru/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Всегда
onionLocation.askEverytime=Спрашивать всякий раз
onionLocation.prioritizeOnionsDescription=Onion-сайты в приоритете (по возможности).
onionLocation.onionServicesTitle=Onion-ресурсы
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Узнать больше
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/sv-SE/aboutTor.dtd b/chrome/locale/sv-SE/aboutTor.dtd
index 62b20513..e4071c29 100644
--- a/chrome/locale/sv-SE/aboutTor.dtd
+++ b/chrome/locale/sv-SE/aboutTor.dtd
@@ -17,7 +17,7 @@
<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com">
<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Frågor?">
-<!ENTITY aboutTor.torbrowser_user_manual_link.label "Kolla in bruksanvisning för Tor Browser »">
+<!ENTITY aboutTor.torbrowser_user_manual_link.label "Titta i vår bruksanvisningen för Tor Browser »">
<!-- The next two entities are used within the browser's Help menu. -->
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M">
<!ENTITY aboutTor.torbrowser_user_manual.label "Bruksanvisning för Tor Browser">
diff --git a/chrome/locale/sv-SE/brand.dtd b/chrome/locale/sv-SE/brand.dtd
index 7284a534..de5e4f15 100644
--- a/chrome/locale/sv-SE/brand.dtd
+++ b/chrome/locale/sv-SE/brand.dtd
@@ -14,6 +14,6 @@
<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
<!ENTITY plugins.installed.find "Klicka här för att läsa in installerade systemtillägg.">
-<!ENTITY plugins.installed.enable "Tillåt tillägg">
-<!ENTITY plugins.installed.disable "Stäng av tillägg.">
-<!ENTITY plugins.installed.disable.tip "Klicka för att förhindra laddningen av systemtillägg.">
+<!ENTITY plugins.installed.enable "Aktivera tillägg">
+<!ENTITY plugins.installed.disable "Inaktivera tillägg">
+<!ENTITY plugins.installed.disable.tip "Klicka för att förhindra inläsningen av systemtillägg.">
diff --git a/chrome/locale/sv-SE/torbutton.dtd b/chrome/locale/sv-SE/torbutton.dtd
index 9c2bbeb7..7d69bc12 100644
--- a/chrome/locale/sv-SE/torbutton.dtd
+++ b/chrome/locale/sv-SE/torbutton.dtd
@@ -6,21 +6,21 @@
<!ENTITY torbutton.context_menu.networksettings.key "N">
<!ENTITY torbutton.context_menu.downloadUpdate "Sök efter uppdateringar för Tor Browser...">
<!ENTITY torbutton.context_menu.downloadUpdate.key "U">
-<!ENTITY torbutton.context_menu.cookieProtections "Skydd mot Cookies...">
+<!ENTITY torbutton.context_menu.cookieProtections "Skydd mot kakor...">
<!ENTITY torbutton.context_menu.cookieProtections.key "S">
<!ENTITY torbutton.button.tooltip "Klicka för att initialisera Torbutton">
<!ENTITY torbutton.prefs.security_settings "Säkerhetsinställningar i Tor Browser">
-<!ENTITY torbutton.cookiedialog.title "Hantera Cookies skydd">
+<!ENTITY torbutton.cookiedialog.title "Hantera skydd mot kakor">
<!ENTITY torbutton.cookiedialog.lockCol "Skyddad">
<!ENTITY torbutton.cookiedialog.domainCol "Värd">
<!ENTITY torbutton.cookiedialog.nameCol "Namn">
<!ENTITY torbutton.cookiedialog.pathCol "Sökväg">
-<!ENTITY torbutton.cookiedialog.protectCookie "Skydda Cookie">
-<!ENTITY torbutton.cookiedialog.removeCookie "Ta bort Cookie">
-<!ENTITY torbutton.cookiedialog.unprotectCookie "Oskydda Cookie">
-<!ENTITY torbutton.cookiedialog.removeAllBut "Ta bort alla icke-skyddade">
-<!ENTITY torbutton.cookiedialog.saveAllCookies "Skydda nya Cookies">
-<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Skydda inte nya Cookies">
+<!ENTITY torbutton.cookiedialog.protectCookie "Skydda kakan">
+<!ENTITY torbutton.cookiedialog.removeCookie "Ta bort kakan">
+<!ENTITY torbutton.cookiedialog.unprotectCookie "Sluta skydda kakan">
+<!ENTITY torbutton.cookiedialog.removeAllBut "Ta bort alla utom skyddade">
+<!ENTITY torbutton.cookiedialog.saveAllCookies "Skydda nya kakor">
+<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Skydda inte nya kakor">
<!ENTITY torbutton.prefs.sec_caption "Säkerhetsnivå">
<!ENTITY torbutton.prefs.sec_caption_tooltip "Säkerhetsreglaget låter dig stänga av vissa webbläsarfunktioner som kan göra din webbläsare mer sårbar mot intrångsförsök.">
<!ENTITY torbutton.prefs.sec_standard_label "Standard">
@@ -34,8 +34,8 @@
<!ENTITY torbutton.prefs.sec_learn_more_label "Läs mer">
<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript är inaktiverat på webbplatser utan HTTPS.">
<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript är inaktiverat som standard på alla webbplatser.">
-<!ENTITY torbutton.prefs.sec_limit_typography "Vissa typsnitt och matte symboler är inaktiverade.">
-<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Vissa typsnitt, ikoner, matte symboler och bilder är inaktiverade.">
+<!ENTITY torbutton.prefs.sec_limit_typography "Vissa teckensnitt och matematiska symboler är inaktiverade.">
+<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Vissa teckensnitt, ikoner, matematiska symboler och bilder är inaktiverade.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Ljud och video (HTML5-media) och WebGL är klicka-för-att-spela.">
<!ENTITY torbutton.prefs.sec_custom_warning "Anpassad">
<!ENTITY torbutton.prefs.sec_overview "Inaktivera vissa webbfunktioner som kan användas för att attackera din säkerhet och anonymitet.">
@@ -43,7 +43,7 @@
<!ENTITY torbutton.prefs.sec_safer_tooltip "Säkerhetsnivå : Säkrare">
<!ENTITY torbutton.prefs.sec_safest_tooltip "Säkerhetsnivå: Säkrast">
<!ENTITY torbutton.prefs.sec_custom_summary "Dina anpassade webbläsarinställningar har resulterat i ovanliga säkerhetsinställningar. Av säkerhets- och integritetsskäl rekommenderar vi att du använder en av de fördefinierade säkerhetsnivåerna.">
-<!ENTITY torbutton.prefs.sec_restore_defaults "Återställ standard">
+<!ENTITY torbutton.prefs.sec_restore_defaults "Återställ standardvärden">
<!ENTITY torbutton.prefs.sec_advanced_security_settings "Avancerade säkerhetsinställningar…">
<!ENTITY torbutton.circuit_display.title "Tor-krets">
<!ENTITY torbutton.circuit_display.new_circuit "Ny krets för denna webbplats">
diff --git a/chrome/locale/sv-SE/torbutton.properties b/chrome/locale/sv-SE/torbutton.properties
index d8657dfc..eddcff3f 100644
--- a/chrome/locale/sv-SE/torbutton.properties
+++ b/chrome/locale/sv-SE/torbutton.properties
@@ -25,11 +25,11 @@ torbutton.title.prompt_torbrowser = Viktig information om Torbutton
torbutton.popup.prompt_torbrowser = Torbutton fungerar annorlunda nu: Du kan inte slå av den längre.\n\nVi gjorde denna förändring eftersom det inte är säkert att använda Torbutton i en webbläsare som också används för icke-Tor surfning. Det var för många fel som vi inte kunde åtgärda på något annat sätt.\n\nOm du vill fortsätta använda Firefox normalt så bör du avinstallera Tor Browser och hämta Tor Browser Bundle. Tor Browser skyddar din integritet bättre än vanliga Firefox, även när Firefox används med Tor Button.\n\nFör att ta bort Torbutton, gå till Verktyg->Tillägg->Tillägg och klicka på Ta bort-knappen bredvid Torbutton.
torbutton.popup.short_torbrowser = Viktig information om Torbutton!\n\nTorbutton är nu alltid aktiverad.\n\nKlicka på Torbutton för mer information.
-torbutton.popup.confirm_plugins = Insticksmoduler så som Flash kan äventyra din anonymitet och personliga integritet.\n\nDe kan också kringgå Tor för att avslöja var du befinner dig och vad din IP-adress är.\n\nÄr du säker på att du vill aktivera plugins?\n\n
-torbutton.popup.never_ask_again = Fråga aldrig igen
+torbutton.popup.confirm_plugins = Insticksmoduler så som Flash kan äventyra din anonymitet och personliga integritet.\n\nDe kan också kringgå Tor för att avslöja var du befinner dig och vad din IP-adress är.\n\nÄr du säker på att du vill aktivera insticksmoduler?\n\n
+torbutton.popup.never_ask_again = Fråga mig aldrig igen
torbutton.popup.confirm_newnym = Tor Browser kommer att stänga alla fönster och flikar. Alla webbplatssessioner kommer att gå förlorade.\n\nStarta om Tor Browser nu för att återställa din identitet?\n\n
-torbutton.maximize_warning = Att maximera Tor Browser kan ge webbplatser möjlighet att upptäcka din skärmstorlek, vilket kan användas för att spåra dig. Vi rekommenderar att du lämnar Tor Browser fönstret i dess ursprungliga storlek.
+torbutton.maximize_warning = Maximering av Tor Browser kan ge webbplatser möjlighet att upptäcka din skärmstorlek, vilket kan användas för att spåra dig. Vi rekommenderar att du lämnar Tor Browser-fönstret i dess standardstorlek.
# Canvas permission prompt. Strings are kept here for ease of translation.
canvas.siteprompt=Denna webbplats (%S) försökte extrahera HTML5-kanvasbilddata, som skulle kunna användas för att identifiera just din dator.\n\nSka Tor Browser tillåta denna webbplats att extrahera HTML5-kanvasbilddata?
@@ -138,3 +138,13 @@ onionLocation.always=Alltid
onionLocation.askEverytime=Fråga varje gång
onionLocation.prioritizeOnionsDescription=Prioritera .onion-webbplatser när de är kända.
onionLocation.onionServicesTitle=Onion-tjänster
+
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
+cryptoSafetyPrompt.cryptoWarning=En kryptovaluta-adress (%S) har kopierats från en osäker webbplats. Den kunde ha ändrats.
+cryptoSafetyPrompt.whatCanHeading=Vad kan du göra åt det?
+cryptoSafetyPrompt.whatCanBody=Du kan försöka återansluta till en ny krets för att upprätta en säker anslutning eller acceptera risken och avvisa denna varning.
+cryptoSafetyPrompt.learnMore=Läs mer
+cryptoSafetyPrompt.primaryAction=Läs om fliken med en ny krets
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Avvisa varning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/th/torbutton.properties b/chrome/locale/th/torbutton.properties
index 5cff4cca..2018fc39 100644
--- a/chrome/locale/th/torbutton.properties
+++ b/chrome/locale/th/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Always
onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=บริการ Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=เรียนรู้เพิ่มเติม
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/tr/aboutTor.dtd b/chrome/locale/tr/aboutTor.dtd
index d36cc0fd..616aa401 100644
--- a/chrome/locale/tr/aboutTor.dtd
+++ b/chrome/locale/tr/aboutTor.dtd
@@ -22,7 +22,7 @@
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M">
<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser rehberi">
-<!ENTITY aboutTor.tor_mission.label "Tor Projesi, US 501(c)(3) koşullarına göre, özgür ve açık kaynaklı anonimlik ve kişisel gizlilik teknolojileri geliştirerek insan hakları ve özgürlüklerini ileriye götürmeyi, bu teknolojilerin bilimsel ve kültürel olarak bilinirliğini arttırmayı ve herkes tarafından erişebilmesini sağlamak amacıyla çalışan, kar amacı gütmeyen bir kuruluştur.">
+<!ENTITY aboutTor.tor_mission.label "Tor Projesi, Birleşik Devletler 501(c)(3) vergi muafiyeti maddesi kapsamında, özgür ve açık kaynaklı anonimlik ve kişisel gizlilik teknolojileri geliştirerek insan hakları ve özgürlüklerini ileriye götürmeyi, bu teknolojilerin bilimsel ve kültürel olarak bilinirliğini arttırmayı ve herkes tarafından erişebilmesini sağlamak amacıyla çalışan, kar amacı gütmeyen bir kuruluştur.">
<!ENTITY aboutTor.getInvolved.label "Katkıda Bulunun »">
<!ENTITY aboutTor.newsletter.tagline "Tor ile ilgili son gelişmeler doğrudan e-posta kutunuza gelsin.">
diff --git a/chrome/locale/tr/torbutton.properties b/chrome/locale/tr/torbutton.properties
index 2f838439..10f8b38d 100644
--- a/chrome/locale/tr/torbutton.properties
+++ b/chrome/locale/tr/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Her zaman
onionLocation.askEverytime=Her defasında sorulsun
onionLocation.prioritizeOnionsDescription=Bilindiğinde .onion sitelerine öncelik verilsin.
onionLocation.onionServicesTitle=Onion Hizmetleri
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=Güvenli olmayan bir web sitesinden bir kripto para birimi adresi (%S) kopyalandı. Adres değiştirilmiş olabilir.
+cryptoSafetyPrompt.whatCanHeading=Bu konuda ne yapabilirsiniz?
+cryptoSafetyPrompt.whatCanBody=Güvenli bir bağlantı kurmak için bağlantı devresini yenilemeyi deneyebilir ya da riski kabul ederek bu uyarıyı yok sayabilirsiniz.
+cryptoSafetyPrompt.learnMore=Ayrıntılı bilgi alın
+cryptoSafetyPrompt.primaryAction=Sekmenin Devresini Yenile
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Uyarıyı Yok Say
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/vi/torbutton.properties b/chrome/locale/vi/torbutton.properties
index 3a3fe0e3..7d5ddf92 100644
--- a/chrome/locale/vi/torbutton.properties
+++ b/chrome/locale/vi/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=Always
onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=Các Dịch vụ Onion
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=Biết thêm
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/zh-CN/torbutton.properties b/chrome/locale/zh-CN/torbutton.properties
index f67bf83d..cb20b35a 100644
--- a/chrome/locale/zh-CN/torbutton.properties
+++ b/chrome/locale/zh-CN/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=始终
onionLocation.askEverytime=每次询问
onionLocation.prioritizeOnionsDescription=请优先使用 .onion 站点。
onionLocation.onionServicesTitle=洋葱服务
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=了解更多
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
diff --git a/chrome/locale/zh-TW/torbutton.properties b/chrome/locale/zh-TW/torbutton.properties
index b0ca4ab9..047e9c56 100644
--- a/chrome/locale/zh-TW/torbutton.properties
+++ b/chrome/locale/zh-TW/torbutton.properties
@@ -138,3 +138,13 @@ onionLocation.always=總是
onionLocation.askEverytime=每次詢問
onionLocation.prioritizeOnionsDescription=優先使用洋蔥網站。
onionLocation.onionServicesTitle=洋蔥服務
+
+# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
+cryptoSafetyPrompt.whatCanHeading=What can you do about it?
+cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
+cryptoSafetyPrompt.learnMore=了解更多
+cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
+cryptoSafetyPrompt.primaryActionAccessKey=R
+cryptoSafetyPrompt.secondaryAction=Dismiss Warning
+cryptoSafetyPrompt.secondaryActionAccessKey=B
1
0

[tor-browser/tor-browser-78.10.0esr-10.5-1] Merge remote-tracking branch 'richardgl/27476_rev2' into tor-browser-78.10.0esr-10.5-1
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit 41c6d99e17639bab7cfc4b5e1e6f971508406acc
Merge: 627d83ded2fb 6d8d49baa9ae
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 19:34:32 2021 +0000
Merge remote-tracking branch 'richardgl/27476_rev2' into tor-browser-78.10.0esr-10.5-1
browser/actors/NetErrorParent.jsm | 8 +
browser/base/content/aboutNetError.js | 8 +-
browser/base/content/browser-siteIdentity.js | 2 +-
browser/base/content/browser.js | 10 +
browser/base/content/browser.xhtml | 2 +
browser/components/BrowserGlue.jsm | 14 +
browser/components/about/AboutRedirector.cpp | 4 +
browser/components/about/components.conf | 1 +
browser/components/moz.build | 1 +
browser/components/torconnect/TorConnectChild.jsm | 9 +
browser/components/torconnect/TorConnectParent.jsm | 117 ++++++++
.../torconnect/content/aboutTorConnect.css | 96 +++++++
.../torconnect/content/aboutTorConnect.js | 299 +++++++++++++++++++++
.../torconnect/content/aboutTorConnect.xhtml | 46 ++++
.../components/torconnect/content/onion-slash.svg | 7 +
browser/components/torconnect/content/onion.svg | 3 +
.../torconnect/content/torBootstrapUrlbar.js | 136 ++++++++++
.../torconnect/content/torconnect-urlbar.css | 55 ++++
.../torconnect/content/torconnect-urlbar.inc.xhtml | 11 +
browser/components/torconnect/jar.mn | 7 +
browser/components/torconnect/moz.build | 6 +
.../components/torpreferences/content/torPane.js | 46 ++++
.../torpreferences/content/torPane.xhtml | 23 ++
.../torpreferences/content/torPreferences.css | 121 +++++++++
browser/modules/TorProcessService.jsm | 12 +
browser/modules/TorProtocolService.jsm | 124 ++++++++-
browser/modules/TorStrings.jsm | 72 +++++
browser/modules/moz.build | 1 +
browser/themes/shared/jar.inc.mn | 1 +
browser/themes/shared/onionPattern.css | 121 +++++++++
browser/themes/shared/onionPattern.inc.xhtml | 207 ++++++++++++++
browser/themes/shared/urlbar-searchbar.inc.css | 2 +
dom/base/Document.cpp | 51 +++-
toolkit/modules/RemotePageAccessManager.jsm | 20 ++
.../themes/shared/in-content/info-pages.inc.css | 15 +-
.../lib/environments/browser-window.js | 4 +
36 files changed, 1650 insertions(+), 12 deletions(-)
1
0

[tor-browser/tor-browser-78.10.0esr-10.5-1] Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit 6d8d49baa9aebb4f5872040f8646adc4429dec30
Author: Richard Pospesel <richard(a)torproject.org>
Date: Wed Apr 28 23:09:34 2021 -0500
Bug 27476: Implement about:torconnect captive portal within Tor Browser
- implements new about:torconnect page as tor-launcher replacement
- adds tor connection status to url bar and tweaks UX when not online
- adds new torconnect component to browser
- tor process management functionality remains implemented in tor-launcher through the TorProtocolService module
- the onion pattern from about:tor migrated to an .inc.xhtml file now used by both about:tor and about:torconnect
- various design tweaks and resusability fixes to onion pattern
- adds warning/error box to about:preferences#tor when not connected to tor
- explicitly allows about:torconnect URIs to ignore Resist Fingerprinting (RFP)
- various tweaks to info-pages.inc.css for about:torconnect (also affects other firefox info pages)
---
browser/actors/NetErrorParent.jsm | 8 +
browser/base/content/aboutNetError.js | 8 +-
browser/base/content/browser-siteIdentity.js | 2 +-
browser/base/content/browser.js | 10 +
browser/base/content/browser.xhtml | 2 +
browser/components/BrowserGlue.jsm | 14 +
browser/components/about/AboutRedirector.cpp | 4 +
browser/components/about/components.conf | 1 +
browser/components/moz.build | 1 +
browser/components/torconnect/TorConnectChild.jsm | 9 +
browser/components/torconnect/TorConnectParent.jsm | 117 ++++++++
.../torconnect/content/aboutTorConnect.css | 96 +++++++
.../torconnect/content/aboutTorConnect.js | 299 +++++++++++++++++++++
.../torconnect/content/aboutTorConnect.xhtml | 46 ++++
.../components/torconnect/content/onion-slash.svg | 7 +
browser/components/torconnect/content/onion.svg | 3 +
.../torconnect/content/torBootstrapUrlbar.js | 136 ++++++++++
.../torconnect/content/torconnect-urlbar.css | 55 ++++
.../torconnect/content/torconnect-urlbar.inc.xhtml | 11 +
browser/components/torconnect/jar.mn | 7 +
browser/components/torconnect/moz.build | 6 +
.../components/torpreferences/content/torPane.js | 46 ++++
.../torpreferences/content/torPane.xhtml | 23 ++
.../torpreferences/content/torPreferences.css | 121 +++++++++
browser/modules/TorProcessService.jsm | 12 +
browser/modules/TorProtocolService.jsm | 124 ++++++++-
browser/modules/TorStrings.jsm | 72 +++++
browser/modules/moz.build | 1 +
browser/themes/shared/jar.inc.mn | 1 +
browser/themes/shared/onionPattern.css | 121 +++++++++
browser/themes/shared/onionPattern.inc.xhtml | 207 ++++++++++++++
browser/themes/shared/urlbar-searchbar.inc.css | 2 +
dom/base/Document.cpp | 51 +++-
toolkit/modules/RemotePageAccessManager.jsm | 20 ++
.../themes/shared/in-content/info-pages.inc.css | 15 +-
.../lib/environments/browser-window.js | 4 +
36 files changed, 1650 insertions(+), 12 deletions(-)
diff --git a/browser/actors/NetErrorParent.jsm b/browser/actors/NetErrorParent.jsm
index 035195391554..fa3cbf23fcb7 100644
--- a/browser/actors/NetErrorParent.jsm
+++ b/browser/actors/NetErrorParent.jsm
@@ -17,6 +17,10 @@ const { SessionStore } = ChromeUtils.import(
);
const { HomePage } = ChromeUtils.import("resource:///modules/HomePage.jsm");
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+
const PREF_SSL_IMPACT_ROOTS = [
"security.tls.version.",
"security.ssl3.",
@@ -318,6 +322,10 @@ class NetErrorParent extends JSWindowActorParent {
break;
}
}
+ break;
+ case "ShouldShowTorConnect":
+ return TorProtocolService.shouldShowTorConnect();
}
+ return undefined;
}
}
diff --git a/browser/base/content/aboutNetError.js b/browser/base/content/aboutNetError.js
index 60db17f46eb9..238b4930461c 100644
--- a/browser/base/content/aboutNetError.js
+++ b/browser/base/content/aboutNetError.js
@@ -194,8 +194,14 @@ async function setErrorPageStrings(err) {
document.l10n.setAttributes(titleElement, title);
}
-function initPage() {
+async function initPage() {
var err = getErrorCode();
+ if (
+ err === "proxyConnectFailure" &&
+ (await RPMSendQuery("ShouldShowTorConnect"))
+ ) {
+ document.location.replace("about:torconnect");
+ }
// List of error pages with an illustration.
let illustratedErrors = [
"malformedURI",
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index 539d6d4056a3..2a3431172886 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -57,7 +57,7 @@ var gIdentityHandler = {
* RegExp used to decide if an about url should be shown as being part of
* the browser UI.
*/
- _secureInternalUIWhitelist: (AppConstants.TOR_BROWSER_UPDATE ? /^(?:accounts|addons|cache|certificate|config|crashes|downloads|license|logins|preferences|protections|rights|sessionrestore|support|welcomeback|tor|tbupdate)(?:[?#]|$)/i : /^(?:accounts|addons|cache|certificate|config|crashes|downloads|license|logins|preferences|protections|rights|sessionrestore|support|welcomeback|tor)(?:[?#]|$)/i),
+ _secureInternalUIWhitelist: (AppConstants.TOR_BROWSER_UPDATE ? /^(?:accounts|addons|cache|certificate|config|crashes|downloads|license|logins|preferences|protections|rights|sessionrestore|support|welcomeback|tor|torconnect|tbupdate)(?:[?#]|$)/i : /^(?:accounts|addons|cache|certificate|config|crashes|downloads|license|logins|preferences|protections|rights|sessionrestore|support|welcomeback|tor|torconnect)(?:[?#]|$)/i),
/**
* Whether the established HTTPS connection is considered "broken".
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 04f8752b93f4..916cd69320cb 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -77,6 +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",
Translation: "resource:///modules/translation/TranslationParent.jsm",
OnionAliasStore: "resource:///modules/OnionAliasStore.jsm",
UITour: "resource:///modules/UITour.jsm",
@@ -633,6 +634,7 @@ var gPageIcons = {
var gInitialPages = [
"about:tor",
+ "about:torconnect",
"about:blank",
"about:newtab",
"about:home",
@@ -1959,6 +1961,8 @@ var gBrowserInit = {
}
this._loadHandled = true;
+
+ TorBootstrapUrlbar.init();
},
_cancelDelayedStartup() {
@@ -2490,6 +2494,10 @@ var gBrowserInit = {
let uri = window.arguments[0];
let defaultArgs = BrowserHandler.defaultArgs;
+ if (TorProtocolService.shouldShowTorConnect()) {
+ return "about:torconnect";
+ }
+
// If the given URI is different from the homepage, we want to load it.
if (uri != defaultArgs) {
AboutNewTab.noteNonDefaultStartup();
@@ -2582,6 +2590,8 @@ var gBrowserInit = {
OnionAuthPrompt.uninit();
+ TorBootstrapUrlbar.uninit();
+
gAccessibilityServiceIndicator.uninit();
AccessibilityRefreshBlocker.uninit();
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index c2caecc1a416..032db1967c69 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -112,6 +112,7 @@
Services.scriptloader.loadSubScript("chrome://browser/content/search/searchbar.js", this);
Services.scriptloader.loadSubScript("chrome://torbutton/content/tor-circuit-display.js", this);
Services.scriptloader.loadSubScript("chrome://torbutton/content/torbutton.js", this);
+ Services.scriptloader.loadSubScript("chrome://browser/content/torconnect/torBootstrapUrlbar.js", this);
window.onload = gBrowserInit.onLoad.bind(gBrowserInit);
window.onunload = gBrowserInit.onUnload.bind(gBrowserInit);
@@ -1055,6 +1056,7 @@
data-l10n-id="urlbar-go-button"/>
<hbox id="page-action-buttons" context="pageActionContextMenu">
<toolbartabstop/>
+#include ../../components/torconnect/content/torconnect-urlbar.inc.xhtml
<hbox id="contextual-feature-recommendation" role="button" hidden="true">
<hbox id="cfr-label-container">
<label id="cfr-label"/>
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 5f708fca3d5c..2bd28ec1b04c 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -503,6 +503,20 @@ let JSWINDOWACTORS = {
allFrames: true,
},
+ TorConnect: {
+ parent: {
+ moduleURI: "resource:///modules/TorConnectParent.jsm",
+ },
+ child: {
+ moduleURI: "resource:///modules/TorConnectChild.jsm",
+ events: {
+ DOMWindowCreated: {},
+ },
+ },
+
+ matches: ["about:torconnect"],
+ },
+
Translation: {
parent: {
moduleURI: "resource:///modules/translation/TranslationParent.jsm",
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index e7c377d655e7..db5f3ead4bb8 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -120,6 +120,10 @@ static const RedirEntry kRedirMap[] = {
nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
nsIAboutModule::HIDE_FROM_ABOUTABOUT},
#endif
+ {"torconnect", "chrome://browser/content/torconnect/aboutTorConnect.xhtml",
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT},
};
static nsAutoCString GetAboutModuleName(nsIURI* aURI) {
diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf
index 8e04467c05da..01c99ad4ed0c 100644
--- a/browser/components/about/components.conf
+++ b/browser/components/about/components.conf
@@ -26,6 +26,7 @@ pages = [
'robots',
'sessionrestore',
'tabcrashed',
+ 'torconnect',
'welcome',
'welcomeback',
]
diff --git a/browser/components/moz.build b/browser/components/moz.build
index b660be047b14..fb90c499c616 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -59,6 +59,7 @@ DIRS += [
'syncedtabs',
'uitour',
'urlbar',
+ 'torconnect',
'torpreferences',
'translation',
]
diff --git a/browser/components/torconnect/TorConnectChild.jsm b/browser/components/torconnect/TorConnectChild.jsm
new file mode 100644
index 000000000000..bd6dd549f156
--- /dev/null
+++ b/browser/components/torconnect/TorConnectChild.jsm
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, The Tor Project, Inc.
+
+var EXPORTED_SYMBOLS = ["TorConnectChild"];
+
+const { RemotePageChild } = ChromeUtils.import(
+ "resource://gre/actors/RemotePageChild.jsm"
+);
+
+class TorConnectChild extends RemotePageChild {}
diff --git a/browser/components/torconnect/TorConnectParent.jsm b/browser/components/torconnect/TorConnectParent.jsm
new file mode 100644
index 000000000000..03b258608b5c
--- /dev/null
+++ b/browser/components/torconnect/TorConnectParent.jsm
@@ -0,0 +1,117 @@
+// Copyright (c) 2021, The Tor Project, Inc.
+
+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 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,
+];
+
+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);
+ }
+ }
+
+ willDestroy() {
+ for (const topic of gActiveTopics) {
+ Services.obs.removeObserver(this.gObserver, topic);
+ }
+ }
+
+ get browser() {
+ return this.browsingContext.top.embedderElement;
+ }
+
+ _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
+ );
+ }
+
+ _GoToBrowserHome() {
+ const window = this.browser.ownerGlobal;
+ window.BrowserHome();
+ }
+
+ receiveMessage(message) {
+ switch (message.name) {
+ case "TorBootstrapErrorOccurred":
+ return TorProtocolService.torBootstrapErrorOccurred();
+ case "TorRetrieveBootstrapStatus":
+ return TorProtocolService.retrieveBootstrapStatus();
+ case "OpenTorAdvancedPreferences":
+ return this._OpenTorAdvancedPreferences();
+ case "GoToBrowserHome":
+ return this._GoToBrowserHome();
+ 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();
+ }
+ return undefined;
+ }
+}
diff --git a/browser/components/torconnect/content/aboutTorConnect.css b/browser/components/torconnect/content/aboutTorConnect.css
new file mode 100644
index 000000000000..eb4277f2ce5e
--- /dev/null
+++ b/browser/components/torconnect/content/aboutTorConnect.css
@@ -0,0 +1,96 @@
+
+/* Copyright (c) 2021, The Tor Project, Inc. */
+
+
+@import url("chrome://browser/skin/error-pages.css");
+
+:root {
+ --onion-opacity: 1;
+ --onion-color: var(--card-outline-color);
+ --onion-radius: 50px;
+}
+
+#connectButton {
+ background-color: #7D4698;
+}
+
+#connectButton:hover {
+ background-color: #59316B;
+}
+
+#progressBackground {
+ position:fixed;
+ padding:0;
+ margin:0;
+ top:0;
+ left:0;
+ width: 0%;
+ height: 7px;
+ background-image: linear-gradient(90deg, rgb(20, 218, 221) 0%, rgb(128, 109, 236) 100%);
+ border-radius: 0;
+}
+
+#connectPageContainer {
+ margin-top: 10vh;
+ width: 50%;
+}
+
+#copyLogButton {
+ position: relative;
+}
+
+#copyLogTooltip {
+ visibility: hidden;
+ display: inline-block;
+ width: 100%;
+
+ position: absolute;
+ z-index: 1;
+ left: 0px;
+ bottom: calc(100% + 6px);
+}
+
+#copyLogTooltip::after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ left: 50%;
+ margin-left: -4px;
+ border-width: 4px;
+ border-style: solid;
+ border-color: #30E60B transparent transparent transparent;
+}
+
+
+#copyLogTooltipText {
+ display: inline-block;
+ background-color: #30E60B;
+ color: #003706;
+ border-radius: 2px;
+ text-align: center;
+ line-height: 13px;
+ font: 11px Regular;
+ font-weight: 400;
+
+ margin-left: auto;
+ margin-right: auto;
+ padding: 4px;
+}
+
+body {
+ padding: 0px !important;
+ justify-content: space-between;
+ background-color: var(--in-content-page-background);
+}
+
+.title {
+ background-image: url("chrome://browser/content/torconnect/onion.svg");
+ -moz-context-properties: fill, fill-opacity;
+ fill-opacity: 1;
+ fill: var(--onion-color);
+}
+
+.title.error {
+ background-image: url("chrome://browser/content/torconnect/onion-slash.svg");
+}
+
diff --git a/browser/components/torconnect/content/aboutTorConnect.js b/browser/components/torconnect/content/aboutTorConnect.js
new file mode 100644
index 000000000000..ad398ccd86f9
--- /dev/null
+++ b/browser/components/torconnect/content/aboutTorConnect.js
@@ -0,0 +1,299 @@
+// Copyright (c) 2021, The Tor Project, Inc.
+
+/* eslint-env mozilla/frame-script */
+
+const kTorProcessReadyTopic = "TorProcessIsReady";
+const kTorProcessExitedTopic = "TorProcessExited";
+const kTorProcessDidNotStartTopic = "TorProcessDidNotStart";
+const kTorBootstrapStatusTopic = "TorBootstrapStatus";
+const kTorBootstrapErrorTopic = "TorBootstrapError";
+const kTorLogHasWarnOrErrTopic = "TorLogHasWarnOrErr";
+
+class AboutTorConnect {
+ log(...args) {
+ console.log(...args);
+ }
+
+ logError(...args) {
+ console.error(...args);
+ }
+
+ logDebug(...args) {
+ console.debug(...args);
+ }
+
+ 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 elemConnectButton() {
+ return this.getElem("connectButton");
+ }
+ get elemCopyLogButton() {
+ return this.getElem("copyLogButton");
+ }
+ get elemCopyLogTooltip() {
+ return this.getElem("copyLogTooltip");
+ }
+ get elemCopyLogTooltipText() {
+ return this.getElem("copyLogTooltipText");
+ }
+ 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];
+ }
+
+ static get STATE_INITIAL() {
+ return "STATE_INITIAL";
+ }
+
+ static get STATE_BOOTSTRAPPING() {
+ return "STATE_BOOTSTRAPPING";
+ }
+
+ static get STATE_BOOTSTRAPPED() {
+ return "STATE_BOOTSTRAPPED";
+ }
+
+ static get STATE_BOOTSTRAP_ERROR() {
+ return "STATE_BOOTSTRAP_ERROR";
+ }
+
+ get state() {
+ return this._state;
+ }
+
+ setInitialUI() {
+ this.setTitle(this.torStrings.torConnect.torConnect);
+ this.elemProgressDesc.textContent =
+ this.torStrings.settings.torPreferencesDescription;
+ this.showElem(this.elemConnectButton);
+ this.showElem(this.elemAdvancedButton);
+ this.hideElem(this.elemCopyLogButton);
+ this.hideElem(this.elemCancelButton);
+ this.hideElem(this.elemProgressContent);
+ this.hideElem(this.elemProgressMeter);
+ this.elemTitle.classList.remove("error");
+ }
+
+ setBootstrappingUI() {
+ this.setTitle(this.torStrings.torConnect.torConnecting);
+ this.hideElem(this.elemConnectButton);
+ this.hideElem(this.elemAdvancedButton);
+ this.hideElem(this.elemCopyLogButton);
+ this.showElem(this.elemCancelButton);
+ this.showElem(this.elemProgressContent);
+ this.showElem(this.elemProgressMeter);
+ this.elemTitle.classList.remove("error");
+ }
+
+ 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.showElem(this.elemProgressContent);
+ this.hideElem(this.elemProgressMeter);
+ this.elemTitle.classList.add("error");
+
+ this.elem
+ }
+
+ goToBrowserHome() {
+ this.hideElem(this.elemCancelButton);
+ RPMSendAsyncMessage("GoToBrowserHome");
+ }
+
+ 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:
+ this.goToBrowserHome();
+ break;
+ }
+ }
+
+ async showErrorMessage(aErrorObj) {
+ if (aErrorObj && aErrorObj.message) {
+ this.setTitle(aErrorObj.message);
+ if (aErrorObj.details) {
+ this.elemProgressDesc.textContent = aErrorObj.details;
+ }
+ }
+
+ let haveErrorOrWarning =
+ (await RPMSendQuery("TorBootstrapErrorOccurred")) ||
+ (await RPMSendQuery("TorLogHasWarnOrErr"));
+ this.showCopyLogButton(haveErrorOrWarning);
+ this.showElem(this.elemConnectButton);
+ }
+
+ showElem(elem) {
+ elem.removeAttribute("hidden");
+ }
+
+ hideElem(elem) {
+ elem.setAttribute("hidden", "true");
+ }
+
+ async connect() {
+ 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);
+ }
+ }
+ }
+
+ restoreCopyLogVisibility() {
+ this.elemCopyLogButton.setAttribute("hidden", true);
+ }
+
+ showCopyLogButton() {
+ this.elemCopyLogButton.removeAttribute("hidden");
+ }
+
+ 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 >= 100) {
+ this.state = AboutTorConnect.STATE_BOOTSTRAPPED;
+ } else if (percentComplete > 0) {
+ this.state = AboutTorConnect.STATE_BOOTSTRAPPING;
+ }
+
+ // Due to async, status might have changed. Do not override desc if so.
+ if (this.state === AboutTorConnect.STATE_BOOTSTRAPPING) {
+ this.hideElem(this.elemConnectButton);
+ }
+ }
+
+ stopTorBootstrap() {
+ RPMSendAsyncMessage("TorStopBootstrap");
+ }
+
+ setTitle(title) {
+ const titleElement = document.querySelector(".title-text");
+ titleElement.textContent = title;
+ document.title = title;
+ }
+
+ initButtons() {
+ this.elemAdvancedButton.textContent = this.torStrings.torConnect.torConfigure;
+ this.elemAdvancedButton.addEventListener("click", () => {
+ RPMSendAsyncMessage("OpenTorAdvancedPreferences");
+ });
+
+ this.elemConnectButton.textContent =
+ this.torStrings.torConnect.torConnectButton;
+ this.elemConnectButton.addEventListener("click", () => {
+ this.connect();
+ });
+
+ this.elemCancelButton.textContent = this.torStrings.torConnect.cancel;
+ this.elemCancelButton.addEventListener("click", () => {
+ this.stopTorBootstrap();
+ });
+
+ // sets the text content while keping the child elements intact
+ this.elemCopyLogButton.childNodes[0].nodeValue =
+ this.torStrings.torConnect.copyLog;
+ this.elemCopyLogButton.addEventListener("click", async () => {
+ const copiedMessage = await RPMSendQuery("TorCopyLog");
+ aboutTorConnect.elemCopyLogTooltipText.textContent = copiedMessage;
+ aboutTorConnect.elemCopyLogTooltip.style.visibility = "visible";
+
+ // clear previous timeout if one already exists
+ if (aboutTorConnect.copyLogTimeoutId) {
+ clearTimeout(aboutTorConnect.copyLogTimeoutId);
+ }
+
+ // hide tooltip after X ms
+ const TOOLTIP_TIMEOUT = 2000;
+ aboutTorConnect.copyLogTimeoutId = setTimeout(function() {
+ aboutTorConnect.elemCopyLogTooltip.style.visibility = "hidden";
+ aboutTorConnect.copyLogTimeoutId = 0;
+ }, TOOLTIP_TIMEOUT);
+ });
+ }
+
+ initObservers() {
+ RPMAddMessageListener(kTorBootstrapErrorTopic, ({ data }) => {
+ this.showCopyLogButton(true);
+ this.stopTorBootstrap();
+ this.showErrorMessage(data);
+ });
+ RPMAddMessageListener(kTorLogHasWarnOrErrTopic, () => {
+ this.showCopyLogButton(true);
+ });
+ RPMAddMessageListener(kTorProcessDidNotStartTopic, ({ data }) => {
+ this.showErrorMessage(data);
+ });
+ RPMAddMessageListener(kTorBootstrapStatusTopic, ({ data }) => {
+ this.updateBootstrapProgress(data);
+ });
+ }
+
+ async init() {
+ this.torStrings = await RPMSendQuery("GetTorStrings");
+ document.documentElement.setAttribute(
+ "dir",
+ await RPMSendQuery("GetDirection")
+ );
+ this.initButtons();
+ this.initObservers();
+ 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");
+ }
+}
+
+const aboutTorConnect = new AboutTorConnect();
+aboutTorConnect.init();
diff --git a/browser/components/torconnect/content/aboutTorConnect.xhtml b/browser/components/torconnect/content/aboutTorConnect.xhtml
new file mode 100644
index 000000000000..e0f813f62d67
--- /dev/null
+++ b/browser/components/torconnect/content/aboutTorConnect.xhtml
@@ -0,0 +1,46 @@
+<!-- Copyright (c) 2021, The Tor Project, Inc. -->
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" />
+ <link rel="stylesheet" href="chrome://browser/skin/onionPattern.css" type="text/css" media="all" />
+ <link rel="stylesheet" href="chrome://browser/content/torconnect/aboutTorConnect.css" type="text/css" media="all" />
+ </head>
+ <body>
+ <div id="progressBackground"></div>
+ <div id="connectPageContainer" class="container">
+ <div id="text-container">
+ <div class="title">
+ <h1 class="title-text"/>
+ </div>
+ <div id="connectLongContent">
+ <div id="connectShortDesc">
+ <p id="connectShortDescText" />
+ </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="connectButtonContainer" class="button-container">
+ <button id="advancedButton" hidden="true"></button>
+ <button id="copyLogButton" hidden="true">
+ <div id="copyLogTooltip">
+ <div id="copyLogTooltipText"></div>
+ </div>
+ </button>
+ <button id="cancelButton" hidden="true"></button>
+ <button id="connectButton" class="primary try-again" hidden="true"></button>
+ </div>
+ </div>
+ </div>
+#include ../../../themes/shared/onionPattern.inc.xhtml
+ </body>
+ <script src="chrome://browser/content/torconnect/aboutTorConnect.js"/>
+</html>
diff --git a/browser/components/torconnect/content/onion-slash.svg b/browser/components/torconnect/content/onion-slash.svg
new file mode 100644
index 000000000000..efb09700ec0b
--- /dev/null
+++ b/browser/components/torconnect/content/onion-slash.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <g fill-opacity="context-fill-opacity" fill="context-fill">
+ <path d="M3.409559 13.112147C3.409559 13.112147 8.200807 8.103115 8.200807 8.103115C8.200807 8.103115 8.200807 6.516403 8.200807 6.516403C8.620819 6.516403 9.009719 6.703075 9.274171 6.998639C9.274171 6.998639 10.160863 6.080835 10.160863 6.080835C9.663071 5.567487 8.978607 5.256367 8.200807 5.256367C8.200807 5.256367 8.200807 4.400787 8.200807 4.400787C9.196391 4.400787 10.098639 4.805243 10.736435 5.458595C10.736435 5.458595 11.623127 4.540791 11.623127 4.540791C10.751991 3.669655 9.538623 3.125195 8.200807 3.125195C8.200807 3.125195 8.200807 2.269615 8.200807 2.269615C9.756407 2.269615 11.172003 2.907411 12.214255 3.918551C12.214255 3.918551 13.100947 3.000747 13.100947 3.000747C11.825355 1.756267 10.098639 0.994023 8.185251 0.994023C4.311807 0.994023 1.185051 4.120779 1.185051 7.994223C1.185051 10.016503 2.040631 11.836555 3.409559 13.112147C3.409559 13.112147 3.409559 13.112147 3.409559 13.112147"/>
+ <path d="M14.205423 4.416343C14.205423 4.416343 13.287619 5.380815 13.287619 5.380815C13.692075 6.158615 13.909859 7.045307 13.909859 7.994223C13.909859 11.152091 11.358675 13.718831 8.200807 13.718831C8.200807 13.718831 8.200807 12.863251 8.200807 12.863251C10.891995 12.863251 13.069835 10.669855 13.069835 7.978667C13.069835 7.278647 12.929831 6.625295 12.665379 6.018611C12.665379 6.018611 11.685351 7.045307 11.685351 7.045307C11.763131 7.340871 11.809799 7.651991 11.809799 7.963111C11.809799 9.954279 10.207531 11.556547 8.216363 11.572103C8.216363 11.572103 8.216363 10.716523 8.216363 10.716523C9.725295 10.700967 10.954219 9.472043 10.954219 7.963111C10.954219 7.916443 10.954219 7.854219 10.954219 7.807551C10.954219 7.807551 4.887379 14.169955 4.887379 14.169955C5.867407 14.698859 6.987439 14.994423 8.185251 14.994423C12.058695 14.994423 15.185451 11.867667 15.185451 7.994223C15.185451 6.687519 14.827663 5.474151 14.205423 4.416343C14.205423 4.416343 14.205423 4.416343 14.20542
3 4.416343"/>
+ <path d="M1.791735 15.461103C1.402835 15.461103 1.045047 15.212207 0.889487 14.838863C0.733927 14.465519 0.827267 14.014395 1.107271 13.734387C1.107271 13.734387 13.458735 0.822907 13.458735 0.822907C13.847635 0.434007 14.454319 0.449563 14.827663 0.838467C15.201007 1.227367 15.216563 1.865163 14.843223 2.269619C14.843223 2.269619 2.491759 15.181099 2.491759 15.181099C2.289531 15.352215 2.040635 15.461107 1.791739 15.461107C1.791739 15.461107 1.791735 15.461103 1.791735 15.461103"/>
+ </g>
+</svg>
diff --git a/browser/components/torconnect/content/onion.svg b/browser/components/torconnect/content/onion.svg
new file mode 100644
index 000000000000..30cd52ba5c51
--- /dev/null
+++ b/browser/components/torconnect/content/onion.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M12.0246161,21.8174863 L12.0246161,20.3628098 C16.6324777,20.3495038 20.3634751,16.6108555 20.3634751,11.9996673 C20.3634751,7.38881189 16.6324777,3.65016355 12.0246161,3.63685757 L12.0246161,2.18218107 C17.4358264,2.1958197 21.8178189,6.58546322 21.8178189,11.9996673 C21.8178189,17.4142042 17.4358264,21.8041803 12.0246161,21.8174863 L12.0246161,21.8174863 Z M12.0246161,16.7259522 C14.623607,16.7123136 16.7272828,14.6023175 16.7272828,11.9996673 C16.7272828,9.39734991 14.623607,7.28735377 12.0246161,7.27371516 L12.0246161,5.81937131 C15.4272884,5.8326773 18.1819593,8.59400123 18.1819593,11.9996673 C18.1819593,15.4056661 15.4272884,18.1669901 12.0246161,18.1802961 L12.0246161,16.7259522 Z M12.0246161,9.45556355 C13.4187503,9.46886953 14.5454344,10.6022066 14.5454344,11.9996673 C14.5454344,13.3974608 13.4187503,14.5307978 12.0246161,14.5441038 L12.0246161,9.45556355 Z M0,11.9996673 C0,18.6273771 5.37229031,24 12,24 C18
.6273771,24 24,18.6273771 24,11.9996673 C24,5.37229031 18.6273771,0 12,0 C5.37229031,0 0,5.37229031 0,11.9996673 Z"/>
+</svg>
\ No newline at end of file
diff --git a/browser/components/torconnect/content/torBootstrapUrlbar.js b/browser/components/torconnect/content/torBootstrapUrlbar.js
new file mode 100644
index 000000000000..55a595b2dbab
--- /dev/null
+++ b/browser/components/torconnect/content/torBootstrapUrlbar.js
@@ -0,0 +1,136 @@
+// Copyright (c) 2021, The Tor Project, Inc.
+
+"use strict";
+
+ const TorConnectionStatus = {
+ invalid: -1,
+ offline: 0,
+ connecting: 1,
+ connected: 2,
+ failure: 3,
+ };
+var TorBootstrapUrlbar;
+
+{
+ 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;
+ },
+
+ _torConnectBox : null,
+ get TorConnectBox() {
+ if (!this._torConnectBox) {
+ this._torConnectBox =
+ browser.ownerGlobal.document.getElementById("torconnect-box");
+ }
+ return this._torConnectBox;
+ },
+
+ _torConnectLabel : null,
+ get TorConnectLabel() {
+ if (!this._torConnectLabel) {
+ this._torConnectLabel =
+ browser.ownerGlobal.document.getElementById("torconnect-label");
+ }
+ 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;
+ }
+ }
+ else
+ {
+ this._connectionStatus = TorConnectionStatus.invalid;
+ }
+
+ 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;
+ }
+ },
+
+ observe(aSubject, aTopic, aData) {
+ const obj = aSubject?.wrappedJSObject;
+
+ 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/torconnect/content/torconnect-urlbar.css b/browser/components/torconnect/content/torconnect-urlbar.css
new file mode 100644
index 000000000000..7331f3cd48df
--- /dev/null
+++ b/browser/components/torconnect/content/torconnect-urlbar.css
@@ -0,0 +1,55 @@
+/*
+ ensure our torconnect button is always visible (same rule as for the bookmark button)
+*/
+hbox.urlbar-page-action#torconnect-box {
+ display: -moz-inline-box!important;
+ height: 28px;
+}
+/* disable the button-like default css */
+hbox.urlbar-page-action#torconnect-box:hover,
+hbox.urlbar-page-action#torconnect-box:active {
+ background-color: inherit!important;
+}
+
+label#torconnect-label {
+ line-height: 28px;
+ margin: 0 0.1em;
+ opacity: 0.6;
+}
+
+/* set appropriate sizes for the non-standard ui densities */
+:root[uidensity=compact] {
+ hbox.urlbar-page-action#torconnect-box {
+ height: 24px;
+ }
+ label#torconnect-label {
+ line-height: 24px;
+ }
+}
+:root[uidensity=touch] {
+ hbox.urlbar-page-action#torconnect-box {
+ height: 30px;
+ }
+ label#torconnect-label {
+ line-height: 30px;
+ }
+}
+
+/* hide when hidden attribute is set */
+hbox.urlbar-page-action#torconnect-box[hidden="true"],
+/* hide when user is typing in URL bar */
+#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #torconnect-box {
+ display: none!important;
+}
+
+/* hide urlbar's placeholder text when not connectd to tor */
+hbox#urlbar-input-container[torconnect="offline"] input#urlbar-input::placeholder,
+hbox#urlbar-input-container[torconnect="connecting"] input#urlbar-input::placeholder {
+ opacity: 0;
+}
+
+/* hide search suggestions when not connected to tor */
+hbox#urlbar-input-container[torconnect="offline"] + vbox.urlbarView,
+hbox#urlbar-input-container[torconnect="connecting"] + vbox.urlbarView {
+ display: none!important;
+}
diff --git a/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml b/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml
new file mode 100644
index 000000000000..bdf9d8f0df00
--- /dev/null
+++ b/browser/components/torconnect/content/torconnect-urlbar.inc.xhtml
@@ -0,0 +1,11 @@
+# Copyright (c) 2021, The Tor Project, Inc.
+
+<hbox id="torconnect-box"
+ class="urlbar-icon-wrapper urlbar-page-action"
+ role="status"
+ hidden="true">
+ <image id="torconnect-button" role="presentation"/>
+ <hbox id="torconnect-container">
+ <label id="torconnect-label"/>
+ </hbox>
+</hbox>
\ No newline at end of file
diff --git a/browser/components/torconnect/jar.mn b/browser/components/torconnect/jar.mn
new file mode 100644
index 000000000000..ed8a4de299b2
--- /dev/null
+++ b/browser/components/torconnect/jar.mn
@@ -0,0 +1,7 @@
+browser.jar:
+ content/browser/torconnect/torBootstrapUrlbar.js (content/torBootstrapUrlbar.js)
+ content/browser/torconnect/aboutTorConnect.css (content/aboutTorConnect.css)
+* content/browser/torconnect/aboutTorConnect.xhtml (content/aboutTorConnect.xhtml)
+ content/browser/torconnect/aboutTorConnect.js (content/aboutTorConnect.js)
+ content/browser/torconnect/onion.svg (content/onion.svg)
+ content/browser/torconnect/onion-slash.svg (content/onion-slash.svg)
diff --git a/browser/components/torconnect/moz.build b/browser/components/torconnect/moz.build
new file mode 100644
index 000000000000..eb29c31a4243
--- /dev/null
+++ b/browser/components/torconnect/moz.build
@@ -0,0 +1,6 @@
+JAR_MANIFESTS += ['jar.mn']
+
+EXTRA_JS_MODULES += [
+ 'TorConnectChild.jsm',
+ 'TorConnectParent.jsm',
+]
diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js
index 49054b5dac6a..66213ceb7789 100644
--- a/browser/components/torpreferences/content/torPane.js
+++ b/browser/components/torpreferences/content/torPane.js
@@ -1,5 +1,7 @@
"use strict";
+/* global Services */
+
const { TorProtocolService } = ChromeUtils.import(
"resource:///modules/TorProtocolService.jsm"
);
@@ -62,6 +64,11 @@ const gTorPane = (function() {
category: {
title: "label#torPreferences-labelCategory",
},
+ messageBox: {
+ box: "div#torPreferences-connectMessageBox",
+ message: "td#torPreferences-connectMessageBox-message",
+ button: "button#torPreferences-connectMessageBox-button",
+ },
torPreferences: {
header: "h1#torPreferences-header",
description: "span#torPreferences-description",
@@ -112,6 +119,9 @@ const gTorPane = (function() {
let retval = {
// cached frequently accessed DOM elements
+ _messageBox: null,
+ _messageBoxMessage: null,
+ _messageBoxButton: null,
_useBridgeCheckbox: null,
_bridgeSelectionRadiogroup: null,
_builtinBridgeOption: null,
@@ -161,6 +171,42 @@ const gTorPane = (function() {
let prefpane = document.getElementById("mainPrefPane");
+ // 'Connect to Tor' Message Bar
+
+ this._messageBox = prefpane.querySelector(selectors.messageBox.box);
+ this._messageBoxMessage = prefpane.querySelector(selectors.messageBox.message);
+ this._messageBoxButton = prefpane.querySelector(selectors.messageBox.button);
+ // wire up connect button
+ this._messageBoxButton.addEventListener("click", () => {
+ TorProtocolService.connect();
+ let win = Services.wm.getMostRecentWindow("navigator:browser");
+ win.switchToTabHavingURI("about:torconnect");
+ });
+
+ let populateMessagebox = () => {
+ if (TorProtocolService.shouldShowTorConnect()) {
+ // set messagebox style and text
+ if (TorProtocolService.torBootstrapErrorOccurred()) {
+ this._messageBox.className = "error";
+ this._messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage;
+ this._messageBoxButton.innerText = TorStrings.torConnect.tryAgain;
+ } else {
+ this._messageBox.className = "warning";
+ this._messageBoxMessage.innerText = TorStrings.torConnect.connectMessage;
+ this._messageBoxButton.innerText = TorStrings.torConnect.torConnectButton;
+ }
+ } else {
+ this._messageBox.className = "hidden";
+ this._messageBoxMessage.innerText = "";
+ this._messageBoxButton.innerText = "";
+ }
+ }
+ populateMessagebox();
+ // update the messagebox whenever we come back to the page
+ window.addEventListener("focus", val => {
+ populateMessagebox();
+ });
+
// Heading
prefpane.querySelector(selectors.torPreferences.header).innerText =
TorStrings.settings.torPreferencesHeading;
diff --git a/browser/components/torpreferences/content/torPane.xhtml b/browser/components/torpreferences/content/torPane.xhtml
index 3c966b2b3726..88f82c37a3c9 100644
--- a/browser/components/torpreferences/content/torPane.xhtml
+++ b/browser/components/torpreferences/content/torPane.xhtml
@@ -3,6 +3,29 @@
<script type="application/javascript"
src="chrome://browser/content/torpreferences/torPane.js"/>
<html:template id="template-paneTor">
+
+<!-- Tor Connect Message Box -->
+<groupbox data-category="paneTor" hidden="true">
+ <html:div id="torPreferences-connectMessageBox"
+ class="subcategory"
+ data-category="paneTor"
+ hidden="true">
+ <html:table >
+ <html:tr>
+ <html:td>
+ <html:div id="torPreferences-connectMessageBox-icon"/>
+ </html:td>
+ <html:td id="torPreferences-connectMessageBox-message">
+ </html:td>
+ <html:td>
+ <html:button id="torPreferences-connectMessageBox-button">
+ </html:button>
+ </html:td>
+ </html:tr>
+ </html:table>
+ </html:div>
+</groupbox>
+
<hbox id="torPreferencesCategory"
class="subcategory"
data-category="paneTor"
diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css
index 4dac2c457823..f125936dac74 100644
--- a/browser/components/torpreferences/content/torPreferences.css
+++ b/browser/components/torpreferences/content/torPreferences.css
@@ -2,6 +2,127 @@
list-style-image: url("chrome://browser/content/torpreferences/torPreferencesIcon.svg");
}
+/* Connect Message Box */
+
+#torPreferences-connectMessageBox {
+ display: block;
+ position: relative;
+
+ width: auto;
+ min-height: 32px;
+ border-radius: 4px;
+ padding: 4px;
+}
+
+#torPreferences-connectMessageBox.hidden {
+ display: none;
+}
+
+#torPreferences-connectMessageBox.error {
+ background-color: var(--red-60);
+ color: white;
+}
+
+#torPreferences-connectMessageBox.warning {
+ background-color: var(--yellow-50);
+ color: var(--yellow-90);
+}
+
+#torPreferences-connectMessageBox table {
+ border-collapse: collapse;
+ width: 100%;
+}
+
+#torPreferences-connectMessageBox td {
+ vertical-align: top;
+ padding: 0px;
+}
+
+#torPreferences-connectMessageBox td:first-child {
+ width: 24px;
+}
+
+#torPreferences-connectMessageBox-icon {
+ display: block;
+ width: 16px;
+ height: 16px;
+ padding: 4px;
+
+ mask-repeat: no-repeat !important;
+ mask-size: 16px !important;
+ mask-position: 4px 4px !important;
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-icon
+{
+ mask: url("chrome://browser/skin/onion-slash.svg");
+ background-color: white;
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-icon
+{
+ mask: url("chrome://global/skin/icons/warning.svg");
+ background-color: black;
+}
+
+#torPreferences-connectMessageBox-message {
+ display: block;
+ line-height: 16px;
+ font-size: 13px;
+ margin-right: 8px;
+ padding-left: 4px!important;
+ padding-top: 4px!important;
+}
+
+#torPreferences-connectMessageBox-button {
+ display: block;
+ width: auto;
+ height: 24px;
+ line-height: 24px;
+ min-height: 24px;
+ max-height: 24px;
+ margin: 0px;
+
+ border-radius: 2px;
+ border: 0;
+ padding-left: 8px;
+ padding-right: 8px;
+ margin-left: auto;
+ margin-right: 0px;
+
+ font-size: 11px;
+ font-weight: 400;
+ white-space: nowrap;
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button {
+ background-color: var(--red-70);
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:hover {
+ background-color: var(--red-80);
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:active {
+ background-color: var(--red-90);
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button {
+ background-color: var(--yellow-60);
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:hover {
+ background-color: var(--yellow-70);
+ color: white!important;
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:active {
+ background-color: var(--yellow-80);
+ color: white!important;
+}
+
+/* Advanced Settings */
+
#torPreferences-advanced-grid {
display: grid;
grid-template-columns: auto 1fr;
diff --git a/browser/modules/TorProcessService.jsm b/browser/modules/TorProcessService.jsm
new file mode 100644
index 000000000000..201e331b2806
--- /dev/null
+++ b/browser/modules/TorProcessService.jsm
@@ -0,0 +1,12 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorProcessService"];
+
+var TorProcessService = {
+ get isBootstrapDone() {
+ const svc = Cc["@torproject.org/torlauncher-process-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ return svc.mIsBootstrapDone;
+ },
+};
diff --git a/browser/modules/TorProtocolService.jsm b/browser/modules/TorProtocolService.jsm
index b4e6ed9a3253..fc7f2c884aa2 100644
--- a/browser/modules/TorProtocolService.jsm
+++ b/browser/modules/TorProtocolService.jsm
@@ -1,3 +1,5 @@
+// Copyright (c) 2021, The Tor Project, Inc.
+
"use strict";
var EXPORTED_SYMBOLS = ["TorProtocolService"];
@@ -11,6 +13,10 @@ var TorProtocolService = {
Ci.nsISupports
).wrappedJSObject,
+ _tlproc: Cc["@torproject.org/torlauncher-process-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject,
+
// 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
@@ -196,11 +202,11 @@ var TorProtocolService = {
// writes current tor settings to disk
flushSettings() {
- this._tlps.TorSendCommand("SAVECONF");
+ this.sendCommand("SAVECONF");
},
- getLog() {
- let countObj = { value: 0 };
+ getLog(countObj) {
+ countObj = countObj || { value: 0 };
let torLog = this._tlps.TorGetLog(countObj);
return torLog;
},
@@ -209,4 +215,116 @@ var TorProtocolService = {
get ownsTorDaemon() {
return TorLauncherUtil.shouldStartAndOwnTor;
},
+
+ // Assumes `ownsTorDaemon` is true
+ isNetworkDisabled() {
+ const reply = TorProtocolService._tlps.TorGetConfBool(
+ "DisableNetwork",
+ true
+ );
+ if (TorProtocolService._tlps.TorCommandSucceeded(reply)) {
+ return reply.retVal;
+ }
+ return true;
+ },
+
+ enableNetwork() {
+ let settings = {};
+ settings.DisableNetwork = false;
+ let errorObject = {};
+ if (!this._tlps.TorSetConfWithReply(settings, errorObject)) {
+ throw new Error(errorObject.details);
+ }
+ },
+
+ sendCommand(cmd) {
+ return this._tlps.TorSendCommand(cmd);
+ },
+
+ retrieveBootstrapStatus() {
+ return this._tlps.TorRetrieveBootstrapStatus();
+ },
+
+ _GetSaveSettingsErrorMessage(aDetails) {
+ try {
+ return TorLauncherUtil.getSaveSettingsErrorMessage(aDetails);
+ } catch (e) {
+ console.log("GetSaveSettingsErrorMessage error", e);
+ return "Unexpected Error";
+ }
+ },
+
+ setConfWithReply(settings) {
+ let result = false;
+ const error = {};
+ try {
+ result = this._tlps.TorSetConfWithReply(settings, error);
+ } catch (e) {
+ console.log("TorSetConfWithReply error", e);
+ error.details = this._GetSaveSettingsErrorMessage(e.message);
+ }
+ return { result, error };
+ },
+
+ isBootstrapDone() {
+ return this._tlproc.mIsBootstrapDone;
+ },
+
+ clearBootstrapError() {
+ return this._tlproc.TorClearBootstrapError();
+ },
+
+ shouldShowTorConnect() {
+ return (
+ this.ownsTorDaemon &&
+ !TorLauncherUtil.useLegacyLauncher &&
+ (this.isNetworkDisabled() || !this.isBootstrapDone())
+ );
+ },
+
+ torBootstrapErrorOccurred() {
+ return this._tlproc.TorBootstrapErrorOccurred;
+ },
+
+ // Resolves to null if ok, or an error otherwise
+ connect() {
+ const kTorConfKeyDisableNetwork = "DisableNetwork";
+ const settings = {};
+ settings[kTorConfKeyDisableNetwork] = false;
+ const { result, error } = this.setConfWithReply(settings);
+ if (!result) {
+ return error;
+ }
+ try {
+ this.sendCommand("SAVECONF");
+ this.clearBootstrapError();
+ this.retrieveBootstrapStatus();
+ } catch (e) {
+ return error;
+ }
+ return null;
+ },
+
+ torLogHasWarnOrErr() {
+ return this._tlps.TorLogHasWarnOrErr;
+ },
+
+ torStopBootstrap() {
+ // Tell tor to disable use of the network; this should stop the bootstrap
+ // process.
+ const kErrorPrefix = "Setting DisableNetwork=1 failed: ";
+ try {
+ let settings = {};
+ settings.DisableNetwork = true;
+ const { result, error } = this.setConfWithReply(settings);
+ if (!result) {
+ console.log(
+ `Error stopping bootstrap ${kErrorPrefix} ${error.details}`
+ );
+ }
+ } catch (e) {
+ console.log(`Error stopping bootstrap ${kErrorPrefix} ${e}`);
+ }
+ this.retrieveBootstrapStatus();
+ },
};
diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm
index bf522234d588..acbba8147803 100644
--- a/browser/modules/TorStrings.jsm
+++ b/browser/modules/TorStrings.jsm
@@ -364,6 +364,78 @@ var TorStrings = {
return retval;
})() /* Tor Network Settings Strings */,
+ torConnect: (() => {
+ const tsbNetwork = new TorDTDStringBundle(
+ ["chrome://torlauncher/locale/network-settings.dtd"],
+ ""
+ );
+ const tsbLauncher = new TorPropertyStringBundle(
+ "chrome://torlauncher/locale/torlauncher.properties",
+ "torlauncher."
+ );
+ const tsbCommon = new TorPropertyStringBundle(
+ "chrome://global/locale/commonDialogs.properties",
+ ""
+ );
+
+ const getStringNet = tsbNetwork.getString.bind(tsbNetwork);
+ const getStringLauncher = tsbLauncher.getString.bind(tsbLauncher);
+ const getStringCommon = tsbCommon.getString.bind(tsbCommon);
+
+ return {
+ torConnect: getStringNet(
+ "torsettings.wizard.title.default",
+ "Connect to Tor"
+ ),
+
+ torConnecting: getStringNet(
+ "torsettings.wizard.title.connecting",
+ "Establishing a Connection"
+ ),
+
+ torConnectingConcise: getStringNet(
+ "torConnect.connectingConcise",
+ "Connecting…"
+ ),
+
+ torBootstrapFailed: getStringLauncher(
+ "tor_bootstrap_failed",
+ "Tor failed to establish a Tor network connection."
+ ),
+
+ torConfigure: getStringNet(
+ "torsettings.wizard.title.configure",
+ "Tor Network Settings"
+ ),
+
+ copyLog: getStringNet(
+ "torConnect.copyLog",
+ "Copy Tor Logs"
+ ),
+
+ torConnectButton: getStringNet("torSettings.connect", "Connect"),
+
+ cancel: getStringCommon("Cancel", "Cancel"),
+
+ torConnected: getStringLauncher(
+ "torlauncher.bootstrapStatus.done",
+ "Connected to the Tor network"
+ ),
+
+ torConnectedConcise: getStringLauncher(
+ "torConnect.connectedConcise",
+ "Connected"
+ ),
+
+ tryAgain: getStringNet("torConnect.tryAgain", "Try connecting again"),
+ offline: getStringNet("torConnect.offline", "Offline"),
+
+ // tor connect strings for message box in about:preferences#tor
+ connectMessage: getStringNet("torConnect.connectMessage", "Changes to Tor Settings will not take effect until you connect to the Tor Network"),
+ tryAgainMessage: getStringNet("torConnect.tryAgainMessage", "Tor Browser has failed to establish a connection to the Tor Network"),
+ };
+ })(),
+
/*
Tor Onion Services Strings, e.g., for the authentication prompt.
*/
diff --git a/browser/modules/moz.build b/browser/modules/moz.build
index 5fb78d1c07a8..f2c9dabdddbe 100644
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -155,6 +155,7 @@ EXTRA_JS_MODULES += [
'TabUnloader.jsm',
'ThemeVariableMap.jsm',
'TopSiteAttribution.jsm',
+ 'TorProcessService.jsm',
'TorProtocolService.jsm',
'TorStrings.jsm',
'TransientPrefs.jsm',
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index e4a3c8d2d41c..d38e1001282b 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -8,6 +8,7 @@
# to the location of the actual manifest.
skin/classic/browser/aboutNetError.css (../shared/aboutNetError.css)
+ skin/classic/browser/onionPattern.css (../shared/onionPattern.css)
skin/classic/browser/blockedSite.css (../shared/blockedSite.css)
skin/classic/browser/error-pages.css (../shared/error-pages.css)
skin/classic/browser/aboutRestartRequired.css (../shared/aboutRestartRequired.css)
diff --git a/browser/themes/shared/onionPattern.css b/browser/themes/shared/onionPattern.css
new file mode 100644
index 000000000000..ac1af7b8d65e
--- /dev/null
+++ b/browser/themes/shared/onionPattern.css
@@ -0,0 +1,121 @@
+/* Onion pattern */
+
+:root {
+ --sqrt3: 1.73205080757;
+}
+
+.onion-pattern-container {
+ opacity: var(--onion-opacity, 1);
+ flex: auto; /* grow to consume remaining space on the page */
+ display: flex;
+ margin: 0 auto;
+ width: 100%;
+ height: calc((2 + var(--sqrt3)) * var(--onion-radius, 50px)); /* room for 2 rows of circles */
+ max-height: calc((2 + var(--sqrt3)) * var(--onion-radius, 50px));
+ direction: ltr;
+}
+
+.onion-pattern-crop {
+ display: flex;
+ justify-content: center;
+ overflow-x: hidden;
+ margin: 0 auto;
+}
+
+/* Centers horizontally within the root container*/
+.onion-pattern-column {
+ width: calc(40 * var(--onion-radius, 50px)); /* room for 20 circles in a row */
+ height: calc((2 + var(--sqrt3)) * var(--onion-radius, 50px)); /* room for 2 rows of circles */
+ flex-shrink: 0;
+ overflow-x: hidden; /* clip extra circles on the sides */
+}
+
+.onion-pattern-row {
+ width: calc(40 * var(--onion-radius, 50px)); /* room for 20 circles in a row */
+ display: flex;
+ flex-direction: row;
+ position: relative;
+}
+
+.onion-pattern-offset-row {
+ left: calc(-1 * var(--onion-radius, 50px));
+ margin-top: calc((var(--sqrt3) - 2.0) * var(--onion-radius, 50px));
+}
+
+/* With borders, circles are 100x100 pixels*/
+.circle {
+ position: relative;
+ min-width: calc(2 * var(--onion-radius, 50px));
+ min-height: calc(2 * var(--onion-radius, 50px));
+ border-radius: 50%;
+ box-sizing: border-box;
+}
+
+.inner {
+ position: absolute;
+ box-sizing: border-box;
+ border-radius: 50%;
+}
+
+.inner:nth-child(1){
+ width: 100%;
+ height: 100%;
+}
+
+.inner:nth-child(2){
+ transform: translate(20%, 20%);
+ width: calc(100% * 5/7);
+ height: calc(100% * 5/7);
+}
+
+.inner:nth-child(3){
+ transform: translate(calc(100% * 2/3), calc(100% * 2/3));
+ width: calc(100% * 3/7);
+ height: calc(100% * 3/7);
+}
+
+.inner:nth-child(4){
+ transform: translate(300%, 300%);
+ width: calc(100% * 1/7);
+ height: calc(100% * 1/7);
+}
+
+.solid {
+ background-color: var(--onion-color, #000);
+}
+
+.border {
+ border: 4px solid var(--onion-color, #000);
+}
+
+.dashed {
+ border: 4px dashed var(--onion-color, #000);
+}
+
+.dotted {
+ border: 4px dotted var(--onion-color, #000);
+}
+
+.bold {
+ border: 8px solid var(--onion-color, #000);
+}
+
+.top-half {
+ width: calc(2 * var(--onion-radius, 50px));
+ height: var(--onion-radius, 50px);
+ border-radius: var(--onion-radius, 50px) var(--onion-radius, 50px) 0 0;
+ box-sizing: border-box;
+}
+
+.bottom-half {
+ width: calc(2 * var(--onion-radius, 50px));
+ height: var(--onion-radius, 50px);
+ border-radius: 0 0 var(--onion-radius, 50px) var(--onion-radius, 50px);
+ box-sizing: border-box;
+}
+
+.scaler {
+ position: absolute;
+ left:0;
+ bottom:0;
+}
\ No newline at end of file
diff --git a/browser/themes/shared/onionPattern.inc.xhtml b/browser/themes/shared/onionPattern.inc.xhtml
new file mode 100644
index 000000000000..95f073e673b4
--- /dev/null
+++ b/browser/themes/shared/onionPattern.inc.xhtml
@@ -0,0 +1,207 @@
+<!--
+ - The abstract onion pattern begins here. There are two
+ - "onion-pattern-row" elements, each containing 14 circles. The width
+ - of "onion-pattern-row" is fixed at a value that is wide enough so the
+ - circles are not distorted by the flex-based layout. The parent
+ - "onion-pattern-container" element has overflow-x: hidden and is designed
+ - to expand to the width of the page, until it reaches a maximum width
+ - that can accommodate all 14 circles. Since the rows are wider than
+ - most browser windows, typically the two rows of onions will fill the
+ - bottom of the page. On really wide pages, the onions are centered at
+ - the bottom of the page.
+-->
+
+<div class="onion-pattern-container">
+ <div class="onion-pattern-crop">
+ <div class="onion-pattern-column">
+ <div class="onion-pattern-row">
+ <div class="circle solid"></div>
+
+ <div class="circle dashed"></div>
+
+ <div class="circle">
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ </div>
+
+ <div class="circle">
+ <div class="bottom-half solid"></div>
+ <div class="bottom-half dotted"></div>
+ </div>
+
+ <div class="circle border"></div>
+
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle solid"></div>
+
+ <div class="circle">
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ </div>
+
+ <div class="circle bold"></div>
+
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ </div>
+
+ <div class="circle bold"></div>
+
+ <div class="circle">
+ <div class="bottom-half solid"></div>
+ <div class="bottom-half solid"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ </div>
+
+ <div class="circle dotted"></div>
+
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle solid"></div>
+
+ <div class="circle">
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ </div>
+
+ <div class="circle bold"></div>
+
+ <div class="circle dashed"></div>
+ </div>
+
+ <div class="onion-pattern-row onion-pattern-offset-row">
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ </div>
+
+ <div class="circle bold"></div>
+
+ <div class="circle solid"></div>
+
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle">
+ <div class="top-half solid"></div>
+ <div class="top-half solid"></div>
+ </div>
+
+ <div class="circle border"></div>
+
+ <div class="circle dotted"></div>
+
+ <div class="circle">
+ <div class="top-half border"></div>
+ <div class="top-half dashed"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ </div>
+
+ <div class="circle">
+ <div class="top-half dotted"></div>
+ <div class="top-half solid"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ <div class="inner dashed"></div>
+ </div>
+
+ <div class="circle dotted"></div>
+
+ <div class="circle bold"></div>
+
+ <div class="circle solid"></div>
+
+ <div class="circle">
+ <div class="top-half solid"></div>
+ <div class="top-half dotted"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ <div class="inner dotted"></div>
+ </div>
+
+ <div class="circle">
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ <div class="inner border"></div>
+ </div>
+
+ <div class="circle dotted"></div>
+
+ <div class="circle">
+ <div class="top-half solid"></div>
+ <div class="top-half solid"></div>
+ </div>
+
+ <div class="circle dotted"></div>
+ </div>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/browser/themes/shared/urlbar-searchbar.inc.css b/browser/themes/shared/urlbar-searchbar.inc.css
index d3cc6bf7f024..297dbcdf444d 100644
--- a/browser/themes/shared/urlbar-searchbar.inc.css
+++ b/browser/themes/shared/urlbar-searchbar.inc.css
@@ -826,3 +826,5 @@
}
%include ../../components/onionservices/content/onionlocation-urlbar.css
+%include ../../components/torconnect/content/torconnect-urlbar.css
+
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index afc872569519..e74851a6672c 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -16387,9 +16387,56 @@ void Document::RemoveToplevelLoadingDocument(Document* aDoc) {
StylePrefersColorScheme Document::PrefersColorScheme(
IgnoreRFP aIgnoreRFP) const {
+
+ // tor-browser#27476
+ // should this document ignore resist finger-printing settings with regards to
+ // setting the color scheme
+ // currently only enabled for about:torconnect but we could expand to other non-
+ // SystemPrincipal pages if we wish
+ const auto documentUsesPreferredColorScheme = [](auto const* constDocument) -> bool {
+ if (auto* document = const_cast<Document*>(constDocument); document != nullptr) {
+ auto uri = document->GetDocBaseURI();
+
+ // try and extract out our prepath and filepath portions of the uri to C-strings
+ nsAutoCString prePathStr, filePathStr;
+ if(NS_FAILED(uri->GetPrePath(prePathStr)) ||
+ NS_FAILED(uri->GetFilePath(filePathStr))) {
+ return false;
+ }
+
+ // stick them in string view for easy comparisons
+ std::string_view prePath(prePathStr.get(), prePathStr.Length()),
+ filePath(filePathStr.get(), filePathStr.Length());
+
+ // these about URIs will have the user's preferred color scheme exposed to them
+ // we can place other URIs here in the future if we wish
+ // see nsIURI.idl for URI part definitions
+ constexpr struct {
+ std::string_view prePath;
+ std::string_view filePath;
+ } allowedURIs[] = {
+ { "about:", "torconnect" },
+ };
+
+ // check each uri in the allow list against this document's uri
+ // verify the prepath and the file path match
+ for(auto const& uri : allowedURIs) {
+ if (prePath == uri.prePath &&
+ filePath == uri.filePath) {
+ // positive match means we can apply dark-mode to the page
+ return true;
+ }
+ }
+ }
+
+ // do not allow if no match or other error
+ return false;
+ };
+
if (aIgnoreRFP == IgnoreRFP::No &&
- nsContentUtils::ShouldResistFingerprinting(this)) {
- return StylePrefersColorScheme::Light;
+ nsContentUtils::ShouldResistFingerprinting(this) &&
+ !documentUsesPreferredColorScheme(this)) {
+ return StylePrefersColorScheme::Light;
}
if (nsPresContext* pc = GetPresContext()) {
diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm
index eceaa7c857de..8a6c0911a060 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -96,6 +96,7 @@ let RemotePageAccessManager = {
RPMPrefIsLocked: ["security.tls.version.min"],
RPMAddToHistogram: ["*"],
RPMGetTorStrings: ["*"],
+ RPMSendQuery: ["ShouldShowTorConnect"],
},
"about:newinstall": {
RPMGetUpdateChannel: ["*"],
@@ -179,6 +180,25 @@ let RemotePageAccessManager = {
RPMAddMessageListener: ["*"],
RPMRemoveMessageListener: ["*"],
},
+ "about:torconnect": {
+ RPMAddMessageListener: ["*"],
+ RPMSendAsyncMessage: [
+ "GoToBrowserHome",
+ "OpenTorAdvancedPreferences",
+ "TorRetrieveBootstrapStatus",
+ "TorStopBootstrap",
+ ],
+ RPMSendQuery: [
+ "GetDirection",
+ "GetLocalizedBootstrapStatus",
+ "GetTorStrings",
+ "TorBootstrapErrorOccurred",
+ "TorConnect",
+ "TorCopyLog",
+ "TorIsNetworkDisabled",
+ "TorLogHasWarnOrErr",
+ ],
+ },
},
/**
diff --git a/toolkit/themes/shared/in-content/info-pages.inc.css b/toolkit/themes/shared/in-content/info-pages.inc.css
index 6943a3340e35..5b3c911a5aab 100644
--- a/toolkit/themes/shared/in-content/info-pages.inc.css
+++ b/toolkit/themes/shared/in-content/info-pages.inc.css
@@ -41,10 +41,11 @@ body.wide-container {
background-image: url("chrome://global/skin/icons/info.svg");
background-position: left 0;
background-repeat: no-repeat;
- background-size: 1.6em;
- margin-inline-start: -2.3em;
- padding-inline-start: 2.3em;
- font-size: 2.2em;
+ background-size: 3.0em;
+ margin-inline-start: -4.5em;
+ padding-inline-start: 4.5em;
+ margin-bottom: -2.0em;
+ font-size: 1.5em;
-moz-context-properties: fill;
fill: currentColor;
}
@@ -56,7 +57,10 @@ body.wide-container {
.title-text {
font-size: inherit;
- padding-bottom: 0.4em;
+ padding-bottom: 2.0em !important;
+ line-height: 1.0em;
+ font-weight: bold;
+ vertical-align: top;
}
@media (max-width: 970px) {
@@ -68,6 +72,7 @@ body.wide-container {
.title-text {
padding-top: 0;
+ vertical-align: middle !important;
}
}
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js
index 2ff107b553b2..f8fa83574df7 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/browser-window.js
@@ -70,6 +70,10 @@ function getGlobalScriptIncludes(scriptPath) {
let match = line.match(globalScriptsRegExp);
if (match) {
let sourceFile = match[1]
+ .replace(
+ "chrome://browser/content/torconnect/",
+ "browser/components/torconnect/content/"
+ )
.replace(
"chrome://browser/content/search/",
"browser/components/search/content/"
1
0

[torbutton/master] Bug 27476: misc about:torconnect fixes and polish
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit 4eafa99d5a0f93184b674b099a49946f8846f766
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Feb 15 19:18:29 2021 +0100
Bug 27476: misc about:torconnect fixes and polish
- about:tor fix to prevent showing 'something went wrong page' after about:torconnect bootstrap
- directly including tor-browser's onion-pattern xhtml/css rather than duplicating
- about:tor polish: replaced png with svg icons for ddg (from ddg), mail and arrow (photon UI included from firefox)
---
chrome/content/aboutTor/aboutTor.xhtml | 195 +--------------------------------
chrome/content/torbutton.js | 4 +-
chrome/skin/aboutTor.css | 101 ++---------------
chrome/skin/dax-logo.svg | 1 +
chrome/skin/forwardArrow.png | Bin 258 -> 0 bytes
chrome/skin/searchLogo.png | Bin 1912 -> 0 bytes
jar.mn | 15 ++-
7 files changed, 31 insertions(+), 285 deletions(-)
diff --git a/chrome/content/aboutTor/aboutTor.xhtml b/chrome/content/aboutTor/aboutTor.xhtml
index 6c712a67..f3a9032f 100644
--- a/chrome/content/aboutTor/aboutTor.xhtml
+++ b/chrome/content/aboutTor/aboutTor.xhtml
@@ -23,8 +23,8 @@
<meta http-equiv="Content-Security-Policy" content="default-src resource:; object-src 'none'" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>&aboutTor.title;</title>
- <link rel="stylesheet" type="text/css" media="all"
- href="resource://torbutton-assets/aboutTor.css"/>
+ <link rel="stylesheet" href="chrome://browser/skin/onionPattern.css" type="text/css" media="all" />
+ <link rel="stylesheet" href="resource://torbutton-assets/aboutTor.css" type="text/css" media="all" />
<script type="text/javascript" src="resource://torbutton-abouttor/aboutTor.js"></script>
</head>
<body dir="&locale.dir;">
@@ -55,7 +55,7 @@
<div class="searchbox hideIfTorOff"> <!-- begin form based search -->
<form action="&aboutTor.searchDDGPost.link;" method="get">
<div class="searchwrapper">
- <label class="searchlabel" for="search-text"> </label>
+ <label class="searchlabel" for="search-text"></label>
<input name="q" id="search-text" placeholder="&aboutTor.search.label;"
autocomplete="off" type="text"/>
<input id="search-button" value=""
@@ -71,198 +71,13 @@
</p>
<p id="manual" class="showForManual moreInfoLink">&aboutTor.torbrowser_user_manual_questions.label;
<a id="manualLink" target="_blank">&aboutTor.torbrowser_user_manual_link.label;</a></p>
- <p id="newsletter" class="moreInfoLink"><img class="imageStyle" src="resource://torbutton-assets/icon-newsletter.png"/><br/>&aboutTor.newsletter.tagline;<br/>
+ <p id="newsletter" class="moreInfoLink"><img class="imageStyle" src="chrome://browser/skin/mail.svg"/><br/>&aboutTor.newsletter.tagline;<br/>
<a href="https://newsletter.torproject.org">&aboutTor.newsletter.link_text; »</a>
</p>
<p id="mission">&aboutTor.tor_mission.label;
<a id="getInvolvedLink">&aboutTor.getInvolved.label;</a></p>
</div>
</div>
-
-<!--
- - The abstract onion pattern begins here. There are two
- - "onion-pattern-row" elements, each containing 14 circles. The width
- - of "onion-pattern-row" is fixed at a value that is wide enough so the
- - circles are not distorted by the flex-based layout. The parent
- - "onion-pattern-container" element has overflow-x: hidden and is designed
- - to expand to the width of the page, until it reaches a maximum width
- - that can accommodate all 14 circles. Since the rows are wider than
- - most browser windows, typically the two rows of onions will fill the
- - bottom of the page. On really wide pages, the onions are centered at
- - the bottom of the page.
- -->
- <div class="onion-pattern-container">
- <div class="onion-pattern-row">
- <div class="circle solid"></div>
-
- <div class="circle border"></div>
-
- <div class="circle border">
- <div class="inner border"></div>
- <div class="inner border"></div>
- <div class="inner border"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half dotted"></div>
- </div>
-
- <div class="circle dotted"></div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle dashed"></div>
-
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle bold"></div>
-
- <div class="circle solid"></div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle border">
- <div class="inner border"></div>
- <div class="inner border"></div>
- <div class="inner border"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half solid"></div>
- </div>
-
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle dotted"></div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle dashed"></div>
-
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle bold"></div>
-
- <div class="circle solid"></div>
- </div>
-
- <div class="onion-pattern-row onion-pattern-offset-row">
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle bold"></div>
-
- <div class="circle solid"></div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle border">
- <div class="inner border"></div>
- <div class="inner border"></div>
- <div class="inner border"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half solid"></div>
- </div>
-
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle solid"></div>
-
- <div class="circle border"></div>
-
- <div class="circle border">
- <div class="inner border"></div>
- <div class="inner border"></div>
- <div class="inner border"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half dotted"></div>
- </div>
-
- <div class="circle dotted"></div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle dashed"></div>
-
- <div class="circle solid"></div>
-
- <div class="circle dashed">
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- <div class="inner dashed"></div>
- </div>
-
- <div class="circle border">
- <div class="inner border"></div>
- <div class="inner border"></div>
- <div class="inner border"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half solid"></div>
- </div>
-
- <div class="circle dotted">
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- <div class="inner dotted"></div>
- </div>
-
- <div class="circle">
- <div class="half solid"></div>
- <div class="half dotted"></div>
- </div>
-
- <div class="circle dotted"></div>
- </div>
- </div>
+#include ../../../../../../browser/themes/shared/onionPattern.inc.xhtml
</body>
</html>
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index 39c1abeb..48539a96 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -934,8 +934,7 @@ function torbutton_do_tor_check()
{
let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]
.getService(Ci.nsISupports).wrappedJSObject;
- if (checkSvc.kCheckNotInitiated != checkSvc.statusOfTorCheck ||
- m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy") ||
+ if (m_tb_prefs.getBoolPref("extensions.torbutton.use_nontor_proxy") ||
!m_tb_prefs.getBoolPref("extensions.torbutton.test_enabled"))
return; // Only do the check once.
@@ -1119,6 +1118,7 @@ function torbutton_initiate_remote_tor_check() {
function torbutton_tor_check_ok()
{
+ torbutton_do_tor_check();
let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]
.getService(Ci.nsISupports).wrappedJSObject;
return (checkSvc.kCheckFailed != checkSvc.statusOfTorCheck);
diff --git a/chrome/skin/aboutTor.css b/chrome/skin/aboutTor.css
index 8d5c4a83..38486241 100644
--- a/chrome/skin/aboutTor.css
+++ b/chrome/skin/aboutTor.css
@@ -9,6 +9,9 @@
--abouttor-text-color: white;
--abouttor-bg-toron-color: #420C5D;
--abouttor-bg-toroff-color: #A4000F;
+ --onion-opacity: 0.2;
+ --onion-color: #fff;
+ --onion-radius: 50px;
}
* {
@@ -23,6 +26,7 @@ html {
body {
display: flex;
flex-direction: column;
+ justify-content: space-between;
width: 100%;
height: 100%;
margin: 0px auto;
@@ -159,7 +163,11 @@ body:not([showmanual]) .showForManual {
}
#bottom img.imageStyle {
- padding-inline-end: 10px;
+ padding-inline-end: 0.5em;
+ height: 1.5em;
+ vertical-align: bottom;
+ -moz-context-properties: fill;
+ fill: white;
}
/* Hide the linebreaks on large enough screens (desktops, laptops, and
@@ -195,7 +203,7 @@ body:not([showmanual]) .showForManual {
height: auto;
width: 50px;
display: inline-block;
- background: url('searchLogo.png') no-repeat center center;
+ background: url('dax-logo.svg') no-repeat center center;
background-size: 30px 30px;
}
@@ -203,8 +211,8 @@ body:not([showmanual]) .showForManual {
height: auto;
width: 36px;
border: 0;
- background: url('forwardArrow.png') no-repeat center center;
- background-size: 16px 14px;
+ background: url('chrome://browser/skin/forward.svg') no-repeat center center;
+ background-size: 16px 16px;
cursor: pointer;
}
@@ -220,91 +228,6 @@ body:not([showmanual]) .showForManual {
margin: 0;
font-size: 15px;
}
-
-.onion-pattern-container {
- flex: auto; /* grow to consume remaining space on the page */
- display: flex;
- flex-direction: column;
- justify-content: end; /* position circles at the bottom */
- margin: 0px auto;
- width: 100%;
- max-width: 2200px; /* room for our 20 circles */
- min-height: 232px; /* room for 2 rows of circles */
- overflow-x: hidden; /* clip extra circles on the sides */
- direction: ltr;
-}
-
-.onion-pattern-row {
- width: 2200px;
- display: flex;
- flex-direction: row;
- position: relative;
-}
-
-.onion-pattern-offset-row {
- left: -40px;
-}
-
-/* With borders, circles range in size from 100 x 100px to 116 x 116px. */
-.circle {
- opacity: 0.2;
- position: relative;
- width: 100px;
- height: 100px;
- border-radius: 50%;
-}
-
-.inner {
- position: absolute;
-}
-
-.inner:nth-child(1){
- transform: translate(calc(12.5% - 2px),calc(12.5% - 2px));
- width: calc(100% * 0.75);
- height: calc(100% * 0.75);
- border-radius: 50%;
-}
-
-.inner:nth-child(2){
- transform: translate(calc(40% - 2px),calc(40% - 2px));
- width: calc(100% * 0.5);
- height: calc(100% * 0.5);
- border-radius: 50%;
-}
-
-.inner:nth-child(3){
- transform: translate(calc(108% - 2px),calc(108% - 2px));
- width: calc(100% * 0.25);
- height: calc(100% * 0.25);
- border-radius: 50%;
-}
-
-.solid {
- background-color: #fff;
-}
-
-.border {
- border: 4px solid #fff;
-}
-
-.dashed {
- border: 4px dashed #fff;
-}
-
-.dotted {
- border: 4px dotted #fff;
-}
-
-.bold {
- border: 8px solid #fff;
-}
-
-.half {
- width: 100px;
- height: 50px;
- border-radius: 50px 50px 0 0;
-}
-
/*
* Mobile specific css
*/
diff --git a/chrome/skin/dax-logo.svg b/chrome/skin/dax-logo.svg
new file mode 100644
index 00000000..94ad7c35
--- /dev/null
+++ b/chrome/skin/dax-logo.svg
@@ -0,0 +1 @@
+<svg width="120" height="120" viewbox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><circle id="a" cx="50.833" cy="50.833" r="50.25"/><linearGradient x1="3.084%" y1="49.368%" x2="100.592%" y2="49.368%" id="c"><stop stop-color="#6176B9" offset=".56%"/><stop stop-color="#394A9F" offset="69.1%"/></linearGradient><linearGradient x1="-.006%" y1="49.006%" x2="98.932%" y2="49.006%" id="d"><stop stop-color="#6176B9" offset=".56%"/><stop stop-color="#394A9F" offset="69.1%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><circle fill="#FFF" cx="60" cy="60" r="57.5"/><ellipse fill="#DE5833" cx="60" cy="60" rx="50.25" ry="50.25"/><path d="M60 120C26.917 120 0 93.083 0 60S26.917 0 60 0s60 26.917 60 60-26.917 60-60 60zM60 4.917C29.667 4.917 4.917 29.583 4.917 60c0 30.333 24.666 55.083 55.083 55.083 30.417 0 55.083-24.666 55.083-55.083 0-30.333-24.75-55.083-55.083-55.083z" fill="#DE5833"/><g transform="translate(9.167 9.167)"><mask id
="b" fill="#fff"><use xlink:href="#a"/></mask><use fill="#DE5833" xlink:href="#a"/><g mask="url(#b)"><path d="M71.917 127.25c-1.75-8.25-12.25-27.167-16.334-35.083-3.916-7.917-7.916-19.084-6.083-26.417.417-1.417-3.333-11.417-2.333-12 8.5-5.5 10.666.583 14-1.75 1.75-1.167 4.166 1 4.75-1 2.166-7.667-2.917-20.917-8.834-26.583-2-2-4.75-3.167-8.083-3.75-1.167-1.75-3.333-3.334-6.083-4.917-3.167-1.75-10.25-3.917-13.834-4.5-2.583-.417-3.166.167-4.166.417 1 0 5.75 2.333 6.666 2.583-1 .583-3.583 0-5.333.75-.75.417-1.583 2-1.583 2.583 4.916-.583 12.583 0 17.166 2-3.583.417-9.083.75-11.416 2.167-6.917 3.583-9.834 12-8.084 22.25 1.75 10.083 9.834 47.083 12.25 59.333 2.584 12.25-5.5 20.334-10.416 22.5l5.5.417-1.75 3.917c6.5.75 13.833-1.417 13.833-1.417-1.417 3.917-11.25 5.5-11.25 5.5s4.75 1.417 12.25-1.417c7.667-2.916 12.25-4.75 12.25-4.75l7.5 9.417 2.917-6.917 6.916 7.25c-.25-.5 1.334-2.25-.416-10.583z" fill="#D5D7D8"/><path d="M74.083 125.5c-1.75-8.25-12.25-27.167-16.333-35.083C53.833 82.5 49.83
3 71.333 51.667 64c.416-1.417.416-6.667 1.416-7.5 8.5-5.5 7.917-.167 11.25-2.583 1.75-1.167 3.167-2.75 3.75-4.917 2.167-7.667-2.916-20.917-8.833-26.583-2-2-4.75-3.167-8.083-3.75-1.167-1.75-3.334-3.334-6.084-4.917-5.333-2.917-12-3.917-18.333-2.917 1 0 3.333 2.167 4.167 2.334-1.417 1-5.084.75-5.084 2.916 4.917-.416 10.25.167 15 2.334-3.583.416-6.916 1.416-9.25 2.583-6.916 3.583-8.666 10.833-6.916 20.917C26.417 52 34.5 89 36.917 101.25c2.583 12.25-5.5 20.333-10.417 22.5l5.5.417-1.75 3.916c6.5.75 13.833-1.416 13.833-1.416-1.416 3.916-11.25 5.5-11.25 5.5s4.75 1.416 12.25-1.417c7.667-2.917 12.25-4.75 12.25-4.75l3.584 9.417 6.916-6.917 2.917 7.25c-.417 0 5.083-1.75 3.333-10.25z" fill="#FFF"/><path d="M32.5 42.583c0-2.166 1.75-3.75 3.75-3.75 2.167 0 3.75 1.75 3.75 3.75 0 2.167-1.75 3.75-3.75 3.75-2.167 0-3.75-1.583-3.75-3.75z" fill="#2D4F8E"/><path d="M36.833 41.167c0-.584.417-1 1-1 .584 0 1 .416 1 1 0 .583-.416 1-1 1-.416 0-1-.417-1-1z" fill="#FFF"/><path d="M58.333 40.167c0-1.75 1.417-3.3
34 3.334-3.334 1.75 0 3.333 1.417 3.333 3.334 0 1.75-1.417 3.333-3.333 3.333-1.75.083-3.334-1.333-3.334-3.333z" fill="#2D4F8E"/><path d="M62.25 39.167c0-.417.417-.75.75-.75.417 0 .75.416.75.75 0 .416-.417.75-.75.75-.333.083-.75-.334-.75-.75z" fill="#FFF"/><path d="M15.583 21.5s-2.916-1.417-5.75.417c-2.75 1.75-2.75 3.583-2.75 3.583S5.5 22.167 9.417 20.583c4.416-1.583 6.166.917 6.166.917z" fill="url(#c)" transform="translate(21.667 10)"/><path d="M42 21.333s-2-1.166-3.75-1.166c-3.333 0-4.167 1.583-4.167 1.583s.584-3.583 4.75-2.75c2.334.167 3.167 2.333 3.167 2.333z" fill="url(#d)" transform="translate(21.667 10)"/><path d="M47.917 57.167c.416-2.334 6.333-6.667 10.416-6.917 4.167-.167 5.5-.167 9.084-1C71 48.5 80 46.083 82.583 44.917c2.584-1.167 13.167.583 5.75 4.75-3.166 1.75-12 5.083-18.333 7.083-6.333 1.75-10.083-1.75-12 1.417-1.583 2.333-.417 5.75 7.083 6.5 10.084 1 19.667-4.5 20.667-1.584 1 2.917-8.667 6.5-14.583 6.667-5.917.167-17.917-3.917-19.667-5.083-1.833-1.584-4.25-4.417-3.583
-7.5z" fill="#FDD20A"/></g></g><path d="M61.583 94.917s-14.166-7.5-14.416-4.5C47 93.583 47.167 106 48.75 107c1.583 1 13.417-6.083 13.417-6.083l-.584-6zm5.5-.667S76.75 87 78.917 87.333c2.166.417 2.583 15.584.75 16.334-1.917.833-13-3.667-13-3.667l.416-5.75z" fill="#65BC46"/><path d="M58.25 95.667c0 4.916-.75 7.083 1.417 7.5 2.166.416 6.083 0 7.5-1 1.416-1 .166-7.25-.167-8.5-.667-1.167-8.75-.167-8.75 2z" fill="#43A244"/><path d="M59 94.5c0 4.917-.75 7.083 1.417 7.5 2.166.417 6.083 0 7.5-1 1.416-1 .166-7.25-.167-8.5-.5-1-8.75-.167-8.75 2z" fill="#65BC46"/></g></svg>
\ No newline at end of file
diff --git a/chrome/skin/forwardArrow.png b/chrome/skin/forwardArrow.png
deleted file mode 100644
index ceea950f..00000000
Binary files a/chrome/skin/forwardArrow.png and /dev/null differ
diff --git a/chrome/skin/searchLogo.png b/chrome/skin/searchLogo.png
deleted file mode 100644
index 98ae319e..00000000
Binary files a/chrome/skin/searchLogo.png and /dev/null differ
diff --git a/jar.mn b/jar.mn
index c8fd813f..6476f8ff 100644
--- a/jar.mn
+++ b/jar.mn
@@ -4,10 +4,17 @@ torbutton.jar:
% content torbutton %content/
- content/ (chrome/content/*)
- components/ (components/*)
- modules/ (modules/*)
- skin/ (chrome/skin/*)
+ content/torbutton.js (chrome/content/torbutton.js)
+ content/tor-circuit-display.js (chrome/content/tor-circuit-display.js)
+ content/preferences.xhtml (chrome/content/preferences.xhtml)
+ content/aboutTor/aboutTor-content.js (chrome/content/aboutTor/aboutTor-content.js)
+* content/aboutTor/aboutTor.xhtml (chrome/content/aboutTor/aboutTor.xhtml)
+ content/aboutTor/resources/aboutTor.js (chrome/content/aboutTor/resources/aboutTor.js)
+ content/preferences-mobile.js (chrome/content/preferences-mobile.js)
+
+ components/ (components/*)
+ modules/ (modules/*)
+ skin/ (chrome/skin/*)
% resource torbutton %
% resource torbutton-abouttor resource://torbutton/content/aboutTor/resources/ contentaccessible=yes
1
0

[torbutton/master] Merge remote-tracking branch 'richardgl/27476_rev'
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit 5a2ad51c81ade35f471f971da81ff0698bf710a8
Merge: 2c03b2c3 4eafa99d
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon May 17 19:27:10 2021 +0000
Merge remote-tracking branch 'richardgl/27476_rev'
chrome/content/aboutTor/aboutTor.xhtml | 195 +--------------------------------
chrome/content/torbutton.js | 4 +-
chrome/skin/aboutTor.css | 101 ++---------------
chrome/skin/dax-logo.svg | 1 +
chrome/skin/forwardArrow.png | Bin 258 -> 0 bytes
chrome/skin/searchLogo.png | Bin 1912 -> 0 bytes
jar.mn | 15 ++-
7 files changed, 31 insertions(+), 285 deletions(-)
1
0

[tor-browser-build/master] Bug 40297: Use the right commits for get_gradle_dependencies_list
by sysrqb@torproject.org 17 May '21
by sysrqb@torproject.org 17 May '21
17 May '21
commit d6fbd77f14e646c7030577cea1b10429129850b4
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Fri May 14 11:07:33 2021 +0200
Bug 40297: Use the right commits for get_gradle_dependencies_list
---
projects/android-components/config | 4 +++-
projects/fenix/config | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index 3b709a6..1f98428 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -16,10 +16,11 @@ var:
gradle_dependencies_version: 24
gradle_version: 6.6.1
glean_parser: 2.2.0
+ git_branch: '[% project %]-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1'
targets:
nightly:
- git_hash: '[% project %]-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1'
+ git_hash: '[% c("var/git_branch") %]'
tag_gpg_id: 0
input_files:
@@ -81,5 +82,6 @@ steps:
get_gradle_dependencies_list:
filename: 'gradle-dependencies-list-[% c("var/android_components_version") %].txt'
get_gradle_dependencies_list: '[% INCLUDE build %]'
+ git_hash: '[% c("var/git_branch") %]^{/Bug 40023: Stop PrivateNotificationService}'
var:
fetch_gradle_dependencies: 1
diff --git a/projects/fenix/config b/projects/fenix/config
index 9a54715..6f349ac 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -10,6 +10,7 @@ variant: Beta
var:
fenix_version: 88.1.3
torbrowser_branch: 10.5
+ git_branch: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-1'
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
container:
use_container: 1
@@ -20,7 +21,7 @@ var:
targets:
nightly:
- git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-1'
+ git_hash: '[% c("var/git_branch") %]'
tag_gpg_id: 0
variant: Nightly
@@ -64,6 +65,7 @@ steps:
use_container: 0
get_gradle_dependencies_list:
+ git_hash: '[% c("var/git_branch") %]^{/Add Tor integration and UI}'
filename: 'gradle-dependencies-list-[% c("var/fenix_version") %].txt'
get_gradle_dependencies_list: '[% INCLUDE build %]'
var:
1
0

[torbutton/master] fixup! Bug 40035: Localize Cryptocurrency Safety messages
by sysrqb@torproject.org 13 May '21
by sysrqb@torproject.org 13 May '21
13 May '21
commit 2c03b2c398e111fa185f34a616ceb7448c9a0c26
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu May 13 16:18:23 2021 +0000
fixup! Bug 40035: Localize Cryptocurrency Safety messages
---
chrome/locale/en-US/torbutton.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/chrome/locale/en-US/torbutton.properties b/chrome/locale/en-US/torbutton.properties
index 4c153158..0f4594bc 100644
--- a/chrome/locale/en-US/torbutton.properties
+++ b/chrome/locale/en-US/torbutton.properties
@@ -139,7 +139,7 @@ onionLocation.askEverytime=Ask every time
onionLocation.prioritizeOnionsDescription=Prioritize .onion sites when known.
onionLocation.onionServicesTitle=Onion Services
-# LOCALIZATION NOTE: %S will be replaced with the crytocurrency address.
+# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
cryptoSafetyPrompt.whatCanHeading=What can you do about it?
cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
1
0

[tor-launcher/master] fixup! Bug 27476: about:torconnect fixes and new strings
by sysrqb@torproject.org 13 May '21
by sysrqb@torproject.org 13 May '21
13 May '21
commit 4763691a739ce2cb2b8cfda07eb76ccf2e51f41a
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu May 13 16:16:36 2021 +0000
fixup! Bug 27476: about:torconnect fixes and new strings
---
src/chrome/locale/en-US/torlauncher.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/chrome/locale/en-US/torlauncher.properties b/src/chrome/locale/en-US/torlauncher.properties
index 7787698..e0b07f0 100644
--- a/src/chrome/locale/en-US/torlauncher.properties
+++ b/src/chrome/locale/en-US/torlauncher.properties
@@ -94,4 +94,4 @@ torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
-torlauncher.copiedNLogMessages=Copied %S Logs
+torlauncher.copiedNLogMessagesShort=Copied %S Logs
1
0