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

Keyboard Shortcuts

Thread View

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

tbb-commits

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

  • 1 participants
  • 21277 discussions
[tor-browser/tor-browser-91.2.0esr-11.0-1] Bug 40091: Load HTTPS Everywhere as a builtin addon in desktop
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 5817e8746a5718a3a78f2f0685c453d4c65d34b4 Author: Alex Catarineu <acat(a)torproject.org> Date: Fri Sep 4 12:34:35 2020 +0200 Bug 40091: Load HTTPS Everywhere as a builtin addon in desktop This loads HTTPS Everywhere as a builtin addon from a hardcoded resource:// URI in desktop. It also ensures that the non-builtin HTTPS Everywhere addon is always uninstalled on browser startup. The reason of making this desktop-only is that there are some issues when installing a builtin extension from geckoview side, making the extension not available on first startup. So, at least for now we handle the Fenix case separately. See #40118 for a followup for investigating these. --- browser/components/BrowserGlue.jsm | 37 ++++++++++++++++++++++ toolkit/components/extensions/Extension.jsm | 10 ++++-- .../mozapps/extensions/internal/XPIProvider.jsm | 13 ++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index 04b51b1c2cc1..d7acae6d8f9d 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -45,6 +45,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { DownloadsViewableInternally: "resource:///modules/DownloadsViewableInternally.jsm", E10SUtils: "resource://gre/modules/E10SUtils.jsm", + ExtensionData: "resource://gre/modules/Extension.jsm", ExtensionsUI: "resource:///modules/ExtensionsUI.jsm", FeatureGate: "resource://featuregates/FeatureGate.jsm", FxAccounts: "resource://gre/modules/FxAccounts.jsm", @@ -120,6 +121,13 @@ XPCOMUtils.defineLazyServiceGetters(this, { PushService: ["@mozilla.org/push/Service;1", "nsIPushService"], }); +XPCOMUtils.defineLazyServiceGetters(this, { + resProto: [ + "@mozilla.org/network/protocol;1?name=resource", + "nsISubstitutingProtocolHandler", + ], +}); + const PREF_PDFJS_ISDEFAULT_CACHE_STATE = "pdfjs.enabledCache.state"; /** @@ -1382,6 +1390,35 @@ BrowserGlue.prototype = { "resource://builtin-themes/alpenglow/" ); + // Install https-everywhere builtin addon if needed. + (async () => { + const HTTPS_EVERYWHERE_ID = "https-everywhere-eff(a)eff.org"; + const HTTPS_EVERYWHERE_BUILTIN_URL = + "resource://torbutton/content/extensions/https-everywhere/"; + // This does something similar as GeckoViewWebExtension.jsm: it tries + // to load the manifest to retrieve the version of the builtin and + // compares it to the currently installed one to see whether we need + // to install or not. Here we delegate that to + // AddonManager.maybeInstallBuiltinAddon. + try { + const resolvedURI = Services.io.newURI( + resProto.resolveURI(Services.io.newURI(HTTPS_EVERYWHERE_BUILTIN_URL)) + ); + const extensionData = new ExtensionData(resolvedURI); + const manifest = await extensionData.loadManifest(); + + await AddonManager.maybeInstallBuiltinAddon( + HTTPS_EVERYWHERE_ID, + manifest.version, + HTTPS_EVERYWHERE_BUILTIN_URL + ); + } catch (e) { + const log = Log.repository.getLogger("HttpsEverywhereBuiltinLoader"); + log.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter())); + log.error("Could not install https-everywhere extension", e); + } + })(); + if (AppConstants.MOZ_NORMANDY) { Normandy.init(); } diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 618647af9150..69833684ca53 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -267,6 +267,7 @@ const LOGGER_ID_BASE = "addons.webextension."; const UUID_MAP_PREF = "extensions.webextensions.uuids"; const LEAVE_STORAGE_PREF = "extensions.webextensions.keepStorageOnUninstall"; const LEAVE_UUID_PREF = "extensions.webextensions.keepUuidOnUninstall"; +const PERSISTENT_EXTENSIONS = new Set(["https-everywhere-eff(a)eff.org"]); const COMMENT_REGEXP = new RegExp( String.raw` @@ -413,7 +414,8 @@ var ExtensionAddonObserver = { ); } - if (!Services.prefs.getBoolPref(LEAVE_STORAGE_PREF, false)) { + if (!Services.prefs.getBoolPref(LEAVE_STORAGE_PREF, false) && + !PERSISTENT_EXTENSIONS.has(addon.id)) { // Clear browser.storage.local backends. AsyncShutdown.profileChangeTeardown.addBlocker( `Clear Extension Storage ${addon.id} (File Backend)`, @@ -461,7 +463,8 @@ var ExtensionAddonObserver = { ExtensionPermissions.removeAll(addon.id); - if (!Services.prefs.getBoolPref(LEAVE_UUID_PREF, false)) { + if (!Services.prefs.getBoolPref(LEAVE_UUID_PREF, false) && + !PERSISTENT_EXTENSIONS.has(addon.id)) { // Clear the entry in the UUID map UUIDMap.remove(addon.id); } @@ -2696,7 +2699,8 @@ class Extension extends ExtensionData { ); } else if ( this.startupReason === "ADDON_INSTALL" && - !Services.prefs.getBoolPref(LEAVE_STORAGE_PREF, false) + !Services.prefs.getBoolPref(LEAVE_STORAGE_PREF, false) && + !PERSISTENT_EXTENSIONS.has(this.id) ) { // If the extension has been just installed, set it as migrated, // because there will not be any data to migrate. diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm index ba562c92948d..dea49a8e9f79 100644 --- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -1501,6 +1501,19 @@ var XPIStates = { continue; } + // Uninstall HTTPS Everywhere if it is installed in the user profile. + if ( + id === "https-everywhere-eff(a)eff.org" && + loc.name === KEY_APP_PROFILE + ) { + logger.debug( + "Uninstalling the HTTPS Everywhere extension from user profile." + ); + loc.installer.uninstallAddon(id); + changed = true; + continue; + } + let xpiState = loc.get(id); if (!xpiState) { // If the location is not supported for sideloading, skip new
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 03936054e2234c0018381e2d3b8a3fae6625464b Author: Alex Catarineu <acat(a)torproject.org> Date: Fri Oct 9 12:55:35 2020 +0200 Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots --- browser/app/profile/000-tor-browser.js | 3 +++ browser/components/BrowserGlue.jsm | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js index c3d53bddc329..3cacb9125938 100644 --- a/browser/app/profile/000-tor-browser.js +++ b/browser/app/profile/000-tor-browser.js @@ -320,6 +320,9 @@ pref("security.enterprise_roots.enabled", false); // Don't ping Mozilla for MitM detection, see bug 32321 pref("security.certerrors.mitm.priming.enabled", false); +// Don't automatically enable enterprise roots, see bug 40166 +pref("security.certerrors.mitm.auto_enable_enterprise_roots", false); + // Disable the language pack signing check for now on macOS, see #31942 #ifdef XP_MACOSX pref("extensions.langpacks.signatures.required", false); diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index d7acae6d8f9d..f486d234b695 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -1365,6 +1365,20 @@ BrowserGlue.prototype = { // handle any UI migration this._migrateUI(); + // Clear possibly auto enabled enterprise_roots prefs (see bug 40166) + if ( + !Services.prefs.getBoolPref( + "security.certerrors.mitm.auto_enable_enterprise_roots" + ) && + Services.prefs.getBoolPref( + "security.enterprise_roots.auto-enabled", + false + ) + ) { + Services.prefs.clearUserPref("security.enterprise_roots.enabled"); + Services.prefs.clearUserPref("security.enterprise_roots.auto-enabled"); + } + if (!Services.prefs.prefHasUserValue(PREF_PDFJS_ISDEFAULT_CACHE_STATE)) { PdfJs.checkIsDefault(this._isNewProfile); }
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] Bug 40309: Avoid using regional OS locales
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 054ad0f4924f87235031043fe2c93fbc3e3de460 Author: Alex Catarineu <acat(a)torproject.org> Date: Wed Jan 27 11:28:05 2021 +0100 Bug 40309: Avoid using regional OS locales Only use regional OS locales if the pref `intl.regional_prefs.use_os_locales` is set to true. --- intl/locale/LocaleService.cpp | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/intl/locale/LocaleService.cpp b/intl/locale/LocaleService.cpp index 022d41cab2e2..ac001ee98991 100644 --- a/intl/locale/LocaleService.cpp +++ b/intl/locale/LocaleService.cpp @@ -452,31 +452,6 @@ LocaleService::GetRegionalPrefsLocales(nsTArray<nsCString>& aRetVal) { OSPreferences::GetInstance()->GetRegionalPrefsLocales(aRetVal))) { return NS_OK; } - - // If we fail to retrieve them, return the app locales. - GetAppLocalesAsBCP47(aRetVal); - return NS_OK; - } - - // Otherwise, fetch OS Regional Preferences locales and compare the first one - // to the app locale. If the language subtag matches, we can safely use - // the OS Regional Preferences locale. - // - // This facilitates scenarios such as Firefox in "en-US" and User sets - // regional prefs to "en-GB". - nsAutoCString appLocale; - AutoTArray<nsCString, 10> regionalPrefsLocales; - LocaleService::GetInstance()->GetAppLocaleAsBCP47(appLocale); - - if (NS_FAILED(OSPreferences::GetInstance()->GetRegionalPrefsLocales( - regionalPrefsLocales))) { - GetAppLocalesAsBCP47(aRetVal); - return NS_OK; - } - - if (LocaleService::LanguagesMatch(appLocale, regionalPrefsLocales[0])) { - aRetVal = regionalPrefsLocales.Clone(); - return NS_OK; } // Otherwise use the app locales.
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] Bug 40432: Prevent probing installed applications
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 30783107d8e5e0cc091348e4558a04d0db1fe936 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 d7de04694c62..8f035949ed7e 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -1068,8 +1068,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)); @@ -1112,11 +1137,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
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] Bug 40475: Include clearing CORS preflight cache
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit f74d4b7255c8a8c958a6d574928d230244d0a346 Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Sun Jun 6 20:32:23 2021 +0000 Bug 40475: Include clearing CORS preflight cache --- netwerk/protocol/http/nsCORSListenerProxy.cpp | 7 +++++++ netwerk/protocol/http/nsCORSListenerProxy.h | 1 + netwerk/protocol/http/nsHttpHandler.cpp | 1 + 3 files changed, 9 insertions(+) diff --git a/netwerk/protocol/http/nsCORSListenerProxy.cpp b/netwerk/protocol/http/nsCORSListenerProxy.cpp index 1de4e2abed4a..9ece2020bc7d 100644 --- a/netwerk/protocol/http/nsCORSListenerProxy.cpp +++ b/netwerk/protocol/http/nsCORSListenerProxy.cpp @@ -358,6 +358,13 @@ void nsCORSListenerProxy::ClearCache() { sPreflightCache->Clear(); } +/* static */ +void nsCORSListenerProxy::Clear() { + if (sPreflightCache) { + sPreflightCache->Clear(); + } +} + nsCORSListenerProxy::nsCORSListenerProxy(nsIStreamListener* aOuter, nsIPrincipal* aRequestingPrincipal, bool aWithCredentials) diff --git a/netwerk/protocol/http/nsCORSListenerProxy.h b/netwerk/protocol/http/nsCORSListenerProxy.h index e3f1ff27f1d1..5b858223028f 100644 --- a/netwerk/protocol/http/nsCORSListenerProxy.h +++ b/netwerk/protocol/http/nsCORSListenerProxy.h @@ -59,6 +59,7 @@ class nsCORSListenerProxy final : public nsIStreamListener, static void Shutdown(); static void ClearCache(); + static void Clear(); [[nodiscard]] nsresult Init(nsIChannel* aChannel, DataURIHandling aAllowDataURI); diff --git a/netwerk/protocol/http/nsHttpHandler.cpp b/netwerk/protocol/http/nsHttpHandler.cpp index 0bb944164652..5925c4598bc1 100644 --- a/netwerk/protocol/http/nsHttpHandler.cpp +++ b/netwerk/protocol/http/nsHttpHandler.cpp @@ -2167,6 +2167,7 @@ nsHttpHandler::Observe(nsISupports* subject, const char* topic, if (mAltSvcCache) { mAltSvcCache->ClearAltServiceMappings(); } + nsCORSListenerProxy::Clear(); } else if (!strcmp(topic, NS_NETWORK_LINK_TOPIC)) { nsAutoCString converted = NS_ConvertUTF16toUTF8(data); if (!strcmp(converted.get(), NS_NETWORK_LINK_DATA_CHANGED)) {
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] 40209: Implement Basic Crypto Safety
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit c71ec8ab184f588fec602a293fc0f11adf2b251f Author: sanketh <me(a)snkth.com> Date: Mon Feb 8 20:12:44 2021 -0500 40209: Implement Basic Crypto Safety Adds a CryptoSafety actor which detects when you've copied a crypto address from a HTTP webpage and shows a warning. Closes #40209. Bug 40428: Fix string attribute names --- browser/actors/CryptoSafetyChild.jsm | 87 ++++++++++++++++ browser/actors/CryptoSafetyParent.jsm | 142 +++++++++++++++++++++++++++ browser/actors/moz.build | 2 + browser/base/content/popup-notifications.inc | 14 +++ browser/components/BrowserGlue.jsm | 18 ++++ browser/modules/TorStrings.jsm | 48 +++++++++ browser/themes/shared/browser.inc.css | 5 + toolkit/content/license.html | 32 ++++++ toolkit/modules/Bech32Decode.jsm | 103 +++++++++++++++++++ toolkit/modules/moz.build | 1 + 10 files changed, 452 insertions(+) diff --git a/browser/actors/CryptoSafetyChild.jsm b/browser/actors/CryptoSafetyChild.jsm new file mode 100644 index 000000000000..87ff261d4915 --- /dev/null +++ b/browser/actors/CryptoSafetyChild.jsm @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Copyright (c) 2020, The Tor Project, Inc. + * + * 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/. */ + +var EXPORTED_SYMBOLS = ["CryptoSafetyChild"]; + +const { Bech32Decode } = ChromeUtils.import( + "resource://gre/modules/Bech32Decode.jsm" +); + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +const kPrefCryptoSafety = "security.cryptoSafety"; + +XPCOMUtils.defineLazyPreferenceGetter( + this, + "isCryptoSafetyEnabled", + kPrefCryptoSafety, + true /* defaults to true */ +); + +function looksLikeCryptoAddress(s) { + // P2PKH and P2SH addresses + // https://stackoverflow.com/a/24205650 + const bitcoinAddr = /^[13][a-km-zA-HJ-NP-Z1-9]{25,39}$/; + if (bitcoinAddr.test(s)) { + return true; + } + + // Bech32 addresses + if (Bech32Decode(s) !== null) { + return true; + } + + // regular addresses + const etherAddr = /^0x[a-fA-F0-9]{40}$/; + if (etherAddr.test(s)) { + return true; + } + + // t-addresses + // https://www.reddit.com/r/zec/comments/8mxj6x/simple_regex_to_validate_a_zca… + const zcashAddr = /^t1[a-zA-Z0-9]{33}$/; + if (zcashAddr.test(s)) { + return true; + } + + // Standard, Integrated, and 256-bit Integrated addresses + // https://monero.stackexchange.com/a/10627 + const moneroAddr = /^4(?:[0-9AB]|[1-9A-HJ-NP-Za-km-z]{12}(?:[1-9A-HJ-NP-Za-km-z]{30})?)[1-9A-HJ-NP-Za-km-z]{93}$/; + if (moneroAddr.test(s)) { + return true; + } + + return false; +} + +class CryptoSafetyChild extends JSWindowActorChild { + handleEvent(event) { + if (isCryptoSafetyEnabled) { + // Ignore non-HTTP addresses + if (!this.document.documentURIObject.schemeIs("http")) { + return; + } + // Ignore onion addresses + if (this.document.documentURIObject.host.endsWith(".onion")) { + return; + } + + if (event.type == "copy" || event.type == "cut") { + this.contentWindow.navigator.clipboard.readText().then(clipText => { + const selection = clipText.trim(); + if (looksLikeCryptoAddress(selection)) { + this.sendAsyncMessage("CryptoSafety:CopiedText", { + selection, + }); + } + }); + } + } + } +} diff --git a/browser/actors/CryptoSafetyParent.jsm b/browser/actors/CryptoSafetyParent.jsm new file mode 100644 index 000000000000..bac151df5511 --- /dev/null +++ b/browser/actors/CryptoSafetyParent.jsm @@ -0,0 +1,142 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Copyright (c) 2020, The Tor Project, Inc. + * + * 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/. */ + +var EXPORTED_SYMBOLS = ["CryptoSafetyParent"]; + +const { XPCOMUtils } = ChromeUtils.import( + "resource://gre/modules/XPCOMUtils.jsm" +); + +XPCOMUtils.defineLazyModuleGetters(this, { + TorStrings: "resource:///modules/TorStrings.jsm", +}); + +const kPrefCryptoSafety = "security.cryptoSafety"; + +XPCOMUtils.defineLazyPreferenceGetter( + this, + "isCryptoSafetyEnabled", + kPrefCryptoSafety, + true /* defaults to true */ +); + +class CryptoSafetyParent extends JSWindowActorParent { + getBrowser() { + return this.browsingContext.top.embedderElement; + } + + receiveMessage(aMessage) { + if (isCryptoSafetyEnabled) { + if (aMessage.name == "CryptoSafety:CopiedText") { + showPopup(this.getBrowser(), aMessage.data.selection); + } + } + } +} + +function trimAddress(cryptoAddr) { + if (cryptoAddr.length <= 32) { + return cryptoAddr; + } + return cryptoAddr.substring(0, 32) + "..."; +} + +function showPopup(aBrowser, cryptoAddr) { + const chromeDoc = aBrowser.ownerDocument; + if (chromeDoc) { + const win = chromeDoc.defaultView; + const cryptoSafetyPrompt = new CryptoSafetyPrompt( + aBrowser, + win, + cryptoAddr + ); + cryptoSafetyPrompt.show(); + } +} + +class CryptoSafetyPrompt { + constructor(aBrowser, aWin, cryptoAddr) { + this._browser = aBrowser; + this._win = aWin; + this._cryptoAddr = cryptoAddr; + } + + show() { + const primaryAction = { + label: TorStrings.cryptoSafetyPrompt.primaryAction, + accessKey: TorStrings.cryptoSafetyPrompt.primaryActionAccessKey, + callback: () => { + this._win.torbutton_new_circuit(); + }, + }; + + const secondaryAction = { + label: TorStrings.cryptoSafetyPrompt.secondaryAction, + accessKey: TorStrings.cryptoSafetyPrompt.secondaryActionAccessKey, + callback: () => {}, + }; + + let _this = this; + const options = { + popupIconURL: "chrome://browser/skin/cert-error.svg", + eventCallback(aTopic) { + if (aTopic === "showing") { + _this._onPromptShowing(); + } + }, + }; + + const cryptoWarningText = TorStrings.cryptoSafetyPrompt.cryptoWarning.replace( + "%S", + trimAddress(this._cryptoAddr) + ); + + if (this._win.PopupNotifications) { + this._prompt = this._win.PopupNotifications.show( + this._browser, + "crypto-safety-warning", + cryptoWarningText, + null /* anchor ID */, + primaryAction, + [secondaryAction], + options + ); + } + } + + _onPromptShowing() { + let xulDoc = this._browser.ownerDocument; + + let whatCanHeading = xulDoc.getElementById( + "crypto-safety-warning-notification-what-can-heading" + ); + if (whatCanHeading) { + whatCanHeading.textContent = TorStrings.cryptoSafetyPrompt.whatCanHeading; + } + + let whatCanBody = xulDoc.getElementById( + "crypto-safety-warning-notification-what-can-body" + ); + if (whatCanBody) { + whatCanBody.textContent = TorStrings.cryptoSafetyPrompt.whatCanBody; + } + + let learnMoreElem = xulDoc.getElementById( + "crypto-safety-warning-notification-learnmore" + ); + if (learnMoreElem) { + learnMoreElem.setAttribute( + "value", + TorStrings.cryptoSafetyPrompt.learnMore + ); + learnMoreElem.setAttribute( + "href", + TorStrings.cryptoSafetyPrompt.learnMoreURL + ); + } + } +} diff --git a/browser/actors/moz.build b/browser/actors/moz.build index 3eac455c5356..00b0a3630f7c 100644 --- a/browser/actors/moz.build +++ b/browser/actors/moz.build @@ -56,6 +56,8 @@ FINAL_TARGET_FILES.actors += [ "ContentSearchParent.jsm", "ContextMenuChild.jsm", "ContextMenuParent.jsm", + "CryptoSafetyChild.jsm", + "CryptoSafetyParent.jsm", "DecoderDoctorChild.jsm", "DecoderDoctorParent.jsm", "DOMFullscreenChild.jsm", diff --git a/browser/base/content/popup-notifications.inc b/browser/base/content/popup-notifications.inc index 6adfde017b9e..8f6d28cc81b2 100644 --- a/browser/base/content/popup-notifications.inc +++ b/browser/base/content/popup-notifications.inc @@ -162,3 +162,17 @@ </vbox> </popupnotificationfooter> </popupnotification> + + <popupnotification id="crypto-safety-warning-notification" hidden="true"> + <popupnotificationcontent orient="vertical"> + <description id="crypto-safety-warning-notification-desc"/> + <html:div id="crypto-safety-warning-notification-what-can"> + <html:strong id="crypto-safety-warning-notification-what-can-heading" /> + <html:br/> + <html:span id="crypto-safety-warning-notification-what-can-body" /> + </html:div> + <label id="crypto-safety-warning-notification-learnmore" + class="popup-notification-learnmore-link" + is="text-link"/> + </popupnotificationcontent> + </popupnotification> diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index f486d234b695..65d5ea9eae5b 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -441,6 +441,24 @@ let JSWINDOWACTORS = { }, messageManagerGroups: ["browsers"], + + allFrames: true, + }, + + CryptoSafety: { + parent: { + moduleURI: "resource:///actors/CryptoSafetyParent.jsm", + }, + + child: { + moduleURI: "resource:///actors/CryptoSafetyChild.jsm", + group: "browsers", + events: { + copy: { mozSystemGroup: true }, + cut: { mozSystemGroup: true }, + }, + }, + allFrames: true, }, diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm index e8a8d37ae373..1e08b168e4af 100644 --- a/browser/modules/TorStrings.jsm +++ b/browser/modules/TorStrings.jsm @@ -101,6 +101,54 @@ class TorPropertyStringBundle { Security Level Strings */ var TorStrings = { + /* + CryptoSafetyPrompt Strings + */ + cryptoSafetyPrompt: (function() { + let tsb = new TorPropertyStringBundle( + "chrome://torbutton/locale/torbutton.properties", + "cryptoSafetyPrompt." + ); + let getString = function(key, fallback) { + return tsb.getString(key, fallback); + }; + + let retval = { + cryptoWarning: getString( + "cryptoWarning", + "A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified." + ), + whatCanHeading: getString( + "whatCanHeading", + "What can you do about it?" + ), + whatCanBody: getString( + "whatCanBody", + "You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning." + ), + learnMore: getString("learnMore", "Learn more"), + learnMoreURL: `https://support.torproject.org/${getLocale()}/`, + primaryAction: getString( + "primaryAction", + "Reload Tab with a New Circuit" + ), + primaryActionAccessKey: getString( + "primaryActionAccessKey", + "R" + ), + secondaryAction: getString( + "secondaryAction", + "Dismiss Warning" + ), + secondaryActionAccessKey: getString( + "secondaryActionAccessKey", + "D" + ), + }; + + return retval; + })() /* CryptoSafetyPrompt Strings */, + /* Tor Browser Security Level Strings */ diff --git a/browser/themes/shared/browser.inc.css b/browser/themes/shared/browser.inc.css index fbbfa44c11c9..786c1225bdd0 100644 --- a/browser/themes/shared/browser.inc.css +++ b/browser/themes/shared/browser.inc.css @@ -828,3 +828,8 @@ popupnotificationcontent { #tab-notification-deck { display: block; } + +#crypto-safety-warning-notification-what-can { + display: block; + margin: 5px; +} diff --git a/toolkit/content/license.html b/toolkit/content/license.html index d26dc7118d3c..782e874edf2a 100644 --- a/toolkit/content/license.html +++ b/toolkit/content/license.html @@ -70,6 +70,7 @@ <li><a href="about:license#arm">ARM License</a></li> <li><a href="about:license#babel">Babel License</a></li> <li><a href="about:license#babylon">Babylon License</a></li> + <li><a href="about:license#bech32">Bech32 License</a></li> <li><a href="about:license#bincode">bincode License</a></li> <li><a href="about:license#bsd2clause">BSD 2-Clause License</a></li> <li><a href="about:license#bsd3clause">BSD 3-Clause License</a></li> @@ -2105,6 +2106,37 @@ furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +</pre> + + + <hr> + + <h1><a id="bech32"></a>Bech32 License</h1> + + <p>This license applies to the file + <code>toolkit/modules/Bech32Decode.jsm</code>. + </p> + +<pre> +Copyright (c) 2017 Pieter Wuille + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/toolkit/modules/Bech32Decode.jsm b/toolkit/modules/Bech32Decode.jsm new file mode 100644 index 000000000000..3a2bc7ae0a10 --- /dev/null +++ b/toolkit/modules/Bech32Decode.jsm @@ -0,0 +1,103 @@ +// Adapted from the reference implementation of Bech32 +// https://github.com/sipa/bech32 + +// Copyright (c) 2017 Pieter Wuille +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +"use strict"; + +/** + * JS module implementation of Bech32 decoding adapted from the reference + * implementation https://github.com/sipa/bech32. + */ + +var EXPORTED_SYMBOLS = ["Bech32Decode"]; + +var CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; +var GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]; + +function polymod(values) { + var chk = 1; + for (var p = 0; p < values.length; ++p) { + var top = chk >> 25; + chk = ((chk & 0x1ffffff) << 5) ^ values[p]; + for (var i = 0; i < 5; ++i) { + if ((top >> i) & 1) { + chk ^= GENERATOR[i]; + } + } + } + return chk; +} + +function hrpExpand(hrp) { + var ret = []; + var p; + for (p = 0; p < hrp.length; ++p) { + ret.push(hrp.charCodeAt(p) >> 5); + } + ret.push(0); + for (p = 0; p < hrp.length; ++p) { + ret.push(hrp.charCodeAt(p) & 31); + } + return ret; +} + +function verifyChecksum(hrp, data) { + return polymod(hrpExpand(hrp).concat(data)) === 1; +} + +function Bech32Decode(bechString) { + var p; + var has_lower = false; + var has_upper = false; + for (p = 0; p < bechString.length; ++p) { + if (bechString.charCodeAt(p) < 33 || bechString.charCodeAt(p) > 126) { + return null; + } + if (bechString.charCodeAt(p) >= 97 && bechString.charCodeAt(p) <= 122) { + has_lower = true; + } + if (bechString.charCodeAt(p) >= 65 && bechString.charCodeAt(p) <= 90) { + has_upper = true; + } + } + if (has_lower && has_upper) { + return null; + } + bechString = bechString.toLowerCase(); + var pos = bechString.lastIndexOf("1"); + if (pos < 1 || pos + 7 > bechString.length || bechString.length > 90) { + return null; + } + var hrp = bechString.substring(0, pos); + var data = []; + for (p = pos + 1; p < bechString.length; ++p) { + var d = CHARSET.indexOf(bechString.charAt(p)); + if (d === -1) { + return null; + } + data.push(d); + } + if (!verifyChecksum(hrp, data)) { + return null; + } + return { hrp: hrp, data: data.slice(0, data.length - 6) }; +} diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index 9d349d9f3394..a3bfdf83ffbd 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -152,6 +152,7 @@ EXTRA_JS_MODULES += [ "ActorManagerParent.jsm", "AppMenuNotifications.jsm", "AsyncPrefs.jsm", + "Bech32Decode.jsm", "BinarySearch.jsm", "BrowserTelemetryUtils.jsm", "BrowserUtils.jsm",
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 25658: Replace security slider with security level UI
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 4282cea750761d67dd55a8753df4370cba156d56 Author: Richard Pospesel <richard(a)torproject.org> Date: Thu Sep 16 16:11:33 2021 -0500 fixup! Bug 25658: Replace security slider with security level UI --- .../securitylevel/content/securityLevel.js | 86 +++++++++++------- .../securitylevel/content/securityLevelButton.css | 21 +++-- .../securitylevel/content/securityLevelButton.svg | 21 ----- .../securitylevel/content/securityLevelIcon.svg | 40 +++++++++ .../securitylevel/content/securityLevelPanel.css | 100 ++++++++++----------- .../content/securityLevelPanel.inc.xhtml | 67 ++++++++------ .../content/securityLevelPreferences.css | 14 ++- browser/components/securitylevel/jar.mn | 2 +- browser/modules/TorStrings.jsm | 4 + .../themes/shared/customizableui/panelUI.inc.css | 3 +- 10 files changed, 208 insertions(+), 150 deletions(-) diff --git a/browser/components/securitylevel/content/securityLevel.js b/browser/components/securitylevel/content/securityLevel.js index b47d0cfb545e..8b8babe5b58e 100644 --- a/browser/components/securitylevel/content/securityLevel.js +++ b/browser/components/securitylevel/content/securityLevel.js @@ -73,19 +73,19 @@ const SecurityLevelButton = { _configUIFromPrefs : function(securityLevelButton) { if (securityLevelButton != null) { let securitySlider = SecurityLevelPrefs.securitySlider; - let classList = securityLevelButton.classList; - classList.remove("standard", "safer", "safest"); + securityLevelButton.removeAttribute("level"); + const securityCustom = SecurityLevelPrefs.securityCustom; switch(securitySlider) { case 4: - classList.add("standard"); + securityLevelButton.setAttribute("level", `standard${securityCustom ? "_custom" : ""}`); securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.standard.tooltip); break; case 2: - classList.add("safer"); + securityLevelButton.setAttribute("level", `safer${securityCustom ? "_custom" : ""}`); securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safer.tooltip); break; case 1: - classList.add("safest"); + securityLevelButton.setAttribute("level", `safest${securityCustom ? "_custom" : ""}`); securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safest.tooltip); break; } @@ -136,7 +136,7 @@ const SecurityLevelButton = { observe : function(subject, topic, data) { switch(topic) { case "nsPref:changed": - if (data == "security_slider") { + if (data === "security_slider" || data === "security_custom") { this._configUIFromPrefs(this.button); } break; @@ -166,9 +166,13 @@ const SecurityLevelButton = { // Library, and the Hamburger menus. Using oncommand alone would result in only getting fired // after onclick, which is mousedown followed by mouseup. onCommand : function(aEvent) { - // snippet stolen from /browser/components/downloads/indicator.js DownloadsIndicatorView.onCommand(evt) + // snippet borrowed from /browser/components/downloads/content/indicator.js DownloadsIndicatorView.onCommand(evt) if ( - (aEvent.type == "mousedown" && aEvent.button != 0) || + // On Mac, ctrl-click will send a context menu event from the widget, so + // we don't want to bring up the panel when ctrl key is pressed. + (aEvent.type == "mousedown" && + (aEvent.button != 0 || + (AppConstants.platform == "macosx" && aEvent.ctrlKey))) || (aEvent.type == "keypress" && aEvent.key != " " && aEvent.key != "Enter") ) { return; @@ -178,6 +182,7 @@ const SecurityLevelButton = { // while the security level panel is open this.button.setAttribute("open", "true"); SecurityLevelPanel.show(); + aEvent.stopPropagation(); }, }; /* Security Level Button */ @@ -193,25 +198,42 @@ const SecurityLevelPanel = { _anchor : null, _populated : false, + _selectors: Object.freeze({ + panel: "panel#securityLevel-panel", + icon: "vbox#securityLevel-vbox>vbox", + header: "h1#securityLevel-header", + level: "label#securityLevel-level", + custom: "label#securityLevel-custom", + summary: "description#securityLevel-summary", + learnMore: "label#securityLevel-learnMore", + restoreDefaults: "button#securityLevel-restoreDefaults", + advancedSecuritySettings: "button#securityLevel-advancedSecuritySettings", + }), + _populateXUL : function() { - // get the panel elements we need to populate - let panelview = document.getElementById("securityLevel-panelview"); - let labelHeader = panelview.querySelector("#securityLevel-header"); - let labelCustomWarning = panelview.querySelector("#securityLevel-customWarning") - let labelLearnMore = panelview.querySelector("#securityLevel-learnMore"); - let buttonRestoreDefaults = panelview.querySelector("#securityLevel-restoreDefaults"); - let buttonAdvancedSecuritySettings = panelview.querySelector("#securityLevel-advancedSecuritySettings"); - - labelHeader.setAttribute("value", TorStrings.securityLevel.securityLevel); - labelCustomWarning.setAttribute("value", TorStrings.securityLevel.customWarning); - labelLearnMore.setAttribute("value", TorStrings.securityLevel.learnMore); - labelLearnMore.setAttribute("href", TorStrings.securityLevel.learnMoreURL); - buttonRestoreDefaults.setAttribute("label", TorStrings.securityLevel.restoreDefaults); - buttonAdvancedSecuritySettings.setAttribute("label", TorStrings.securityLevel.advancedSecuritySettings); + let selectors = this._selectors; + + this._elements = { + panel: document.querySelector(selectors.panel), + icon: document.querySelector(selectors.icon), + header: document.querySelector(selectors.header), + levelLabel: document.querySelector(selectors.level), + customLabel: document.querySelector(selectors.custom), + summaryDescription: document.querySelector(selectors.summary), + learnMoreLabel: document.querySelector(selectors.learnMore), + restoreDefaultsButton: document.querySelector(selectors.restoreDefaults), + changeButton: document.querySelector(selectors.advancedSecuritySettings), + }; + let elements = this._elements; - // rest of the XUL is set based on security prefs - this._configUIFromPrefs(); + elements.header.textContent = TorStrings.securityLevel.securityLevel; + elements.customLabel.setAttribute("value", TorStrings.securityLevel.customWarning); + elements.learnMoreLabel.setAttribute("value", TorStrings.securityLevel.learnMore); + elements.learnMoreLabel.setAttribute("href", TorStrings.securityLevel.learnMoreURL); + elements.restoreDefaultsButton.setAttribute("label", TorStrings.securityLevel.restoreDefaults); + elements.changeButton.setAttribute("label", TorStrings.securityLevel.change); + this._configUIFromPrefs(); this._populated = true; }, @@ -221,12 +243,13 @@ const SecurityLevelPanel = { let securityCustom = SecurityLevelPrefs.securityCustom; // get the panel elements we need to populate - let panelview = document.getElementById("securityLevel-panelview"); - let labelLevel = panelview.querySelector("#securityLevel-level"); - let labelCustomWarning = panelview.querySelector("#securityLevel-customWarning") - let summary = panelview.querySelector("#securityLevel-summary"); - let buttonRestoreDefaults = panelview.querySelector("#securityLevel-restoreDefaults"); - let buttonAdvancedSecuritySettings = panelview.querySelector("#securityLevel-advancedSecuritySettings"); + let elements = this._elements; + let icon = elements.icon; + let labelLevel = elements.levelLabel; + let labelCustomWarning = elements.customLabel; + let summary = elements.summaryDescription; + let buttonRestoreDefaults = elements.restoreDefaultsButton; + let buttonAdvancedSecuritySettings = elements.changeButton; // only visible when user is using custom settings labelCustomWarning.hidden = !securityCustom; @@ -236,16 +259,19 @@ const SecurityLevelPanel = { switch(securitySlider) { // standard case 4: + icon.setAttribute("level", "standard"); labelLevel.setAttribute("value", TorStrings.securityLevel.standard.level); summary.textContent = TorStrings.securityLevel.standard.summary; break; // safer case 2: + icon.setAttribute("level", "safer"); labelLevel.setAttribute("value", TorStrings.securityLevel.safer.level); summary.textContent = TorStrings.securityLevel.safer.summary; break; // safest case 1: + icon.setAttribute("level", "safest"); labelLevel.setAttribute("value", TorStrings.securityLevel.safest.level); summary.textContent = TorStrings.securityLevel.safest.summary; break; diff --git a/browser/components/securitylevel/content/securityLevelButton.css b/browser/components/securitylevel/content/securityLevelButton.css index 81f2365bae28..38701250e9c9 100644 --- a/browser/components/securitylevel/content/securityLevelButton.css +++ b/browser/components/securitylevel/content/securityLevelButton.css @@ -1,9 +1,18 @@ -toolbarbutton#security-level-button.standard { - list-style-image: url("chrome://browser/content/securitylevel/securityLevelButton.svg#standard"); +toolbarbutton#security-level-button[level="standard"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard"); } -toolbarbutton#security-level-button.safer { - list-style-image: url("chrome://browser/content/securitylevel/securityLevelButton.svg#safer"); +toolbarbutton#security-level-button[level="safer"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer"); } -toolbarbutton#security-level-button.safest { - list-style-image: url("chrome://browser/content/securitylevel/securityLevelButton.svg#safest"); +toolbarbutton#security-level-button[level="safest"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest"); } +toolbarbutton#security-level-button[level="standard_custom"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard_custom"); +} +toolbarbutton#security-level-button[level="safer_custom"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer_custom"); +} +toolbarbutton#security-level-button[level="safest_custom"] { + list-style-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest_custom"); +} \ No newline at end of file diff --git a/browser/components/securitylevel/content/securityLevelButton.svg b/browser/components/securitylevel/content/securityLevelButton.svg deleted file mode 100644 index 8535cdcc531e..000000000000 --- a/browser/components/securitylevel/content/securityLevelButton.svg +++ /dev/null @@ -1,21 +0,0 @@ -<svg width="14px" height="16px" viewBox="0 0 14 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <style> - use:not(:target) { - display: none; - } - </style> - <defs> - <g id="standard_icon" stroke="none" stroke-width="1"> - <path d="M7.0 2.16583509C7.0 2.16583509 2.0 4.24375717 2.0 4.24375717C2.0 4.24375717 2.0 7.27272727 2.0 7.27272727C2.0 10.2413541 4.13435329 13.0576771 7.0 13.9315843C9.8656467 13.0576771 12.0 10.2413541 12.0 7.27272727C12.0 7.27272727 12.0 4.24375717 12.0 4.24375717C12.0 4.24375717 7.0 2.16583509 7.0 2.16583509C7.0 2.16583509 7.0 2.16583509 7.0 2.16583509M7.0 0.0C7.0 0.0 14.0 2.90909091 14.0 2.90909091C14.0 2.90909091 14.0 7.27272727 14.0 7.27272727C14.0 11.3090909 11.0133333 15.0836364 7.0 16.0C2.98666667 15.0836364 0.0 11.3090909 0.0 7.27272727C0.0 7.27272727 0.0 2.90909091 0.0 2.90909091C0.0 2.90909091 7.0 0.0 7.0 0.0C7.0 0.0 7.0 0.0 7.0 0.0" /> - </g> - <g id="safer_icon" stroke="none" stroke-width="1"> - <path fill-rule="nonzero" d="M7.0 2.1658351C7.0 13.931584 7.0 2.1658351 7.0 13.931584C9.8656467 13.057677 12.0 10.241354 12.0 7.2727273C12.0 7.2727273 12.0 4.2437572 12.0 4.2437572C12.0 4.2437572 7.0 2.1658351 7.0 2.1658351C7.0 2.1658351 7.0 2.1658351 7.0 2.1658351M7.0 0.0C7.0 0.0 14.0 2.9090909 14.0 2.9090909C14.0 2.9090909 14.0 7.2727273 14.0 7.2727273C14.0 11.309091 11.013333 15.083636 7.0 16.0C2.9866667 15.083636 0.0 11.309091 0.0 7.2727273C0.0 7.2727273 0.0 2.9090909 0.0 2.9090909C0.0 2.9090909 7.0 0.0 7.0 0.0"/> - </g> - <g id="safest_icon" stroke="none" stroke-width="1"> - <path d="M7.0 0.0C7.0 0.0 14.0 2.90909091 14.0 2.90909091C14.0 2.90909091 14.0 7.27272727 14.0 7.27272727C14.0 11.3090909 11.0133333 15.0836364 7.0 16.0C2.98666667 15.0836364 0.0 11.3090909 0.0 7.27272727C0.0 7.27272727 0.0 2.90909091 0.0 2.90909091C0.0 2.90909091 7.0 0.0 7.0 0.0C7.0 0.0 7.0 0.0 7.0 0.0" /> - </g> - </defs> - <use id="standard" fill="context-fill" fill-opacity="context-fill-opacity" href="#standard_icon" /> - <use id="safer" fill="context-fill" fill-opacity="context-fill-opacity" href="#safer_icon" /> - <use id="safest" fill="context-fill" fill-opacity="context-fill-opacity" href="#safest_icon" /> -</svg> diff --git a/browser/components/securitylevel/content/securityLevelIcon.svg b/browser/components/securitylevel/content/securityLevelIcon.svg new file mode 100644 index 000000000000..38cdbcb68afc --- /dev/null +++ b/browser/components/securitylevel/content/securityLevelIcon.svg @@ -0,0 +1,40 @@ +<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <style> + use:not(:target) { + display: none; + } + </style> + <defs> + <g id="standard_icon" stroke="none" stroke-width="1"> + <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd" /> + </g> + <g id="safer_icon" stroke="none" stroke-width="1"> + <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd"/> + <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4-2.28572c.16666-.09523.37403.02511.37403.21707v10.0766c-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/> + </g> + <g id="safest_icon" stroke="none" stroke-width="1"> + <path clip-rule="evenodd" d="m8.49614.283505c-.30743-.175675-.68485-.175675-.99228.000001l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 4.0133-.9164 7-6 7-10v-1.41968c0-.35886-.1923-.6902-.5039-.86824zm-.49614 1.216495-5.75 3.28571v1.2746c0 1.71749.65238 3.7522 1.78726 5.46629 1.07287 1.6204 2.47498 2.8062 3.96274 3.2425 1.48776-.4363 2.8899-1.6221 3.9627-3.2425 1.1349-1.71409 1.7873-3.7488 1.7873-5.46629v-1.2746z" fill-rule="evenodd"/> + <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4.25-2.42857c.07685-.04392.17121-.04392.24806 0l4.24997 2.42857c.0779.04451.126.12734.126.21706v.40411c0 1.43511-.5582 3.23363-1.5795 4.77628-.8665 1.3087-1.90846 2.2025-2.9205 2.6105-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/> + </g> + <g id="standard_custom_icon" stroke="none" stroke-width="1"> + <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/> + <circle cx="13" cy="3" fill="#ffbd2e" r="3"/> + </g> + <g id="safer_custom_icon" stroke="none" stroke-width="1"> + <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/> + <path d="m3.5 6.12062v-.40411c0-.08972.04807-.17255.12597-.21706l4-2.28572c.16666-.09523.37403.02511.37403.21707v10.0766c-1.01204-.408-2.054-1.3018-2.92048-2.6105-1.02134-1.54265-1.57952-3.34117-1.57952-4.77628z"/> + <circle cx="13" cy="3" fill="#ffbd2e" r="3"/> + </g> + <g id="safest_custom_icon" stroke="none" stroke-width="1"> + <path d="m9.37255.784312-.87641-.500806c-.30743-.175676-.68485-.175676-.99228 0l-6 3.428574c-.31157.17804-.50386.50938-.50386.86824v1.41968c0 4 2.98667 9.0836 7 10 3.7599-.8585 6.6186-5.3745 6.9647-9.23043-.4008.20936-.8392.35666-1.3024.42914-.2132 1.43414-.8072 2.98009-1.6996 4.32789-1.0728 1.6204-2.47494 2.8062-3.9627 3.2425-1.48776-.4363-2.88987-1.6221-3.96274-3.2425-1.13488-1.71409-1.78726-3.7488-1.78726-5.46629v-1.2746l5.75-3.28571.86913.49664c.10502-.43392.27664-.84184.50342-1.212328z"/> + <path d="m8.77266 3.44151-.64863-.37064c-.07685-.04392-.17121-.04392-.24806 0l-4.25 2.42857c-.0779.04451-.12597.12735-.12597.21706v.40412c0 1.4351.55818 3.23362 1.57952 4.77618.86648 1.3087 1.90844 2.2026 2.92048 2.6106 1.01204-.408 2.054-1.3018 2.9205-2.6106.7761-1.17217 1.2847-2.49215 1.4843-3.68816-1.9219-.26934-3.43158-1.82403-3.63214-3.76713z"/> + <circle cx="13" cy="3" fill="#ffbd2e" r="3"/> + </g> + </defs> + <use id="standard" fill="context-fill" fill-opacity="context-fill-opacity" href="#standard_icon" /> + <use id="safer" fill="context-fill" fill-opacity="context-fill-opacity" href="#safer_icon" /> + <use id="safest" fill="context-fill" fill-opacity="context-fill-opacity" href="#safest_icon" /> + <use id="standard_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#standard_custom_icon" /> + <use id="safer_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#safer_custom_icon" /> + <use id="safest_custom" fill="context-fill" fill-opacity="context-fill-opacity" href="#safest_custom_icon" /> +</svg> diff --git a/browser/components/securitylevel/content/securityLevelPanel.css b/browser/components/securitylevel/content/securityLevelPanel.css index 70022e2bd4b2..6462c02f1594 100644 --- a/browser/components/securitylevel/content/securityLevelPanel.css +++ b/browser/components/securitylevel/content/securityLevelPanel.css @@ -1,82 +1,74 @@ /* Security Level CSS */ -panel#securityLevel-panel > .panel-arrowcontainer > .panel-arrowcontent { - padding: 0; -} - panelview#securityLevel-panelview { - width: 20em; + width: 25em; } -panelview#securityLevel-panelview>vbox.panel-subview-body { - padding: 1em; +vbox#securityLevel-vbox > vbox { + background-repeat: no-repeat; + /* icon center-line should be in-line with right margin */ + /* -margin + panelWidth - imageWidth/2 */ + background-position: calc(-16px + 25em - 4.5em) 0.4em; + background-size: 9em 9em; + -moz-context-properties: fill, fill-opacity; + fill-opacity: 1; + fill: var(--button-bgcolor); + min-height: 10em; } -label#securityLevel-header { - text-transform: uppercase; - color: var(--panel-disabled-color); - font-size: 0.85em; - margin: 0 0 0.4em 0; - padding: 0; +vbox#securityLevel-vbox > vbox[level="standard"] { + background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#standard"); } - -hbox#securityLevel-levelHbox { - margin-bottom: 1em; +vbox#securityLevel-vbox > vbox[level="safer"] { + background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safer"); +} +vbox#securityLevel-vbox > vbox[level="safest"] { + background-image: url("chrome://browser/content/securitylevel/securityLevelIcon.svg#safest"); } -label#securityLevel-level { - font-size: 1.5em; - margin: 0 0.5em 0 0; - padding: 0; +vbox#securityLevel-vbox > toolbarseparator { + margin-inline: 16px; } -label#securityLevel-customWarning { - border-radius: 2px; - background-color: #ffe845; - text-transform: uppercase; - font-weight: bolder; - font-size: 0.8em; - height: 1em; - line-height: 1em; - vertical-align: middle; - margin: auto; - padding: 0.4em; +vbox#securityLevel-vbox > vbox { + margin-inline: 0; + padding-inline: 16px; } -panelview#securityLevel-panelview description { - margin: 0 -0.5em 0.5em 0; - padding: 0 !important; +vbox#securityLevel-vbox > vbox * { + margin-inline: 0; } -label#securityLevel-learnMore { - margin: 0 0 1.0em 0; - padding: 0; +vbox#securityLevel-vbox > vbox > hbox { } -panelview#securityLevel-panelview button { - -moz-appearance: none; - background-color: var(--arrowpanel-dimmed); +label#securityLevel-level { + font-size: 1.25em; + font-weight: 600; + padding-top: 0.15em; } -panelview#securityLevel-panelview button:hover { - background-color: var(--arrowpanel-dimmed-further); +label#securityLevel-custom { + border-radius: 4px; + background-color: var(--yellow-50); + color: black; + font-size: 1em; + height: 1.6em; + line-height: 1.0em; + padding: 0.4em 0.5em; + margin-left: 1em!important; } -panelview#securityLevel-panelview button:active { - background-color: var(--arrowpanel-dimmed-even-further); +description#securityLevel-summary { + margin-top: 1em; + padding-right: 5em; } -button#securityLevel-restoreDefaults { - margin: 0 0 1.0em 0; - padding: 0.45em; - color: inherit !important; +vbox#securityLevel-vbox > hbox.panel-footer { + display: flex; } + button#securityLevel-advancedSecuritySettings { - margin: 0 -1.0em -1.0em -1.0em; - border-radius: 0; - border-top: 1px solid var(--panel-separator-color); - padding: 0; - height: 3.0em; - color: inherit !important; + margin-block: 0; } diff --git a/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml b/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml index 4abbb12dd856..02d93b738ff5 100644 --- a/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml +++ b/browser/components/securitylevel/content/securityLevelPanel.inc.xhtml @@ -1,37 +1,46 @@ <panel id="securityLevel-panel" - role="group" - type="arrow" - orient="vertical" - level="top" - hidden="true" - class="panel-no-padding" - onpopupshown="SecurityLevelPanel.onPopupShown(event);" - onpopuphidden="SecurityLevelPanel.onPopupHidden(event);" - > + role="group" + type="arrow" + orient="vertical" + level="top" + hidden="true" + class="panel-no-padding" + onpopupshown="SecurityLevelPanel.onPopupShown(event);" + onpopuphidden="SecurityLevelPanel.onPopupHidden(event);"> <panelmultiview mainViewId="securityLevel-panelview"> <panelview id="securityLevel-panelview" descriptionheightworkaround="true"> - <vbox class="panel-subview-body"> - <label id="securityLevel-header"/> - <hbox id="securityLevel-levelHbox"> - <label id="securityLevel-level"/> - <vbox> + <vbox id="securityLevel-vbox"> + <box class="panel-header"> + <html:h1 id="securityLevel-header"/> + </box> + <toolbarseparator></toolbarseparator> + <vbox> + <hbox> + <label id="securityLevel-level"/> + <vbox> + <spacer flex="1"/> + <label id="securityLevel-custom"/> + <spacer flex="1"/> + </vbox> <spacer flex="1"/> - <label id="securityLevel-customWarning"/> - <spacer flex="1"/> - </vbox> + </hbox> + <description id="securityLevel-summary"/> + <hbox> + <label + id="securityLevel-learnMore" + class="learnMore text-link" + onclick="SecurityLevelPanel.hide();" + is="text-link"/> + <spacer/> + </hbox> + </vbox> + <hbox class="panel-footer"> + <button id="securityLevel-restoreDefaults" + oncommand="SecurityLevelPanel.restoreDefaults();"/> + <button id="securityLevel-advancedSecuritySettings" + default="true" + oncommand="SecurityLevelPanel.openAdvancedSecuritySettings();"/> </hbox> - <description id="securityLevel-summary"/> - <label - id="securityLevel-learnMore" - class="learnMore text-link" - onclick="SecurityLevelPanel.hide();" - is="text-link"/> - <button - id="securityLevel-restoreDefaults" - oncommand="SecurityLevelPanel.restoreDefaults();"/> - <button - id="securityLevel-advancedSecuritySettings" - oncommand="SecurityLevelPanel.openAdvancedSecuritySettings();"/> </vbox> </panelview> </panelmultiview> diff --git a/browser/components/securitylevel/content/securityLevelPreferences.css b/browser/components/securitylevel/content/securityLevelPreferences.css index 0d1040d177d8..b0c87d84a259 100644 --- a/browser/components/securitylevel/content/securityLevelPreferences.css +++ b/browser/components/securitylevel/content/securityLevelPreferences.css @@ -1,12 +1,10 @@ label#securityLevel-customWarning { - border-radius: 2px; - background-color: #ffe845; - text-transform: uppercase; - font-weight: bolder; - font-size: 0.7em; - height: 1em; - line-height: 1em; - padding: 0.35em; + border-radius: 4px; + background-color: var(--yellow-50); + color: black; + font-size: 1em; + height: 1.6em; + padding: 0.4em 0.5em; } radiogroup#securityLevel-radiogroup radio { diff --git a/browser/components/securitylevel/jar.mn b/browser/components/securitylevel/jar.mn index 9ac408083fbc..61aa4169f9ec 100644 --- a/browser/components/securitylevel/jar.mn +++ b/browser/components/securitylevel/jar.mn @@ -3,4 +3,4 @@ browser.jar: content/browser/securitylevel/securityLevelPanel.css (content/securityLevelPanel.css) content/browser/securitylevel/securityLevelButton.css (content/securityLevelButton.css) content/browser/securitylevel/securityLevelPreferences.css (content/securityLevelPreferences.css) - content/browser/securitylevel/securityLevelButton.svg (content/securityLevelButton.svg) + content/browser/securitylevel/securityLevelIcon.svg (content/securityLevelIcon.svg) diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm index c0691ff078ce..73671c08693d 100644 --- a/browser/modules/TorStrings.jsm +++ b/browser/modules/TorStrings.jsm @@ -230,6 +230,10 @@ var TorStrings = { "advanced_security_settings", "Advanced Security Settings\u2026" ), + change: getString( + "change", + "Change\u2026" + ), }; return retval; })() /* Security Level Strings */, diff --git a/browser/themes/shared/customizableui/panelUI.inc.css b/browser/themes/shared/customizableui/panelUI.inc.css index e1d64c707518..abecf34cdb92 100644 --- a/browser/themes/shared/customizableui/panelUI.inc.css +++ b/browser/themes/shared/customizableui/panelUI.inc.css @@ -1430,7 +1430,8 @@ menuitem.panel-subview-footer@menuStateActive@, #editBookmarkPanel toolbarseparator, #downloadsPanel-mainView toolbarseparator, .cui-widget-panelview menuseparator, -.cui-widget-panel toolbarseparator { +.cui-widget-panel toolbarseparator, +#securityLevel-panel toolbarseparator { appearance: none; min-height: 0; border-top: 1px solid var(--panel-separator-color);
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] Adding issue template for bugs.
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 39a21f3f5c59624a0feed1bdd5f5d878fba1a2aa Author: Gaba <gaba(a)torproject.org> Date: Mon Jun 28 11:44:16 2021 -0700 Adding issue template for bugs. --- .gitlab/issue_templates/UXBug.md | 29 +++++++++++++++++++++++++++++ .gitlab/issue_templates/bug.md | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/.gitlab/issue_templates/UXBug.md b/.gitlab/issue_templates/UXBug.md new file mode 100644 index 000000000000..8e7cb2a5e163 --- /dev/null +++ b/.gitlab/issue_templates/UXBug.md @@ -0,0 +1,29 @@ +<!-- +* Use this issue template for reporting a new UX bug. +--> + +### Summary +**Summarize the bug encountered concisely.** + + +### Steps to reproduce: +**How one can reproduce the issue - this is very important.** + +1. Step 1 +2. Step 2 +3. ... + +### What is the current bug behavior? +**What actually happens.** + + +### What is the expected behavior? +**What you want to see instead** + + + +## Relevant logs and/or screenshots +**Do you have screenshots? Attach them to this ticket please.** + +/label ~tor-ux ~needs-investigation ~bug +/assign @nah diff --git a/.gitlab/issue_templates/bug.md b/.gitlab/issue_templates/bug.md new file mode 100644 index 000000000000..6ce85a4864be --- /dev/null +++ b/.gitlab/issue_templates/bug.md @@ -0,0 +1,32 @@ +<!-- +* Use this issue template for reporting a new bug. +--> + +### Summary +**Summarize the bug encountered concisely.** + + +### Steps to reproduce: +**How one can reproduce the issue - this is very important.** + +1. Step 1 +2. Step 2 +3. ... + +### What is the current bug behavior? +**What actually happens.** + + +### What is the expected behavior? +**What you want to see instead** + + + +### Environment +**Which operating system are you using? For example: Debian GNU/Linux 10.1, Windows 10, Ubuntu Xenial, FreeBSD 12.2, etc.** +**Which installation method did you use? Distribution package (apt, pkg, homebrew), from source tarball, from Git, etc.** + +### Relevant logs and/or screenshots + + +/label ~bug
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27511: Add new identity button to toolbar
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 44366fa77489aef77fc739942db3697408e2e868 Author: Richard Pospesel <richard(a)torproject.org> Date: Fri Sep 17 12:14:05 2021 -0500 fixup! Bug 27511: Add new identity button to toolbar --- browser/themes/shared/icons/new_circuit.svg | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/browser/themes/shared/icons/new_circuit.svg b/browser/themes/shared/icons/new_circuit.svg index e0a93cc83502..ddc819946818 100644 --- a/browser/themes/shared/icons/new_circuit.svg +++ b/browser/themes/shared/icons/new_circuit.svg @@ -1,8 +1,6 @@ -<?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 stroke="none" stroke-width="1" fill="context-fill" fill-rule="evenodd" opacity="context-fill-opacity"> + <path d="m10.707 6h3.993l.3-.3v-3.993c.0002-.09902-.0291-.19586-.084-.27825s-.1331-.14661-.2245-.18453c-.0915-.03792-.1922-.04782-.2893-.02845-.0971.01936-.1863.06713-.2562.13723l-1.459 1.459c-1.2817-1.16743-2.95335-1.813714-4.687-1.812-3.859 0-7 3.141-7 7s3.141 7 7 7c1.74123.007 3.422-.6379 4.7116-1.8079 1.2896-1.1701 2.0945-2.7804 2.2564-4.5141.0156-.1649-.0348-.32927-.1401-.4571s-.2571-.2087-.4219-.2249c-.1644-.01324-.3275.03801-.4548.1429s-.2088.2552-.2272.4191c-.1334 1.42392-.7948 2.7464-1.854 3.7072-1.0593.9609-2.43986 1.4905-3.87 1.4848-3.171 0-5.75-2.579-5.75-5.75s2.579-5.75 5.75-5.75c1.40277-.00207 2.7572.5123 3.805 1.445l-1.451 1.451c-.07.06987-.1178.15895-.1372.25597-.0194.09701-.0096.1976.0282.28903.0378.09144.1019.1696.1841.22461.0823.055.179.08437.2779.08439z"/> + <path d="m8 12.5c-2.48528 0-4.5-2.0147-4.5-4.5 0-2.48528 2.01472-4.5 4.5-4.5z"/> </g> </svg>
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27477: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 67e4e06d45d415c815f6b7c45d6a22b92379c384 Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:25 2021 +0000 fixup! Bug 27477: Implement about:torconnect captive portal within Tor Browser This reverts commit ff3b679987ee9d5515508d94d78ed28166706249. --- .../components/torpreferences/content/torPane.js | 9 +++++---- browser/modules/TorConnect.jsm | 23 +++++++++++----------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js index cde424a3f32a..afdb27351831 100644 --- a/browser/components/torpreferences/content/torPane.js +++ b/browser/components/torpreferences/content/torPane.js @@ -159,10 +159,11 @@ const gTorPane = (function() { this._messageBoxButton = prefpane.querySelector(selectors.messageBox.button); // wire up connect button this._messageBoxButton.addEventListener("click", () => { - TorConnect.beginBootstrap(); - let win = Services.wm.getMostRecentWindow("navigator:browser"); - // switch to existing about:torconnect tab or create a new one - win.switchToTabHavingURI("about:torconnect", true); + TorConnect.beginBootstrap().then((result) => { + let win = Services.wm.getMostRecentWindow("navigator:browser"); + // switch to existing about:torconnect tab or create a new one + win.switchToTabHavingURI("about:torconnect", true); + }); }); let populateMessagebox = () => { diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm index 17a786dc31f0..6444ab39e928 100644 --- a/browser/modules/TorConnect.jsm +++ b/browser/modules/TorConnect.jsm @@ -167,19 +167,19 @@ const TorConnect = (() => { /* Initial is never transitioned to */ [TorConnectState.Initial, null], /* Configuring */ - [TorConnectState.Configuring, (self, prevState) => { + [TorConnectState.Configuring, async (self, prevState) => { // TODO move this to the transition function if (prevState === TorConnectState.Bootstrapping) { - TorProtocolService.torStopBootstrap(); + await TorProtocolService.torStopBootstrap(); } }], /* AutoConfiguring */ - [TorConnectState.AutoConfiguring, (self, prevState) => { + [TorConnectState.AutoConfiguring, async (self, prevState) => { }], /* Bootstrapping */ - [TorConnectState.Bootstrapping, (self, prevState) => { - let error = TorProtocolService.connect(); + [TorConnectState.Bootstrapping, async (self, prevState) => { + let error = await TorProtocolService.connect(); if (error) { self.onError(error.message, error.details); } else { @@ -187,12 +187,12 @@ const TorConnect = (() => { } }], /* Bootstrapped */ - [TorConnectState.Bootstrapped, (self,prevState) => { + [TorConnectState.Bootstrapped, async (self,prevState) => { // notify observers of bootstrap completion Services.obs.notifyObservers(null, TorConnectTopics.BootstrapComplete); }], /* Error */ - [TorConnectState.Error, (self, prevState, errorMessage, errorDetails, fatal) => { + [TorConnectState.Error, async (self, prevState, errorMessage, errorDetails, fatal) => { self._errorMessage = errorMessage; self._errorDetails = errorDetails; @@ -204,7 +204,7 @@ const TorConnect = (() => { } }], /* FatalError */ - [TorConnectState.FatalError, (self, prevState) => { + [TorConnectState.FatalError, async (self, prevState) => { Services.obs.notifyObservers(null, TorConnectTopics.FatalError); }], /* Disabled */ @@ -213,7 +213,7 @@ const TorConnect = (() => { }], ])), - _changeState: function(newState, ...args) { + _changeState: async function(newState, ...args) { const prevState = this._state; // ensure this is a valid state transition @@ -228,7 +228,7 @@ const TorConnect = (() => { this._state = newState; // call our transition function and forward any args - this._transitionCallbacks.get(newState)(this, prevState, ...args); + await this._transitionCallbacks.get(newState)(this, prevState, ...args); Services.obs.notifyObservers({state: newState}, TorConnectTopics.StateChange); }, @@ -306,8 +306,7 @@ const TorConnect = (() => { /* Handle bootstrap error*/ case TorTopics.BootstrapError: { const obj = subject?.wrappedJSObject; - TorProtocolService.torStopBootstrap(); - this.onError(obj.message, obj.details); + TorProtocolService.torStopBootstrap().then(() => this.onError(obj.message, obj.details)); break; } case TorTopics.LogHasWarnOrErr: {
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 23247: Communicating security expectations for .onion
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 2304d0433d59489b3223bc442dbef718974378df Author: Richard Pospesel <richard(a)torproject.org> Date: Fri Sep 17 14:01:26 2021 -0500 fixup! Bug 23247: Communicating security expectations for .onion --- .../themes/shared/identity-block/identity-block.inc.css | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/browser/themes/shared/identity-block/identity-block.inc.css b/browser/themes/shared/identity-block/identity-block.inc.css index 283fc2113e2f..90fb46169bb0 100644 --- a/browser/themes/shared/identity-block/identity-block.inc.css +++ b/browser/themes/shared/identity-block/identity-block.inc.css @@ -212,21 +212,21 @@ toolbar[brighttext] #identity-box[pageproxystate="valid"].chromeUI #identity-ico list-style-image: url(chrome://global/skin/icons/security-broken.svg); } -#identity-box[pageproxystate="valid"].onionUnknownIdentity > #identity-icon, -#identity-box[pageproxystate="valid"].onionVerifiedDomain > #identity-icon, -#identity-box[pageproxystate="valid"].onionMixedActiveBlocked > #identity-icon { +#identity-box[pageproxystate="valid"].onionUnknownIdentity #identity-icon, +#identity-box[pageproxystate="valid"].onionVerifiedDomain #identity-icon, +#identity-box[pageproxystate="valid"].onionMixedActiveBlocked #identity-icon { list-style-image: url(chrome://browser/skin/onion.svg); visibility: visible; } -#identity-box[pageproxystate="valid"].onionMixedDisplayContent > #identity-icon, -#identity-box[pageproxystate="valid"].onionMixedDisplayContentLoadedActiveBlocked > #identity-icon, -#identity-box[pageproxystate="valid"].onionCertUserOverridden > #identity-icon { +#identity-box[pageproxystate="valid"].onionMixedDisplayContent #identity-icon, +#identity-box[pageproxystate="valid"].onionMixedDisplayContentLoadedActiveBlocked #identity-icon, +#identity-box[pageproxystate="valid"].onionCertUserOverridden #identity-icon { list-style-image: url(chrome://browser/skin/onion-warning.svg); visibility: visible; } -#identity-box[pageproxystate="valid"].onionMixedActiveContent > #identity-icon { +#identity-box[pageproxystate="valid"].onionMixedActiveContent #identity-icon { list-style-image: url(chrome://browser/skin/onion-slash.svg); visibility: visible; }
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit b5c9e24501057382337dc9276af616e495523e9d Author: Richard Pospesel <richard(a)torproject.org> Date: Mon Sep 20 15:54:39 2021 -0500 fixup! Bug 10760: Integrate TorButton to TorBrowser core --- .../controlcenter/content/identityPanel.inc.xhtml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/browser/components/controlcenter/content/identityPanel.inc.xhtml b/browser/components/controlcenter/content/identityPanel.inc.xhtml index 0735661e274c..06511866ae29 100644 --- a/browser/components/controlcenter/content/identityPanel.inc.xhtml +++ b/browser/components/controlcenter/content/identityPanel.inc.xhtml @@ -93,21 +93,26 @@ </hbox> <!-- Circuit display section --> - <hbox id="circuit-display-container" class="identity-popup-section"> - <vbox id="circuit-display-content" flex="1" role="group" + + <vbox id="circuit-display-container" class="identity-popup-section"> + <toolbarseparator/> + <vbox id="circuit-display-header" flex="1" role="group" aria-labelledby="circuit-display-headline"> - <hbox id="circuit-display-header" align="center"> + <hbox flex="1"> <label id="circuit-display-headline" role="heading" aria-level="2">&torbutton.circuit_display.title;</label> </hbox> - <html:ul id="circuit-display-nodes" dir="auto"/> </vbox> - <vbox id="circuit-reload-content" flex="1"> - <html:button id="circuit-reload-button" - onclick="torbutton_new_circuit()">&torbutton.circuit_display.new_circuit;</html:button> + <vbox id="circuit-display-content"> + <html:ul id="circuit-display-nodes" dir="auto"/> <hbox id="circuit-guard-note-container"/> + <hbox id="circuit-reload-button-container"> + <html:button id="circuit-reload-button" + onclick="torbutton_new_circuit()" + default="true">&torbutton.circuit_display.new_circuit;</html:button> + </hbox> </vbox> - </hbox> + </vbox> <!-- Clear Site Data Button --> <vbox hidden="true"
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit f2584ebad73ada6b4b570ada7401e2d3b127a2ce Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:23 2021 +0000 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser This reverts commit 563c8779fef936a8bb5454578765843187be396b. --- browser/modules/TorConnect.jsm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm index 2f947374797a..17a786dc31f0 100644 --- a/browser/modules/TorConnect.jsm +++ b/browser/modules/TorConnect.jsm @@ -472,7 +472,9 @@ const TorConnect = (() => { // will attempt to convert user-supplied string to a uri, fallback to about:tor if cannot convert // to valid uri object let uriStringToUri = (uriString) => { - let uri = Services.uriFixup.createFixupURI(uriString, 0); + const fixupFlags = Ci.nsIURIFixup.FIXUP_FLAG_NONE; + let uri = Services.uriFixup.getFixupURIInfo(uriString, fixupFlags) + .preferredURI; return uri ? uri : Services.io.newURI("about:tor"); }; let uris = uriStrings.map(uriStringToUri);
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit c1843e4e494aa810be1a605edac827c766b8809a Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Wed Sep 29 15:42:41 2021 +0000 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- browser/components/urlbar/UrlbarInput.jsm | 1 + 1 file changed, 1 insertion(+) diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm index a118a6f76c19..bab9bf1ad2b7 100644 --- a/browser/components/urlbar/UrlbarInput.jsm +++ b/browser/components/urlbar/UrlbarInput.jsm @@ -32,6 +32,7 @@ function maybeUpdateOpenLocationForTorConnect(openUILinkWhere, currentURI, desti } catch (e) { // swallow exception and fall through returning original so we don't accidentally break // anything if an exception is thrown + console.log(e? e.message : e); } return openUILinkWhere;
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 74591f4b96daf7ccafbd291f795e46e39036bf85 Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:21 2021 +0000 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor This reverts commit 84aa0573fb072665688c669b98032c3c561ee123. --- browser/components/torpreferences/content/torPane.js | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js index 6dbc6b3c0e91..cde424a3f32a 100644 --- a/browser/components/torpreferences/content/torPane.js +++ b/browser/components/torpreferences/content/torPane.js @@ -699,7 +699,6 @@ const gTorPane = (function() { case TorBridgeSource.BuiltIn: { // if there is a built-in bridge already selected, use that let bridgeType = this._builtinBridgeMenulist.value; - console.log(`bridge type: ${bridgeType}`); if (bridgeType) { TorSettings.bridges.enabled = true; TorSettings.bridges.source = TorBridgeSource.BuiltIn;
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit d4b6078699c350ad6e2c1a94b985b0b170637ece Author: Richard Pospesel <richard(a)torproject.org> Date: Tue Sep 14 15:07:30 2021 -0500 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- .../torconnect/content/aboutTorConnect.css | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/browser/components/torconnect/content/aboutTorConnect.css b/browser/components/torconnect/content/aboutTorConnect.css index 3bdc6ff22192..e5e0d7accac2 100644 --- a/browser/components/torconnect/content/aboutTorConnect.css +++ b/browser/components/torconnect/content/aboutTorConnect.css @@ -29,21 +29,25 @@ input[type="checkbox"]:not(:disabled):hover { border-color: var(--purple-70); } -/* fix checkbox visibility when dark mode enabled */ -input[type="checkbox"]:checked { - fill: var(--in-content-page-color); +#connectButton, +input[type="checkbox"]:not(:disabled) { + background-color: var(--purple-60)!important; + color: white; + fill: white; } -#connectButton { - background-color: var(--purple-60); -} - -#connectButton:hover { - background-color: var(--purple-70); +#connectButton:hover, +input[type="checkbox"]:not(:disabled):hover { + background-color: var(--purple-70)!important; + color: white; + fill: white; } -#connectButton:active { - background-color: var(--purple-80); +#connectButton:active, +input[type="checkbox"]:not(:disabled):active { + background-color: var(--purple-80)!important; + color: white; + fill: white; } #progressBackground {
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 49a17ed426b887a0c8cd3724d99a03333bc35231 Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:19 2021 +0000 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor This reverts commit 48b88a65e95064d39c84650e4ee37dde7b0bda83. --- browser/modules/BridgeDB.jsm | 6 ++-- browser/modules/TorProtocolService.jsm | 58 +++++++++++++++++----------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/browser/modules/BridgeDB.jsm b/browser/modules/BridgeDB.jsm index 2caa26b4e2e0..9f76b4f05a69 100644 --- a/browser/modules/BridgeDB.jsm +++ b/browser/modules/BridgeDB.jsm @@ -26,7 +26,7 @@ var BridgeDB = { return this._bridges; }, - submitCaptchaGuess(aCaptchaSolution) { + async submitCaptchaGuess(aCaptchaSolution) { if (this._moatRequestor && this._currentCaptchaInfo) { return this._moatRequestor .finishFetch( @@ -49,11 +49,11 @@ var BridgeDB = { }); }, - requestNewCaptchaImage(aProxyURI) { + async requestNewCaptchaImage(aProxyURI) { // close and clear out existing state on captcha request this.close(); - let transportPlugins = TorProtocolService.readStringArraySetting( + let transportPlugins = await TorProtocolService.readStringArraySetting( TorStrings.configKeys.clientTransportPlugin ); diff --git a/browser/modules/TorProtocolService.jsm b/browser/modules/TorProtocolService.jsm index e6c78b9a0eb1..b8678fbca9aa 100644 --- a/browser/modules/TorProtocolService.jsm +++ b/browser/modules/TorProtocolService.jsm @@ -108,7 +108,7 @@ var TorProtocolService = { // takes a Map containing tor settings // throws on error - writeSettings(aSettingsObj) { + async writeSettings(aSettingsObj) { // only write settings that have changed let newSettings = new Map(); for (const [setting, value] of aSettingsObj) { @@ -157,7 +157,7 @@ var TorProtocolService = { } let errorObject = {}; - if (!this._TorLauncherProtocolService.TorSetConfWithReply(settingsObject, errorObject)) { + if (! await this._TorLauncherProtocolService.TorSetConfWithReply(settingsObject, errorObject)) { throw new Error(errorObject.details); } @@ -168,17 +168,17 @@ var TorProtocolService = { } }, - _readSetting(aSetting) { + async _readSetting(aSetting) { this._assertValidSettingKey(aSetting); - let reply = this._TorLauncherProtocolService.TorGetConf(aSetting); + let reply = await this._TorLauncherProtocolService.TorGetConf(aSetting); if (this._TorLauncherProtocolService.TorCommandSucceeded(reply)) { return reply.lineArray; } throw new Error(reply.lineArray.join("\n")); }, - _readBoolSetting(aSetting) { - let lineArray = this._readSetting(aSetting); + async _readBoolSetting(aSetting) { + let lineArray = await this._readSetting(aSetting); if (lineArray.length != 1) { throw new Error( `Expected an array with length 1 but received array of length ${ @@ -198,8 +198,8 @@ var TorProtocolService = { } }, - _readStringSetting(aSetting) { - let lineArray = this._readSetting(aSetting); + async _readStringSetting(aSetting) { + let lineArray = await this._readSetting(aSetting); if (lineArray.length != 1) { throw new Error( `Expected an array with length 1 but received array of length ${ @@ -210,32 +210,32 @@ var TorProtocolService = { return lineArray[0]; }, - _readStringArraySetting(aSetting) { - let lineArray = this._readSetting(aSetting); + async _readStringArraySetting(aSetting) { + let lineArray = await this._readSetting(aSetting); return lineArray; }, - readBoolSetting(aSetting) { - let value = this._readBoolSetting(aSetting); + async readBoolSetting(aSetting) { + let value = await this._readBoolSetting(aSetting); this._settingsCache.set(aSetting, value); return value; }, - readStringSetting(aSetting) { - let value = this._readStringSetting(aSetting); + async readStringSetting(aSetting) { + let value = await this._readStringSetting(aSetting); this._settingsCache.set(aSetting, value); return value; }, - readStringArraySetting(aSetting) { - let value = this._readStringArraySetting(aSetting); + async readStringArraySetting(aSetting) { + let value = await this._readStringArraySetting(aSetting); this._settingsCache.set(aSetting, value); return value; }, // writes current tor settings to disk - flushSettings() { - this.sendCommand("SAVECONF"); + async flushSettings() { + await this.sendCommand("SAVECONF"); }, getLog(countObj) { @@ -261,17 +261,17 @@ var TorProtocolService = { return true; }, - enableNetwork() { + async enableNetwork() { let settings = {}; settings.DisableNetwork = false; let errorObject = {}; - if (!this._TorLauncherProtocolService.TorSetConfWithReply(settings, errorObject)) { + if (! await this._TorLauncherProtocolService.TorSetConfWithReply(settings, errorObject)) { throw new Error(errorObject.details); } }, - sendCommand(cmd) { - return this._TorLauncherProtocolService.TorSendCommand(cmd); + async sendCommand(cmd) { + return await this._TorLauncherProtocolService.TorSendCommand(cmd); }, retrieveBootstrapStatus() { @@ -287,11 +287,11 @@ var TorProtocolService = { } }, - setConfWithReply(settings) { + async setConfWithReply(settings) { let result = false; const error = {}; try { - result = this._TorLauncherProtocolService.TorSetConfWithReply(settings, error); + result = await this._TorLauncherProtocolService.TorSetConfWithReply(settings, error); } catch (e) { console.log("TorSetConfWithReply error", e); error.details = this._GetSaveSettingsErrorMessage(e.message); @@ -312,16 +312,16 @@ var TorProtocolService = { }, // Resolves to null if ok, or an error otherwise - connect() { + async connect() { const kTorConfKeyDisableNetwork = "DisableNetwork"; const settings = {}; settings[kTorConfKeyDisableNetwork] = false; - const { result, error } = this.setConfWithReply(settings); + const { result, error } = await this.setConfWithReply(settings); if (!result) { return error; } try { - this.sendCommand("SAVECONF"); + await this.sendCommand("SAVECONF"); this.clearBootstrapError(); this.retrieveBootstrapStatus(); } catch (e) { @@ -334,14 +334,14 @@ var TorProtocolService = { return this._TorLauncherProtocolService.TorLogHasWarnOrErr; }, - torStopBootstrap() { + async 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); + const { result, error } = await this.setConfWithReply(settings); if (!result) { console.log( `Error stopping bootstrap ${kErrorPrefix} ${error.details}`
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 9049bf031e938af4dfc3b09c729cacd9bcc1b11b Author: Richard Pospesel <richard(a)torproject.org> Date: Wed Sep 8 12:06:57 2021 -0500 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- browser/components/torconnect/TorConnectParent.jsm | 8 +------- .../components/torconnect/content/aboutTorConnect.js | 18 ++++++++---------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/browser/components/torconnect/TorConnectParent.jsm b/browser/components/torconnect/TorConnectParent.jsm index b735d75c1a72..2fbc2a5c7c7c 100644 --- a/browser/components/torconnect/TorConnectParent.jsm +++ b/browser/components/torconnect/TorConnectParent.jsm @@ -25,7 +25,6 @@ class TorConnectParent extends JSWindowActorParent { this.state = { State: TorConnect.state, StateChanged: false, - Exit: false, ErrorMessage: TorConnect.errorMessage, ErrorDetails: TorConnect.errorDetails, BootstrapProgress: TorConnect.bootstrapProgress, @@ -65,12 +64,7 @@ class TorConnectParent extends JSWindowActorParent { break; } case TorConnectTopics.BootstrapComplete: { - // tells about:torconnect pages to close or redirect themselves - // this flag will only be set if an about:torconnect page - // reaches the Bootstrapped state, so if a user - // navigates to about:torconnect manually after bootstrap, the page - // will not auto-close on them - self.state.Exit = true; + // noop break; } case TorConnectTopics.BootstrapError: { diff --git a/browser/components/torconnect/content/aboutTorConnect.js b/browser/components/torconnect/content/aboutTorConnect.js index 4eed3cf6a5c3..b53f8b13cb80 100644 --- a/browser/components/torconnect/content/aboutTorConnect.js +++ b/browser/components/torconnect/content/aboutTorConnect.js @@ -194,16 +194,10 @@ class AboutTorConnect { this.hide(this.elements.advancedButton); this.hide(this.elements.cancelButton); - // only exit about:torconnect if TorConnectParent directs us to - if (state.Exit) { - if (this.redirect) { - // first try to forward to final destination - document.location = this.redirect; - } else { - // or else close the window - window.close(); - } - } + // redirects page to the requested redirect url, removes about:torconnect + // from the page stack, so users cannot accidentally go 'back' to the + // now unresponsive page + window.location.replace(this.redirect); } update_Disabled(state) { @@ -283,6 +277,10 @@ class AboutTorConnect { if (params.has("redirect")) { const encodedRedirect = params.get("redirect"); this.redirect = decodeURIComponent(encodedRedirect); + } else { + // if the user gets here manually or via the button in the urlbar + // then we will redirect to about:tor + this.redirect = "about:tor"; } let args = await RPMSendQuery("torconnect:get-init-args");
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit bbbb7f4b0ca0fb9355a0840ecb5752fd3b4aa8fa Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:26 2021 +0000 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser This reverts commit 5d1c634d905f67c9fd53f5dd45133468f848b808. --- browser/modules/TorConnect.jsm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm index 6444ab39e928..f2c92dcb8f21 100644 --- a/browser/modules/TorConnect.jsm +++ b/browser/modules/TorConnect.jsm @@ -241,7 +241,7 @@ const TorConnect = (() => { Services.obs.addObserver(this, BrowserTopics.ProfileAfterChange); }, - observe: function(subject, topic, data) { + observe: async function(subject, topic, data) { console.log(`TorConnect: observed ${topic}`); switch(topic) { @@ -306,7 +306,8 @@ const TorConnect = (() => { /* Handle bootstrap error*/ case TorTopics.BootstrapError: { const obj = subject?.wrappedJSObject; - TorProtocolService.torStopBootstrap().then(() => this.onError(obj.message, obj.details)); + await TorProtocolService.torStopBootstrap(); + this.onError(obj.message, obj.details); break; } case TorTopics.LogHasWarnOrErr: {
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit c962f24a8a8c7825ec18ce513d354f4093e78363 Author: Richard Pospesel <richard(a)torproject.org> Date: Fri Sep 10 11:42:55 2021 -0500 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- .../torconnect/content/torBootstrapUrlbar.js | 2 +- .../components/torpreferences/content/torPane.js | 51 ++++++++++++++-------- .../torpreferences/content/torPreferences.css | 9 ++-- browser/modules/TorConnect.jsm | 13 ++++-- 4 files changed, 48 insertions(+), 27 deletions(-) diff --git a/browser/components/torconnect/content/torBootstrapUrlbar.js b/browser/components/torconnect/content/torBootstrapUrlbar.js index 7843b80be8b9..e6a88490f33d 100644 --- a/browser/components/torconnect/content/torBootstrapUrlbar.js +++ b/browser/components/torconnect/content/torBootstrapUrlbar.js @@ -76,7 +76,7 @@ var TorBootstrapUrlbar = { inputContainer: gURLBar._inputContainer, }) this.elements.torConnectBox.addEventListener("click", () => { - window.openTrustedLinkIn("about:torconnect", "tab"); + TorConnect.openTorConnect(); }); Services.obs.addObserver(this, TorConnectTopics.StateChange); this.observing = true; diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js index afdb27351831..a975c93cb8ed 100644 --- a/browser/components/torpreferences/content/torPane.js +++ b/browser/components/torpreferences/content/torPane.js @@ -10,7 +10,7 @@ const { TorProtocolService } = ChromeUtils.import( "resource:///modules/TorProtocolService.jsm" ); -const { TorConnect } = ChromeUtils.import( +const { TorConnect, TorConnectTopics, TorConnectState } = ChromeUtils.import( "resource:///modules/TorConnect.jsm" ); @@ -159,35 +159,42 @@ const gTorPane = (function() { this._messageBoxButton = prefpane.querySelector(selectors.messageBox.button); // wire up connect button this._messageBoxButton.addEventListener("click", () => { - TorConnect.beginBootstrap().then((result) => { - let win = Services.wm.getMostRecentWindow("navigator:browser"); - // switch to existing about:torconnect tab or create a new one - win.switchToTabHavingURI("about:torconnect", true); - }); + TorConnect.beginBootstrap(); + TorConnect.openTorConnect(); }); - let populateMessagebox = () => { - if (TorConnect.shouldShowTorConnect) { + this._populateMessagebox = () => { + if (TorConnect.shouldShowTorConnect && + TorConnect.state === TorConnectState.Configuring) { // set messagebox style and text if (TorProtocolService.torBootstrapErrorOccurred()) { + this._messageBox.parentNode.style.display = null; this._messageBox.className = "error"; this._messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage; this._messageBoxButton.innerText = TorStrings.torConnect.tryAgain; } else { + this._messageBox.parentNode.style.display = null; this._messageBox.className = "warning"; this._messageBoxMessage.innerText = TorStrings.torConnect.connectMessage; this._messageBoxButton.innerText = TorStrings.torConnect.torConnectButton; } } else { + // we need to explicitly hide the groupbox, as switching between + // the tor pane and other panes will 'unhide' (via the 'hidden' + // attribute) the groupbox, offsetting all of the content down + // by the groupbox's margin (even if content is 0 height) + this._messageBox.parentNode.style.display = "none"; this._messageBox.className = "hidden"; this._messageBoxMessage.innerText = ""; this._messageBoxButton.innerText = ""; } } - populateMessagebox(); + this._populateMessagebox(); + Services.obs.addObserver(this, TorConnectTopics.StateChange); + // update the messagebox whenever we come back to the page window.addEventListener("focus", val => { - populateMessagebox(); + this._populateMessagebox(); }); // Heading @@ -571,6 +578,7 @@ const gTorPane = (function() { uninit() { // unregister our observer topics Services.obs.removeObserver(TorSettingsTopics.SettingChanged, this); + Services.obs.removeObserver(TorConnectTopics.StateChange, this); }, // whether the page should be present in about:preferences @@ -582,15 +590,24 @@ const gTorPane = (function() { // Callbacks // - // callback for when the quickstart pref changes observe(subject, topic, data) { - if (topic === TorSettingsTopics.SettingChanged) { - let obj = subject?.wrappedJSObject; - switch(data) { - case TorSettingsData.QuickStartEnabled: { - this._enableQuickstartCheckbox.checked = obj.value; - break; + switch (topic) { + // triggered when a TorSettings param has changed + case TorSettingsTopics.SettingChanged: { + let obj = subject?.wrappedJSObject; + switch(data) { + case TorSettingsData.QuickStartEnabled: { + this._enableQuickstartCheckbox.checked = obj.value; + break; + } } + break; + } + // triggered when tor connect state changes and we may + // need to update the messagebox + case TorConnectTopics.StateChange: { + this._populateMessagebox(); + break; } } }, diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css index 47b8ff18e0af..e3cc429f5982 100644 --- a/browser/components/torpreferences/content/torPreferences.css +++ b/browser/components/torpreferences/content/torPreferences.css @@ -87,14 +87,15 @@ border-radius: 2px; border: 0; - padding-left: 8px; - padding-right: 8px; + padding: 0px 8px; margin-left: auto; margin-right: 0px; font-size: 11px; - font-weight: 400; + font-weight: 600; white-space: nowrap; + + color: white; } #torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button { @@ -115,12 +116,10 @@ #torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:hover { background-color: var(--purple-80); - color: white!important; } #torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:active { background-color: var(--purple-90); - color: white!important; } /* Advanced Settings */ diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm index f2c92dcb8f21..ddc14148eb88 100644 --- a/browser/modules/TorConnect.jsm +++ b/browser/modules/TorConnect.jsm @@ -329,8 +329,8 @@ const TorConnect = (() => { return (TorProtocolService.ownsTorDaemon && // and we're not using the legacy launcher !TorLauncherUtil.useLegacyLauncher && - // legacy checks, TODO: maybe this should be in terms of our own state? - (TorProtocolService.isNetworkDisabled() || !TorProtocolService.isBootstrapDone())); + // if we have succesfully bootstraped, then no need to show TorConnect + this.state != TorConnectState.Bootstrapped); }, get shouldQuickStart() { @@ -420,8 +420,13 @@ const TorConnect = (() => { Further external commands and helper methods */ openTorPreferences: function() { - const win = BrowserWindowTracker.getTopWindow() - win.openTrustedLinkIn("about:preferences#tor", "tab"); + const win = BrowserWindowTracker.getTopWindow(); + win.switchToTabHavingURI("about:preferences#tor", true); + }, + + openTorConnect: function() { + const win = BrowserWindowTracker.getTopWindow(); + win.switchToTabHavingURI("about:torconnect", true, {ignoreQueryString: true}); }, copyTorLogs: function() {
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 30237: Add v3 onion services client authentication prompt
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit b874d93d1e3346af21e7e5d64707d593cc68bd77 Author: Richard Pospesel <richard(a)torproject.org> Date: Wed Sep 22 16:53:18 2021 -0500 fixup! Bug 30237: Add v3 onion services client authentication prompt --- .../onionservices/content/netError/browser.svg | 4 +- .../onionservices/content/netError/network.svg | 4 +- .../content/netError/onionNetError.css | 55 +++++++++++++++------- .../content/netError/onionNetError.js | 9 ++-- .../onionservices/content/netError/onionsite.svg | 9 ++-- 5 files changed, 52 insertions(+), 29 deletions(-) diff --git a/browser/components/onionservices/content/netError/browser.svg b/browser/components/onionservices/content/netError/browser.svg index b4c433b37bbb..1359679f7171 100644 --- a/browser/components/onionservices/content/netError/browser.svg +++ b/browser/components/onionservices/content/netError/browser.svg @@ -1,3 +1,3 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="72" height="65" viewBox="0 0 72 65"> - <path fill="context-fill" fill-opacity="context-fill-opacity" d="M0.0 0.0C0.0 0.0 0.0 65.0 0.0 65.0C0.0 65.0 72.0 65.0 72.0 65.0C72.0 65.0 72.0 0.0 72.0 0.0C72.0 0.0 52.9019692 0.0 52.9019692 0.0C52.9019692 0.0 0.0 0.0 0.0 0.0C0.0 0.0 0.0 0.0 0.0 0.0M65.0 58.0C65.0 58.0 6.0 58.0 6.0 58.0C6.0 58.0 6.0 25.0 6.0 25.0C6.0 25.0 65.0 25.0 65.0 25.0C65.0 25.0 65.0 58.0 65.0 58.0C65.0 58.0 65.0 58.0 65.0 58.0M6.0 10.0C6.0 10.0 10.0 10.0 10.0 10.0C10.0 10.0 10.0 14.0 10.0 14.0C10.0 14.0 6.0 14.0 6.0 14.0C6.0 14.0 6.0 10.0 6.0 10.0C6.0 10.0 6.0 10.0 6.0 10.0M14.0 10.0C14.0 10.0 18.0 10.0 18.0 10.0C18.0 10.0 18.0 14.0 18.0 14.0C18.0 14.0 14.0 14.0 14.0 14.0C14.0 14.0 14.0 10.0 14.0 10.0C14.0 10.0 14.0 10.0 14.0 10.0M22.0 10.0C22.0 10.0 26.0 10.0 26.0 10.0C26.0 10.0 26.0 14.0 26.0 14.0C26.0 14.0 22.0 14.0 22.0 14.0C22.0 14.0 22.0 10.0 22.0 10.0C22.0 10.0 22.0 10.0 22.0 10.0" /> +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="m49 6h-37.5c-1.98912 0-3.89678.79018-5.3033 2.1967s-2.1967 3.3142-2.1967 5.3033v33.75c0 1.9891.79018 3.8968 2.1967 5.3033s3.31418 2.1967 5.3033 2.1967h37.5c1.9891 0 3.8968-.7902 5.3033-2.1967s2.1967-3.3142 2.1967-5.3033v-33.75c0-1.9891-.7902-3.89678-2.1967-5.3033s-3.3142-2.1967-5.3033-2.1967zm-38.0625 4.6875h38.625l2.25 2.25v8.0625h-43.125v-8.0625zm38.625 39.375h-38.625l-2.25-2.25v-22.125h43.125v22.125z"/> </svg> diff --git a/browser/components/onionservices/content/netError/network.svg b/browser/components/onionservices/content/netError/network.svg index 808c53dedd09..68610e30bfca 100644 --- a/browser/components/onionservices/content/netError/network.svg +++ b/browser/components/onionservices/content/netError/network.svg @@ -1,3 +1,3 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="72" height="54" viewBox="0 0 72 54"> - <path fill="context-fill" fill-opacity="context-fill-opacity" d="M14.0487805 54.0C6.28990244 54.0 0.0 47.3306322 0.0 39.1034585C0.0 32.0105634 4.68716488 26.0867675 10.9481707 24.585103C10.6902 23.574652 10.5365854 22.5107596 10.5365854 21.4138156C10.5365854 14.7292347 15.6471278 9.3103384 21.9512195 9.3103384C24.8076351 9.3103384 27.4126741 10.4393194 29.4146341 12.2780088C32.1344254 5.0777841 38.77452 0.0 46.5365854 0.0C56.7201249 0.0 64.9756098 8.7536733 64.9756098 19.5517479C64.9756098 20.7691677 64.8471688 21.9453428 64.6463415 23.1013144C69.0576849 26.0679606 72.0 31.2693674 72.0 37.2413909C72.0 46.5256603 64.9510244 54.0 56.195122 54.0C56.195122 54.0 14.0487805 54.0 14.0487805 54.0C14.0487805 54.0 14.0487805 54.0 14.0487805 54.0" /> +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> + <path fill="context-fill" fill-opacity="context-fill-opacity" d="m30 1.875c-7.4592 0-14.6129 2.96316-19.8874 8.2376-5.27444 5.2745-8.2376 12.4282-8.2376 19.8874s2.96316 14.6129 8.2376 19.8874c5.2745 5.2744 12.4282 8.2376 19.8874 8.2376s14.6129-2.9632 19.8874-8.2376c5.2744-5.2745 8.2376-12.4282 8.2376-19.8874s-2.9632-14.6129-8.2376-19.8874c-5.2745-5.27444-12.4282-8.2376-19.8874-8.2376zm9.1762 6.5625c3.8504 1.6533 7.1876 4.3079 9.6646 7.6877 2.477 3.3799 4.0034 7.3615 4.4205 11.531h-8.3588c-.4617-6.9829-2.9858-13.6716-7.2525-19.2187zm-7.6837 0c5.0739 5.1814 8.1562 11.9874 8.7037 19.2187h-20.3924c.5475-7.2313 3.6298-14.0373 8.7037-19.2187zm-10.6725 0h1.53c-4.2651 5.548-6.789 12.2362-7.2525 19.2187h-8.35875c.41632-4.1692 1.942-8.1508 4.41835-11.5306 2.4764-3.3799 5.813-6.0346 9.6629-7.6881zm0 43.125c-3.8504-1.6528-7.1874-4.3074-9.6639-7.6874-2.47642-3.38-4.0018-7.3619-4.41735-11.5313h8.35875c.4617 6.9829 2.9858 13.6716 7.2525 19.2187zm7.6875 0c-5.0739-5.1814-8.1562-11.9874-8.7037-19.2 187h20.3887c-.5475 7.2313-3.6298 14.0373-8.7037 19.2187zm10.6725 0h-1.5338c4.2683-5.5462 6.7926-12.2354 7.2525-19.2187h8.3588c-.4156 4.1689-1.9406 8.1504-4.4163 11.5302-2.4757 3.3799-5.8118 6.0348-9.6612 7.6885z"/> </svg> diff --git a/browser/components/onionservices/content/netError/onionNetError.css b/browser/components/onionservices/content/netError/onionNetError.css index 58117ab93223..2c92b187b71c 100644 --- a/browser/components/onionservices/content/netError/onionNetError.css +++ b/browser/components/onionservices/content/netError/onionNetError.css @@ -1,15 +1,12 @@ /* Copyright (c) 2020, The Tor Project, Inc. */ -:root { - --grey-70: #38383d; -} - #onionErrorDiagramContainer { - margin: 60px auto; - width: 460px; /* 3 columns @ 140px plus 2 column gaps @ 20px */ + margin: 0px auto 40px 0px; + /* 3 icons 64px wide each seperated by a 64px gap */ + width: 384px; display: grid; grid-row-gap: 15px; - grid-column-gap: 20px; + grid-column-gap: 64px; grid-template-columns: 1fr 1fr 1fr; } @@ -19,12 +16,36 @@ } .onionErrorImage { - width: 72px; - height: 72px; + width: 64px; + height: 64px; + background-size: 64px 64px; background-position: center; background-repeat: no-repeat; -moz-context-properties: fill; - fill: var(--grey-70); + fill: var(--in-content-icon-color); + opacity: 50%; +} + +/* TODO: remove these --warning-color definitions after we + are esr92 based (tor-browser#40640 */ +.onionErrorImage { + --warning-color: #ffa436; +} + +@media (-moz-toolbar-prefers-color-scheme: dark) { + .onionErrorImage { + --warning-color: #ffbd4f; + } +} + +@media (prefers-contrast) { + .onionErrorImage { + --warning-color: var(--in-content-page-color); + } +} + +.onionErrorImage[status] { + opacity: 100%; } #onionErrorBrowserImage { @@ -43,13 +64,13 @@ .onionErrorImage[status]::after { content: " "; position: absolute; - left: -18px; - top: 18px; - width: 36px; - height: 36px; + left: -8px; + top: calc((64px - 24px) / 2); + width: 24px; + height: 24px; -moz-context-properties: fill; fill: var(--in-content-page-background); - background-color: var(--grey-70); + background-repeat: no-repeat; background-position: center; border: 3px solid var(--in-content-page-background); @@ -57,9 +78,11 @@ } .onionErrorImage[status="ok"]::after { + background-color: var(--in-content-icon-color); background-image: url("chrome://global/skin/icons/check.svg"); } .onionErrorImage[status="error"]::after { - background-image: url("chrome://browser/skin/stop.svg"); + background-color: var(--warning-color); + background-image: url("chrome://global/skin/icons/close.svg"); } diff --git a/browser/components/onionservices/content/netError/onionNetError.js b/browser/components/onionservices/content/netError/onionNetError.js index 8fabb3f38eb7..745c58ec6124 100644 --- a/browser/components/onionservices/content/netError/onionNetError.js +++ b/browser/components/onionservices/content/netError/onionNetError.js @@ -6,6 +6,7 @@ var OnionServicesAboutNetError = { _selector: { + textContainer: "div#text-container", header: ".title-text", longDesc: "#errorLongDesc", learnMoreContainer: "#learnMoreContainer", @@ -194,12 +195,10 @@ var OnionServicesAboutNetError = { labelDiv = this._createDiv(aDoc, undefined, undefined, container); labelDiv.textContent = this._strings.errorPage.onionSite; - const contentContainer = aDoc.querySelector( - this._selector.contentContainer + const textContainer = aDoc.querySelector( + this._selector.textContainer ); - if (contentContainer) { - contentContainer.insertBefore(container, contentContainer.firstChild); - } + textContainer?.insertBefore(container, textContainer.firstChild); }, // _insertDiagram() _createDiv(aDoc, aID, aClass, aParentElem) { diff --git a/browser/components/onionservices/content/netError/onionsite.svg b/browser/components/onionservices/content/netError/onionsite.svg index 1f2777e6acc7..c1b2d7382dc9 100644 --- a/browser/components/onionservices/content/netError/onionsite.svg +++ b/browser/components/onionservices/content/netError/onionsite.svg @@ -1,7 +1,8 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="70" height="63" viewBox="0 0 70 63"> +<svg fill="none" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg"> <g fill="context-fill" fill-opacity="context-fill-opacity"> - <path d="M64.0 2.0C64.0 2.0 4.0 2.0 4.0 2.0C2.8954305 2.0 2.0 2.81148389 2.0 3.8125C2.0 3.8125 2.0 58.1875 2.0 58.1875C2.0 59.1885161 2.8954305 60.0 4.0 60.0C4.0 60.0 36.0 60.0 36.0 60.0C36.0 60.0 36.0 56.375 36.0 56.375C36.0 56.375 6.0 56.375 6.0 56.375C6.0 56.375 6.0 41.875 6.0 41.875C6.0 41.875 38.0 41.875 38.0 41.875C38.0 41.875 38.0 38.25 38.0 38.25C38.0 38.25 6.0 38.25 6.0 38.25C6.0 38.25 6.0 23.75 6.0 23.75C6.0 23.75 62.0 23.75 62.0 23.75C62.0 23.75 62.0 36.4375 62.0 36.4375C62.0 36.4375 66.0 36.4375 66.0 36.4375C66.0 36.4375 66.0 3.8125 66.0 3.8125C66.0 2.81148389 65.1045695 2.0 64.0 2.0C64.0 2.0 64.0 2.0 64.0 2.0M62.0 20.125C62.0 20.125 6.0 20.125 6.0 20.125C6.0 20.125 6.0 5.625 6.0 5.625C6.0 5.625 62.0 5.625 62.0 5.625C62.0 5.625 62.0 20.125 62.0 20.125C62.0 20.125 62.0 20.125 62.0 20.125" /> - <path d="M24.0 47.0C24.0 47.0 24.0 51.0 24.0 51.0C24.0 51.0 20.0 51.0 20.0 51.0C20.0 51.0 20.0 47.0 20.0 47.0C20.0 47.0 24.0 47.0 24.0 47.0C24.0 47.0 24.0 47.0 24.0 47.0M16.0 47.0C16.0 47.0 16.0 51.0 16.0 51.0C16.0 51.0 12.0 51.0 12.0 51.0C12.0 51.0 12.0 47.0 12.0 47.0C12.0 47.0 16.0 47.0 16.0 47.0C16.0 47.0 16.0 47.0 16.0 47.0M56.0 29.0C56.0 29.0 56.0 33.0 56.0 33.0C56.0 33.0 52.0 33.0 52.0 33.0C52.0 33.0 52.0 29.0 52.0 29.0C52.0 29.0 56.0 29.0 56.0 29.0C56.0 29.0 56.0 29.0 56.0 29.0M48.0 29.0C48.0 29.0 48.0 33.0 48.0 33.0C48.0 33.0 12.0 33.0 12.0 33.0C12.0 33.0 12.0 29.0 12.0 29.0C12.0 29.0 48.0 29.0 48.0 29.0C48.0 29.0 48.0 29.0 48.0 29.0M22.0 11.0C22.0 11.0 22.0 15.0 22.0 15.0C22.0 15.0 10.0 15.0 10.0 15.0C10.0 15.0 10.0 11.0 10.0 11.0C10.0 11.0 22.0 11.0 22.0 11.0C22.0 11.0 22.0 11.0 22.0 11.0M70.0 0.0C70.0 0.0 70.0 36.5 70.0 36.5C70.0 36.5 65.0 36.5 65.0 36.5C65.0 36.5 65.0 4.5 65.0 4.5C65.0 4.5 5.0 4.5 5.0 4.5C5.0 4.5 5.0 58.5 5.0 58.5C5.0 58.5 36.0 58.5 36.0 58.5C36.0 58 .5 36.0 63.0 36.0 63.0C36.0 63.0 0.0 63.0 0.0 63.0C0.0 63.0 0.0 0.0 0.0 0.0C0.0 0.0 70.0 0.0 70.0 0.0C70.0 0.0 70.0 0.0 70.0 0.0M32.0 47.0C32.0 47.0 32.0 51.0 32.0 51.0C32.0 51.0 28.0 51.0 28.0 51.0C28.0 51.0 28.0 47.0 28.0 47.0C28.0 47.0 32.0 47.0 32.0 47.0C32.0 47.0 32.0 47.0 32.0 47.0M54.0 11.0C54.0 11.0 54.0 15.0 54.0 15.0C54.0 15.0 50.0 15.0 50.0 15.0C50.0 15.0 50.0 11.0 50.0 11.0C50.0 11.0 54.0 11.0 54.0 11.0C54.0 11.0 54.0 11.0 54.0 11.0M46.0 11.0C46.0 11.0 46.0 15.0 46.0 15.0C46.0 15.0 42.0 15.0 42.0 15.0C42.0 15.0 42.0 11.0 42.0 11.0C42.0 11.0 46.0 11.0 46.0 11.0C46.0 11.0 46.0 11.0 46.0 11.0M38.0 11.0C38.0 11.0 38.0 15.0 38.0 15.0C38.0 15.0 34.0 15.0 34.0 15.0C34.0 15.0 34.0 11.0 34.0 11.0C34.0 11.0 38.0 11.0 38.0 11.0C38.0 11.0 38.0 11.0 38.0 11.0M30.0 11.0C30.0 11.0 30.0 15.0 30.0 15.0C30.0 15.0 26.0 15.0 26.0 15.0C26.0 15.0 26.0 11.0 26.0 11.0C26.0 11.0 30.0 11.0 30.0 11.0C30.0 11.0 30.0 11.0 30.0 11.0" /> - <path d="M61.0 46.0C61.0 46.0 59.0 46.0 59.0 46.0C59.0 46.0 59.0 40.0 59.0 40.0C59.0 38.8954305 58.1045695 38.0 57.0 38.0C57.0 38.0 49.0 38.0 49.0 38.0C47.8954305 38.0 47.0 38.8954305 47.0 40.0C47.0 40.0 47.0 46.0 47.0 46.0C47.0 46.0 45.0 46.0 45.0 46.0C43.8954305 46.0 43.0 46.8954305 43.0 48.0C43.0 48.0 43.0 60.0 43.0 60.0C43.0 61.1045695 43.8954305 62.0 45.0 62.0C45.0 62.0 61.0 62.0 61.0 62.0C62.1045695 62.0 63.0 61.1045695 63.0 60.0C63.0 60.0 63.0 48.0 63.0 48.0C63.0 46.8954305 62.1045695 46.0 61.0 46.0C61.0 46.0 61.0 46.0 61.0 46.0M51.0 42.0C51.0 42.0 55.0 42.0 55.0 42.0C55.0 42.0 55.0 46.0 55.0 46.0C55.0 46.0 51.0 46.0 51.0 46.0C51.0 46.0 51.0 42.0 51.0 42.0C51.0 42.0 51.0 42.0 51.0 42.0M59.0 58.0C59.0 58.0 47.0 58.0 47.0 58.0C47.0 58.0 47.0 50.0 47.0 50.0C47.0 50.0 59.0 50.0 59.0 50.0C59.0 50.0 59.0 58.0 59.0 58.0C59.0 58.0 59.0 58.0 59.0 58.0" /> + <path clip-rule="evenodd" d="m11.25 6h37.5c1.9891 0 3.8968.79018 5.3033 2.1967s2.1967 3.3142 2.1967 5.3033v33.75c0 1.9891-.7902 3.8968-2.1967 5.3033s-3.3142 2.1967-5.3033 2.1967h-37.5c-1.98912 0-3.89678-.7902-5.3033-2.1967s-2.1967-3.3142-2.1967-5.3033v-33.75c0-1.9891.79018-3.89678 2.1967-5.3033s3.31418-2.1967 5.3033-2.1967zm-.5625 4.6875h38.625l2.25 2.25v34.875l-2.25 2.25h-38.625l-2.25-2.25v-34.875z" fill-rule="evenodd"/> + <path d="m15.9606 22c-.52 0-1.0187-.2107-1.3863-.5858-.3677-.3751-.5743-.8838-.5743-1.4142s.2066-1.0391.5743-1.4142c.3676-.3751.8663-.5858 1.3863-.5858h14.0788c.52 0 1.0187.2107 1.3863.5858.3677.3751.5743.8838.5743 1.4142s-.2066 1.0391-.5743 1.4142c-.3676.3751-.8663.5858-1.3863.5858z"/> + <path d="m44.0709 32h-28.1418c-.5116 0-1.0023-.2107-1.3641-.5858s-.565-.8838-.565-1.4142.2032-1.0391.565-1.4142.8525-.5858 1.3641-.5858h28.1418c.5116 0 1.0023.2107 1.3641.5858s.565.8838.565 1.4142-.2032 1.0391-.565 1.4142-.8525.5858-1.3641.5858z"/> + <path d="m44.0709 42h-28.1418c-.5116 0-1.0023-.2107-1.3641-.5858s-.565-.8838-.565-1.4142.2032-1.0391.565-1.4142.8525-.5858 1.3641-.5858h28.1418c.5116 0 1.0023.2107 1.3641.5858s.565.8838.565 1.4142-.2032 1.0391-.565 1.4142-.8525.5858-1.3641.5858z"/> </g> </svg>
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 1bdb305670d640670e549fc61be0a688d0a4be7b Author: Richard Pospesel <richard(a)torproject.org> Date: Wed Sep 22 17:25:58 2021 -0500 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- browser/components/torpreferences/content/torPreferences.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css index e3cc429f5982..a977648f0810 100644 --- a/browser/components/torpreferences/content/torPreferences.css +++ b/browser/components/torpreferences/content/torPreferences.css @@ -70,7 +70,7 @@ #torPreferences-connectMessageBox-message { display: block; line-height: 16px; - font-size: 13px; + font-size: 1.0em; margin-right: 8px; padding-left: 4px!important; padding-top: 4px!important; @@ -83,15 +83,16 @@ line-height: 24px; min-height: 24px; max-height: 24px; + min-width: 0px; margin: 0px; - border-radius: 2px; + border-radius: 4px; border: 0; - padding: 0px 8px; + padding: 0px 1.25em; margin-left: auto; margin-right: 0px; - font-size: 11px; + font-size: 0.9em; font-weight: 600; white-space: nowrap;
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 40597: Implement TorSettings module
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit 687066c127e729b3073573a139b846af32e5162f Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 03:52:28 2021 +0000 fixup! Bug 40597: Implement TorSettings module This reverts commit 01b4a0d839150192571a48b0bfe7e993f4e30919. --- .../components/torpreferences/content/torPane.js | 6 ++--- browser/modules/TorSettings.jsm | 30 ++++++++++------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js index a975c93cb8ed..e4e75d440469 100644 --- a/browser/components/torpreferences/content/torPane.js +++ b/browser/components/torpreferences/content/torPane.js @@ -694,9 +694,9 @@ const gTorPane = (function() { TorSettings.bridges.source = TorBridgeSource.BridgeDB; TorSettings.bridges.bridge_strings = bridgeStrings; TorSettings.saveToPrefs(); - TorSettings.applySettings(); - - this._requestBridgeTextarea.value = bridgeStrings; + TorSettings.applySettings().then((result) => { + this._requestBridgeTextarea.value = bridgeStrings; + }); } } ); diff --git a/browser/modules/TorSettings.jsm b/browser/modules/TorSettings.jsm index d55a5fb5759c..f88b85647944 100644 --- a/browser/modules/TorSettings.jsm +++ b/browser/modules/TorSettings.jsm @@ -325,13 +325,11 @@ const TorSettings = (() => { Services.obs.removeObserver(this, TorTopics.ProcessIsReady); if (this._settings == null) { // load settings from tor if our load in init() failed and save them to prefs - this.loadLegacy(); - this.saveToPrefs(); + this.loadLegacy().then((result) => { this.saveToPrefs(); Services.obs.notifyObservers(null, TorSettingsTopics.Ready);}); } else { // push down settings to tor - this.applySettings(); + this.applySettings().then((result) => Services.obs.notifyObservers(null, TorSettingsTopics.Ready)); } - Services.obs.notifyObservers(null, TorSettingsTopics.Ready); }; switch (topic) { @@ -350,7 +348,7 @@ const TorSettings = (() => { // load our settings from old locations (misc prefs and from tor daemon) // TODO: remove this after some time has elapsed to ensure users have migrated to pref settings - loadLegacy: function() { + loadLegacy: async function() { console.log("TorSettings: loadLegacy()"); let settings = this.defaultSettings(); @@ -390,8 +388,8 @@ const TorSettings = (() => { } } else { // get our currently configured bridges from tor - let torrcBridgeStrings = (() => { - let bridgeList = TorProtocolService.readStringArraySetting(TorConfigKeys.bridgeList); + let torrcBridgeStrings = await (async () => { + let bridgeList = await TorProtocolService.readStringArraySetting(TorConfigKeys.bridgeList); let retval = []; for (const line of bridgeList) { let trimmedLine = line.trim(); @@ -455,7 +453,7 @@ const TorSettings = (() => { /* Proxy */ let proxyString = null; - if (proxyString = TorProtocolService.readStringSetting(TorConfigKeys.socks4Proxy)) { + if (proxyString = await TorProtocolService.readStringSetting(TorConfigKeys.socks4Proxy)) { let [address, port] = parseAddrPort(proxyString); settings.proxy.enabled = true; @@ -464,10 +462,10 @@ const TorSettings = (() => { settings.proxy.port = port; settings.proxy.username = null; settings.proxy.password = null; - } else if (proxyString = TorProtocolService.readStringSetting(TorConfigKeys.socks5Proxy)) { + } else if (proxyString = await TorProtocolService.readStringSetting(TorConfigKeys.socks5Proxy)) { let [address, port] = parseAddrPort(proxyString); - let username = TorProtocolService.readStringSetting(TorConfigKeys.socks5ProxyUsername); - let password = TorProtocolService.readStringSetting(TorConfigKeys.socks5ProxyPassword); + let username = await TorProtocolService.readStringSetting(TorConfigKeys.socks5ProxyUsername); + let password = await TorProtocolService.readStringSetting(TorConfigKeys.socks5ProxyPassword); settings.proxy.enabled = true; settings.proxy.type = TorProxyType.Socks5; @@ -475,9 +473,9 @@ const TorSettings = (() => { settings.proxy.port = port; settings.proxy.username = username; settings.proxy.password = password; - } else if (proxyString = TorProtocolService.readStringSetting(TorConfigKeys.httpsProxy)) { + } else if (proxyString = await TorProtocolService.readStringSetting(TorConfigKeys.httpsProxy)) { let [address, port] = parseAddrPort(proxyString); - let authenticator = TorProtocolService.readStringSetting(TorConfigKeys.httpsProxyAuthenticator); + let authenticator = await TorProtocolService.readStringSetting(TorConfigKeys.httpsProxyAuthenticator); let [username, password] = parseUsernamePassword(authenticator); settings.proxy.enabled = true; @@ -496,7 +494,7 @@ const TorSettings = (() => { } /* Firewall */ - let firewallString = TorProtocolService.readStringSetting(TorConfigKeys.reachableAddresses); + let firewallString = await TorProtocolService.readStringSetting(TorConfigKeys.reachableAddresses); if (firewallString) { let allowedPorts = parseAddrPortList(firewallString); settings.firewall.enabled = allowedPorts.length > 0; @@ -647,7 +645,7 @@ const TorSettings = (() => { }, // push our settings down to the tor daemon - applySettings: function() { + applySettings: async function() { console.log("TorSettings: applySettings()"); let settings = this._settings; let settingsMap = new Map(); @@ -699,7 +697,7 @@ const TorSettings = (() => { } /* Push to Tor */ - TorProtocolService.writeSettings(settingsMap); + await TorProtocolService.writeSettings(settingsMap); return this; },
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit b41844cf612c84dfb64719f83c913e4548b3c57d Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Thu Sep 30 21:34:14 2021 +0000 fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser --- browser/components/urlbar/UrlbarInput.jsm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm index bab9bf1ad2b7..e7ab9db0a66c 100644 --- a/browser/components/urlbar/UrlbarInput.jsm +++ b/browser/components/urlbar/UrlbarInput.jsm @@ -32,7 +32,7 @@ function maybeUpdateOpenLocationForTorConnect(openUILinkWhere, currentURI, desti } catch (e) { // swallow exception and fall through returning original so we don't accidentally break // anything if an exception is thrown - console.log(e? e.message : e); + console.log(e?.message ? e.message : e); } return openUILinkWhere;
1 0
0 0
[tor-browser/tor-browser-91.2.0esr-11.0-1] squash! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing
by sysrqb@torproject.org 06 Oct '21

06 Oct '21
commit d8c5e23811aa34d0478f037c32a004a394b1ee58 Author: Matthew Finkel <sysrqb(a)torproject.org> Date: Fri Sep 3 17:32:15 2021 +0000 squash! Omnibox: Add DDG, Startpage, Disconnect, Youtube, Twitter; remove Amazon, eBay, bing Bug 40494: Update Startpage search provider --- browser/components/search/extensions/startpage/manifest.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/browser/components/search/extensions/startpage/manifest.json b/browser/components/search/extensions/startpage/manifest.json index c9bd9e1848d0..18041d3a2f83 100644 --- a/browser/components/search/extensions/startpage/manifest.json +++ b/browser/components/search/extensions/startpage/manifest.json @@ -18,9 +18,9 @@ "chrome_settings_overrides": { "search_provider": { "name": "Startpage", - "search_url": "https://startpage.com/rto/search", - "search_form": "https://startpage.com/rto/search/", - "search_url_post_params": "q={searchTerms}" + "search_url": "https://startpage.com/sp/search", + "search_form": "https://startpage.com/sp/search/", + "search_url_post_params": "q={searchTerms}&segment=startpage.tor" } } -} \ No newline at end of file +}
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • ...
  • 852
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.