tor-commits
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
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 215948 discussions
[Git][tpo/applications/mullvad-browser][mullvad-browser-155.0a1-17.0-1] 31 commits: Add CI for Mullvad Browser
by boklm (@boklm) 28 Sep '26
by boklm (@boklm) 28 Sep '26
28 Sep '26
boklm pushed to branch mullvad-browser-155.0a1-17.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
69a1ec64 by Henry Wilkes at 2026-09-17T13:26:49+02:00
Add CI for Mullvad Browser
- - - - -
de134e34 by Pier Angelo Vendrame at 2026-09-17T13:26:53+02:00
MB 38: Mullvad Browser configuration
- - - - -
0a667af5 by Pier Angelo Vendrame at 2026-09-17T13:36:33+02:00
MB 1: Mullvad Browser branding
See also:
mullvad-browser#5: Product name and directory customization
mullvad-browser#12: Create new branding directories and integrate Mullvad icons+branding
mullvad-browser#14: Remove Default Built-in bookmarks
mullvad-browser#35: Add custom PDF icons for Windows builds
mullvad-browser#48: Replace Mozilla copyright and legal trademarks in mullvadbrowser.exe metadata
mullvad-browser#51: Update trademark string
mullvad-browser#104: Update shipped dll metadata copyright/licensing info
mullvad-browser#107: Add alpha and nightly icons
- - - - -
66dc6336 by Pier Angelo Vendrame at 2026-09-17T13:36:47+02:00
fixup! MB 1: Mullvad Browser branding
MB 563: Hide Firefox's icon in about:pdf promo.
- - - - -
a416a588 by Henry Wilkes at 2026-09-17T13:36:49+02:00
Mullvad Browser strings
This commit adds strings needed by the following Mullvad Browser
patches.
- - - - -
d4c6ad2d by Pier Angelo Vendrame at 2026-09-17T13:36:51+02:00
MB 20: Allow packaged-addons in PBM.
We install a few addons from the distribution directory, but they are
not automatically enabled for PBM mode.
This commit modifies the code that installs them to also add the PBM
permission to the known ones.
- - - - -
9363b819 by Pier Angelo Vendrame at 2026-09-17T13:36:53+02:00
MB 63: Customize some about pages for Mullvad Browser
Also:
mullvad-browser#57: Purge unneeded about: pages
- - - - -
089d6ca7 by Pier Angelo Vendrame at 2026-09-17T13:36:55+02:00
MB 37: Customization for the about dialog
- - - - -
e18d4838 by Henry Wilkes at 2026-09-17T13:36:57+02:00
MB 39: Add home page about:mullvad-browser
- - - - -
2dc8e928 by Pier Angelo Vendrame at 2026-09-17T13:37:00+02:00
fixup! MB 39: Add home page about:mullvad-browser
MB 564: Fix about:mullvadbrowser colors.
- - - - -
7ff6b671 by hackademix at 2026-09-17T13:37:02+02:00
MB 97: Remove UI cues to install new extensions.
- - - - -
1ce1b52d by Pier Angelo Vendrame at 2026-09-17T13:37:04+02:00
fixup! MB 97: Remove UI cues to install new extensions.
MB 565: Update the selector to hide the help button in about:addons.
- - - - -
15553e41 by hackademix at 2026-09-17T13:37:06+02:00
MB 47: uBlock Origin customization
- - - - -
1e6dd239 by Pier Angelo Vendrame at 2026-09-17T13:37:08+02:00
MB 21: Disable the password manager
This commit disables the about:login page and removes the "Login and
Password" section of about:preferences.
We do not do anything to the real password manager of Firefox, that is
in toolkit: it contains C++ parts that make it difficult to actually
prevent it from being built..
Finally, we modify the the function that opens about:login to report an
error in the console so that we can quickly get a backtrace to the code
that tries to use it.
- - - - -
8e2ccb70 by Pier Angelo Vendrame at 2026-09-17T13:37:10+02:00
fixup! MB 21: Disable the password manager
MB 538: Use settings config for our customization.
- - - - -
badf564b by Pier Angelo Vendrame at 2026-09-17T13:37:12+02:00
MB 112: Updater customization for Mullvad Browser
MB 71: Set the updater base URL to Mullvad domain
- - - - -
02d4ee26 by Nicolas Vigier at 2026-09-17T13:37:14+02:00
MB 79: Add Mullvad Browser MAR signing keys
MB 256: Add mullvad-browser nightly mar signing key
- - - - -
25ba220f by Pier Angelo Vendrame at 2026-09-17T13:37:16+02:00
MB 34: Hide unsafe and unwanted preferences UI
about:preferences allow to override some of our defaults, that could
be fingeprintable or have some other unwanted consequences.
- - - - -
aac73e2e by Henry Wilkes at 2026-09-17T13:37:18+02:00
amend! MB 34: Hide unsafe and unwanted preferences UI
MB 34: Hide unwanted setting controls in Mullvad Browser.
- - - - -
be7a8847 by hackademix at 2026-09-17T13:37:20+02:00
MB 163: Prevent uBlock Origin from being uninstalled/disabled
- - - - -
95094403 by Pier Angelo Vendrame at 2026-09-17T16:52:21+02:00
MB 160: Disable the cookie exceptions button
Besides disabling the "Delete on close checkbox", disable also the
"Manage Exceptions" button when always using PBM.
- - - - -
88becec5 by Richard Pospesel at 2026-09-17T16:53:12+02:00
MB 188: Customize Gitlab Issue and Merge templates
- - - - -
33256d88 by rui hildt at 2026-09-17T16:53:13+02:00
MB 213: Customize the search engines list.
- - - - -
f91643f4 by hackademix at 2026-09-17T16:53:14+02:00
MB 214: Enable cross-tab identity leak protection in "quiet" mode
- - - - -
5c5e9c94 by Pier Angelo Vendrame at 2026-09-17T16:53:16+02:00
MB 320: Temporarily disable WebRTC and WDBA on Windows.
WebRTC should be re-enabled when tor-browser#42758 is resolved, and and
the default browser agent when in general we make this feature work
again.
- - - - -
026daa22 by Henry Wilkes at 2026-09-17T16:53:17+02:00
MB 329: Customize toolbar for mullvad-browser.
- - - - -
30cba76e by Henry Wilkes at 2026-09-17T16:53:18+02:00
MB 419: Mullvad Browser migration procedures.
This commit implements the the Mullvad Browser's version of _migrateUI.
- - - - -
70480a4e by Henry Wilkes at 2026-09-17T16:53:19+02:00
MB 488: Adjust search engine removal notification for Mullvad Leta.
- - - - -
8206e946 by Pier Angelo Vendrame at 2026-09-17T16:53:20+02:00
MB 80: Enable Mullvad Browser as a default browser
- - - - -
f27e50e3 by Beatriz Rizental at 2026-09-17T16:53:21+02:00
MB 43564: Modify ./mach bootstrap for Mullvad Browser
- - - - -
3375c756 by june wilde at 2026-09-17T16:53:22+02:00
MB 446: Selective Saving Mode Backend
- - - - -
273 changed files:
- .gitlab/ci/jobs/update-translations.yml
- .gitlab/issue_templates/000 Bug Report.md
- .gitlab/issue_templates/010 Proposal.md
- .gitlab/issue_templates/020 Web Compatibility.md
- .gitlab/issue_templates/030 Test.md
- .gitlab/issue_templates/040 Feature.md
- .gitlab/issue_templates/041 Time-Gated Feature.md
- .gitlab/issue_templates/051 Revert.md
- + .gitlab/issue_templates/060 Rebase - Alpha.md
- + .gitlab/issue_templates/061 Rebase - Stable.md
- .gitlab/issue_templates/090 Emergency Security Issue.md
- .gitlab/merge_request_templates/Default.md
- + .gitlab/merge_request_templates/Rebase.md
- browser/app/macbuild/Contents/Info.plist.in
- browser/app/module.ver
- browser/app/moz.build
- browser/app/firefox.exe.manifest → browser/app/mullvadbrowser.exe.manifest
- + browser/app/profile/000-mullvad-browser.js
- browser/app/profile/001-base-profile.js
- browser/base/content/aboutDialog.xhtml
- browser/base/content/appmenu-viewcache.inc.xhtml
- browser/base/content/browser-menubar.inc.xhtml
- browser/base/content/browser-places.js
- browser/base/content/browser.js
- browser/base/content/default-bookmarks.html
- browser/base/content/nsContextMenu.sys.mjs
- browser/base/content/overrides/app-license.html
- browser/base/content/pageinfo/pageInfo.xhtml
- browser/base/content/utilityOverlay.js
- browser/branding/branding-common.mozbuild
- + browser/branding/mb-alpha/VisualElements_150.png
- + browser/branding/mb-alpha/VisualElements_70.png
- + browser/branding/mb-alpha/configure.sh
- + browser/branding/mb-alpha/content/about-logo.png
- + browser/branding/mb-alpha/content/about-logo.svg
- + browser/branding/mb-alpha/content/about-logo(a)2x.png
- + browser/branding/mb-alpha/content/about-wordmark.svg
- + browser/branding/mb-alpha/content/about.png
- + browser/branding/mb-alpha/content/aboutDialog.css
- + browser/branding/mb-alpha/content/document_pdf.svg
- + browser/branding/mb-alpha/content/firefox-wordmark.svg
- + browser/branding/mb-alpha/content/icon128.png
- + browser/branding/mb-alpha/content/icon16.png
- + browser/branding/mb-alpha/content/icon256.png
- + browser/branding/mb-alpha/content/icon32.png
- + browser/branding/mb-alpha/content/icon48.png
- + browser/branding/mb-alpha/content/icon64.png
- + browser/branding/mb-alpha/content/jar.mn
- + browser/branding/mb-alpha/content/moz.build
- + browser/branding/mb-alpha/content/mullvad-branding.css
- + browser/branding/mb-alpha/default128.png
- + browser/branding/mb-alpha/default16.png
- + browser/branding/mb-alpha/default22.png
- + browser/branding/mb-alpha/default24.png
- + browser/branding/mb-alpha/default256.png
- + browser/branding/mb-alpha/default32.png
- + browser/branding/mb-alpha/default48.png
- + browser/branding/mb-alpha/default64.png
- + browser/branding/mb-alpha/document.icns
- + browser/branding/mb-alpha/document.ico
- + browser/branding/mb-alpha/document_pdf.ico
- + browser/branding/mb-alpha/firefox.icns
- + browser/branding/mb-alpha/firefox.ico
- + browser/branding/mb-alpha/firefox.svg
- + browser/branding/mb-alpha/locales/en-US/brand.ftl
- + browser/branding/mb-alpha/locales/en-US/brand.properties
- + browser/branding/mb-alpha/locales/jar.mn
- + browser/branding/mb-alpha/locales/moz.build
- + browser/branding/mb-alpha/locales/mullvad-about-wordmark-en.ftl
- + browser/branding/mb-alpha/moz.build
- + browser/branding/mb-alpha/mullvadbrowser.VisualElementsManifest.xml
- + browser/branding/mb-alpha/newtab.ico
- + browser/branding/mb-alpha/newwindow.ico
- + browser/branding/mb-alpha/pbmode.ico
- + browser/branding/mb-alpha/pref/firefox-branding.js
- + browser/branding/mb-nightly/VisualElements_150.png
- + browser/branding/mb-nightly/VisualElements_70.png
- + browser/branding/mb-nightly/configure.sh
- + browser/branding/mb-nightly/content/about-logo.png
- + browser/branding/mb-nightly/content/about-logo.svg
- + browser/branding/mb-nightly/content/about-logo(a)2x.png
- + browser/branding/mb-nightly/content/about-wordmark.svg
- + browser/branding/mb-nightly/content/about.png
- + browser/branding/mb-nightly/content/aboutDialog.css
- + browser/branding/mb-nightly/content/document_pdf.svg
- + browser/branding/mb-nightly/content/firefox-wordmark.svg
- + browser/branding/mb-nightly/content/icon128.png
- + browser/branding/mb-nightly/content/icon16.png
- + browser/branding/mb-nightly/content/icon256.png
- + browser/branding/mb-nightly/content/icon32.png
- + browser/branding/mb-nightly/content/icon48.png
- + browser/branding/mb-nightly/content/icon64.png
- + browser/branding/mb-nightly/content/jar.mn
- + browser/branding/mb-nightly/content/moz.build
- + browser/branding/mb-nightly/content/mullvad-branding.css
- + browser/branding/mb-nightly/default128.png
- + browser/branding/mb-nightly/default16.png
- + browser/branding/mb-nightly/default22.png
- + browser/branding/mb-nightly/default24.png
- + browser/branding/mb-nightly/default256.png
- + browser/branding/mb-nightly/default32.png
- + browser/branding/mb-nightly/default48.png
- + browser/branding/mb-nightly/default64.png
- + browser/branding/mb-nightly/document.icns
- + browser/branding/mb-nightly/document.ico
- + browser/branding/mb-nightly/document_pdf.ico
- + browser/branding/mb-nightly/firefox.icns
- + browser/branding/mb-nightly/firefox.ico
- + browser/branding/mb-nightly/firefox.svg
- + browser/branding/mb-nightly/locales/en-US/brand.ftl
- + browser/branding/mb-nightly/locales/en-US/brand.properties
- + browser/branding/mb-nightly/locales/jar.mn
- + browser/branding/mb-nightly/locales/moz.build
- + browser/branding/mb-nightly/locales/mullvad-about-wordmark-en.ftl
- + browser/branding/mb-nightly/moz.build
- + browser/branding/mb-nightly/mullvadbrowser.VisualElementsManifest.xml
- + browser/branding/mb-nightly/newtab.ico
- + browser/branding/mb-nightly/newwindow.ico
- + browser/branding/mb-nightly/pbmode.ico
- + browser/branding/mb-nightly/pref/firefox-branding.js
- + browser/branding/mb-release/VisualElements_150.png
- + browser/branding/mb-release/VisualElements_70.png
- + browser/branding/mb-release/configure.sh
- + browser/branding/mb-release/content/about-logo.png
- + browser/branding/mb-release/content/about-logo.svg
- + browser/branding/mb-release/content/about-logo(a)2x.png
- + browser/branding/mb-release/content/about-wordmark.svg
- + browser/branding/mb-release/content/about.png
- + browser/branding/mb-release/content/aboutDialog.css
- + browser/branding/mb-release/content/document_pdf.svg
- + browser/branding/mb-release/content/firefox-wordmark.svg
- + browser/branding/mb-release/content/icon128.png
- + browser/branding/mb-release/content/icon16.png
- + browser/branding/mb-release/content/icon256.png
- + browser/branding/mb-release/content/icon32.png
- + browser/branding/mb-release/content/icon48.png
- + browser/branding/mb-release/content/icon64.png
- + browser/branding/mb-release/content/jar.mn
- + browser/branding/mb-release/content/moz.build
- + browser/branding/mb-release/content/mullvad-branding.css
- + browser/branding/mb-release/default128.png
- + browser/branding/mb-release/default16.png
- + browser/branding/mb-release/default22.png
- + browser/branding/mb-release/default24.png
- + browser/branding/mb-release/default256.png
- + browser/branding/mb-release/default32.png
- + browser/branding/mb-release/default48.png
- + browser/branding/mb-release/default64.png
- + browser/branding/mb-release/document.icns
- + browser/branding/mb-release/document.ico
- + browser/branding/mb-release/document_pdf.ico
- + browser/branding/mb-release/firefox.icns
- + browser/branding/mb-release/firefox.ico
- + browser/branding/mb-release/firefox.svg
- + browser/branding/mb-release/locales/en-US/brand.ftl
- + browser/branding/mb-release/locales/en-US/brand.properties
- + browser/branding/mb-release/locales/jar.mn
- + browser/branding/mb-release/locales/moz.build
- + browser/branding/mb-release/locales/mullvad-about-wordmark-en.ftl
- + browser/branding/mb-release/moz.build
- + browser/branding/mb-release/mullvadbrowser.VisualElementsManifest.xml
- + browser/branding/mb-release/newtab.ico
- + browser/branding/mb-release/newwindow.ico
- + browser/branding/mb-release/pbmode.ico
- + browser/branding/mb-release/pref/firefox-branding.js
- browser/components/BrowserContentHandler.sys.mjs
- browser/components/BrowserGlue.sys.mjs
- browser/components/DesktopActorRegistry.sys.mjs
- browser/components/ProfileDataUpgrader.sys.mjs
- browser/components/about/AboutRedirector.cpp
- browser/components/about/components.conf
- browser/components/customizableui/CustomizableUI.sys.mjs
- browser/components/moz.build
- + browser/components/mullvad-browser/AboutMullvadBrowserChild.sys.mjs
- + browser/components/mullvad-browser/AboutMullvadBrowserParent.sys.mjs
- + browser/components/mullvad-browser/content/2728-sparkles.svg
- + browser/components/mullvad-browser/content/aboutMullvadBrowser.css
- + browser/components/mullvad-browser/content/aboutMullvadBrowser.html
- + browser/components/mullvad-browser/content/aboutMullvadBrowser.js
- + browser/components/mullvad-browser/jar.mn
- + browser/components/mullvad-browser/moz.build
- browser/components/preferences/config/passwords-autofill.mjs
- browser/components/preferences/config/privacy.mjs
- browser/components/preferences/config/search.mjs
- browser/components/preferences/home.inc.xhtml
- browser/components/preferences/preferences.js
- browser/components/preferences/preferences.xhtml
- browser/components/preferences/privacy.inc.xhtml
- browser/components/preferences/search.inc.xhtml
- browser/components/search/SearchUIUtils.sys.mjs
- browser/components/shell/ShellService.sys.mjs
- browser/components/shell/WindowsDefaultBrowser.cpp
- browser/components/shell/nsWindowsShellService.cpp
- browser/components/tabbrowser/NewTabPagePreloading.sys.mjs
- browser/config/mozconfigs/base-browser
- + browser/config/mozconfigs/mullvad-browser
- browser/installer/package-manifest.in
- browser/installer/windows/nsis/updater_append.ini
- browser/locales/l10n.toml
- browser/modules/HomePage.sys.mjs
- browser/moz.build
- browser/moz.configure
- build/moz.configure/basebrowser-resources.configure
- build/moz.configure/bootstrap.configure
- config/create_rc.py
- devtools/client/aboutdebugging/src/actions/runtimes.js
- devtools/client/aboutdebugging/src/components/sidebar/Sidebar.js
- devtools/client/jar.mn
- devtools/client/themes/images/aboutdebugging-firefox-aurora.svg
- devtools/client/themes/images/aboutdebugging-firefox-beta.svg
- devtools/client/themes/images/aboutdebugging-firefox-logo.svg
- devtools/client/themes/images/aboutdebugging-firefox-nightly.svg
- devtools/client/themes/images/aboutdebugging-firefox-release.svg
- + devtools/client/themes/images/aboutdebugging-mullvadbrowser-logo.svg
- docshell/base/nsAboutRedirector.cpp
- docshell/build/components.conf
- moz.configure
- mozconfig-linux-aarch64
- mozconfig-linux-aarch64-dev
- mozconfig-linux-x86_64
- mozconfig-linux-x86_64-asan
- mozconfig-linux-x86_64-dev
- mozconfig-macos
- mozconfig-macos-dev
- mozconfig-windows-x86_64
- + other-licenses/nsis/Contrib/ApplicationID/Makefile
- other-licenses/nsis/Contrib/ApplicationID/Set.cpp
- + other-licenses/nsis/Contrib/CityHash/Makefile
- python/mozboot/mozboot/bootstrap.py
- python/mozbuild/mozbuild/backend/base.py
- python/mozbuild/mozbuild/tbbutils.py
- toolkit/components/aboutpdf/content/aboutPDF.html
- toolkit/components/extensions/child/ext-storage.js
- toolkit/components/extensions/parent/ext-storage.js
- toolkit/components/moz.build
- toolkit/components/passwordmgr/LoginHelper.sys.mjs
- toolkit/components/remote/nsDBusRemoteClient.cpp
- toolkit/components/remote/nsDBusRemoteServer.cpp
- toolkit/components/search/SearchService.sys.mjs
- toolkit/components/search/content/base-browser-search-engine-icons.json
- toolkit/components/search/content/base-browser-search-engines.json
- + toolkit/components/search/content/brave.svg
- + toolkit/components/search/content/mojeek.ico
- toolkit/components/search/tests/xpcshell/test_base_browser.js
- toolkit/components/securitylevel/SecurityLevel.sys.mjs
- + toolkit/components/selectivesavingmode/SelectiveSavingMode.manifest
- + toolkit/components/selectivesavingmode/SelectiveSavingMode.sys.mjs
- + toolkit/components/selectivesavingmode/components.conf
- + toolkit/components/selectivesavingmode/content/broom-clean.svg
- + toolkit/components/selectivesavingmode/content/broom-saved.svg
- + toolkit/components/selectivesavingmode/jar.mn
- + toolkit/components/selectivesavingmode/moz.build
- + toolkit/components/selectivesavingmode/tests/xpcshell/test_selective_saving_mode.js
- + toolkit/components/selectivesavingmode/tests/xpcshell/xpcshell.toml
- + toolkit/content/aboutTelemetryMullvad.xhtml
- toolkit/content/jar.mn
- + toolkit/locales/en-US/toolkit/global/mullvad-browser.ftl
- toolkit/mozapps/defaultagent/EventLog.h
- toolkit/mozapps/defaultagent/SetDefaultBrowser.cpp
- toolkit/mozapps/extensions/AddonManager.sys.mjs
- toolkit/mozapps/extensions/content/aboutaddons.css
- toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
- toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs
- toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der
- toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der
- toolkit/mozapps/update/updater/release_primary.der
- toolkit/mozapps/update/updater/release_secondary.der
- + toolkit/themes/shared/icons/mullvadbrowser.png
- toolkit/themes/shared/minimal-toolkit.jar.inc.mn
- toolkit/xre/nsAppRunner.cpp
- tools/lint/fluent-lint/exclusions.yml
- widget/windows/WinTaskbar.cpp
- widget/windows/moz.build
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/70…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/70…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/tor-browser][tor-browser-140.17.0esr-15.0-1] fixup! TB 44361: Notification for dropped support for 32-bit Linux.
by morgan (@morgan) 28 Sep '26
by morgan (@morgan) 28 Sep '26
28 Sep '26
morgan pushed to branch tor-browser-140.17.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
392d62c0 by Henry Wilkes at 2026-09-28T15:50:55+00:00
fixup! TB 44361: Notification for dropped support for 32-bit Linux.
TB 44996: Changed to the expired version.
- - - - -
1 changed file:
- browser/base/content/droppedSupportNotification.js
Changes:
=====================================
browser/base/content/droppedSupportNotification.js
=====================================
@@ -8,9 +8,7 @@ window.addEventListener("load", () => {
AppConstants.platform === "linux" &&
Services.appinfo.XPCOMABI === "x86-gcc3"
) {
- labelId = "dropped-support-notification-linux-32-bit";
- // TODO: switch to the expired label for the final version 15 release.
- // labelId = "dropped-support-notification-linux-32-bit-expired";
+ labelId = "dropped-support-notification-linux-32-bit-expired";
}
const dismissedPref =
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/392d62c…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/392d62c…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/tor-browser][tor-browser-140.17.0esr-15.0-1] [android] Bug 45217: Implement YEC 2026 Takeover for Android Stable
by Dan Ballard (@dan) 28 Sep '26
by Dan Ballard (@dan) 28 Sep '26
28 Sep '26
Dan Ballard pushed to branch tor-browser-140.17.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
b9ce1488 by clairehurst at 2026-09-28T08:43:52-07:00
[android] Bug 45217: Implement YEC 2026 Takeover for Android Stable
- - - - -
10 changed files:
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/CampaignCompose.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorCampaignViewModel.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorHomePage.kt
- + mobile/android/fenix/app/src/main/res/drawable/bulb_illo_yec.xml
- + mobile/android/fenix/app/src/main/res/drawable/circled_lighning_yec.xml
- + mobile/android/fenix/app/src/main/res/drawable/globe_chain_burst_yec.xml
- + mobile/android/fenix/app/src/main/res/drawable/heart.xml
- + mobile/android/fenix/app/src/main/res/drawable/yec_lightning.xml
- mobile/android/fenix/app/src/main/res/values/torbrowser_strings.xml
Changes:
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
=====================================
@@ -164,6 +164,9 @@ import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.tor.TorHomePage
import org.mozilla.fenix.tor.UrlQuickLoadViewModel
+import org.mozilla.fenix.tor.TorCampaignViewModel
+import java.util.Locale
+
@Suppress("TooManyFunctions", "LargeClass")
class HomeFragment : Fragment(), UserInteractionHandler {
private val args by navArgs<HomeFragmentArgs>()
@@ -179,6 +182,7 @@ class HomeFragment : Fragment(), UserInteractionHandler {
private val homeViewModel: HomeScreenViewModel by activityViewModels()
private val urlQuickLoadViewModel: UrlQuickLoadViewModel by activityViewModels()
+ private val torCampaignViewModel: TorCampaignViewModel by activityViewModels()
private var _bottomToolbarContainerView: BottomToolbarContainerView? = null
private val bottomToolbarContainerView: BottomToolbarContainerView
@@ -973,9 +977,23 @@ class HomeFragment : Fragment(), UserInteractionHandler {
binding.torHomepageView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
- TorHomePage(
- toolBarAtTop = settings().toolbarPosition == ToolbarPosition.TOP
- )
+ FirefoxTheme {
+ val isToolbarAtTop = components.settings.toolbarPosition == ToolbarPosition.TOP
+ TorHomePage(
+ toolBarAtTop = isToolbarAtTop,
+ shouldInitiallyShowPromo = torCampaignViewModel.shouldInitiallyShowPromo,
+ onClicked = {
+ val locale = Locale.getDefault().getLanguage()
+ var url = "https://www.torproject.org/donate/yec2026-tor-browser-android-${locale}"
+ (requireActivity() as HomeActivity).openToBrowserAndLoad(
+ // from https://gitlab.torproject.org/tpo/applications/tor-browser/-/work_items/452…
+ url,
+ newTab = true,
+ from = BrowserDirection.FromHome,
+ )
+ },
+ )
+ }
}
}
}
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/CampaignCompose.kt
=====================================
@@ -0,0 +1,283 @@
+package org.mozilla.fenix.tor
+
+import androidx.annotation.DrawableRes
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxWithConstraints
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.fromHtml
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import mozilla.components.ui.colors.PhotonColors
+import org.mozilla.fenix.R
+
+
+private val alternateLayoutThreshHold = 500.dp
+
+@Composable
+@CampaignComposePreview
+fun CampaignBox(
+ shouldShowPromo: MutableState<Boolean> = mutableStateOf(true),
+ onDonateButtonClicked: () -> Unit = {},
+ ) {
+ BoxWithConstraints(
+ contentAlignment = Alignment.Center,
+ modifier = Modifier
+ .fillMaxWidth()
+ .fillMaxHeight(),
+ ) {
+ val alternateLayout = this.maxWidth >= alternateLayoutThreshHold
+
+ CampaignLayout(
+ alternateLayout,
+ maxWidth = this.maxWidth,
+ shouldShowPromo,
+ onDonateButtonClicked = onDonateButtonClicked,
+ )
+ }
+}
+
+@Composable
+private fun CampaignLayout(
+ alternateLayout: Boolean,
+ maxWidth: Dp,
+ shouldShowPromo: MutableState<Boolean>,
+ onDonateButtonClicked: () -> Unit,
+) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth(getVariableWidth(maxWidth))
+ .wrapContentHeight(),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ PurpleBox(
+ alternateLayout,
+ shouldShowPromo,
+ onDonateButtonClicked = onDonateButtonClicked,
+ )
+ Spacer(Modifier.size(8.dp))
+ Text(
+ text = stringResource(R.string.no_donation_required_yec),
+ style = TextStyle(
+ fontSize = 12.5.sp,
+ lineHeight = 18.75.sp,
+ fontFamily = FontFamily.SansSerif,
+ fontWeight = FontWeight(400),
+ color = PhotonColors.LightGrey05,
+ textAlign = TextAlign.Center,
+ ),
+ )
+ }
+}
+
+private fun getVariableWidth(width: Dp): Float =
+ (alternateLayoutThreshHold / width).coerceIn(0.80f, 1.0f)
+
+@Composable
+private fun PurpleBox(
+ alternateLayout: Boolean,
+ shouldShowPromo: MutableState<Boolean>,
+ onDonateButtonClicked: () -> Unit,
+) {
+ Box(
+ modifier = Modifier.background(
+ colorResource(mozilla.components.ui.colors.R.color.photonViolet90),
+ shape = RoundedCornerShape(8.dp),
+ ),
+ ) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .wrapContentHeight(),
+ horizontalArrangement = Arrangement.End,
+ ) {
+ ExitIcon(shouldShowPromo)
+ }
+ DynamicCampaignContent(
+ alternateLayout, onDonateButtonClicked = onDonateButtonClicked,
+ )
+ }
+}
+
+@Composable
+private fun ExitIcon(shouldShowYec: MutableState<Boolean>) {
+ IconButton(
+ onClick = {
+ shouldShowYec.value = false
+ },
+ ) {
+ Icon(
+ painter = painterResource(id = mozilla.components.ui.icons.R.drawable.mozac_ic_cross_20),
+ tint = PhotonColors.White,
+ contentDescription = stringResource(R.string.close_yec_button_description),
+ )
+ }
+}
+
+
+@Composable
+private fun DynamicCampaignContent(
+ alternateLayout: Boolean,
+ onDonateButtonClicked: () -> Unit,
+) {
+ @Composable
+ fun Icon(shouldShow: Boolean, @DrawableRes drawable: Int, contentDescription: String? = null) {
+ if (shouldShow) {
+ Image(
+ painterResource(drawable),
+ contentDescription = contentDescription,
+ alignment = Alignment.Center,
+ )
+ }
+ }
+ Row(
+ modifier = Modifier
+ .padding(start = 16.dp, top = if (alternateLayout) 24.dp else 32.dp, end = 16.dp, bottom = 24.dp)
+ .fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Column(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalAlignment = if (alternateLayout) Alignment.Start else Alignment.CenterHorizontally,
+ ) {
+ Icon(shouldShow = !alternateLayout, R.drawable.bulb_illo_yec, contentDescription = stringResource(R.string.bulb_illo_yec_description))
+ Spacer(Modifier.size (if (alternateLayout) 0.dp else 16.dp))
+ Row(verticalAlignment = Alignment.CenterVertically) {
+ Icon(shouldShow = alternateLayout, R.drawable.circled_lighning_yec)
+ Spacer(Modifier.size(if (alternateLayout) 8.dp else 0.dp))
+ TitleText()
+ }
+ Spacer(Modifier.size(8.dp))
+ MainText()
+ Spacer(Modifier.size(if (alternateLayout) 16.dp else 24.dp))
+ Row(
+ horizontalArrangement = if (alternateLayout) Arrangement.Start else Arrangement.Center,
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ DonateButton(onDonateButtonClicked = onDonateButtonClicked, alternateLayout)
+ }
+ }
+ }
+}
+
+
+@Composable
+private fun TitleText() {
+ Text(
+ text = stringResource(R.string.yec26_tor_powered_by_you),
+ style = TextStyle(
+ fontSize = 24.sp,
+ lineHeight = 32.sp,
+ fontWeight = FontWeight(400),
+ color = PhotonColors.White,
+ textAlign = TextAlign.Center,
+ letterSpacing = 0.18.sp,
+ ),
+ )
+}
+
+
+@Composable
+private fun MainText() {
+ Column {
+ Text(
+ AnnotatedString.fromHtml(
+ // Relevant documentation on HTML markup for android https://developer.android.com/guide/topics/resources/string-resource?utm_so…
+ stringResource(
+ R.string.yec26_call_to_action,
+ ),
+ ), style = TextStyle(
+ fontSize = 14.sp,
+ lineHeight = 20.sp,
+ color = PhotonColors.White,
+ fontWeight = FontWeight(400),
+ letterSpacing = 0.25.sp,
+ )
+ )
+ }
+}
+
+@Composable
+private fun DonateButton(onDonateButtonClicked: () -> Unit, alternateLayout: Boolean) {
+ Button(
+ onClick = onDonateButtonClicked,
+ colors = ButtonDefaults.buttonColors(
+ colorResource(mozilla.components.ui.colors.R.color.photonViolet60),
+ ),
+ shape = RoundedCornerShape(4.dp),
+ contentPadding = PaddingValues(horizontal = 16.dp),
+ modifier = if (alternateLayout) Modifier.fillMaxWidth() else Modifier.fillMaxWidth()
+ ) {
+ Text(
+ text = stringResource(R.string.donate_now_yec),
+ textAlign = TextAlign.Center,
+ fontSize = 16.sp,
+ fontWeight = FontWeight.SemiBold,
+ color = PhotonColors.LightGrey05,
+ )
+ Spacer(
+ Modifier.size(8.dp),
+ )
+ Image(
+ painterResource(R.drawable.heart),
+ contentDescription = null,
+ )
+ }
+}
+
+
+
+@Preview(
+ name = "Small Window",
+ widthDp = 400,
+)
+@Preview(
+ name = "Medium Window",
+ widthDp = 700,
+)
+@Preview(
+ name = "Large Window",
+ widthDp = 1000,
+)
+@Preview(
+ name = "RTL Small Window",
+ locale = "ar",
+ widthDp = 400,
+)
+@Preview(
+ name = "RTL Large Window",
+ locale = "ar",
+ widthDp = 1000
+)
+annotation class CampaignComposePreview
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorCampaignViewModel.kt
=====================================
@@ -0,0 +1,37 @@
+package org.mozilla.fenix.tor
+
+import android.annotation.SuppressLint
+import android.app.Application
+import android.util.Log
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.lifecycle.AndroidViewModel
+import java.text.SimpleDateFormat
+import java.util.Date
+
+class TorCampaignViewModel(application: Application) : AndroidViewModel(application) {
+
+ val shouldInitiallyShowPromo: MutableState<Boolean> by lazy {
+ mutableStateOf(shouldInitiallyShowPromo())
+ }
+
+ @SuppressLint("SimpleDateFormat")
+ fun shouldInitiallyShowPromo(): Boolean {
+ val dateFormat = SimpleDateFormat("yyyy-MM-dd-hh-zzz")
+ // From https://gitlab.torproject.org/tpo/applications/tor-browser/-/work_items/452…
+ val startDate = dateFormat.parse("2026-10-13-08-UTC")
+ // From https://gitlab.torproject.org/tpo/applications/tor-browser/-/work_items/452…
+ val endDate = dateFormat.parse("2027-01-05-00-UTC")
+ val currentDate = Date()
+
+ if (currentDate.before(startDate) || currentDate.after(endDate)) {
+ return false
+ }
+ Log.d(
+ "TorCampaignViewModel",
+ "org.mozilla.fenix.BuildConfig.BUILD_TYPE = ${org.mozilla.fenix.BuildConfig.BUILD_TYPE}"
+ )
+ return (org.mozilla.fenix.BuildConfig.BUILD_TYPE == "release") || (org.mozilla.fenix.BuildConfig.BUILD_TYPE == "debug")
+ }
+
+}
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorHomePage.kt
=====================================
@@ -31,11 +31,28 @@ import androidx.compose.ui.unit.sp
import mozilla.components.compose.base.annotation.FlexibleWindowLightDarkPreview
import org.mozilla.fenix.R
+import android.annotation.SuppressLint
+import androidx.compose.foundation.layout.Box
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.tooling.preview.PreviewParameterProvider
+
@Composable
@FlexibleWindowLightDarkPreview
fun TorHomePage(
toolBarAtTop: Boolean = true,
+ shouldInitiallyShowPromo: MutableState<Boolean> = mutableStateOf(true),
+ onClicked: () -> Unit = {},
) {
+ // Will persist across a single session, but not multiple sessions.
+ // Tapping the close button 'X' will hide the promo for the duration of the session
+ val shouldShowPromo = rememberSaveable {
+ shouldInitiallyShowPromo
+ }
+
Column(
modifier = Modifier
.fillMaxSize()
@@ -64,7 +81,7 @@ fun TorHomePage(
) {
Spacer(modifier = Modifier.size(17.dp))
Row(
- modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier.fillMaxWidth().padding(bottom = 10.dp), verticalAlignment = Alignment.CenterVertically,
) {
Image(
painter = painterResource(R.drawable.tor_browser_app_icon),
@@ -82,30 +99,73 @@ fun TorHomePage(
)
}
Spacer(Modifier.weight(1f))
- Text(
- // Moved from the commit 5bb3cc6b93346dabd8d46677fae7f86a8f8a4fc2
- // "[android] Modify UI/UX", and the file HomeFragment.
- // Splits by full stops or commas and puts the parts in different lines.
- // Ignoring separators at the end of the string, it is expected
- // that there are at most two parts (e.g. "Explore. Privately.").
- text = stringResource(R.string.tor_explore_privately).replace(
+ if (shouldShowPromo.value) {
+ CampaignBox(
+ shouldShowPromo,
+ onDonateButtonClicked = onClicked,
+ )
+ Spacer(Modifier.weight(1f))
+ } else {
+ Text(
+ // Moved from the commit 5bb3cc6b93346dabd8d46677fae7f86a8f8a4fc2
+ // "[android] Modify UI/UX", and the file HomeFragment.
+ // Splits by full stops or commas and puts the parts in different lines.
+ // Ignoring separators at the end of the string, it is expected
+ // that there are at most two parts (e.g. "Explore. Privately.").
+ text = stringResource(R.string.tor_explore_privately).replace(
" *([.,。।]) *".toRegex(),
"$1\n",
).trim(),
- style = TextStyle(
- color = Color(color = 0xDEFFFFFF),
- fontSize = 40.sp,
- textAlign = TextAlign.Start,
- ),
- modifier = Modifier.align(Alignment.CenterHorizontally),
- )
- Spacer(Modifier.weight(1f))
- Image(
- painter = painterResource(
- id = R.drawable.ic_onion_pattern,
- ),
- contentDescription = null, Modifier.fillMaxWidth(),
- )
+ style = TextStyle(
+ color = Color(color = 0xDEFFFFFF),
+ fontSize = 40.sp,
+ textAlign = TextAlign.Start,
+ ),
+ modifier = Modifier.align(Alignment.CenterHorizontally),
+ )
+ }
+ if (!shouldShowPromo.value) {
+ Spacer(Modifier.weight(1f))
+ Image(
+ painter = painterResource(
+ id = R.drawable.ic_onion_pattern,
+ ),
+ contentDescription = null, Modifier.fillMaxWidth(),
+ )
+ }
}
Spacer(modifier = Modifier.size(17.dp))
}
+
+@SuppressLint("UnrememberedMutableState")
+@Composable
+@Preview
+/**
+ * Relevant documentation
+ * https://developer.android.com/develop/ui/compose/tooling/previews#preview-v…
+ */
+private fun TorHomePagePreview(
+ @PreviewParameter(
+ BooleanPreviewParameterProvider::class,
+ ) shouldShowPromo: Boolean,
+) {
+ Box(
+ contentAlignment = Alignment.TopStart,
+ modifier = Modifier.fillMaxSize(),
+ ) {
+ TorHomePage(
+ // restricted vertically so will not follow contentAlignment
+ shouldInitiallyShowPromo = mutableStateOf( shouldShowPromo),
+ toolBarAtTop = true,
+ onClicked = {},
+ )
+ }
+}
+
+private class BooleanPreviewParameterProvider :
+ PreviewParameterProvider<Boolean> {
+ override val values: Sequence<Boolean>
+ get() = sequenceOf(
+ true, false
+ )
+}
=====================================
mobile/android/fenix/app/src/main/res/drawable/bulb_illo_yec.xml
=====================================
@@ -0,0 +1,107 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="126dp"
+ android:height="184dp"
+ android:viewportWidth="126"
+ android:viewportHeight="184">
+ <path
+ android:pathData="M19.7,73.13a49.65,49.97 0,1 0,99.29 0a49.65,49.97 0,1 0,-99.29 0z"
+ android:fillColor="#6757E0"/>
+ <path
+ android:pathData="M40.23,157.53C40.43,156.58 41.41,156 42.33,156.3C48.3,158.22 54.67,158.51 60.79,157.14L60.96,157.1C62.16,156.83 63.23,157.93 62.92,159.14L57.33,181.27C57.19,181.84 56.81,182.35 56.25,182.62C52.83,184.26 47.81,184.92 37.17,181.35C36.16,181.01 35.57,179.96 35.79,178.92L40.23,157.53Z"
+ android:fillColor="#6757E0"/>
+ <path
+ android:pathData="M59.5,129.87C60.59,125.86 69.88,125.85 74.34,133.26C76.94,138.01 73.23,142.23 71.61,143.59C71.58,143.61 71.64,143.56 71.61,143.59C68.61,146.1 66.44,146.76 64.99,147.52C69.21,146.04 71.55,144.86 75.51,144.25C81.31,143.35 86.38,143.44 88.83,145.39C90.15,146.74 89.52,149 88.08,149.42C86.64,149.84 84.41,149.89 78.07,149.66C75.87,149.58 71.82,149.85 68.45,151.08C71.78,151.05 84.63,152.28 84.66,156.49C84.66,156.94 84.55,157.36 84.33,157.74C84.32,157.76 84.31,157.78 84.3,157.8C84.3,157.8 84.3,157.81 84.29,157.81L84.29,157.82C82.74,160.41 75.29,157.53 72.13,156.58C69.77,155.87 68.25,155.67 65.79,155.5C68.24,155.54 81.63,160.65 79.77,165.86C79.72,166.01 79.65,166.16 79.57,166.3C76.95,169.33 69.97,165.18 62.24,157.93C56.2,159.41 44.97,158.07 41.84,156.51C41.84,156.51 38.37,152.92 36.52,150.21C34.91,147.85 31.45,143.85 30.26,139.9C29.66,137.94 30.24,135.85 31.6,134.32C33.82,131.83 37.88,128.51 42.76,127.02C49.11,125.08 53.43,130.74 46.54,133.67C39.65,136.6 38.34,136.55 39.65,139.68C40.97,142.8 48.77,144.61 52.52,144.37C63.89,144.45 68.84,137.25 65.09,134.97C60.52,133.06 58.91,132.06 59.5,129.87Z"
+ android:fillColor="#EDB6FF"/>
+ <path
+ android:pathData="M42.35,129.44L43.16,132.04C43.35,132.63 43.97,132.98 44.55,132.77C46.43,132.08 48.74,130.71 47.89,128.9C47.04,127.09 44.62,127.47 42.96,128.09C42.42,128.29 42.18,128.89 42.35,129.44Z"
+ android:fillColor="#6757E0"/>
+ <path
+ android:pathData="M67.02,130.68L66.04,132.46C65.77,132.96 65.17,133.19 64.64,132.96C62.86,132.15 60.68,130.7 61.76,129.28C62.79,127.94 65,128.47 66.56,129.17C67.13,129.43 67.32,130.13 67.02,130.68Z"
+ android:fillColor="#6757E0"/>
+ <path
+ android:pathData="M54.16,170.41C53.61,173.97 47.92,176.04 47.68,176.13C47.62,176.15 47.55,176.16 47.48,176.15C47.42,176.13 47.35,176.11 47.3,176.07C47.09,175.91 42.28,172.22 42.82,168.66C42.95,167.83 43.41,167.08 44.08,166.57C44.76,166.07 45.61,165.87 46.44,165.99C47.49,166.15 48.33,166.75 48.79,167.6C49.47,166.92 50.46,166.61 51.5,166.77C52.33,166.9 53.08,167.36 53.58,168.04C54.08,168.72 54.28,169.57 54.16,170.41Z"
+ android:fillColor="#B3E54E"/>
+ <path
+ android:pathData="M68.07,45.9C81.97,45.9 93.25,57.83 93.25,72.54C93.25,82.29 88.3,90.81 80.92,95.46C79.64,96.27 78.76,97.64 78.76,99.16V102.02C78.76,104.23 76.98,106.02 74.78,106.02H61.35C59.15,106.02 57.37,104.23 57.37,102.02V99.16C57.37,97.64 56.49,96.27 55.21,95.46C47.83,90.81 42.88,82.29 42.88,72.54C42.88,57.83 54.16,45.9 68.07,45.9Z"
+ android:fillColor="#EDB6FF"/>
+ <path
+ android:pathData="M79.18,70.66C82.81,70.66 85.75,73.62 85.75,77.27V78.41C85.75,80.47 84.9,82.44 83.41,83.84L76.91,89.95C75.6,91.18 74.86,92.9 74.86,94.69V105.79C74.86,107.61 73.39,109.09 71.58,109.09C69.77,109.09 68.3,107.61 68.3,105.79V94.82C68.3,92.96 67.5,91.18 66.1,89.95L59.22,83.87C57.62,82.46 56.71,80.42 56.71,78.28V77.74C56.71,73.83 59.85,70.66 63.74,70.66C66.02,70.66 68.15,71.77 69.47,73.64L71.58,76.63L73.82,73.44C75.06,71.7 77.05,70.66 79.18,70.66ZM79.18,71.6C77.36,71.6 75.64,72.49 74.59,73.99L72.15,77.44L74.05,80.14C74.59,80.9 74.75,81.88 74.49,82.78C73.63,85.75 69.4,85.75 68.62,82.72C68.39,81.85 68.56,80.91 69.08,80.17L71.01,77.44L68.71,74.19C67.57,72.57 65.71,71.6 63.74,71.6C60.37,71.6 57.64,74.35 57.64,77.74V78.28C57.64,80.15 58.44,81.93 59.84,83.16L66.72,89.24C68.32,90.65 69.23,92.68 69.23,94.82V105.79C69.23,107.09 70.28,108.15 71.58,108.15C72.88,108.15 73.93,107.09 73.93,105.79V94.69C73.93,92.63 74.77,90.67 76.27,89.26L82.77,83.15C84.07,81.93 84.81,80.21 84.81,78.41V77.27C84.81,74.14 82.29,71.6 79.18,71.6ZM69.84,80.72C69.48,81.23 69.37,81.88 69.52,82.49C70.06,84.55 72.99,84.59 73.59,82.51C73.77,81.89 73.66,81.21 73.29,80.68L71.58,78.26L69.84,80.72Z"
+ android:fillColor="#6757E0"
+ android:fillType="evenOdd"/>
+ <path
+ android:pathData="M60.51,52.98V57.88L61.84,56.52L62.42,57.11L61.13,58.42L64.9,58.43L64.9,59.26L61.07,59.25L62.42,60.61L61.84,61.2L60.51,59.85V64.76H59.69V59.89L58.4,61.2L57.82,60.61L59.17,59.24L55.3,59.23L55.3,58.4L59.11,58.41L57.82,57.11L58.4,56.52L59.69,57.84V52.98L60.51,52.98Z"
+ android:fillColor="#6757E0"/>
+ <path
+ android:pathData="M96.16,100.6C96.24,100.48 96.39,100.44 96.52,100.5L109.39,106.96C109.5,107.01 109.56,107.12 109.55,107.23C109.54,107.35 109.46,107.44 109.35,107.48L104.42,108.89L108.95,113.02C109.05,113.11 109.07,113.27 108.99,113.38C108.91,113.5 108.76,113.54 108.64,113.48L97.87,108.07C97.76,108.01 97.7,107.9 97.71,107.79C97.73,107.67 97.81,107.57 97.92,107.54L102.83,106.34L96.22,100.97C96.11,100.88 96.08,100.72 96.16,100.6Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M39.02,89.13C39.18,89.05 39.37,89.11 39.47,89.26C39.57,89.41 39.53,89.61 39.39,89.72L30.08,97.26L37.25,98C37.39,98.03 37.5,98.15 37.52,98.3C37.53,98.45 37.46,98.59 37.32,98.66L23.77,105.46C23.61,105.54 23.42,105.49 23.32,105.35C23.22,105.2 23.24,105 23.37,104.88L27.62,100.14L22.87,97.91C22.73,97.87 22.63,97.75 22.62,97.6C22.61,97.46 22.68,97.32 22.81,97.26L39.02,89.13Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M123.13,68.64C123.27,68.65 123.4,68.74 123.45,68.88C123.5,69.02 123.45,69.17 123.34,69.26L119.35,73.55L125.75,75.82C125.92,75.87 126.03,76.04 126,76.22C125.96,76.39 125.81,76.52 125.64,76.51L110.49,75.95C110.34,75.94 110.21,75.84 110.17,75.7C110.12,75.56 110.17,75.41 110.29,75.32L115.29,71.37L104.93,68.68C104.76,68.63 104.65,68.46 104.67,68.28C104.7,68.1 104.85,67.97 105.03,67.98L123.13,68.64Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M7.86,58.04C8.01,57.84 8.26,57.75 8.5,57.82L38.09,66.06C38.38,66.14 38.57,66.43 38.52,66.74C38.47,67.04 38.2,67.25 37.9,67.24L20.25,66.62L25.86,75.22C26,75.43 26,75.7 25.85,75.9C25.71,76.11 25.45,76.2 25.21,76.13L0.44,69.25C0.15,69.17 -0.03,68.89 0.01,68.59C0.05,68.3 0.3,68.07 0.6,68.07L13.64,68.04L7.83,58.71C7.7,58.51 7.71,58.24 7.86,58.04Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M110.83,22.61C111,22.43 111.26,22.37 111.5,22.46C111.73,22.55 111.89,22.77 111.89,23.03L111.88,34.23L123.15,27.18C123.41,27.02 123.75,27.08 123.94,27.31C124.14,27.55 124.13,27.89 123.92,28.11L106.23,47.48C106.06,47.67 105.79,47.73 105.55,47.64C105.32,47.54 105.17,47.3 105.18,47.05L104.25,37.8L90.51,46.68C90.25,46.86 89.91,46.82 89.7,46.59C89.5,46.35 89.5,46 89.71,45.77L110.83,22.61Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M36.24,30.56C36.35,30.52 36.47,30.55 36.55,30.64L46.29,41.31C46.38,41.42 46.38,41.58 46.29,41.69C46.2,41.79 46.04,41.81 45.92,41.73L38.95,36.82L39.16,41.9C39.16,42.02 39.09,42.12 38.98,42.17C38.88,42.21 38.75,42.19 38.67,42.1L30.52,33.17C30.42,33.07 30.42,32.91 30.51,32.8C30.6,32.69 30.75,32.67 30.87,32.74L36.07,35.99L36.07,30.83C36.07,30.71 36.14,30.61 36.24,30.56Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M83.38,1.04C84.06,0.76 84.56,1.58 84.05,2.11C78.47,8 74.32,14.25 72.02,22.25C71.92,22.6 72.3,22.8 72.52,22.51C74.31,20.1 77.19,15.8 86.33,12.8C86.67,12.69 86.93,13.09 86.7,13.36C79.51,21.75 77.82,24.26 75.49,28.84C74.51,30.77 73.27,35.53 74.85,39.68C75.09,40.3 74.62,41.04 73.95,41C72.53,40.9 70.85,40.81 69.71,40.79C68.46,40.77 67.03,40.69 65.59,40.74C64.86,40.76 64.19,40.3 63.98,39.6C61.22,30.2 61.21,27.1 62.76,20.66C65.24,10.34 76.85,3.68 83.38,1.04Z"
+ android:fillColor="#B3E54E"/>
+ <path
+ android:pathData="M84.89,0.1C85.64,-0.17 86.37,0.14 86.74,0.73C87.11,1.33 87.07,2.14 86.52,2.72C81.98,7.51 78.42,12.51 76.05,18.5C76.35,18.18 76.67,17.86 77.04,17.53C78.98,15.81 82.11,13.93 87.8,11.87L87.82,11.86C89.09,11.45 90.02,12.97 89.19,13.93C82.03,22.3 80.39,24.75 78.11,29.23C77.67,30.09 77.14,31.65 76.92,33.5C76.7,35.35 76.79,37.41 77.51,39.3C77.75,39.93 77.63,40.59 77.3,41.08C76.98,41.56 76.39,41.95 75.67,41.89C74.26,41.79 72.6,41.71 71.49,41.69C70.22,41.67 69.1,41.61 67.83,41.65C66.68,41.69 65.57,40.95 65.28,39.75C63.13,31.02 63.31,24.71 64.54,20.4C66,15.3 69.43,10.9 73.27,7.47C77.12,4.02 81.45,1.48 84.81,0.12L84.89,0.1ZM85.84,2.07C86.35,1.54 85.85,0.72 85.16,1C78.63,3.64 68.22,10.93 65.44,20.66L65.38,20.86C64.26,24.96 64.09,31.03 66.19,39.53C66.37,40.26 67.05,40.73 67.8,40.71C69.1,40.67 70.28,40.73 71.5,40.75C72.63,40.77 74.32,40.86 75.74,40.96C76.38,41 76.85,40.31 76.66,39.7L76.64,39.64C75.05,35.49 76.29,30.73 77.27,28.8C79.61,24.22 81.3,21.71 88.48,13.32C88.71,13.05 88.45,12.65 88.11,12.76C76.85,16.83 76.1,20.06 74.3,22.47C74.08,22.76 73.7,22.56 73.8,22.21C76.07,14.33 80.13,8.15 85.58,2.35L85.84,2.07Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M50.16,138.72C51.38,135.7 53.42,135.16 54.35,135.29C56.45,135.77 56.78,138.34 56.65,140.14C56.61,140.68 56.13,141.08 55.59,141.09L55.21,141.1C53.6,141.14 52,140.74 50.62,139.96C50.19,139.71 49.97,139.2 50.16,138.72Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M54.26,133.01C54.76,133.02 55.15,133.43 55.15,133.92C55.14,134.42 54.74,134.82 54.24,134.82C53.75,134.81 53.35,134.41 53.36,133.91C53.36,133.41 53.76,133.01 54.26,133.01Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M53.4,130.79C53.89,130.79 54.29,131.2 54.29,131.7C54.28,132.19 53.88,132.59 53.38,132.59C52.89,132.59 52.49,132.18 52.49,131.68C52.5,131.18 52.9,130.78 53.4,130.79Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M52.76,128.56C53.25,128.56 53.65,128.97 53.65,129.47C53.64,129.97 53.24,130.37 52.74,130.36C52.25,130.36 51.85,129.95 51.85,129.45C51.86,128.95 52.26,128.55 52.76,128.56Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M53.44,126.34C53.93,126.35 54.33,126.75 54.33,127.25C54.32,127.75 53.92,128.15 53.42,128.15C52.93,128.14 52.53,127.74 52.54,127.24C52.54,126.74 52.94,126.34 53.44,126.34Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M54.78,124.33C55.28,124.34 55.68,124.74 55.67,125.24C55.67,125.74 55.26,126.14 54.77,126.14C54.27,126.13 53.87,125.72 53.88,125.23C53.88,124.73 54.29,124.33 54.78,124.33Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M55.91,122.12C56.4,122.12 56.8,122.53 56.8,123.03C56.79,123.53 56.39,123.93 55.89,123.92C55.4,123.92 55,123.51 55,123.01C55.01,122.51 55.41,122.11 55.91,122.12Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M56.37,119.9C56.86,119.9 57.26,120.31 57.26,120.81C57.25,121.31 56.85,121.71 56.35,121.71C55.86,121.7 55.46,121.29 55.46,120.79C55.47,120.3 55.87,119.9 56.37,119.9Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M55.29,117.67C55.78,117.67 56.18,118.08 56.17,118.58C56.17,119.08 55.77,119.48 55.27,119.47C54.78,119.47 54.38,119.06 54.38,118.57C54.39,118.07 54.79,117.67 55.29,117.67Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M53.54,115.64C54.03,115.64 54.43,116.05 54.43,116.55C54.42,117.04 54.02,117.45 53.52,117.44C53.03,117.44 52.63,117.03 52.64,116.53C52.64,116.03 53.04,115.63 53.54,115.64Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M70.99,45.9C85.61,45.9 97.46,57.83 97.46,72.54C97.46,82.31 92.25,90.84 84.47,95.48L84.35,95.56C83.09,96.36 82.24,97.71 82.24,99.22V102.02C82.24,103.46 81.47,104.73 80.33,105.44C80.92,105.82 81.3,106.49 81.3,107.24C81.3,108.08 80.82,108.81 80.13,109.17C80.82,109.53 81.3,110.25 81.3,111.09C81.3,111.93 80.82,112.66 80.13,113.02C80.82,113.38 81.3,114.11 81.3,114.94C81.3,116.14 80.34,117.11 79.15,117.11H62.6C61.41,117.11 60.45,116.14 60.45,114.94C60.45,114.11 60.93,113.38 61.63,113.02C60.93,112.66 60.45,111.93 60.45,111.09C60.45,110.25 60.93,109.53 61.63,109.17C60.93,108.81 60.45,108.08 60.45,107.24C60.45,106.44 60.89,105.74 61.54,105.36C60.46,104.65 59.75,103.42 59.75,102.02V99.22C59.75,97.71 58.9,96.36 57.64,95.56L57.52,95.48C49.74,90.84 44.52,82.3 44.52,72.54C44.52,57.83 56.38,45.9 70.99,45.9ZM70.99,46.85C56.89,46.85 45.46,58.35 45.46,72.54C45.46,81.96 50.49,90.19 57.99,94.67C59.56,95.6 60.69,97.28 60.69,99.22V102.02C60.69,103.71 62.05,105.08 63.73,105.08H78.26C79.94,105.08 81.3,103.71 81.3,102.02V99.22C81.3,97.28 82.43,95.6 83.99,94.67C91.5,90.19 96.53,81.96 96.53,72.54C96.53,58.35 85.1,46.85 70.99,46.85Z"
+ android:fillColor="#FBF1FE"
+ android:fillType="evenOdd"/>
+ <path
+ android:pathData="M52.9,113.21C53.4,113.21 53.79,113.62 53.79,114.12C53.79,114.62 53.38,115.02 52.89,115.01C52.39,115.01 51.99,114.6 52,114.1C52,113.6 52.41,113.2 52.9,113.21Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M53.14,110.99C53.64,110.99 54.03,111.4 54.03,111.9C54.03,112.4 53.62,112.8 53.13,112.79C52.63,112.79 52.23,112.38 52.24,111.88C52.24,111.38 52.65,110.98 53.14,110.99Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M54.71,108.78C55.2,108.78 55.6,109.19 55.6,109.69C55.59,110.19 55.19,110.59 54.69,110.58C54.2,110.58 53.8,110.17 53.8,109.67C53.81,109.17 54.21,108.77 54.71,108.78Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M57.04,107.82C57.53,107.82 57.93,108.23 57.93,108.73C57.92,109.23 57.52,109.63 57.02,109.62C56.53,109.62 56.13,109.21 56.13,108.71C56.14,108.21 56.54,107.81 57.04,107.82Z"
+ android:fillColor="#FBF1FE"/>
+ <path
+ android:pathData="M59.3,107.47C59.79,107.48 60.19,107.88 60.19,108.38C60.18,108.88 59.78,109.28 59.28,109.28C58.79,109.27 58.39,108.87 58.39,108.37C58.4,107.87 58.8,107.47 59.3,107.47Z"
+ android:fillColor="#FBF1FE"/>
+</vector>
=====================================
mobile/android/fenix/app/src/main/res/drawable/circled_lighning_yec.xml
=====================================
@@ -0,0 +1,7 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="false" android:height="34dp" android:viewportHeight="34" android:viewportWidth="34" android:width="34dp">
+
+ <path android:fillAlpha="0.25" android:fillColor="#000000" android:pathData="M17,0L17,0A17,17 0,0 1,34 17L34,17A17,17 0,0 1,17 34L17,34A17,17 0,0 1,0 17L0,17A17,17 0,0 1,17 0z"/>
+
+ <path android:fillColor="#FFAC33" android:pathData="M24.469,15.825C24.396,15.63 24.209,15.5 24,15.5H17.962L21.445,8.729C21.555,8.516 21.498,8.255 21.309,8.108C21.219,8.035 21.109,8 21,8C20.883,8 20.767,8.041 20.674,8.122L17,11.294L9.674,17.622C9.516,17.758 9.459,17.979 9.532,18.174C9.605,18.369 9.791,18.5 10,18.5H16.038L12.555,25.271C12.446,25.484 12.502,25.744 12.691,25.892C12.781,25.965 12.891,26 13,26C13.116,26 13.233,25.959 13.326,25.878L17,22.706L24.326,16.378C24.485,16.242 24.542,16.021 24.469,15.825Z"/>
+
+</vector>
=====================================
mobile/android/fenix/app/src/main/res/drawable/globe_chain_burst_yec.xml
=====================================
@@ -0,0 +1,35 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="124dp" android:viewportHeight="124" android:viewportWidth="160" android:width="160dp">
+
+ <path android:fillColor="#B6E368" android:pathData="M79.97,86.16C65.19,89.07 56.28,80.34 53.67,75.61L34.02,84.97L55.14,84.24L42.62,106.51L63.16,91.39L61.15,117.92L73.64,93L84.86,111.85L79.98,86.16H79.97Z"/>
+
+ <path android:fillColor="#B6E368" android:pathData="M72.38,32.02C87.13,28.91 96.16,37.52 98.83,42.21L118.35,32.58L97.24,33.6L109.46,11.17L89.13,26.57L90.78,0L78.63,25.09L67.15,6.4L72.38,32.02Z"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#C272FF" android:fillType="evenOdd" android:pathData="M82.86,42.77H84.19V44.18H82.79V42.84H80.14V44.18H81.46V45.52H82.79V48.27H84.19V51.09H82.79V48.34H81.4V45.59H80.06V44.18H78.74V42.84H77.34V53.77H84.19V51.09H85.59V53.77H89.58V55.18H92.31V56.59H89.51V55.18H85.6V67.44H89.58V66.1H92.38V67.44H93.71V68.85H92.38V70.26H91.05V71.67H89.65V73.01H88.25V74.35H86.99V75.76H85.6V74.35H86.86V72.94H88.25V71.6H89.65V70.26H90.98V68.85H92.31V67.51H89.58V68.85H85.6V71.67H84.2V74.42H82.8V75.76H85.6V77.17H81.4V74.35H82.8V71.6H84.19V68.85H77.34V77.17H81.4V78.43H71.88V77.17H67.76V75.76H66.43V74.35H65.1V73.01H63.7V71.67H62.38V70.26H63.78V71.6H65.1V72.94H66.5V74.35H67.83V75.76H70.56V74.42H69.16V71.67H67.83V68.85H63.7V67.51H60.98V68.85H59.58V67.44H58.25V55.18H59.65V67.44H60.98V66.1H63.78V67.44H67.83V55.18H63.78V56.59H60.98V55.18H59.65V52.36H60.98V49.61H62.38V48.27H63.78V46.93H65.1V45.59H66.43V44.18H69.23V45.59H66.5V47H65.17V48.34H63.77V49.68H62.37V52.43H61.04V55.18H63.7V53.77H67.83V51.09H69.22V53.77H75.94V42.84H74.68V44.18H73.28V42.84H70.62V44.18H69.22V42.77H70.55V41.43H82.86V42.77V42.77ZM69.22,71.59H70.55V74.34H71.95V77.16H75.94V68.84H69.23V71.59H69.22ZM77.34,67.44H84.19V55.17H77.34V67.44ZM69.22,67.44H75.94V55.17H69.22V67.44Z" android:strokeAlpha="0.8"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#C272FF" android:pathData="M62.37,70.25H60.98V68.84H62.37V70.25Z" android:strokeAlpha="0.8"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#C272FF" android:pathData="M95.1,67.44H93.7V55.17H95.1V67.44Z" android:strokeAlpha="0.8"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#C272FF" android:pathData="M86.99,45.58H88.25V46.92H89.64V48.26H90.97V49.6H92.37V52.35H93.7V55.17H92.3V52.42H90.97V49.67H89.58V48.33H88.25V46.99H86.85V45.58H84.19V44.17H86.99V45.58V45.58Z" android:strokeAlpha="0.8"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#C272FF" android:pathData="M73.28,45.58H71.95V48.33H70.62V51.08H69.22V48.26H70.55V45.51H71.88V44.17H73.28V45.58Z" android:strokeAlpha="0.8"/>
+
+ <path android:fillAlpha="0.8" android:fillColor="#00000000" android:pathData="M84.19,44.18V42.77H82.86V41.43H70.55V42.77H69.22V44.18M84.19,44.18H82.79V42.84H80.14V44.18H81.46V45.52H82.79V48.27H84.19V51.09M84.19,44.18V45.59H86.85V47H88.25V48.34H89.58V49.68H90.97V52.43H92.3V55.18M84.19,44.18H86.99V45.59H88.25V46.93H89.64V48.27H90.97V49.61H92.37V52.35H93.7V55.17M69.22,44.18H66.43V45.59H65.1V46.93H63.77V48.27H62.37V49.61H60.98V52.35H59.65V55.17M69.22,44.18V45.59H66.5V47H65.17V48.34H63.77V49.68H62.37V52.43H61.04V55.18H63.7V53.77H67.82V51.09H69.22M69.22,44.18H70.62V42.84H73.28V44.18M93.7,55.17H95.1V67.44H93.7M93.7,55.17V67.44M84.19,51.08H82.79V48.33H81.4V45.58H80.06V44.17H78.74V42.84H77.34V53.76H84.19V51.08H84.19ZM84.19,51.08H85.59V53.76H89.58V55.17H92.3M93.7,67.44H92.37V66.1H89.58V67.44H85.59V55.17H89.5V56.58H92.3V55.17H93.7M93.7,67.44V68.85H92.37V70.26H91.04V71.67H89.64V73.01H88.25V74.35H86.99V75.76H85.59M85.59,75.75V74.34H86.85V72.93H88.25V71.59H89.64V70.25H90.97V68.84H92.3V67.5H89.58V68.84H85.59V71.66H84.19V74.41H82.79V75.75H85.59V75.75ZM85.59,75.75V77.16H81.39M81.39,77.16V74.34H82.79V71.59H84.19V68.84H77.33V77.16H81.39H81.39ZM81.39,77.16V78.43H71.88V77.16H67.75V75.75H66.43V74.34H65.1V73H63.7V71.66H62.37V70.25M62.37,70.25H63.77V71.59H65.1V72.93H66.5V74.34H67.83V75.75H70.55V74.41H69.16V71.66H67.83V68.85H63.7V67.51H60.97V68.85M62.37,70.25H60.98V68.84H62.37V70.25ZM60.97,68.84H59.57V67.43H58.25V55.17H59.65M59.65,55.17V67.44H60.98V66.1H63.77V67.44H67.83V55.17H63.77V56.58H60.98V55.17H59.65ZM69.22,51.08V53.76H75.93V42.84H74.68V44.17H73.28M69.22,51.08H70.62V48.33H71.95V45.58H73.28V44.17H71.88V45.51H70.55V48.26H69.22V51.08ZM69.22,71.59H70.55V74.34H71.95V77.16H75.94V68.84H69.23V71.59H69.22ZM77.34,67.44H84.19V55.17H77.34V67.44ZM69.22,67.44H75.93V55.17H69.22V67.44Z" android:strokeAlpha="0.8" android:strokeColor="#C272FF" android:strokeWidth="0.23451"/>
+
+ <path android:fillColor="#ffffff" android:pathData="M53.84,42.78H56.64L54.84,40.42L58.14,39.7L55.15,36.24L57.62,36.17L57.73,35.5L41.11,29.32C40.64,29.14 40.17,29 39.7,28.88L31.58,7.75C29.81,3.15 25.32,0.06 20.41,0.06C18.94,0.06 17.49,0.33 16.11,0.87L7.65,4.16C1.5,6.55 -1.57,13.54 0.81,19.73L12.4,49.92C14.17,54.53 18.66,57.62 23.56,57.62C24.22,57.62 24.87,57.57 25.51,57.46C26.74,58.58 28.17,59.46 29.77,60.05L46.5,66.27L44.54,62.76H48.38L47.08,59.56H51.23L49.53,56.39L38.61,52.33C42.24,49.92 44.27,45.7 43.94,41.38L56.68,46.11L53.84,42.78ZM49.04,56.96L50.07,58.86H46.04L47.35,62.07H43.36L44.97,64.96L30.01,59.4C26.89,58.24 24.41,55.93 23.03,52.89C21.64,49.86 21.52,46.48 22.67,43.35L24.89,37.34C25.95,34.46 27.98,32.2 30.46,30.8L33.78,39.46C33.55,39.74 33.36,40.07 33.23,40.44L31.01,46.45C30.68,47.35 30.72,48.31 31.11,49.17C31.5,50.04 32.21,50.7 33.1,51.03L49.04,56.96ZM21.23,46.86C21.17,46.76 21.12,46.65 21.08,46.54L9.48,16.35C9.13,15.45 9.36,14.68 9.53,14.31C9.7,13.93 10.11,13.24 11.01,12.89L19.46,9.6C19.78,9.48 20.1,9.42 20.41,9.42C21.32,9.42 22.44,9.95 22.9,11.14L30.21,30.15C27.54,31.61 25.37,34.02 24.24,37.1L22.02,43.11C21.57,44.33 21.3,45.6 21.23,46.86ZM33.88,40.68C33.93,40.52 34,40.38 34.08,40.24L34.5,41.32C34.85,42.23 34.62,42.99 34.45,43.37H34.45C34.28,43.75 33.88,44.43 32.98,44.78L32.26,45.06L33.88,40.68ZM37.79,52.02L33.34,50.37C32.62,50.11 32.06,49.58 31.74,48.88C31.42,48.19 31.39,47.41 31.66,46.7L31.94,45.93L33.23,45.43C34.36,45 34.87,44.13 35.08,43.65C35.29,43.17 35.58,42.21 35.14,41.07L34.58,39.61V39.59L34.35,39.01L34.32,38.91L31.07,30.48L31.06,30.46L30.85,29.91L30.82,29.82L23.55,10.88C22.97,9.39 21.56,8.72 20.41,8.72C20.01,8.72 19.61,8.8 19.21,8.95L10.76,12.24C9.63,12.68 9.11,13.55 8.9,14.02C8.69,14.5 8.4,15.47 8.84,16.61L20.43,46.8C20.61,47.27 20.88,47.67 21.2,47.97C21.24,49.75 21.64,51.52 22.4,53.18C23.03,54.56 23.87,55.79 24.88,56.85C24.44,56.9 24,56.93 23.56,56.93C18.94,56.93 14.71,54.01 13.04,49.67L1.45,19.48C-0.79,13.65 2.1,7.07 7.9,4.81L16.35,1.52C17.66,1.01 19.03,0.75 20.41,0.75C25.04,0.75 29.26,3.67 30.93,8.01L38.88,28.7L38.91,28.78L39.16,29.43L39.18,29.47L42.53,38.2C42.8,38.9 42.99,39.61 43.11,40.33C43.12,40.35 43.13,40.37 43.13,40.4C43.17,40.61 43.2,40.83 43.22,41.05C43.22,41.07 43.22,41.09 43.22,41.11C43.68,45.46 41.58,49.76 37.79,52.02ZM43.86,40.6C43.74,39.71 43.51,38.81 43.18,37.94L40.01,29.69C40.29,29.77 40.58,29.86 40.87,29.97L55.81,35.53L53.67,35.59L56.85,39.27L53.63,39.97L55.24,42.09H52.33L54.41,44.53L43.86,40.6Z"/>
+
+ <path android:fillColor="#ffffff" android:pathData="M157.76,99.65L136.71,69.02C134.41,65.69 130.67,63.66 126.65,63.57C125.48,62.52 124.09,61.66 122.51,61.08L107.43,55.47L107.36,55.44L103.68,55.55L106.41,58.69L102.99,59.44L105.06,62.15H102.4L104.54,64.66L115.19,68.62L112.76,70.31C109.62,72.5 107.78,75.86 107.41,79.41L97.62,75.77L99.32,78.92H94.98L96.29,82.12H92.65L94.1,84.72L111.42,91.16C111.59,91.22 111.75,91.28 111.92,91.33L130.63,118.54C132.98,121.96 136.85,124 140.98,124C143.54,124 146.01,123.22 148.12,121.75L154.58,117.26C157.34,115.33 159.19,112.44 159.79,109.12C160.4,105.79 159.68,102.43 157.76,99.65ZM104.95,64.06L103.91,62.85H106.46L104.21,59.89L107.7,59.13L105.17,56.2L107.25,56.14L122.27,61.73C123.5,62.19 124.62,62.82 125.59,63.59C123.31,63.73 121.12,64.49 119.22,65.82L115.89,68.13L104.95,64.06ZM111.65,90.5L111.25,90.35L94.58,84.15L93.84,82.82H97.32L96.01,79.61H100.48L99.1,77.06L107.36,80.13L108.04,80.38L114.5,82.79C115.37,83.11 116.28,83.1 117.1,82.82C117.32,82.75 117.54,82.65 117.74,82.53C118.53,82.1 119.17,81.39 119.5,80.48L120.95,76.56L124.77,73.9C125.25,73.57 125.79,73.39 126.36,73.39C126.8,73.39 127.92,73.51 128.68,74.61L129.76,76.19C129.69,76.47 129.61,76.75 129.51,77.02L127.19,83.33L127.08,83.63C126.11,86.07 124.45,88.03 122.42,89.34C122.23,89.47 122.03,89.59 121.83,89.7C119.04,91.29 115.64,91.75 112.36,90.74C112.13,90.67 111.89,90.59 111.65,90.5ZM117.15,80.21C117.22,79.78 117.48,78.97 118.31,78.39L119.95,77.26L118.85,80.24C118.57,81 118.04,81.58 117.38,81.94C117.04,81.24 117.08,80.57 117.15,80.21ZM130.06,77.56L130.17,77.25C130.2,77.14 130.24,77.04 130.27,76.93L149.73,105.24C150.31,106.08 150.27,106.93 150.19,107.36C150.11,107.79 149.85,108.6 149.02,109.18L142.57,113.67C142.09,114.01 141.55,114.17 140.98,114.17C140.53,114.17 139.41,114.06 138.66,112.95L122.82,89.91C124.96,88.52 126.7,86.46 127.72,83.89L130.06,77.56ZM159.11,108.99C158.54,112.14 156.79,114.87 154.18,116.68L147.73,121.18C145.73,122.57 143.4,123.3 140.98,123.3C137.07,123.3 133.42,121.38 131.2,118.15L112.97,91.63C113.95,91.86 114.94,91.97 115.91,91.97C118.15,91.97 120.32,91.38 122.23,90.28L138.09,113.35C139.03,114.72 140.42,114.87 140.98,114.87C141.7,114.87 142.36,114.66 142.96,114.25L149.42,109.75C150.45,109.03 150.77,108.02 150.87,107.48C150.96,106.95 151.02,105.89 150.3,104.85L130.51,76.06L129.97,75.26L129.25,74.22C128.3,72.84 126.91,72.7 126.36,72.7H126.36C125.64,72.7 124.97,72.91 124.38,73.32L121.37,75.42L120.37,76.11L117.92,77.82C116.88,78.54 116.56,79.55 116.46,80.08C116.39,80.53 116.33,81.34 116.74,82.2C116.1,82.39 115.41,82.38 114.74,82.13L108.08,79.66C108.39,76.25 110.14,72.99 113.15,70.89L115.99,68.91L116.68,68.43L119.61,66.39C121.6,65 123.94,64.27 126.36,64.27H126.37C126.72,64.27 127.07,64.28 127.41,64.31C130.91,64.62 134.12,66.48 136.13,69.42L157.19,100.05C159,102.68 159.68,105.85 159.11,108.99Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M26.73,77.81L30.91,77.83L30.91,79.04L26.73,79.03V84.32H25.51V79.03L21.2,79.02L21.2,77.8L25.51,77.81V72.54H26.73V77.81Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M132.82,37.87L137,37.88L137,39.08L132.82,39.07V44.31H131.6V39.07L127.29,39.06L127.29,37.85L131.6,37.86V32.65H132.82V37.87Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M20.17,99.2C20.17,98.79 19.84,98.46 19.43,98.46C19.02,98.46 18.69,98.79 18.69,99.2C18.69,99.62 19.02,99.95 19.43,99.95V101.17C18.36,101.17 17.49,100.29 17.49,99.2C17.49,98.12 18.36,97.24 19.43,97.24C20.51,97.24 21.38,98.12 21.38,99.2C21.38,100.29 20.51,101.17 19.43,101.17V99.95C19.84,99.95 20.17,99.62 20.17,99.2Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M116.28,43.22C117.35,43.22 118.22,44.1 118.22,45.18C118.22,46.27 117.35,47.15 116.28,47.15C115.2,47.15 114.33,46.27 114.33,45.18C114.33,44.1 115.2,43.22 116.28,43.22Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M134.74,51.08C135.81,51.08 136.68,51.96 136.68,53.04C136.68,54.12 135.81,55 134.74,55C133.66,55 132.79,54.12 132.79,53.04C132.79,51.96 133.66,51.08 134.74,51.08Z"/>
+
+ <path android:fillColor="#C272FF" android:pathData="M32.81,91.67C32.81,91.26 32.47,90.93 32.06,90.93C31.66,90.93 31.32,91.26 31.32,91.67C31.32,92.09 31.66,92.42 32.06,92.42V93.64C30.99,93.64 30.12,92.76 30.12,91.67C30.12,90.59 30.99,89.71 32.06,89.71C33.14,89.71 34.01,90.59 34.01,91.67C34.01,92.76 33.14,93.64 32.06,93.64V92.42C32.47,92.42 32.81,92.09 32.81,91.67Z"/>
+
+</vector>
=====================================
mobile/android/fenix/app/src/main/res/drawable/heart.xml
=====================================
@@ -0,0 +1,7 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="16dp" android:viewportHeight="16" android:viewportWidth="16" android:width="16dp">
+
+ <path android:fillColor="#FBFBFE" android:pathData="M8,6C8,6 8,2 11.5,2C15,2 15,5 15,6C15,10.5 8,15 8,15V6Z"/>
+
+ <path android:fillColor="#FBFBFE" android:pathData="M8,6C8,6 8,2 4.5,2C1,2 1,5 1,6C1,10.5 8,15 8,15L9,9L8,6Z"/>
+
+</vector>
=====================================
mobile/android/fenix/app/src/main/res/drawable/yec_lightning.xml
=====================================
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="18dp"
+ android:height="18dp"
+ android:viewportWidth="18"
+ android:viewportHeight="18">
+ <path
+ android:pathData="M16.469,7.826C16.396,7.63 16.209,7.5 16,7.5H9.963L13.445,0.729C13.554,0.516 13.498,0.255 13.309,0.108C13.219,0.036 13.109,0 13,0C12.884,0 12.767,0.041 12.674,0.122L9,3.294L1.674,9.622C1.516,9.758 1.459,9.979 1.532,10.174C1.605,10.37 1.791,10.5 2,10.5H8.038L4.555,17.271C4.446,17.484 4.502,17.744 4.691,17.892C4.782,17.965 4.891,18 5,18C5.117,18 5.233,17.959 5.327,17.878L9,14.706L16.326,8.378C16.485,8.242 16.542,8.021 16.469,7.826Z"
+ android:fillColor="#FFAC33"/>
+</vector>
=====================================
mobile/android/fenix/app/src/main/res/values/torbrowser_strings.xml
=====================================
@@ -153,4 +153,11 @@
<!-- Year End Campaign. Here "Close" is a verb, referring to closing the banner. This is used primarily for screen readers to give the small "x" button a name. -->
<string name="close_yec_button_description">Close</string>
+ <!-- Year End Campaign 2026. Title text. -->
+ <string name="yec26_tor_powered_by_you">Tor: powered by you</string>
+ <!-- Year End Campaign 2026. Main body text. -->
+ <string name="yec26_call_to_action">Unlike Big Tech, Tor doesn’t sell your data to make money. Instead, 6,490 donors every year keep Tor strong. Join the movement with a donation today!</string>
+ <!-- Year End Campaign 2026. Main image description. -->
+ <string name="bulb_illo_yec_description">Illustration of a pink hand reaching to turn on a pink light bulb on a violet background. The light bulb vaguely resembles an onion with greens coming out of the top. There are playful bolts coming out of the bulb, and a green heart on the sleeve of the shirt.</string>
+
</resources>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/b9ce148…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/b9ce148…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.4.0esr-16.0-1] Bug 2075120 - Bump rumdl to 0.1.96 since 0.1.91 is no longer on PyPI r=dao, a=dsmith DONTBUILD
by Pier Angelo Vendrame (@pierov) 28 Sep '26
by Pier Angelo Vendrame (@pierov) 28 Sep '26
28 Sep '26
Pier Angelo Vendrame pushed to branch mullvad-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
8392be86 by Sylvestre Ledru at 2026-09-28T16:16:12+02:00
Bug 2075120 - Bump rumdl to 0.1.96 since 0.1.91 is no longer on PyPI r=dao, a=dsmith DONTBUILD
rumdl 0.1.91 was removed from PyPI upstream, so the lint and python-test
virtualenvs can no longer be created. 0.1.96 is the nearest published
release and reports no new errors in-tree.
Differential Revision: https://phabricator.services.mozilla.com/D328750
- - - - -
2 changed files:
- python/sites/lint.txt
- python/sites/python-test.txt
Changes:
=====================================
python/sites/lint.txt
=====================================
@@ -15,7 +15,7 @@ pypi:py==1.11.0
pypi:pytz==2022.7.1
pypi:rstcheck==6.2.5
pypi:ruff==0.15.15
-pypi:rumdl==0.1.91
+pypi:rumdl==0.1.96
pypi:snowballstemmer==2.2.0
pypi:sphinxcontrib-applehelp==1.0.4
pypi:sphinxcontrib-htmlhelp==2.0.1
=====================================
python/sites/python-test.txt
=====================================
@@ -15,7 +15,7 @@ pypi:pytest==8.4.2
pypi:pytz==2022.7.1
pypi:rstcheck==6.2.5
pypi:ruff==0.15.15
-pypi:rumdl==0.1.91
+pypi:rumdl==0.1.96
pypi:snowballstemmer==2.2.0
pypi:sphinxcontrib-applehelp==1.0.4
pypi:sphinxcontrib-htmlhelp==2.0.1
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/839…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/839…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/tor-browser][tor-browser-153.4.0esr-16.0-1] Bug 2075120 - Bump rumdl to 0.1.96 since 0.1.91 is no longer on PyPI r=dao, a=dsmith DONTBUILD
by Pier Angelo Vendrame (@pierov) 28 Sep '26
by Pier Angelo Vendrame (@pierov) 28 Sep '26
28 Sep '26
Pier Angelo Vendrame pushed to branch tor-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Tor Browser
Commits:
189176e6 by Sylvestre Ledru at 2026-09-28T16:09:01+02:00
Bug 2075120 - Bump rumdl to 0.1.96 since 0.1.91 is no longer on PyPI r=dao, a=dsmith DONTBUILD
rumdl 0.1.91 was removed from PyPI upstream, so the lint and python-test
virtualenvs can no longer be created. 0.1.96 is the nearest published
release and reports no new errors in-tree.
Differential Revision: https://phabricator.services.mozilla.com/D328750
- - - - -
2 changed files:
- python/sites/lint.txt
- python/sites/python-test.txt
Changes:
=====================================
python/sites/lint.txt
=====================================
@@ -15,7 +15,7 @@ pypi:py==1.11.0
pypi:pytz==2022.7.1
pypi:rstcheck==6.2.5
pypi:ruff==0.15.15
-pypi:rumdl==0.1.91
+pypi:rumdl==0.1.96
pypi:snowballstemmer==2.2.0
pypi:sphinxcontrib-applehelp==1.0.4
pypi:sphinxcontrib-htmlhelp==2.0.1
=====================================
python/sites/python-test.txt
=====================================
@@ -15,7 +15,7 @@ pypi:pytest==8.4.2
pypi:pytz==2022.7.1
pypi:rstcheck==6.2.5
pypi:ruff==0.15.15
-pypi:rumdl==0.1.91
+pypi:rumdl==0.1.96
pypi:snowballstemmer==2.2.0
pypi:sphinxcontrib-applehelp==1.0.4
pypi:sphinxcontrib-htmlhelp==2.0.1
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/189176e…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/189176e…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/tor-browser][tor-browser-153.4.0esr-16.0-1] 3 commits: fixup! TB 7494: Create local home page for TBB.
by morgan (@morgan) 28 Sep '26
by morgan (@morgan) 28 Sep '26
28 Sep '26
morgan pushed to branch tor-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Tor Browser
Commits:
8c647cbf by Henry Wilkes at 2026-09-28T12:44:12+00:00
fixup! TB 7494: Create local home page for TBB.
TB 45218: Tweak YEC styling for 2026.
- - - - -
13ef67e3 by Henry Wilkes at 2026-09-28T12:44:13+00:00
fixup! TB 45218: YEC 2026 assets.
TB 45218: Implement YEC 2026 banner.
- - - - -
35053646 by Morgan at 2026-09-28T12:44:13+00:00
fixup! TB 45218: YEC 2026 assets.
add requested alt text to yec image
- - - - -
6 changed files:
- browser/components/abouttor/content/aboutTor.css
- browser/components/abouttor/content/aboutTor.html
- browser/components/abouttor/content/aboutTor.js
- + browser/components/abouttor/content/yec-2026.svg
- browser/components/abouttor/jar.mn
- toolkit/locales/en-US/toolkit/global/tor-browser.ftl
Changes:
=====================================
browser/components/abouttor/content/aboutTor.css
=====================================
@@ -336,16 +336,18 @@ body.show-yec h1 {
border: var(--border-width) solid var(--border-color);
display: grid;
grid-template:
+ ". yec-image" 1fr
"yec-heading yec-image" auto
"yec-body yec-image" auto
"yec-matching yec-image" auto
"yec-donate yec-image" min-content
+ ". yec-image" 1fr
/ 1fr min-content;
--yec-image-background: #3a1653;
- padding-block: 56px 56px;
- padding-inline: 48px 48px;
+ padding-inline: 48px;
+ padding-block: 48px 32px;
box-sizing: border-box;
- max-width: 840px;
+ max-width: 740px;
margin-block-end: var(--space-small);
/* Position for the close button. */
position: relative;
@@ -362,7 +364,7 @@ body.show-yec h1 {
background-color: var(--yec-image-background);
border-radius: var(--border-radius-medium);
padding: var(--space-xsmall);
- height: 196px;
+ height: 212px;
border: var(--border-width) solid transparent;
/* Remove border and padding from the layout size. These parts are only
* visible in contrast or forced color themes. */
@@ -372,25 +374,21 @@ body.show-yec h1 {
forced-color-adjust: none;
}
-#yec-image:dir(rtl) {
- transform: scaleX(-1);
-}
-
#yec-heading {
grid-area: yec-heading;
- margin-block: 0 var(--space-large);
+ margin: 0;
font-size: var(--font-size-xxlarge);
font-weight: var(--font-weight-semibold);
}
#yec-body {
grid-area: yec-body;
- margin-block: 0 var(--space-medium);
+ margin-block: var(--space-large) 0;
}
#yec-matching {
grid-area: yec-matching;
- margin-block: 0 var(--space-xlarge);
+ margin-block: var(--space-medium) 0;
}
#yec-banner b {
@@ -399,6 +397,7 @@ body.show-yec h1 {
#yec-donate-link {
grid-area: yec-donate;
+ margin-block-start: var(--space-xlarge);
justify-self: start;
/* Style like a button. */
font-weight: var(--button-font-weight);
@@ -443,7 +442,7 @@ body.show-yec h1 {
inset-inline-end: var(--space-large);
}
-@media (max-width: 768px) {
+@media (max-width: 550px) {
/* Small width layout. */
#yec-banner {
grid-template:
@@ -461,21 +460,18 @@ body.show-yec h1 {
}
#yec-image {
- height: 156px;
- }
-
- #yec-heading {
- margin-block-start: var(--space-large);
- text-align: center;
- text-wrap-style: balance;
+ height: 188px;
}
#yec-heading {
- font-size: var(--font-size-xlarge);
+ margin-block-start: var(--space-xlarge);
}
+ #yec-heading,
+ #yec-body,
#yec-matching {
- margin-block-end: var(--space-large);
+ text-align: center;
+ text-wrap-style: balance;
}
#yec-donate-link {
=====================================
browser/components/abouttor/content/aboutTor.html
=====================================
@@ -35,10 +35,14 @@
<body class="onion-pattern-background">
<!-- Year End Campaign (YEC). -->
<article id="yec-banner" aria-labelledby="yec-heading">
- <img id="yec-image" alt="" />
+ <img
+ id="yec-image"
+ src="chrome://browser/content/abouttor/yec-2026.svg"
+ data-l10n-id="yec-2026-image"
+ />
<h2 id="yec-heading" data-l10n-id="yec-2026-heading"></h2>
<p id="yec-body" data-l10n-id="yec-2026-body"></p>
- <p id="yec-matching"></p>
+ <p id="yec-matching" hidden="hidden"></p>
<a id="yec-donate-link" target="_blank">
<span data-l10n-id="yec-donate-button"></span>
<img
@@ -50,7 +54,6 @@
<moz-button
id="yec-close"
type="icon ghost"
- class="close"
size="16"
iconSrc="chrome://global/skin/icons/close.svg"
data-l10n-id="yec-close-button"
@@ -176,7 +179,6 @@
<moz-button
id="survey-close"
type="icon ghost"
- class="close"
size="16"
iconSrc="chrome://global/skin/icons/close.svg"
></moz-button>
=====================================
browser/components/abouttor/content/aboutTor.js
=====================================
@@ -431,14 +431,14 @@ const YecArea = {
*
* @type {?integer}
*/
- _startDate: null, // No YEC is active.
+ _startDate: Date.UTC(2026, 9, 13, 8), // 2026 October 13th 8:00 UTC.
/**
* The epoch time to stop showing the banner, if at all.
*
* @type {?integer}
*/
- _endDate: null, // No YEC is active.
+ _endDate: Date.UTC(2027, 0, 5, 0), // 2027 January 5th 0:00 UTC.
/**
* Whether the area has been initialised.
@@ -527,8 +527,9 @@ const YecArea = {
}
const donateLink = document.getElementById("yec-donate-link");
- const base = "https://www.torproject.org/donate";
- donateLink.href = base;
+ const locale = this._locale;
+ const url = `https://www.torproject.org/donate/yec2026-tor-browser-desktop-${locale}`;
+ donateLink.href = url;
document.body.classList.add("show-yec");
},
=====================================
browser/components/abouttor/content/yec-2026.svg
=====================================
@@ -0,0 +1,35 @@
+<svg width="147" height="212" viewBox="0 0 147 212" fill="none" xmlns="http://www.w3.org/2000/svg">
+<ellipse cx="80.9096" cy="84.2616" rx="57.9206" ry="57.575" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M46.9369 181.507C47.1689 180.405 48.3085 179.744 49.3875 180.086C56.3521 182.294 63.7814 182.628 70.918 181.053L71.1201 181.008C72.5242 180.699 73.7636 181.969 73.4093 183.355L66.8881 208.851C66.7196 209.51 66.277 210.098 65.6224 210.408C61.6363 212.298 55.7808 213.063 43.364 208.949C42.1815 208.558 41.4984 207.345 41.7511 206.145L46.9369 181.507Z" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M69.4193 149.63C70.6874 145.013 81.5241 145.003 86.735 153.544C89.7606 159.011 85.4378 163.868 83.5444 165.436C83.5127 165.462 83.5761 165.409 83.5444 165.436C80.0489 168.33 77.5094 169.096 75.8181 169.969C80.74 168.258 83.479 166.9 88.0928 166.197C94.8636 165.164 100.777 165.264 103.639 167.512C105.177 169.066 104.446 171.669 102.765 172.156C101.085 172.643 98.4734 172.704 91.0829 172.434C88.5173 172.341 83.7953 172.655 79.8544 174.071C83.7418 174.042 98.7341 175.45 98.7691 180.298C98.7729 180.826 98.6394 181.307 98.39 181.745C98.3776 181.767 98.3647 181.789 98.3516 181.811C98.348 181.817 98.3444 181.823 98.3407 181.829L98.3398 181.831C96.5277 184.82 87.8421 181.499 84.1542 180.407C81.4009 179.592 79.6216 179.363 76.754 179.165C79.6097 179.211 95.2355 185.098 93.0706 191.102C93.0074 191.277 92.923 191.451 92.8278 191.608C89.7727 195.096 81.6323 190.311 72.611 181.968C65.5685 183.668 52.4676 182.127 48.8187 180.325C48.8187 180.325 44.7684 176.193 42.6036 173.065C40.7267 170.354 36.6975 165.74 35.2998 161.192C34.6033 158.926 35.28 156.525 36.8715 154.76C39.4574 151.894 44.1965 148.069 49.8904 146.35C57.2902 144.117 62.3357 150.639 54.2941 154.013C46.2526 157.386 44.7321 157.327 46.2639 160.93C47.7956 164.534 56.8934 166.614 61.2719 166.342C74.5389 166.428 80.3126 158.132 75.9384 155.508C70.6029 153.304 68.7261 152.153 69.4193 149.63Z" fill="#EDB6FF" style="fill:#EDB6FF;fill:color(display-p3 0.9294 0.7137 1.0000);fill-opacity:1;"/>
+<path d="M49.407 149.134L50.3554 152.131C50.5723 152.816 51.293 153.217 51.972 152.971C54.174 152.175 56.8655 150.601 55.8712 148.512C54.8802 146.429 52.0609 146.869 50.118 147.586C49.4947 147.816 49.2075 148.504 49.407 149.134Z" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M78.1857 150.568L77.0482 152.614C76.7261 153.193 76.0261 153.459 75.4186 153.188C73.333 152.257 70.7907 150.586 72.055 148.954C73.2545 147.405 75.8346 148.024 77.6512 148.825C78.3219 149.121 78.5406 149.929 78.1857 150.568Z" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M63.1831 196.342C62.5494 200.444 55.9104 202.831 55.6283 202.929C55.5539 202.955 55.4741 202.962 55.396 202.95C55.3179 202.939 55.244 202.908 55.1809 202.86C54.9412 202.684 49.328 198.43 49.9617 194.328C50.1116 193.365 50.6402 192.501 51.4314 191.924C52.2227 191.347 53.2121 191.106 54.1825 191.252C55.4013 191.438 56.3881 192.121 56.9174 193.102C57.7185 192.323 58.866 191.966 60.0849 192.151C61.0549 192.3 61.9259 192.825 62.5067 193.61C63.0876 194.396 63.3308 195.378 63.1831 196.342Z" fill="#B3E54E" style="fill:#B3E54E;fill:color(display-p3 0.7020 0.8980 0.3059);fill-opacity:1;"/>
+<path d="M79.4103 52.8874C95.6353 52.8874 108.788 66.6308 108.788 83.5841C108.788 94.8118 103.019 104.631 94.4095 109.984C92.9106 110.915 91.8895 112.494 91.8895 114.251V117.541C91.8895 120.091 89.8094 122.159 87.2436 122.159H71.577C69.0112 122.159 66.9312 120.091 66.9312 117.541V114.251C66.9312 112.494 65.91 110.915 64.4111 109.984C55.8014 104.631 50.0322 94.8119 50.0322 83.5841C50.0322 66.6308 63.1853 52.8874 79.4103 52.8874Z" fill="#EDB6FF" style="fill:#EDB6FF;fill:color(display-p3 0.9294 0.7137 1.0000);fill-opacity:1;"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M92.3786 81.4111C96.6115 81.4111 100.043 84.8222 100.043 89.0299V90.3452C100.043 92.7159 99.0537 94.9805 97.3108 96.5987L89.7245 103.642C88.203 105.055 87.3393 107.032 87.3392 109.102V121.883C87.3392 123.986 85.6245 125.69 83.5093 125.69C81.3942 125.69 79.6797 123.986 79.6797 121.883V109.251C79.6797 107.1 78.7472 105.054 77.121 103.636L69.0868 96.6281C67.224 95.0034 66.156 92.6595 66.156 90.1961V89.5671C66.156 85.0626 69.8295 81.4111 74.361 81.4111C77.0196 81.4111 79.5137 82.6915 81.0524 84.8467L83.5093 88.2881L86.1282 84.6203C87.5656 82.6072 89.8951 81.4111 92.3786 81.4111ZM92.3786 82.4976C90.2493 82.4976 88.252 83.5233 87.0196 85.2494L84.1794 89.2269L86.3945 92.3295C87.0247 93.2121 87.2124 94.336 86.9083 95.3735C85.9052 98.7959 80.9711 98.7945 80.0531 95.3126C79.7867 94.3021 79.9842 93.2261 80.5924 92.3742L82.8392 89.2269L80.161 85.4757C78.8272 83.6076 76.6654 82.4976 74.361 82.4976C70.4332 82.4976 67.2491 85.6628 67.249 89.5671V90.1961C67.2491 92.3467 68.1815 94.393 69.8077 95.8114L77.842 102.819C79.7047 104.444 80.7727 106.788 80.7727 109.251V121.883C80.7727 123.386 81.9979 124.604 83.5093 124.604C85.0208 124.604 86.2462 123.386 86.2462 121.883V109.102C86.2462 106.731 87.2357 104.467 88.9785 102.848L96.5646 95.8045C98.0861 94.3918 98.9499 92.4148 98.9499 90.3452V89.0299C98.9499 85.4223 96.0078 82.4976 92.3786 82.4976ZM81.4839 93.003C81.0628 93.5927 80.9261 94.3375 81.1105 95.037C81.7384 97.4189 85.1563 97.467 85.8589 95.0696C86.0701 94.3491 85.9391 93.5688 85.5031 92.9582L83.5093 90.1657L81.4839 93.003Z" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M70.5969 61.037V66.6851L72.148 65.1252L72.8202 65.8014L71.3205 67.3102L75.722 67.3216L75.7196 68.2723L71.2521 68.2606L72.8202 69.8374L72.1477 70.5133L70.5969 68.954V74.6195H69.6405V68.9993L68.1343 70.5133L67.4618 69.8374L69.0361 68.2545L64.5151 68.2423L64.5178 67.2916L68.956 67.3038L67.4618 65.8014L68.1341 65.1252L69.6405 66.6401V61.0368L70.5969 61.037Z" fill="#9337C1" style="fill:#9337C1;fill:color(display-p3 0.5765 0.2157 0.7569);fill-opacity:1;"/>
+<path d="M112.188 115.91C112.278 115.771 112.459 115.721 112.608 115.795L127.628 123.231C127.748 123.29 127.819 123.417 127.807 123.55C127.795 123.683 127.701 123.795 127.572 123.832L121.819 125.466L127.108 130.214C127.229 130.323 127.25 130.503 127.158 130.637C127.066 130.771 126.889 130.816 126.744 130.744L114.176 124.513C114.054 124.452 113.983 124.322 113.998 124.187C114.013 124.052 114.112 123.94 114.245 123.908L119.966 122.524L112.257 116.336C112.128 116.233 112.098 116.049 112.188 115.91Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M45.5186 102.696C45.706 102.603 45.934 102.665 46.0473 102.84C46.1605 103.015 46.1227 103.247 45.9598 103.378L35.094 112.055L43.458 112.908C43.6254 112.949 43.7495 113.088 43.7688 113.258C43.788 113.428 43.6985 113.592 43.5445 113.669L27.7267 121.512C27.5431 121.603 27.3201 121.545 27.2044 121.377C27.0887 121.209 27.1157 120.981 27.2679 120.845L32.2276 115.373L26.684 112.811C26.5212 112.765 26.4037 112.624 26.3882 112.457C26.3728 112.29 26.4622 112.13 26.6136 112.055L45.5186 102.696Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M143.65 79.0866C143.819 79.0927 143.967 79.2012 144.023 79.3599C144.078 79.5187 144.03 79.6953 143.901 79.8042L139.236 84.748L146.715 87.3586C146.91 87.4206 147.029 87.6164 146.994 87.817C146.958 88.0177 146.78 88.1617 146.575 88.1541L128.906 87.5053C128.734 87.4989 128.584 87.3864 128.531 87.2238C128.477 87.0612 128.532 86.8829 128.668 86.7773L134.499 82.2356L122.421 79.1268C122.218 79.0746 122.088 78.879 122.118 78.6732C122.148 78.4674 122.33 78.3171 122.539 78.3247L143.65 79.0866Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M9.16999 66.8695C9.34171 66.6412 9.63684 66.5411 9.91339 66.6171L44.4356 76.1134C44.7779 76.2076 44.9942 76.5426 44.9371 76.8907C44.8799 77.2388 44.5674 77.4885 44.2126 77.4698L23.6288 76.7527L30.17 86.6642C30.3346 86.9037 30.3312 87.2199 30.1614 87.4558C29.9916 87.6916 29.6915 87.7971 29.41 87.7201L0.510625 79.7902C0.175287 79.6982 -0.0399786 79.3746 0.00622445 79.0323C0.0526023 78.6899 0.346449 78.4339 0.694407 78.433L15.9129 78.3986L9.13772 67.6496C8.98545 67.408 8.99831 67.098 9.16999 66.8695Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M129.303 26.0551C129.5 25.8415 129.809 25.77 130.081 25.875C130.354 25.9803 130.533 26.2409 130.533 26.531L130.524 39.4369L143.679 31.3182C143.98 31.1328 144.372 31.1966 144.598 31.4673C144.824 31.7381 144.814 32.1326 144.575 32.3915L123.936 54.7101C123.735 54.9273 123.419 54.9967 123.144 54.8841C122.869 54.7714 122.695 54.5005 122.707 54.2056L121.628 43.5525L105.591 53.7877C105.295 53.9938 104.889 53.9456 104.651 53.6757C104.413 53.4058 104.417 53.0009 104.662 52.7364L129.303 26.0551Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M42.2847 35.2159C42.4101 35.1675 42.5524 35.2004 42.6434 35.2988L54.0006 47.5964C54.1131 47.7183 54.1152 47.9048 54.0054 48.0291C53.8955 48.1535 53.7087 48.1757 53.5722 48.0808L45.4447 42.4247L45.6834 48.2733C45.689 48.4092 45.6086 48.5341 45.482 48.586C45.3554 48.638 45.2096 48.6059 45.1169 48.5058L35.6048 38.2193C35.4944 38.0999 35.4897 37.9182 35.5938 37.7934C35.698 37.6686 35.879 37.6393 36.0177 37.7248L42.0809 41.4665L42.0763 35.5183C42.0763 35.3846 42.1591 35.2644 42.2847 35.2159Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M97.2728 1.19424C98.0711 0.87561 98.6562 1.81796 98.0631 2.43534C91.5492 9.21611 86.7022 16.4183 84.0221 25.6317C83.9043 26.0369 84.3486 26.2701 84.6035 25.9323C86.6952 23.1611 90.0571 18.2011 100.717 14.7459C101.11 14.6188 101.414 15.0801 101.145 15.3902C92.7657 25.0561 90.7892 27.9573 88.0687 33.2335C86.9236 35.4541 85.4771 40.9323 87.3296 45.7148C87.6095 46.4374 87.0536 47.2903 86.2766 47.2354C84.6224 47.1184 82.657 47.0176 81.334 46.9974C79.8726 46.975 78.1977 46.8855 76.517 46.9361C75.6707 46.9615 74.8865 46.4371 74.6463 45.63C71.4239 34.799 71.4143 31.2187 73.2211 23.8046C76.1179 11.9183 89.6535 4.2355 97.2728 1.19424Z" fill="#B3E54E" style="fill:#B3E54E;fill:color(display-p3 0.7020 0.8980 0.3059);fill-opacity:1;"/>
+<path d="M99.0327 0.110673C99.9126 -0.197209 100.77 0.16604 101.197 0.844528C101.627 1.52668 101.585 2.46231 100.936 3.1378C95.6385 8.65284 91.4896 14.4156 88.7281 21.3134C89.0692 20.948 89.4496 20.5755 89.8782 20.1995C92.1451 18.2107 95.7914 16.0494 102.43 13.6801L102.46 13.6695C103.935 13.1914 105.021 14.9381 104.056 16.0518C95.6977 25.6933 93.7857 28.5191 91.123 33.6829C90.6154 34.6675 90.0009 36.4672 89.7413 38.5998C89.4824 40.7274 89.587 43.1031 90.4308 45.2816C90.7122 46.0083 90.5653 46.7705 90.1881 47.327C89.8067 47.8896 89.1248 48.329 88.2851 48.2696C86.6414 48.1533 84.6981 48.0541 83.4032 48.0343C81.9227 48.0116 80.6177 47.9394 79.1335 47.9875C77.7968 48.0309 76.5031 47.182 76.1587 45.8022C73.6466 35.7365 73.8584 28.4678 75.2943 23.5067C76.9947 17.6319 81 12.5625 85.4839 8.60137C89.9726 4.63597 95.0216 1.70944 98.9474 0.142452L99.0327 0.110673ZM100.146 2.38901C100.74 1.77163 100.155 0.829314 99.3561 1.14795C91.7369 4.18921 79.5897 12.5898 76.3426 23.8084L76.2793 24.0316C74.9681 28.7552 74.7744 35.7553 77.2175 45.5441C77.4267 46.3824 78.2266 46.933 79.0951 46.9049C80.6133 46.8556 81.9894 46.9292 83.4173 46.9511C84.7403 46.9714 86.7058 47.0721 88.3601 47.1891C89.1127 47.2423 89.6578 46.4435 89.4367 45.7366L89.413 45.6684C87.5606 40.8859 89.007 35.4077 90.152 33.187C92.8725 27.9109 94.849 25.0097 103.229 15.3438C103.497 15.0337 103.193 14.5725 102.801 14.6996C89.6627 19.3889 88.7784 23.1147 86.6868 25.8859C86.4319 26.2236 85.9878 25.9906 86.1056 25.5854C88.7438 16.516 93.4815 9.39524 99.8422 2.70707L100.146 2.38901Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M58.5228 159.834C59.9378 156.346 62.3218 155.723 63.4136 155.877C65.8584 156.432 66.2471 159.386 66.0926 161.469C66.0466 162.088 65.4896 162.549 64.8526 162.564L64.4174 162.574C62.5307 162.618 60.6652 162.156 59.0563 161.259C58.5496 160.976 58.3018 160.379 58.5228 159.834Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M63.3036 153.255C63.8813 153.26 64.3456 153.729 64.3407 154.303C64.3357 154.878 63.8634 155.339 63.2857 155.334C62.708 155.329 62.2434 154.86 62.2483 154.286C62.2533 153.711 62.7258 153.25 63.3036 153.255Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M62.2981 150.687C62.8758 150.692 63.3401 151.161 63.3353 151.736C63.3303 152.31 62.8581 152.772 62.2803 152.767C61.7026 152.762 61.2383 152.292 61.2432 151.718C61.2482 151.144 61.7205 150.682 62.2981 150.687Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M61.55 148.121C62.1277 148.126 62.592 148.595 62.5871 149.17C62.5822 149.744 62.1099 150.206 61.5322 150.201C60.9544 150.196 60.4901 149.726 60.4951 149.152C60.5 148.578 60.9723 148.116 61.55 148.121Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M62.3463 145.567C62.9241 145.572 63.3886 146.042 63.3837 146.616C63.3788 147.19 62.9063 147.652 62.3285 147.647C61.7508 147.642 61.2865 147.172 61.2914 146.598C61.2964 146.024 61.7687 145.562 62.3463 145.567Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M63.9127 143.252C64.4904 143.257 64.9549 143.726 64.95 144.301C64.9451 144.875 64.4726 145.336 63.8948 145.332C63.3171 145.327 62.8528 144.857 62.8577 144.283C62.8627 143.709 63.335 143.247 63.9127 143.252Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M65.2241 140.702C65.8018 140.707 66.2661 141.177 66.2612 141.751C66.2562 142.325 65.7839 142.787 65.2063 142.782C64.6285 142.777 64.164 142.307 64.1689 141.733C64.1738 141.159 64.6464 140.697 65.2241 140.702Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M65.7629 138.146C66.3406 138.151 66.8051 138.62 66.8003 139.195C66.7953 139.769 66.3228 140.231 65.7451 140.226C65.1673 140.221 64.703 139.751 64.7079 139.177C64.7129 138.603 65.1852 138.141 65.7629 138.146Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M64.5002 135.576C65.0779 135.581 65.5422 136.051 65.5373 136.625C65.5324 137.199 65.0601 137.661 64.4824 137.656C63.9046 137.651 63.4401 137.182 63.445 136.607C63.4499 136.033 63.9225 135.572 64.5002 135.576Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M62.463 133.233C63.0407 133.238 63.505 133.707 63.5001 134.282C63.4952 134.856 63.0229 135.318 62.4452 135.313C61.8674 135.308 61.4031 134.838 61.4081 134.264C61.4131 133.69 61.8853 133.228 62.463 133.233Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M82.8262 52.8874C99.8813 52.8874 113.707 66.6308 113.707 83.5841C113.707 94.8297 107.624 104.663 98.5496 110.009L98.406 110.097C96.9358 111.022 95.9435 112.58 95.9435 114.314V117.541C95.9434 119.208 95.0539 120.669 93.7209 121.481C94.4016 121.926 94.8512 122.692 94.8512 123.562C94.8512 124.531 94.2949 125.369 93.4831 125.781C94.2949 126.193 94.851 127.031 94.851 127.999C94.851 128.968 94.2949 129.806 93.4831 130.218C94.2949 130.63 94.851 131.468 94.851 132.437C94.851 133.812 93.7294 134.927 92.3458 134.927H73.0338C71.6503 134.927 70.5287 133.812 70.5287 132.437C70.5287 131.469 71.0847 130.63 71.8963 130.218C71.0847 129.806 70.5287 128.968 70.5287 127.999C70.5287 127.031 71.0847 126.193 71.8963 125.781C71.0848 125.369 70.5287 124.53 70.5287 123.562C70.5287 122.634 71.04 121.825 71.7975 121.397C70.539 120.571 69.7084 119.152 69.7084 117.541V114.314C69.7084 112.58 68.7163 111.022 67.2461 110.096L67.1023 110.009C58.0286 104.662 51.9452 94.8295 51.9452 83.5841C51.9452 66.6308 65.7711 52.8874 82.8262 52.8874ZM82.8262 53.9739C66.3749 53.9739 53.0382 67.2309 53.0382 83.5841C53.0382 94.4301 58.9043 103.915 67.6597 109.074C69.4893 110.152 70.8014 112.085 70.8014 114.314V117.541C70.8015 119.491 72.3923 121.072 74.3543 121.072H91.2978C93.2598 121.072 94.8504 119.491 94.8504 117.541V114.314C94.8504 112.085 96.1628 110.152 97.9924 109.074C106.748 103.915 112.614 94.4303 112.614 83.5841C112.614 67.2309 99.2776 53.9739 82.8262 53.9739Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M61.7173 130.435C62.295 130.44 62.7593 130.909 62.7544 131.484C62.7494 132.058 62.2771 132.519 61.6994 132.514C61.1217 132.51 60.6571 132.04 60.662 131.466C60.667 130.891 61.1395 130.43 61.7173 130.435Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M61.9988 127.877C62.5765 127.882 63.0408 128.351 63.0359 128.926C63.031 129.5 62.5587 129.961 61.9809 129.956C61.4032 129.952 60.9386 129.482 60.9436 128.908C60.9485 128.334 61.421 127.872 61.9988 127.877Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M63.8245 125.331C64.4022 125.336 64.8668 125.805 64.8619 126.379C64.8569 126.954 64.3844 127.415 63.8067 127.41C63.229 127.405 62.7647 126.936 62.7696 126.362C62.7745 125.787 63.2468 125.326 63.8245 125.331Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M66.543 124.225C67.1207 124.23 67.5853 124.7 67.5804 125.274C67.5754 125.848 67.1029 126.31 66.5251 126.305C65.9475 126.3 65.4832 125.831 65.488 125.256C65.493 124.682 65.9653 124.22 66.543 124.225Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+<path d="M69.1786 123.827C69.7564 123.832 70.2209 124.301 70.216 124.876C70.2111 125.45 69.7385 125.912 69.1608 125.907C68.5831 125.902 68.1188 125.432 68.1237 124.858C68.1286 124.284 68.6009 123.822 69.1786 123.827Z" fill="#FBF1FE" style="fill:#FBF1FE;fill:color(display-p3 0.9843 0.9451 0.9961);fill-opacity:1;"/>
+</svg>
=====================================
browser/components/abouttor/jar.mn
=====================================
@@ -9,3 +9,4 @@ browser.jar:
content/browser/abouttor/2728-sparkles.svg (content/2728-sparkles.svg)
content/browser/abouttor/2764-red-heart.svg (content/2764-red-heart.svg)
content/browser/abouttor/yec-heart.svg (content/yec-heart.svg)
+ content/browser/abouttor/yec-2026.svg (content/yec-2026.svg)
=====================================
toolkit/locales/en-US/toolkit/global/tor-browser.ftl
=====================================
@@ -775,6 +775,8 @@ onion-site-saved-keys-dialog-remove-keys-error-message = Unable to remove key
yec-2026-heading = Tor: powered by you
yec-2026-body = Unlike Big Tech, Tor doesn’t sell your data to make money. Instead, 6,490 donors every year keep Tor strong. Join the movement with a donation today!
+yec-2026-image =
+ .alt = Illustration of a light purple hand reaching to turn on a light purple light bulb on a darker purple background. The light bulb vaguely resembles an onion with greens coming out of the top. There are playful bolts coming out of the bulb, and a green heart on the sleeve of the shirt.
## Year end campaign.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8a4083…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8a4083…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.4.0esr-16.0-1] fixup! BB 41369: Improve Firefox language settings for multi-lingual packages
by Pier Angelo Vendrame (@pierov) 28 Sep '26
by Pier Angelo Vendrame (@pierov) 28 Sep '26
28 Sep '26
Pier Angelo Vendrame pushed to branch mullvad-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
a53ac65c by Pier Angelo Vendrame at 2026-09-28T14:18:52+02:00
fixup! BB 41369: Improve Firefox language settings for multi-lingual packages
BB 45360: Move our language setting customization to the new design.
- - - - -
2 changed files:
- browser/components/preferences/config/languages.mjs
- browser/components/preferences/main.js
Changes:
=====================================
browser/components/preferences/config/languages.mjs
=====================================
@@ -56,7 +56,7 @@ export const Multilingual = {
/** @type {LocaleCode[]} */ (await LangPackMatcher.getAvailableLocales()),
code => code,
(code, label) => ({ code, label })
- );
+ ).sort((a, b) => (a.code > b.code ? 1 : -1));
},
/**
@@ -209,6 +209,20 @@ Preferences.addSetting({
* @returns {SettingOptionConfig}
*/
function makeBrowserLanguageOption({ code, label }) {
+ if (code === "ja-JP-macos") {
+ // Mozilla codebases handle Japanese in macOS in different ways, sometimes
+ // they call it ja-JP-mac and sometimes they call it ja-JP-macos.
+ // The former is translated to Japanese when specifying preferNative to
+ // true, the latter is not. Since seeing ja-JP-macos would be confusing
+ // anyway, we treat it as a special case.
+ // See tor-browser#41372 and Bug 1726586.
+ label =
+ Services.intl.getLocaleDisplayNames(undefined, ["ja"], {
+ preferNative: true,
+ })[0] + " (ja)";
+ } else {
+ label += ` (${code})`;
+ }
return {
value: code,
controlAttrs: {
=====================================
browser/components/preferences/main.js
=====================================
@@ -1402,30 +1402,8 @@ var gMainPane = {
available,
{ preferNative: true }
);
- let locales = available.map((code, i) => {
- let name = localeNames[i].replace(/\s*\(.+\)$/g, "");
- if (code === "ja-JP-macos") {
- // Mozilla codebases handle Japanese in macOS in different ways,
- // sometimes they call it ja-JP-mac and sometimes they call it
- // ja-JP-macos. The former is translated to Japanese when specifying
- // preferNative to true, the latter is not. Since seeing ja-JP-macos
- // would be confusing anyway, we treat it as a special case.
- // See tor-browser#41372 and Bug 1726586.
- name =
- Services.intl.getLocaleDisplayNames(undefined, ["ja"], {
- preferNative: true,
- })[0] + " (ja)";
- } else {
- name += ` (${code})`;
- }
- return {
- code,
- name,
- };
- });
- // tor-browser#42335: Sort language codes independently from the locale,
- // so do not use localeCompare.
- locales.sort((a, b) => a.code > b.code);
+ let locales = available.map((code, i) => ({ code, name: localeNames[i] }));
+ locales.sort((a, b) => a.name > b.name);
let fragment = document.createDocumentFragment();
for (let { code, name } of locales) {
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/a53…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/a53…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/tor-browser][tor-browser-153.4.0esr-16.0-1] fixup! BB 41369: Improve Firefox language settings for multi-lingual packages
by Pier Angelo Vendrame (@pierov) 28 Sep '26
by Pier Angelo Vendrame (@pierov) 28 Sep '26
28 Sep '26
Pier Angelo Vendrame pushed to branch tor-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Tor Browser
Commits:
8a4083f1 by Pier Angelo Vendrame at 2026-09-28T14:17:44+02:00
fixup! BB 41369: Improve Firefox language settings for multi-lingual packages
BB 45360: Move our language setting customization to the new design.
- - - - -
2 changed files:
- browser/components/preferences/config/languages.mjs
- browser/components/preferences/main.js
Changes:
=====================================
browser/components/preferences/config/languages.mjs
=====================================
@@ -56,7 +56,7 @@ export const Multilingual = {
/** @type {LocaleCode[]} */ (await LangPackMatcher.getAvailableLocales()),
code => code,
(code, label) => ({ code, label })
- );
+ ).sort((a, b) => (a.code > b.code ? 1 : -1));
},
/**
@@ -209,6 +209,20 @@ Preferences.addSetting({
* @returns {SettingOptionConfig}
*/
function makeBrowserLanguageOption({ code, label }) {
+ if (code === "ja-JP-macos") {
+ // Mozilla codebases handle Japanese in macOS in different ways, sometimes
+ // they call it ja-JP-mac and sometimes they call it ja-JP-macos.
+ // The former is translated to Japanese when specifying preferNative to
+ // true, the latter is not. Since seeing ja-JP-macos would be confusing
+ // anyway, we treat it as a special case.
+ // See tor-browser#41372 and Bug 1726586.
+ label =
+ Services.intl.getLocaleDisplayNames(undefined, ["ja"], {
+ preferNative: true,
+ })[0] + " (ja)";
+ } else {
+ label += ` (${code})`;
+ }
return {
value: code,
controlAttrs: {
=====================================
browser/components/preferences/main.js
=====================================
@@ -1417,30 +1417,8 @@ var gMainPane = {
available,
{ preferNative: true }
);
- let locales = available.map((code, i) => {
- let name = localeNames[i].replace(/\s*\(.+\)$/g, "");
- if (code === "ja-JP-macos") {
- // Mozilla codebases handle Japanese in macOS in different ways,
- // sometimes they call it ja-JP-mac and sometimes they call it
- // ja-JP-macos. The former is translated to Japanese when specifying
- // preferNative to true, the latter is not. Since seeing ja-JP-macos
- // would be confusing anyway, we treat it as a special case.
- // See tor-browser#41372 and Bug 1726586.
- name =
- Services.intl.getLocaleDisplayNames(undefined, ["ja"], {
- preferNative: true,
- })[0] + " (ja)";
- } else {
- name += ` (${code})`;
- }
- return {
- code,
- name,
- };
- });
- // tor-browser#42335: Sort language codes independently from the locale,
- // so do not use localeCompare.
- locales.sort((a, b) => a.code > b.code);
+ let locales = available.map((code, i) => ({ code, name: localeNames[i] }));
+ locales.sort((a, b) => a.name > b.name);
let fragment = document.createDocumentFragment();
for (let { code, name } of locales) {
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8a4083f…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8a4083f…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/mullvad-browser] Pushed new tag mullvad-browser-140.17.0esr-15.0-1-build2
by ma1 (@ma1) 28 Sep '26
by ma1 (@ma1) 28 Sep '26
28 Sep '26
ma1 pushed new tag mullvad-browser-140.17.0esr-15.0-1-build2 at The Tor Project / Applications / Mullvad Browser
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/tree/mullv…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0
[Git][tpo/applications/mullvad-browser][mullvad-browser-140.17.0esr-15.0-1] 7 commits: Bug 2056767: Shut down DocAccessibleParents before we shut down platform accessibility. a=pascalc
by ma1 (@ma1) 28 Sep '26
by ma1 (@ma1) 28 Sep '26
28 Sep '26
ma1 pushed to branch mullvad-browser-140.17.0esr-15.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
02322e29 by James Teh at 2026-09-28T10:43:54+02:00
Bug 2056767: Shut down DocAccessibleParents before we shut down platform accessibility. a=pascalc
Original Revision: https://phabricator.services.mozilla.com/D322228
Differential Revision: https://phabricator.services.mozilla.com/D323108
- - - - -
76943803 by Rob Wu at 2026-09-28T10:43:58+02:00
Bug 2061470 - Don't drop __proto__ from webRequest bodies r=rpl
Differential Revision: https://phabricator.services.mozilla.com/D323631
- - - - -
357553c1 by Marco Bonardo at 2026-09-28T10:44:03+02:00
Bug 2066019. a=pascalc
Original Revision: https://phabricator.services.mozilla.com/D321246
Differential Revision: https://phabricator.services.mozilla.com/D323563
- - - - -
0060fe36 by Tom Schuster at 2026-09-28T10:44:07+02:00
Bug 2066321 - Update nonceable attribute checks for link elements. r=freddyb
Pending PR: https://github.com/w3c/webappsec-csp/pull/810
Differential Revision: https://phabricator.services.mozilla.com/D322966
- - - - -
855edaae by Leo Tenenbaum at 2026-09-28T10:44:12+02:00
Bug 2067172 - a=pascalc
Original Revision: https://phabricator.services.mozilla.com/D321879
Differential Revision: https://phabricator.services.mozilla.com/D322306
- - - - -
ba101997 by Iain Ireland at 2026-09-28T10:44:16+02:00
Bug 2068385: Fix PBL a=pascalc
Original Revision: https://phabricator.services.mozilla.com/D323744
Differential Revision: https://phabricator.services.mozilla.com/D324712
- - - - -
59434ea5 by Iain Ireland at 2026-09-28T10:44:19+02:00
Bug 2068385: Don't support sparse arrays in SpreadMathMinMax a=pascalc
Marking the testcase --slow because it takes 7+ minutes on my laptop in an opt-debug build.
Original Revision: https://phabricator.services.mozilla.com/D323120
Differential Revision: https://phabricator.services.mozilla.com/D324692
- - - - -
14 changed files:
- accessible/base/DocManager.cpp
- accessible/ipc/DocAccessibleParent.cpp
- browser/components/places/content/controller.js
- browser/components/places/tests/browser/browser_toolbar_drop_bookmarklet.js
- browser/components/places/tests/browser/browser_toolbar_drop_multiple_with_bookmarklet.js
- dom/base/nsContentUtils.cpp
- dom/script/ScriptLoader.cpp
- dom/security/nsContentSecurityUtils.cpp
- js/src/jit/BaselineIC.cpp
- js/src/jit/CacheIR.cpp
- js/src/jit/CacheIRWriter.h
- js/src/vm/PortableBaselineInterpret.cpp
- toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html
- toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs
Changes:
=====================================
accessible/base/DocManager.cpp
=====================================
@@ -31,6 +31,10 @@
#include "nsCoreUtils.h"
#include "xpcAccessibleDocument.h"
+#if defined(ANDROID)
+# include "mozilla/Monitor.h"
+#endif
+
using namespace mozilla;
using namespace mozilla::a11y;
using namespace mozilla::dom;
@@ -195,6 +199,18 @@ void DocManager::Shutdown() {
}
ClearDocCache();
+ // Even though remote documents aren't strictly managed by this DocManager
+ // instance, destroy them now because they might depend on platform specific
+ // state which is about to be torn down by PlatformShutdown. Iterate the array
+ // backwards because destroying the document removes it from this array.
+ if (sRemoteDocuments) {
+#if defined(ANDROID)
+ MonitorAutoLock mal(nsAccessibilityService::GetAndroidMonitor());
+#endif
+ for (size_t i = sRemoteDocuments->Length(); i-- > 0;) {
+ (*sRemoteDocuments)[i]->Destroy();
+ }
+ }
}
////////////////////////////////////////////////////////////////////////////////
=====================================
accessible/ipc/DocAccessibleParent.cpp
=====================================
@@ -1241,15 +1241,14 @@ void DocAccessibleParent::MaybeInitWindowEmulation() {
isActive = browserParent->GetDocShellIsActive();
}
- // onCreate is guaranteed to be called synchronously by
- // nsWinUtils::CreateNativeWindow, so this reference isn't really necessary.
- // However, static analysis complains without it.
RefPtr<DocAccessibleParent> thisRef = this;
- nsWinUtils::NativeWindowCreateProc onCreate([thisRef](HWND aHwnd) -> void {
- ::SetPropW(aHwnd, kPropNameDocAccParent,
- reinterpret_cast<HANDLE>(thisRef.get()));
- thisRef->SetEmulatedWindowHandle(aHwnd);
- });
+ nsWinUtils::NativeWindowCreateProc onCreate(
+ [thisRef](HWND aHwnd) mutable -> void {
+ thisRef->SetEmulatedWindowHandle(aHwnd);
+ HANDLE val;
+ thisRef.forget(&val); // Release in SetEmulatedWindowHandle.
+ ::SetPropW(aHwnd, kPropNameDocAccParent, val);
+ });
HWND parentWnd = reinterpret_cast<HWND>(rootDocument->GetNativeWindow());
DebugOnly<HWND> hWnd = nsWinUtils::CreateNativeWindow(
@@ -1261,6 +1260,7 @@ void DocAccessibleParent::MaybeInitWindowEmulation() {
void DocAccessibleParent::SetEmulatedWindowHandle(HWND aWindowHandle) {
if (!aWindowHandle && mEmulatedWindowHandle && IsTopLevel()) {
::DestroyWindow(mEmulatedWindowHandle);
+ Release(); // AddRef in MaybeInitWindowEmulation.
}
mEmulatedWindowHandle = aWindowHandle;
}
=====================================
browser/components/places/content/controller.js
=====================================
@@ -1609,7 +1609,7 @@ var PlacesControllerDragHelper = {
if (
!flavor.startsWith("text/x-moz-place") &&
(validNodes.length > 1 || dropCount > 1) &&
- validNodes.some(n => n.uri?.startsWith("javascript:"))
+ validNodes.some(n => URL.parse(n.uri)?.protocol === "javascript:")
) {
return false;
}
@@ -1686,18 +1686,14 @@ var PlacesControllerDragHelper = {
if (
externalDrag &&
(nodes.length > 1 || dropCount > 1) &&
- nodes.some(n => n.uri?.startsWith("javascript:"))
+ nodes.some(n => URL.parse(n.uri)?.protocol === "javascript:")
) {
throw new Error("Javascript bookmarklet passed with uris");
}
// If a single javascript url is being dropped from the urlbar or an external source,
// show the bookmark dialog as a speedbump protection against malicious cases.
- if (
- nodes.length == 1 &&
- externalDrag &&
- nodes[0].uri?.startsWith("javascript")
- ) {
+ if (nodes.length == 1 && externalDrag) {
let uri;
try {
uri = Services.io.newURI(nodes[0].uri);
@@ -1705,7 +1701,7 @@ var PlacesControllerDragHelper = {
// Invalid uri, we skip this code and the entry will be discarded later.
}
- if (uri) {
+ if (uri?.scheme === "javascript") {
let bookmarkGuid = await PlacesUIUtils.showBookmarkDialog(
{
action: "add",
=====================================
browser/components/places/tests/browser/browser_toolbar_drop_bookmarklet.js
=====================================
@@ -9,6 +9,7 @@ const sandbox = sinon.createSandbox();
const URL1 = "https://example.com/1/";
const URL2 = "https://example.com/2/";
const BOOKMARKLET_URL = `javascript: (() => {alert('Hello, World!');})();`;
+const BOOKMARKLET_URL_MIXED_CASE = `JavaScript: (() => {})();`;
let bookmarks;
registerCleanupFunction(async function () {
@@ -34,12 +35,18 @@ add_task(async function test() {
Assert.ok(placesItems, "PlacesToolbarItems should not be null");
/**
- * Simulates a drop of a bookmarklet URI onto the bookmarks bar.
+ * Simulates a drop of a bookmarklet URI onto the bookmarks bar and verifies
+ * the speedbump dialog appears.
*
* @param {string} aEffect
* The effect to use for the drop operation: move, copy, or link.
+ * @param {string} aBookmarkletUrl
+ * The bookmarklet URL to be dropped onto the bookmarks bar.
*/
- let simulateDragDrop = async function (aEffect) {
+ let simulateBookmarkletDragDrop = async function (
+ aEffect,
+ aBookmarkletUrl = BOOKMARKLET_URL
+ ) {
info("Simulates drag/drop of a new javascript:URL to the bookmarks");
await withBookmarksDialog(
true,
@@ -47,7 +54,7 @@ add_task(async function test() {
EventUtils.synthesizeDrop(
toolbar,
placesItems,
- [[{ type: "text/x-moz-url", data: BOOKMARKLET_URL }]],
+ [[{ type: "text/x-moz-url", data: aBookmarkletUrl }]],
aEffect,
window
);
@@ -61,11 +68,21 @@ add_task(async function test() {
Assert.equal(
location,
- BOOKMARKLET_URL,
+ aBookmarkletUrl.trim().replace(/^javascript/i, "javascript"),
"Should have opened the ShowBookmarksDialog with the correct bookmarklet url to be bookmarked"
);
}
);
+ };
+
+ for (let effect of ["copy", "link"]) {
+ for (let bookmarkletUrl of [
+ BOOKMARKLET_URL,
+ BOOKMARKLET_URL_MIXED_CASE,
+ ` javascript: (() => {})();`,
+ ]) {
+ await simulateBookmarkletDragDrop(effect, bookmarkletUrl);
+ }
info("Simulates drag/drop of a new URL to the bookmarks");
let spy = sandbox
@@ -81,18 +98,13 @@ add_task(async function test() {
toolbar,
placesItems,
[[{ type: "text/x-moz-url", data: URL1 }]],
- aEffect,
+ effect,
window
);
await promise;
Assert.ok(spy.notCalled, "ShowBookmarksDialog on drop not called for url");
sandbox.restore();
- };
-
- let effects = ["copy", "link"];
- for (let effect of effects) {
- await simulateDragDrop(effect);
}
info("Move of existing bookmark / bookmarklet on toolbar");
=====================================
browser/components/places/tests/browser/browser_toolbar_drop_multiple_with_bookmarklet.js
=====================================
@@ -18,12 +18,12 @@ add_task(async function test() {
// matter because we will set its data, effect, and mimeType manually.
let placesItems = document.getElementById("PlacesToolbarItems");
Assert.ok(placesItems, "PlacesToolbarItems should not be null");
- let simulateDragDrop = async function (aEffect, aMimeType) {
- let urls = [
- "https://example.com/1/",
- `javascript: (() => {alert('Hello, World!');})();`,
- "https://example.com/2/",
- ];
+ let simulateDragDrop = async function (
+ aEffect,
+ aMimeType,
+ aJsUrl = `javascript: (() => {alert('Hello, World!');})();`
+ ) {
+ let urls = ["https://example.com/1/", aJsUrl, "https://example.com/2/"];
let data = urls.map(spec => spec + "\n" + spec).join("\n");
@@ -43,8 +43,13 @@ add_task(async function test() {
// Simulate a bookmark drop for all of the mime types and effects.
let mimeType = ["text/x-moz-url"];
- let effects = ["copy", "link"];
- for (let effect of effects) {
- await simulateDragDrop(effect, mimeType);
+ for (let effect of ["copy", "link"]) {
+ for (let jsUrl of [
+ `javascript: (() => {alert('Hello, World!');})();`,
+ `JavaScript: (() => {})();`,
+ ` javascript: (() => {})();`,
+ ]) {
+ await simulateDragDrop(effect, mimeType, jsUrl);
+ }
}
});
=====================================
dom/base/nsContentUtils.cpp
=====================================
@@ -5635,9 +5635,10 @@ void nsContentUtils::RequestFrameFocus(Element& aFrameElement, bool aCanRaise,
RefPtr<Element> target = &aFrameElement;
bool defaultAction = true;
if (aCanRaise) {
- DispatchEventOnlyToChrome(target->OwnerDoc(), target,
- u"framefocusrequested"_ns, CanBubble::eYes,
- Cancelable::eYes, &defaultAction);
+ RefPtr<Document> doc = target->OwnerDoc();
+ DispatchEventOnlyToChrome(doc, target, u"framefocusrequested"_ns,
+ CanBubble::eYes, Cancelable::eYes,
+ &defaultAction);
}
if (!defaultAction) {
return;
=====================================
dom/script/ScriptLoader.cpp
=====================================
@@ -240,27 +240,27 @@ ScriptLoader::~ScriptLoader() {
FireScriptAvailable(NS_ERROR_ABORT, mParserBlockingRequest);
}
- for (ScriptLoadRequest* req = mXSLTRequests.getFirst(); req;
+ for (RefPtr<ScriptLoadRequest> req = mXSLTRequests.getFirst(); req;
req = req->getNext()) {
FireScriptAvailable(NS_ERROR_ABORT, req);
}
- for (ScriptLoadRequest* req = mDeferRequests.getFirst(); req;
+ for (RefPtr<ScriptLoadRequest> req = mDeferRequests.getFirst(); req;
req = req->getNext()) {
FireScriptAvailable(NS_ERROR_ABORT, req);
}
- for (ScriptLoadRequest* req = mLoadingAsyncRequests.getFirst(); req;
+ for (RefPtr<ScriptLoadRequest> req = mLoadingAsyncRequests.getFirst(); req;
req = req->getNext()) {
FireScriptAvailable(NS_ERROR_ABORT, req);
}
- for (ScriptLoadRequest* req = mLoadedAsyncRequests.getFirst(); req;
+ for (RefPtr<ScriptLoadRequest> req = mLoadedAsyncRequests.getFirst(); req;
req = req->getNext()) {
FireScriptAvailable(NS_ERROR_ABORT, req);
}
- for (ScriptLoadRequest* req =
+ for (RefPtr<ScriptLoadRequest> req =
mNonAsyncExternalScriptInsertedRequests.getFirst();
req; req = req->getNext()) {
FireScriptAvailable(NS_ERROR_ABORT, req);
=====================================
dom/security/nsContentSecurityUtils.cpp
=====================================
@@ -1176,8 +1176,9 @@ nsString nsContentSecurityUtils::GetIsElementNonceableNonce(
// element’s attribute list:
if (nsCOMPtr<nsIScriptElement> script =
do_QueryInterface(const_cast<Element*>(&aElement))) {
- auto containsScriptOrStyle = [](const nsAString& aStr) {
- return aStr.LowerCaseFindASCII("<script") != kNotFound ||
+ auto containsLinkScriptOrStyle = [](const nsAString& aStr) {
+ return aStr.LowerCaseFindASCII("<link") != kNotFound ||
+ aStr.LowerCaseFindASCII("<script") != kNotFound ||
aStr.LowerCaseFindASCII("<style") != kNotFound;
};
@@ -1185,21 +1186,21 @@ nsString nsContentSecurityUtils::GetIsElementNonceableNonce(
uint32_t i = 0;
while (BorrowedAttrInfo info = aElement.GetAttrInfoAt(i++)) {
// Step 2.1. If attribute’s name contains an ASCII case-insensitive match
- // for "<script" or "<style", return "Not Nonceable".
+ // for "<link", <script" or "<style", return "Not Nonceable".
const nsAttrName* name = info.mName;
if (nsAtom* prefix = name->GetPrefix()) {
- if (containsScriptOrStyle(nsDependentAtomString(prefix))) {
+ if (containsLinkScriptOrStyle(nsDependentAtomString(prefix))) {
return EmptyString();
}
}
- if (containsScriptOrStyle(nsDependentAtomString(name->LocalName()))) {
+ if (containsLinkScriptOrStyle(nsDependentAtomString(name->LocalName()))) {
return EmptyString();
}
// Step 2.2. If attribute’s value contains an ASCII case-insensitive match
- // for "<script" or "<style", return "Not Nonceable".
+ // for "<link", "<script" or "<style", return "Not Nonceable".
info.mValue->ToString(value);
- if (containsScriptOrStyle(value)) {
+ if (containsLinkScriptOrStyle(value)) {
return EmptyString();
}
}
=====================================
js/src/jit/BaselineIC.cpp
=====================================
@@ -1735,10 +1735,15 @@ bool DoSpreadCallFallback(JSContext* cx, BaselineFrame* frame,
// Transition stub state to megamorphic or generic if warranted.
MaybeTransition(cx, frame, stub);
+ // The array is required to be packed, but may have indexed properties
+ // if its length exceeds MAX_DENSE_ELEMENTS_COUNT. Don't optimize in
+ // that case.
+ bool isIndexed = arr.toObject().as<NativeObject>().isIndexed();
+
// Try attaching a call stub.
bool handled = false;
if (op != JSOp::SpreadEval && op != JSOp::StrictSpreadEval &&
- stub->state().canAttachStub()) {
+ stub->state().canAttachStub() && !isIndexed) {
// Try CacheIR first:
Rooted<ArrayObject*> aobj(cx, &arr.toObject().as<ArrayObject>());
MOZ_ASSERT(IsPackedArray(aobj));
=====================================
js/src/jit/CacheIR.cpp
=====================================
@@ -6431,7 +6431,9 @@ ObjOperandId InlinableNativeIRGenerator::emitLoadArgsArray() {
MOZ_ASSERT(!hasBoundArguments());
if (flags_.getArgFormat() == CallFlags::Spread) {
- return writer.loadSpreadArgs();
+ ObjOperandId result = writer.loadSpreadArgs();
+ writer.guardArrayIsPacked(result);
+ return result;
}
MOZ_ASSERT(flags_.getArgFormat() == CallFlags::FunApplyArray);
=====================================
js/src/jit/CacheIRWriter.h
=====================================
@@ -523,7 +523,13 @@ class MOZ_RAII CacheIRWriter : public JS::CustomAutoRooter {
ArgumentKind kind = ArgumentKind::Arg0;
uint32_t argc = 1;
CallFlags flags(CallFlags::Spread);
- return ObjOperandId(loadArgumentFixedSlot(kind, argc, flags).id());
+ ValOperandId argId = loadArgumentFixedSlot(kind, argc, flags);
+#ifdef ENABLE_PORTABLE_BASELINE_INTERP
+ // PBL doesn't support implicit unboxing of objects.
+ return guardToObject(argId);
+#else
+ return ObjOperandId(argId.id());
+#endif
}
void callScriptedFunction(ObjOperandId callee, Int32OperandId argc,
=====================================
js/src/vm/PortableBaselineInterpret.cpp
=====================================
@@ -3915,11 +3915,8 @@ uint64_t ICInterpretOps(uint64_t arg0, uint64_t arg1, ICStub* stub,
CACHEOP_CASE(Int32MinMaxArrayResult) {
ObjOperandId arrayId = cacheIRReader.objOperandId();
bool isMax = cacheIRReader.readBool();
- // ICs that use this opcode depend on implicit unboxing due to
- // type-overload on ObjOperandId when a value is loaded
- // directly from an argument slot. We explicitly unbox here.
NativeObject* nobj = reinterpret_cast<NativeObject*>(
- &READ_VALUE_REG(arrayId.id()).toObject());
+ READ_REG(arrayId.id()));
uint32_t len = nobj->getDenseInitializedLength();
if (len == 0) {
FAIL_IC();
@@ -3948,11 +3945,8 @@ uint64_t ICInterpretOps(uint64_t arg0, uint64_t arg1, ICStub* stub,
CACHEOP_CASE(NumberMinMaxArrayResult) {
ObjOperandId arrayId = cacheIRReader.objOperandId();
bool isMax = cacheIRReader.readBool();
- // ICs that use this opcode depend on implicit unboxing due to
- // type-overload on ObjOperandId when a value is loaded
- // directly from an argument slot. We explicitly unbox here.
NativeObject* nobj = reinterpret_cast<NativeObject*>(
- &READ_VALUE_REG(arrayId.id()).toObject());
+ READ_REG(arrayId.id()));
uint32_t len = nobj->getDenseInitializedLength();
if (len == 0) {
FAIL_IC();
=====================================
toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html
=====================================
@@ -27,6 +27,7 @@
enctype="multipart/form-data"
>
<input type="text" name="textInput2" value="value2">
+<input type="text" name="__proto__" value="regression test for bug 2061470">
<input type="file" name="testFile">
<input type="file" name="emptyFile">
</form>
@@ -161,11 +162,19 @@ add_task(async function test_xhr_forms() {
}
let action = new URL(form.action);
let formData = new FormData(form);
- let webRequestFD = {};
let updateActionURL = () => {
+ let webRequestFD = {};
for (let name of formData.keys()) {
- webRequestFD[name] = name in uploads ? [uploads[name].fileName] : formData.getAll(name);
+ if (Object.hasOwn(webRequestFD, name)) {
+ // Ignore duplicate keys; formData.getAll already read all values.
+ continue;
+ }
+ const value = Object.hasOwn(uploads, name) ? [uploads[name].fileName] : formData.getAll(name);
+ // Cannot use webRequestFD[name] = value, because for "__proto__" as
+ // name, that would trigger the Object.prototype.__proto__ setter
+ // instead of defining a data property.
+ Object.defineProperty(webRequestFD, name, { value, enumerable: true });
}
action.searchParams.set("upload", JSON.stringify(webRequestFD));
action.searchParams.set("enctype", form.enctype);
=====================================
toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs
=====================================
@@ -117,22 +117,6 @@ class Headers extends Map {
}
}
-/**
- * Creates a new Object with a corresponding property for every
- * key-value pair in the given Map.
- *
- * @param {Map} map
- * The map to convert.
- * @returns {object}
- */
-function mapToObject(map) {
- let result = {};
- for (let [key, value] of map) {
- result[key] = value;
- }
- return result;
-}
-
/**
* Rewinds the given seekable input stream to its beginning, and catches
* any resulting errors.
@@ -446,7 +430,7 @@ function createFormData(stream, channel, lenient) {
try {
let formData = parseFormData(stream, channel, lenient);
if (formData) {
- return mapToObject(formData);
+ return Object.fromEntries(formData);
}
} catch (e) {
Cu.reportError(e);
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/61…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/61…
You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1
0