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

[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] 11 commits: Bug 1961829 - Only color HTTP(S) URIs and fallback to coloring the host in...
by ma1 (@ma1) 24 Jul '25
by ma1 (@ma1) 24 Jul '25
24 Jul '25
ma1 pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
421e0a1f by Michel Le Bihan at 2025-07-24T08:15:34+02:00
Bug 1961829 - Only color HTTP(S) URIs and fallback to coloring the host in Android toolbar URLRenderer. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D248132
- - - - -
116d90bb by Michel Le Bihan at 2025-07-24T08:15:36+02:00
Bug 1961757 - Set text direction in Android toolbar instead of adding directional marks. r=tthibaud,android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D246181
- - - - -
52e6b98a by Michel Le Bihan at 2025-07-24T08:15:37+02:00
Bug 1812898 - Part 1: Add domain alignment in Android toolbar component. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D244508
- - - - -
84b3a932 by Michel Le Bihan at 2025-07-24T08:15:39+02:00
Bug 1812898 - Part 2: Enable domain highlighting in Fenix toolbar. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D244509
- - - - -
f0723224 by mimi89999 at 2025-07-24T08:15:41+02:00
Bug 1964251 - Replace logic of RegistrableDomain renderStyle in Android toolbar component. r=android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D251501
- - - - -
52cd8fb2 by Michel Le Bihan at 2025-07-24T08:15:42+02:00
Bug 1969937 - Add handling of blob URIs in Android toolbar URLRenderer. r=petru,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D252879
- - - - -
aeb2a384 by Cathy Lu at 2025-07-24T08:15:44+02:00
Bug 1791322 - iframe sandbox wpt tests modified with delay r=nika
Differential Revision: https://phabricator.services.mozilla.com/D253052
- - - - -
b2e55448 by Cathy Lu at 2025-07-24T08:15:45+02:00
Bug 1791322 - GeckoView should call classifyDownloads to sandbox downloads r=geckoview-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D249683
- - - - -
a6c81f5b by Andreas Pehrson at 2025-07-24T08:15:47+02:00
Bug 1971116 - For global mute events, iterate on copies of containers. r=dbaker
Mute/unmute events are fired synchronously to content, which if it stops an
(event target) track in the event handler, may call back into and mutate the
containers we're iterating over.
Differential Revision: https://phabricator.services.mozilla.com/D254352
- - - - -
1684fbd9 by Tom Schuster at 2025-07-24T08:15:48+02:00
Bug 1971704 - Cleanup nsContentSecurityUtils::ClassifyDownload. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D253491
- - - - -
22375264 by Pier Angelo Vendrame at 2025-07-24T08:15:50+02:00
Bug 1972282 - Check for spoof English in xsl:sort. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D254784
- - - - -
20 changed files:
- dom/media/MediaManager.cpp
- dom/security/nsContentSecurityUtils.cpp
- dom/security/nsContentSecurityUtils.h
- dom/xslt/xpath/txXPathNode.h
- dom/xslt/xslt/txNodeSorter.cpp
- mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/OriginView.kt
- + mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/OriginViewTest.kt
- mobile/android/android-components/components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
- mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarFeature.kt
- mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/internal/URLRenderer.kt
- mobile/android/android-components/components/feature/toolbar/src/test/java/mozilla/components/feature/toolbar/internal/URLRendererTest.kt
- mobile/android/android-components/components/support/utils/src/main/java/mozilla/components/support/ktx/util/URLStringUtils.kt
- mobile/android/android-components/components/support/utils/src/test/java/mozilla/components/support/utils/URLStringUtilsTest.kt
- mobile/android/components/geckoview/GeckoViewStreamListener.cpp
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.tentative.html.ini
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html.ini
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_block_downloads.tentative.html.ini
- testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js
- uriloader/exthandler/nsExternalHelperAppService.cpp
Changes:
=====================================
dom/media/MediaManager.cpp
=====================================
@@ -3568,7 +3568,9 @@ void MediaManager::OnCameraMute(bool aMute) {
mCamerasMuted = aMute;
// This is safe since we're on main-thread, and the windowlist can only
// be added to from the main-thread
- for (const auto& window : mActiveWindows.Values()) {
+ for (const auto& window :
+ ToTArray<AutoTArray<RefPtr<GetUserMediaWindowListener>, 2>>(
+ mActiveWindows.Values())) {
window->MuteOrUnmuteCameras(aMute);
}
}
@@ -3579,7 +3581,9 @@ void MediaManager::OnMicrophoneMute(bool aMute) {
mMicrophonesMuted = aMute;
// This is safe since we're on main-thread, and the windowlist can only
// be added to from the main-thread
- for (const auto& window : mActiveWindows.Values()) {
+ for (const auto& window :
+ ToTArray<AutoTArray<RefPtr<GetUserMediaWindowListener>, 2>>(
+ mActiveWindows.Values())) {
window->MuteOrUnmuteMicrophones(aMute);
}
}
@@ -4767,7 +4771,7 @@ void GetUserMediaWindowListener::MuteOrUnmuteCameras(bool aMute) {
}
mCamerasAreMuted = aMute;
- for (auto& l : mActiveListeners) {
+ for (auto& l : mActiveListeners.Clone()) {
if (l->GetDevice()->Kind() == MediaDeviceKind::Videoinput) {
l->MuteOrUnmuteCamera(aMute);
}
@@ -4782,7 +4786,7 @@ void GetUserMediaWindowListener::MuteOrUnmuteMicrophones(bool aMute) {
}
mMicrophonesAreMuted = aMute;
- for (auto& l : mActiveListeners) {
+ for (auto& l : mActiveListeners.Clone()) {
if (l->GetDevice()->Kind() == MediaDeviceKind::Audioinput) {
l->MuteOrUnmuteMicrophone(aMute);
}
=====================================
dom/security/nsContentSecurityUtils.cpp
=====================================
@@ -2209,11 +2209,17 @@ void nsContentSecurityUtils::LogMessageToConsole(nsIHttpChannel* aChannel,
}
/* static */
-long nsContentSecurityUtils::ClassifyDownload(
- nsIChannel* aChannel, const nsAutoCString& aMimeTypeGuess) {
+long nsContentSecurityUtils::ClassifyDownload(nsIChannel* aChannel) {
MOZ_ASSERT(aChannel, "IsDownloadAllowed without channel?");
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
+ if ((loadInfo->GetTriggeringSandboxFlags() & SANDBOXED_ALLOW_DOWNLOADS) ||
+ (loadInfo->GetSandboxFlags() & SANDBOXED_ALLOW_DOWNLOADS)) {
+ if (nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel)) {
+ LogMessageToConsole(httpChannel, "IframeSandboxBlockedDownload");
+ }
+ return nsITransfer::DOWNLOAD_FORBIDDEN;
+ }
nsCOMPtr<nsIURI> contentLocation;
aChannel->GetURI(getter_AddRefs(contentLocation));
@@ -2246,27 +2252,11 @@ long nsContentSecurityUtils::ClassifyDownload(
if (StaticPrefs::dom_block_download_insecure() &&
decission != nsIContentPolicy::ACCEPT) {
- nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
- if (httpChannel) {
+ if (nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel)) {
LogMessageToConsole(httpChannel, "MixedContentBlockedDownload");
}
return nsITransfer::DOWNLOAD_POTENTIALLY_UNSAFE;
}
- if (loadInfo->TriggeringPrincipal()->IsSystemPrincipal()) {
- return nsITransfer::DOWNLOAD_ACCEPTABLE;
- }
-
- uint32_t triggeringFlags = loadInfo->GetTriggeringSandboxFlags();
- uint32_t currentflags = loadInfo->GetSandboxFlags();
-
- if ((triggeringFlags & SANDBOXED_ALLOW_DOWNLOADS) ||
- (currentflags & SANDBOXED_ALLOW_DOWNLOADS)) {
- nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
- if (httpChannel) {
- LogMessageToConsole(httpChannel, "IframeSandboxBlockedDownload");
- }
- return nsITransfer::DOWNLOAD_FORBIDDEN;
- }
return nsITransfer::DOWNLOAD_ACCEPTABLE;
}
=====================================
dom/security/nsContentSecurityUtils.h
=====================================
@@ -74,8 +74,7 @@ class nsContentSecurityUtils {
const mozilla::dom::Element& aElement);
// Helper function to Check if a Download is allowed;
- static long ClassifyDownload(nsIChannel* aChannel,
- const nsAutoCString& aMimeTypeGuess);
+ static long ClassifyDownload(nsIChannel* aChannel);
// Public only for testing
static FilenameTypeAndDetails FilenameToFilenameType(
=====================================
dom/xslt/xpath/txXPathNode.h
=====================================
@@ -66,6 +66,8 @@ class txXPathNode {
bool operator!=(const txXPathNode& aNode) const { return !(*this == aNode); }
~txXPathNode() { MOZ_COUNT_DTOR(txXPathNode); }
+ mozilla::dom::Document* OwnerDoc() const { return mNode->OwnerDoc(); }
+
private:
friend class txXPathNativeNode;
friend class txXPathNodeUtils;
=====================================
dom/xslt/xslt/txNodeSorter.cpp
=====================================
@@ -13,10 +13,13 @@
#include "mozilla/CheckedInt.h"
#include "mozilla/UniquePtrExtensions.h"
+#include "nsRFPService.h"
using mozilla::CheckedUint32;
using mozilla::MakeUnique;
using mozilla::MakeUniqueFallible;
+using mozilla::nsRFPService;
+using mozilla::RFPTarget;
using mozilla::UniquePtr;
/*
@@ -74,6 +77,10 @@ nsresult txNodeSorter::addSortElement(Expr* aSelectExpr, Expr* aLangExpr,
if (aLangExpr) {
rv = aLangExpr->evaluateToString(aContext, lang);
NS_ENSURE_SUCCESS(rv, rv);
+ } else if (aContext->getContextNode()
+ .OwnerDoc()
+ ->ShouldResistFingerprinting(RFPTarget::JSLocale)) {
+ CopyUTF8toUTF16(nsRFPService::GetSpoofedJSLocale(), lang);
}
// Case-order
=====================================
mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/OriginView.kt
=====================================
@@ -7,6 +7,7 @@ package mozilla.components.browser.toolbar.display
import android.animation.LayoutTransition
import android.content.Context
import android.graphics.Typeface
+import android.text.Spanned
import android.util.AttributeSet
import android.util.TypedValue
import android.view.Gravity
@@ -17,6 +18,7 @@ import androidx.annotation.VisibleForTesting
import androidx.core.view.isVisible
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.browser.toolbar.R
+import mozilla.components.concept.toolbar.Toolbar
/**
* View displaying the URL and optionally the title of a website.
@@ -48,6 +50,9 @@ internal class OriginView @JvmOverloads constructor(
isClickable = true
isFocusable = true
+ textDirection = View.TEXT_DIRECTION_LTR
+ layoutDirection = View.LAYOUT_DIRECTION_LTR
+
setOnClickListener {
if (onUrlClicked()) {
toolbar.editMode()
@@ -134,9 +139,50 @@ internal class OriginView @JvmOverloads constructor(
titleView.setOnLongClickListener(handler)
}
+ /**
+ * Scrolls the URL view to ensure the registrable domain is visible.
+ */
+ @VisibleForTesting
+ internal fun scrollToShowRegistrableDomain() {
+ val text = urlView.text
+
+ val spans = (text as? Spanned)?.getSpans(
+ 0,
+ text.length,
+ Toolbar.RegistrableDomainColorSpan::class.java,
+ )
+
+ if (spans?.size == 1) {
+ val registrableDomainSpan = (urlView.text as? Spanned)?.getSpans(
+ 0,
+ text.length,
+ Toolbar.RegistrableDomainColorSpan::class.java,
+ )?.getOrNull(0)
+
+ val valueUntilRegistrableDomainEnd = text.subSequence(0, text.getSpanEnd(registrableDomainSpan))
+
+ val urlViewWidth = urlView.width
+ val valueWidth = measureUrlTextWidh(valueUntilRegistrableDomainEnd.toString())
+
+ if (valueWidth > urlViewWidth) {
+ urlView.scrollTo((valueWidth - urlViewWidth).toInt(), 0)
+ return
+ }
+ }
+
+ urlView.scrollTo(0, 0)
+ }
+
+ @VisibleForTesting
+ internal fun measureUrlTextWidh(text: String) = urlView.paint.measureText(text)
+
internal var url: CharSequence
get() = urlView.text
- set(value) { urlView.text = value }
+ set(value) {
+ urlView.text = value
+
+ scrollToShowRegistrableDomain()
+ }
/**
* Sets the colour of the text to be displayed when the URL of the toolbar is empty.
=====================================
mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/OriginViewTest.kt
=====================================
@@ -0,0 +1,109 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar.display
+
+import android.graphics.Color
+import android.text.SpannableStringBuilder
+import android.text.SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE
+import android.text.style.ForegroundColorSpan
+import android.view.View
+import androidx.annotation.ColorInt
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.test.any
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+
+@RunWith(AndroidJUnit4::class)
+class OriginViewTest {
+
+ private fun SpannableStringBuilder.applyUrlColors(
+ @ColorInt urlColor: Int,
+ @ColorInt registrableDomainColor: Int,
+ registrableDomainOrHostSpan: Pair<Int, Int>,
+ ): SpannableStringBuilder = apply {
+ setSpan(
+ ForegroundColorSpan(urlColor),
+ 0,
+ length,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
+
+ val (start, end) = registrableDomainOrHostSpan
+ setSpan(
+ Toolbar.RegistrableDomainColorSpan(registrableDomainColor),
+ start,
+ end,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain scrolls when domain exceeds width`() {
+ val view = spy(OriginView(testContext))
+ val url = "https://www.really-long-example-domain.com/"
+ val spannedUrl = SpannableStringBuilder(url).apply {
+ applyUrlColors(
+ urlColor = Color.GREEN,
+ registrableDomainColor = Color.RED,
+ registrableDomainOrHostSpan = 8 to 42,
+ )
+ }
+
+ // Long domain wouldn't fit in the view
+ doReturn(500f).`when`(view).measureUrlTextWidh(any())
+ view.urlView.layout(0, 0, 200, 100)
+
+ view.url = spannedUrl
+
+ assertEquals(300, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain does not scroll when domain fits in view`() {
+ val view = spy(OriginView(testContext))
+ val url = "https://mozilla.org/"
+ val spannedUrl = SpannableStringBuilder(url).apply {
+ applyUrlColors(
+ urlColor = Color.GREEN,
+ registrableDomainColor = Color.RED,
+ registrableDomainOrHostSpan = 8 to 19,
+ )
+ }
+
+ doReturn(50f).`when`(view).measureUrlTextWidh(any())
+ view.urlView.layout(0, 0, 200, 100)
+
+ view.url = spannedUrl
+
+ assertEquals(0, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain does not scroll when no span exists`() {
+ val view = OriginView(testContext)
+
+ val spanned = SpannableStringBuilder("nospan.com") // no span set
+
+ view.measure(0, 0)
+ view.layout(0, 0, 500, 100)
+
+ view.url = spanned
+
+ assertEquals(0, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `URL text direction is always LTR`() {
+ val originView = OriginView(testContext)
+ originView.url = "ختار.ار/www.mozilla.org/1"
+ assertEquals(View.TEXT_DIRECTION_LTR, originView.urlView.textDirection)
+ assertEquals(View.LAYOUT_DIRECTION_LTR, originView.urlView.layoutDirection)
+ }
+}
=====================================
mobile/android/android-components/components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
=====================================
@@ -5,11 +5,13 @@
package mozilla.components.concept.toolbar
import android.graphics.drawable.Drawable
+import android.text.style.ForegroundColorSpan
import android.view.View
import android.view.View.NO_ID
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
+import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.annotation.Dimension
import androidx.annotation.Dimension.Companion.DP
@@ -549,6 +551,13 @@ interface Toolbar : ScrollableToolbar {
*/
END,
}
+
+ /**
+ * Registrable domain foreground color span.
+ *
+ * This simple class extension is used so that we can filter for it elsewhere.
+ */
+ class RegistrableDomainColorSpan(@ColorInt color: Int) : ForegroundColorSpan(color)
}
private fun AppCompatImageButton.setTintResource(@ColorRes tintColorResource: Int) {
=====================================
mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarFeature.kt
=====================================
@@ -88,11 +88,13 @@ class ToolbarFeature(
)
/**
- * Controls how the url should be styled
+ * Controls how the URL should be styled
*
* RegistrableDomain: displays only the eTLD+1 (direct subdomain of the public suffix), uncolored
- * ColoredUrl: displays the registrableDomain with color and url with another color
- * UncoloredUrl: displays the full url, uncolored
+ * ColoredUrl: displays the full URL with distinct colors for the registrable domain and the rest of the URL.
+ * Colors the entire hostname if the registrable domain cannot be determined or is an IP address.
+ * Leaves non http(s) URLs uncolored.
+ * UncoloredUrl: displays the full URL, uncolored
*/
sealed class RenderStyle {
object RegistrableDomain : RenderStyle()
=====================================
mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/internal/URLRenderer.kt
=====================================
@@ -18,6 +18,11 @@ import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.launch
import mozilla.components.concept.toolbar.Toolbar
import mozilla.components.feature.toolbar.ToolbarFeature
+import mozilla.components.lib.publicsuffixlist.PublicSuffixList
+import mozilla.components.support.ktx.android.net.isHttpOrHttps
+import mozilla.components.support.ktx.kotlin.isIpv4OrIpv6
+
+private const val BLOB_URL_PREFIX = "blob:"
/**
* Asynchronous URL renderer.
@@ -73,13 +78,21 @@ internal class URLRenderer(
toolbar.url = when (configuration.renderStyle) {
// Display only the eTLD+1 (direct subdomain of the public suffix), uncolored
ToolbarFeature.RenderStyle.RegistrableDomain -> {
- val host = url.toUri().host?.ifEmpty { null }
- host?.let { getRegistrableDomain(host, configuration) } ?: url
+ getRegistrableDomainOrHostSpan(url, configuration.publicSuffixList)?.let { (start, end) ->
+ url.substring(start, end)
+ } ?: url
}
// Display the registrableDomain with color and URL with another color
ToolbarFeature.RenderStyle.ColoredUrl -> SpannableStringBuilder(url).apply {
- color(configuration.urlColor)
- colorRegistrableDomain(configuration)
+ val span = getRegistrableDomainOrHostSpan(url, configuration.publicSuffixList)
+
+ if (configuration.urlColor != null && span != null) {
+ applyUrlColors(
+ configuration.urlColor,
+ configuration.registrableDomainColor,
+ span,
+ )
+ }
}
// Display the full URL, uncolored
ToolbarFeature.RenderStyle.UncoloredUrl -> url
@@ -87,43 +100,98 @@ internal class URLRenderer(
}
}
-private suspend fun getRegistrableDomain(host: String, configuration: ToolbarFeature.UrlRenderConfiguration) =
- configuration.publicSuffixList.getPublicSuffixPlusOne(host).await()
+/**
+ * Determines the position span of the registrable domain within a host string.
+ *
+ * @param host The host string to analyze
+ * @param publicSuffixList The [PublicSuffixList] used to get the eTLD+1 for the host
+ * @return A Pair of (startIndex, endIndex) for the registrable domain within the host,
+ * or null if the host is an IP address or no registrable domain could be found
+ */
+@VisibleForTesting
+internal suspend fun getRegistrableDomainSpanInHost(
+ host: String,
+ publicSuffixList: PublicSuffixList,
+): Pair<Int, Int>? {
+ if (host.isIpv4OrIpv6()) return null
+
+ val normalizedHost = host.removeSuffix(".")
+
+ val registrableDomain = publicSuffixList
+ .getPublicSuffixPlusOne(normalizedHost)
+ .await() ?: return null
+
+ val start = normalizedHost.lastIndexOf(registrableDomain)
+ return if (start == -1) {
+ null
+ } else {
+ start to start + registrableDomain.length
+ }
+}
-private suspend fun SpannableStringBuilder.colorRegistrableDomain(
- configuration: ToolbarFeature.UrlRenderConfiguration,
-) {
- val url = toString()
- val host = url.toUri().host?.removeSuffix(".") ?: return
-
- val registrableDomain = configuration
- .publicSuffixList
- .getPublicSuffixPlusOne(host)
- .await() ?: return
-
- val indexOfHost = url.indexOf(host)
- val indexOfRegistrableDomain = host.lastIndexOf(registrableDomain)
- if (indexOfHost == -1 || indexOfRegistrableDomain == -1) {
- return
+/**
+ * Determines the position span of either the registrable domain or the full host
+ * within a URL string.
+ *
+ * @param url The complete URL to analyze
+ * @param publicSuffixList The [PublicSuffixList] used to get the eTLD+1 for the host
+ * @param allowBlobUnwrapping Whether to allow unwrapping blob URLs
+ * @return A Pair of (startIndex, endIndex) for either:
+ * - The registrable domain's position within the URL, or
+ * - The host's position within the URL if no registrable domain was found, or
+ * - null if the URL has no host or the host couldn't be located in the URL
+ */
+@Suppress("ReturnCount")
+@VisibleForTesting
+internal suspend fun getRegistrableDomainOrHostSpan(
+ url: String,
+ publicSuffixList: PublicSuffixList,
+ allowBlobUnwrapping: Boolean = true,
+): Pair<Int, Int>? {
+ if (url.startsWith(BLOB_URL_PREFIX)) {
+ if (!allowBlobUnwrapping) return null
+
+ val innerUrl = url.substring(BLOB_URL_PREFIX.length)
+ return getRegistrableDomainOrHostSpan(
+ innerUrl,
+ publicSuffixList,
+ allowBlobUnwrapping = false,
+ )?.let { (start, end) ->
+ BLOB_URL_PREFIX.length + start to BLOB_URL_PREFIX.length + end
+ }
}
- val index = indexOfHost + indexOfRegistrableDomain
+ val uri = url.toUri()
+ if (!uri.isHttpOrHttps) return null
- setSpan(
- ForegroundColorSpan(configuration.registrableDomainColor),
- index,
- index + registrableDomain.length,
- SPAN_INCLUSIVE_INCLUSIVE,
- )
-}
+ val host = uri.host ?: return null
+
+ val hostStart = url.indexOf(host)
+ if (hostStart == -1) return null
-private fun SpannableStringBuilder.color(@ColorInt urlColor: Int?) {
- urlColor ?: return
+ val domainSpan = getRegistrableDomainSpanInHost(host, publicSuffixList)
+ return domainSpan?.let { (start, end) ->
+ hostStart + start to hostStart + end
+ } ?: (hostStart to hostStart + host.length)
+}
+private fun SpannableStringBuilder.applyUrlColors(
+ @ColorInt urlColor: Int,
+ @ColorInt registrableDomainColor: Int,
+ registrableDomainOrHostSpan: Pair<Int, Int>,
+): SpannableStringBuilder = apply {
setSpan(
ForegroundColorSpan(urlColor),
0,
length,
SPAN_INCLUSIVE_INCLUSIVE,
)
+
+ val (start, end) = registrableDomainOrHostSpan
+ setSpan(
+ Toolbar.RegistrableDomainColorSpan(registrableDomainColor),
+ start,
+ end,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
}
=====================================
mobile/android/android-components/components/feature/toolbar/src/test/java/mozilla/components/feature/toolbar/internal/URLRendererTest.kt
=====================================
@@ -5,8 +5,10 @@
package mozilla.components.feature.toolbar.internal
import android.graphics.Color
+import android.net.InetAddresses
import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan
+import android.util.Patterns
import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlinx.coroutines.Dispatchers
import mozilla.components.concept.toolbar.Toolbar
@@ -26,8 +28,12 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.verify
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.Implementation
+import org.robolectric.annotation.Implements
@RunWith(AndroidJUnit4::class)
+@Config(shadows = [ShadowInetAddresses::class])
class URLRendererTest {
@get:Rule
@@ -104,10 +110,7 @@ class URLRendererTest {
}
}
- private suspend fun testRenderWithColoredUrl(
- testUrl: String,
- expectedRegistrableDomainSpan: Pair<Int, Int>,
- ) {
+ private suspend fun getSpannedUrl(testUrl: String): SpannableStringBuilder {
val configuration = ToolbarFeature.UrlRenderConfiguration(
publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
registrableDomainColor = Color.RED,
@@ -124,9 +127,14 @@ class URLRendererTest {
val captor = argumentCaptor<CharSequence>()
verify(toolbar).url = captor.capture()
- assertNotNull(captor.value)
- assertTrue(captor.value is SpannableStringBuilder)
- val url = captor.value as SpannableStringBuilder
+ return requireNotNull(captor.value as? SpannableStringBuilder) { "Toolbar URL should not be null" }
+ }
+
+ private suspend fun testRenderWithColoredUrl(
+ testUrl: String,
+ expectedRegistrableDomainSpan: Pair<Int, Int>,
+ ) {
+ val url = getSpannedUrl(testUrl)
assertEquals(testUrl, url.toString())
@@ -143,8 +151,237 @@ class URLRendererTest {
assertEquals(expectedRegistrableDomainSpan.second, url.getSpanEnd(spans[1]))
}
+ private suspend fun testRenderWithUncoloredUrl(testUrl: String) {
+ val url = getSpannedUrl(testUrl)
+
+ assertEquals(testUrl, url.toString())
+
+ val spans = url.getSpans(0, url.length, ForegroundColorSpan::class.java)
+
+ assertEquals(0, spans.size)
+ }
+
+ private suspend fun testRenderWithRegistrableDomain(
+ testUrl: String,
+ expectedUrl: String,
+ ) {
+ val configuration = ToolbarFeature.UrlRenderConfiguration(
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ registrableDomainColor = Color.RED,
+ urlColor = Color.GREEN,
+ renderStyle = ToolbarFeature.RenderStyle.RegistrableDomain,
+ )
+
+ val toolbar: Toolbar = mock()
+
+ val renderer = URLRenderer(toolbar, configuration)
+
+ renderer.updateUrl(testUrl)
+
+ val captor = argumentCaptor<CharSequence>()
+ verify(toolbar).url = captor.capture()
+
+ assertNotNull(captor.value)
+ assertTrue(captor.value is String)
+ val url = captor.value as String
+
+ assertEquals(expectedUrl, url)
+ }
+
+ @Test
+ fun `GIVEN a simple domain WHEN getting registrable domain span in host THEN span is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "www.mozilla.org",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(4 to 15, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a host with a trailing period in the domain WHEN getting registrable domain span in host THEN span is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "www.mozilla.org.",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(4 to 15, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a host with a repeated domain WHEN getting registrable domain span in host THEN the span of the last occurrence of domain is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "mozilla.org.mozilla.org",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN an IPv4 address as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "127.0.0.1",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN an IPv6 address as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "[::1]",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a non PSL domain as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "localhost",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN getting registrable domain or host span THEN span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://www.mozilla.org/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a trailing period in the domain WHEN getting registrable domain or host span THEN span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://www.mozilla.org./",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a repeated domain WHEN getting registrable domain or host span THEN the span of the last occurrence of domain is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://mozilla.org.mozilla.org/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(20 to 31, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN getting registrable domain or host span THEN the span of the IP part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://127.0.0.1/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 16, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN getting registrable domain or host span THEN the span of the IP part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://[::1]/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 12, span)
+ }
+ }
+
@Test
- fun `Render with simple URL`() {
+ fun `GIVEN a URL with a non PSL domain WHEN getting registrable domain or host span THEN the span of the host part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://localhost/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 16, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "about:mozilla",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "content://media/external/file/1000000000",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a blob URI WHEN getting registrable domain or host span THEN domain span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "blob:https://www.mozilla.org/69a29afb-938c-4b9e-9fca-b2f79755047a",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(17 to 28, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a blob URI with duplicated blob prefix WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "blob:blob:https://www.mozilla.org/69a29afb-938c-4b9e-9fca-b2f79755047a",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN rendering it THEN registrable domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://www.mozilla.org/",
@@ -154,7 +391,7 @@ class URLRendererTest {
}
@Test
- fun `Render with URL containing domain with trailing period`() {
+ fun `GIVEN a URL with a trailing period in the domain WHEN rendering it THEN registrable domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://www.mozilla.org./",
@@ -164,7 +401,7 @@ class URLRendererTest {
}
@Test
- fun `Render with URL containing repeated domain`() {
+ fun `GIVEN a URL with a repeated domain WHEN rendering it THEN the last occurrence of domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://mozilla.org.mozilla.org/",
@@ -172,4 +409,144 @@ class URLRendererTest {
)
}
}
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN rendering it THEN the IP part is colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://127.0.0.1/",
+ expectedRegistrableDomainSpan = 7 to 16,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN rendering it THEN the IP part is colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://[::1]/",
+ expectedRegistrableDomainSpan = 7 to 12,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a non PSL domain WHEN rendering it THEN host colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://localhost/",
+ expectedRegistrableDomainSpan = 7 to 16,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN rendering it THEN nothing is colored`() {
+ runTestOnMain {
+ testRenderWithUncoloredUrl("about:mozilla")
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN rendering it THEN nothing is colored`() {
+ runTestOnMain {
+ testRenderWithUncoloredUrl("content://media/external/file/1000000000")
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN rendering it THEN registrable domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://www.mozilla.org/",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a trailing period in the domain WHEN rendering it THEN registrable domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://www.mozilla.org./",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a repeated domain WHEN rendering it THEN the last occurrence of domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://mozilla.org.mozilla.org/",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN rendering it THEN the IP part is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://127.0.0.1/",
+ expectedUrl = "127.0.0.1",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN rendering it THEN the IP part is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://[::1]/",
+ expectedUrl = "[::1]",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a non PSL domain WHEN rendering it THEN host set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://localhost/",
+ expectedUrl = "localhost",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN rendering it THEN it is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "about:mozilla",
+ expectedUrl = "about:mozilla",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN rendering it THEN it is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "content://media/external/file/1000000000",
+ expectedUrl = "content://media/external/file/1000000000",
+ )
+ }
+ }
+}
+
+/**
+ * Robolectric default implementation of [InetAddresses] returns false for any address.
+ * This shadow is used to override that behavior and return true for any IP address.
+ */
+@Implements(InetAddresses::class)
+class ShadowInetAddresses {
+ companion object {
+ @Implementation
+ @JvmStatic
+ @Suppress("DEPRECATION")
+ fun isNumericAddress(address: String): Boolean {
+ return Patterns.IP_ADDRESS.matcher(address).matches() || address.contains(":")
+ }
+ }
}
=====================================
mobile/android/android-components/components/support/utils/src/main/java/mozilla/components/support/ktx/util/URLStringUtils.kt
=====================================
@@ -7,8 +7,6 @@ package mozilla.components.support.ktx.util
import android.text.TextUtils
import androidx.annotation.VisibleForTesting
import androidx.core.net.toUri
-import androidx.core.text.TextDirectionHeuristicCompat
-import androidx.core.text.TextDirectionHeuristicsCompat
import java.util.regex.Pattern
object URLStringUtils {
@@ -102,25 +100,9 @@ object URLStringUtils {
/**
* Generates a shorter version of the provided URL for display purposes by stripping it of
* https/http and/or WWW prefixes and/or trailing slash when applicable.
- *
- * The returned text will always be displayed from left to right.
- * If the directionality would otherwise be RTL "\u200E" will be prepended to the result to force LTR.
*/
- fun toDisplayUrl(
- originalUrl: CharSequence,
- textDirectionHeuristic: TextDirectionHeuristicCompat = TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR,
- ): CharSequence {
- val strippedText = maybeStripTrailingSlash(maybeStripUrlProtocol(originalUrl))
-
- return if (
- strippedText.isNotBlank() &&
- textDirectionHeuristic.isRtl(strippedText, 0, 1)
- ) {
- "\u200E" + strippedText
- } else {
- strippedText
- }
- }
+ fun toDisplayUrl(originalUrl: CharSequence): CharSequence =
+ maybeStripTrailingSlash(maybeStripUrlProtocol(originalUrl))
private fun maybeStripUrlProtocol(url: CharSequence): CharSequence {
if (url.startsWith(HTTPS)) {
=====================================
mobile/android/android-components/components/support/utils/src/test/java/mozilla/components/support/utils/URLStringUtilsTest.kt
=====================================
@@ -16,8 +16,6 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.verify
import kotlin.random.Random
@RunWith(AndroidJUnit4::class)
@@ -246,20 +244,9 @@ class URLStringUtilsTest {
}
@Test
- fun showDisplayUrlAsLTREvenIfTextStartsWithArabicCharacters() {
+ fun toDisplayUrlDoesNotAddImplicitDirectionalMarks() {
val testDisplayUrl = URLStringUtils.toDisplayUrl("http://ختار.ار/www.mozilla.org/1")
- assertEquals("\u200Eختار.ار/www.mozilla.org/1", testDisplayUrl)
- }
-
- @Test
- fun toDisplayUrlAlwaysUseATextDirectionHeuristicToDetermineDirectionality() {
- val textHeuristic = spy(TestTextDirectionHeuristicCompat())
-
- URLStringUtils.toDisplayUrl("http://ختار.ار/www.mozilla.org/1", textHeuristic)
- verify(textHeuristic).isRtl("ختار.ار/www.mozilla.org/1", 0, 1)
-
- URLStringUtils.toDisplayUrl("http://www.mozilla.org/1", textHeuristic)
- verify(textHeuristic).isRtl("mozilla.org/1", 0, 1)
+ assertEquals("ختار.ار/www.mozilla.org/1", testDisplayUrl)
}
@Test
=====================================
mobile/android/components/geckoview/GeckoViewStreamListener.cpp
=====================================
@@ -16,6 +16,8 @@
#include "nsIWebProgressListener.h"
#include "nsIX509Cert.h"
#include "nsPrintfCString.h"
+#include "nsContentSecurityUtils.h"
+#include "nsITransfer.h"
#include "nsNetUtil.h"
@@ -85,6 +87,16 @@ GeckoViewStreamListener::OnStartRequest(nsIRequest* aRequest) {
return NS_OK;
}
+ nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
+ if (channel) {
+ int32_t classification = nsContentSecurityUtils::ClassifyDownload(channel);
+ if (classification == nsITransfer::DOWNLOAD_FORBIDDEN) {
+ channel->Cancel(NS_ERROR_ABORT);
+ CompleteWithError(NS_ERROR_ABORT, channel);
+ return NS_OK;
+ }
+ }
+
// We're expecting data later via OnDataAvailable, so create the stream now.
InitializeStreamSupport(aRequest);
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
=====================================
@@ -58,6 +58,7 @@ abstract class ToolbarIntegration(
urlRenderConfiguration = ToolbarFeature.UrlRenderConfiguration(
context.components.publicSuffixList,
context.getColorFromAttr(R.attr.textPrimary),
+ context.getColorFromAttr(R.attr.textSecondary),
renderStyle = renderStyle,
),
)
@@ -140,7 +141,7 @@ class DefaultToolbarIntegration(
interactor = interactor,
customTabId = customTabId,
isPrivate = isPrivate,
- renderStyle = ToolbarFeature.RenderStyle.UncoloredUrl,
+ renderStyle = ToolbarFeature.RenderStyle.ColoredUrl,
) {
@VisibleForTesting
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.tentative.html.ini
=====================================
@@ -6,7 +6,6 @@
if (os == "linux") and not fission and not debug: [PASS, FAIL]
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a download> triggered download in sandbox is blocked before a request is made.]
expected: FAIL
@@ -15,15 +14,12 @@
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a target="_blank" > triggered download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a target="_blank" rel="noopener" > triggered download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
- if os == "android": FAIL
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html.ini
=====================================
@@ -2,10 +2,8 @@
[Navigation resulted download in sandbox is blocked.]
expected:
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[Navigation resulted download in sandbox from <object> is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_block_downloads.tentative.html.ini
=====================================
@@ -3,17 +3,15 @@
expected:
if (os == "linux") and debug and not fission: [PASS, FAIL]
if (os == "linux") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[window.open(download, "_blank") triggering download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "linux") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[window.open(download, "_blank", "noopener") triggering download in sandbox is blocked.]
expected:
if (os == "linux") and debug: PASS
if os == "win": PASS
- if os == "android": FAIL
+ if os == "android": PASS
[PASS, FAIL]
=====================================
testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js
=====================================
@@ -1,5 +1,5 @@
function StreamDownloadFinishDelay() {
- return 1000;
+ return 2000;
}
function DownloadVerifyDelay() {
=====================================
uriloader/exthandler/nsExternalHelperAppService.cpp
=====================================
@@ -1626,8 +1626,7 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
return NS_OK;
}
- mDownloadClassification =
- nsContentSecurityUtils::ClassifyDownload(aChannel, MIMEType);
+ mDownloadClassification = nsContentSecurityUtils::ClassifyDownload(aChannel);
if (mDownloadClassification == nsITransfer::DOWNLOAD_FORBIDDEN) {
// If the download is rated as forbidden,
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/a672bc…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/a672bc…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser] Pushed new tag base-browser-140.1.0esr-15.0-1-build2
by ma1 (@ma1) 24 Jul '25
by ma1 (@ma1) 24 Jul '25
24 Jul '25
ma1 pushed new tag base-browser-140.1.0esr-15.0-1-build2 at The Tor Project / Applications / Tor Browser
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/base-brow…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser][base-browser-140.1.0esr-15.0-1] 11 commits: Bug 1961829 - Only color HTTP(S) URIs and fallback to coloring the host in...
by ma1 (@ma1) 24 Jul '25
by ma1 (@ma1) 24 Jul '25
24 Jul '25
ma1 pushed to branch base-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
076f29f7 by Michel Le Bihan at 2025-07-24T08:08:48+02:00
Bug 1961829 - Only color HTTP(S) URIs and fallback to coloring the host in Android toolbar URLRenderer. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D248132
- - - - -
ea1dd032 by Michel Le Bihan at 2025-07-24T08:08:56+02:00
Bug 1961757 - Set text direction in Android toolbar instead of adding directional marks. r=tthibaud,android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D246181
- - - - -
39979386 by Michel Le Bihan at 2025-07-24T08:08:58+02:00
Bug 1812898 - Part 1: Add domain alignment in Android toolbar component. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D244508
- - - - -
c1e7fc82 by Michel Le Bihan at 2025-07-24T08:09:01+02:00
Bug 1812898 - Part 2: Enable domain highlighting in Fenix toolbar. r=tthibaud,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D244509
- - - - -
9e5383b4 by mimi89999 at 2025-07-24T08:09:03+02:00
Bug 1964251 - Replace logic of RegistrableDomain renderStyle in Android toolbar component. r=android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D251501
- - - - -
7ab9ea81 by Michel Le Bihan at 2025-07-24T08:09:05+02:00
Bug 1969937 - Add handling of blob URIs in Android toolbar URLRenderer. r=petru,android-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D252879
- - - - -
04c4f093 by Cathy Lu at 2025-07-24T08:09:08+02:00
Bug 1791322 - iframe sandbox wpt tests modified with delay r=nika
Differential Revision: https://phabricator.services.mozilla.com/D253052
- - - - -
85f273f4 by Cathy Lu at 2025-07-24T08:09:11+02:00
Bug 1791322 - GeckoView should call classifyDownloads to sandbox downloads r=geckoview-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D249683
- - - - -
2d41c7c1 by Andreas Pehrson at 2025-07-24T08:09:13+02:00
Bug 1971116 - For global mute events, iterate on copies of containers. r=dbaker
Mute/unmute events are fired synchronously to content, which if it stops an
(event target) track in the event handler, may call back into and mutate the
containers we're iterating over.
Differential Revision: https://phabricator.services.mozilla.com/D254352
- - - - -
817aea0e by Tom Schuster at 2025-07-24T08:09:16+02:00
Bug 1971704 - Cleanup nsContentSecurityUtils::ClassifyDownload. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D253491
- - - - -
6cc06b71 by Pier Angelo Vendrame at 2025-07-24T08:09:18+02:00
Bug 1972282 - Check for spoof English in xsl:sort. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D254784
- - - - -
20 changed files:
- dom/media/MediaManager.cpp
- dom/security/nsContentSecurityUtils.cpp
- dom/security/nsContentSecurityUtils.h
- dom/xslt/xpath/txXPathNode.h
- dom/xslt/xslt/txNodeSorter.cpp
- mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/OriginView.kt
- + mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/OriginViewTest.kt
- mobile/android/android-components/components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
- mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarFeature.kt
- mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/internal/URLRenderer.kt
- mobile/android/android-components/components/feature/toolbar/src/test/java/mozilla/components/feature/toolbar/internal/URLRendererTest.kt
- mobile/android/android-components/components/support/utils/src/main/java/mozilla/components/support/ktx/util/URLStringUtils.kt
- mobile/android/android-components/components/support/utils/src/test/java/mozilla/components/support/utils/URLStringUtilsTest.kt
- mobile/android/components/geckoview/GeckoViewStreamListener.cpp
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.tentative.html.ini
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html.ini
- testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_block_downloads.tentative.html.ini
- testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js
- uriloader/exthandler/nsExternalHelperAppService.cpp
Changes:
=====================================
dom/media/MediaManager.cpp
=====================================
@@ -3568,7 +3568,9 @@ void MediaManager::OnCameraMute(bool aMute) {
mCamerasMuted = aMute;
// This is safe since we're on main-thread, and the windowlist can only
// be added to from the main-thread
- for (const auto& window : mActiveWindows.Values()) {
+ for (const auto& window :
+ ToTArray<AutoTArray<RefPtr<GetUserMediaWindowListener>, 2>>(
+ mActiveWindows.Values())) {
window->MuteOrUnmuteCameras(aMute);
}
}
@@ -3579,7 +3581,9 @@ void MediaManager::OnMicrophoneMute(bool aMute) {
mMicrophonesMuted = aMute;
// This is safe since we're on main-thread, and the windowlist can only
// be added to from the main-thread
- for (const auto& window : mActiveWindows.Values()) {
+ for (const auto& window :
+ ToTArray<AutoTArray<RefPtr<GetUserMediaWindowListener>, 2>>(
+ mActiveWindows.Values())) {
window->MuteOrUnmuteMicrophones(aMute);
}
}
@@ -4767,7 +4771,7 @@ void GetUserMediaWindowListener::MuteOrUnmuteCameras(bool aMute) {
}
mCamerasAreMuted = aMute;
- for (auto& l : mActiveListeners) {
+ for (auto& l : mActiveListeners.Clone()) {
if (l->GetDevice()->Kind() == MediaDeviceKind::Videoinput) {
l->MuteOrUnmuteCamera(aMute);
}
@@ -4782,7 +4786,7 @@ void GetUserMediaWindowListener::MuteOrUnmuteMicrophones(bool aMute) {
}
mMicrophonesAreMuted = aMute;
- for (auto& l : mActiveListeners) {
+ for (auto& l : mActiveListeners.Clone()) {
if (l->GetDevice()->Kind() == MediaDeviceKind::Audioinput) {
l->MuteOrUnmuteMicrophone(aMute);
}
=====================================
dom/security/nsContentSecurityUtils.cpp
=====================================
@@ -2206,11 +2206,17 @@ void nsContentSecurityUtils::LogMessageToConsole(nsIHttpChannel* aChannel,
}
/* static */
-long nsContentSecurityUtils::ClassifyDownload(
- nsIChannel* aChannel, const nsAutoCString& aMimeTypeGuess) {
+long nsContentSecurityUtils::ClassifyDownload(nsIChannel* aChannel) {
MOZ_ASSERT(aChannel, "IsDownloadAllowed without channel?");
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
+ if ((loadInfo->GetTriggeringSandboxFlags() & SANDBOXED_ALLOW_DOWNLOADS) ||
+ (loadInfo->GetSandboxFlags() & SANDBOXED_ALLOW_DOWNLOADS)) {
+ if (nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel)) {
+ LogMessageToConsole(httpChannel, "IframeSandboxBlockedDownload");
+ }
+ return nsITransfer::DOWNLOAD_FORBIDDEN;
+ }
nsCOMPtr<nsIURI> contentLocation;
aChannel->GetURI(getter_AddRefs(contentLocation));
@@ -2243,27 +2249,11 @@ long nsContentSecurityUtils::ClassifyDownload(
if (StaticPrefs::dom_block_download_insecure() &&
decission != nsIContentPolicy::ACCEPT) {
- nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
- if (httpChannel) {
+ if (nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel)) {
LogMessageToConsole(httpChannel, "MixedContentBlockedDownload");
}
return nsITransfer::DOWNLOAD_POTENTIALLY_UNSAFE;
}
- if (loadInfo->TriggeringPrincipal()->IsSystemPrincipal()) {
- return nsITransfer::DOWNLOAD_ACCEPTABLE;
- }
-
- uint32_t triggeringFlags = loadInfo->GetTriggeringSandboxFlags();
- uint32_t currentflags = loadInfo->GetSandboxFlags();
-
- if ((triggeringFlags & SANDBOXED_ALLOW_DOWNLOADS) ||
- (currentflags & SANDBOXED_ALLOW_DOWNLOADS)) {
- nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
- if (httpChannel) {
- LogMessageToConsole(httpChannel, "IframeSandboxBlockedDownload");
- }
- return nsITransfer::DOWNLOAD_FORBIDDEN;
- }
return nsITransfer::DOWNLOAD_ACCEPTABLE;
}
=====================================
dom/security/nsContentSecurityUtils.h
=====================================
@@ -74,8 +74,7 @@ class nsContentSecurityUtils {
const mozilla::dom::Element& aElement);
// Helper function to Check if a Download is allowed;
- static long ClassifyDownload(nsIChannel* aChannel,
- const nsAutoCString& aMimeTypeGuess);
+ static long ClassifyDownload(nsIChannel* aChannel);
// Public only for testing
static FilenameTypeAndDetails FilenameToFilenameType(
=====================================
dom/xslt/xpath/txXPathNode.h
=====================================
@@ -66,6 +66,8 @@ class txXPathNode {
bool operator!=(const txXPathNode& aNode) const { return !(*this == aNode); }
~txXPathNode() { MOZ_COUNT_DTOR(txXPathNode); }
+ mozilla::dom::Document* OwnerDoc() const { return mNode->OwnerDoc(); }
+
private:
friend class txXPathNativeNode;
friend class txXPathNodeUtils;
=====================================
dom/xslt/xslt/txNodeSorter.cpp
=====================================
@@ -13,10 +13,13 @@
#include "mozilla/CheckedInt.h"
#include "mozilla/UniquePtrExtensions.h"
+#include "nsRFPService.h"
using mozilla::CheckedUint32;
using mozilla::MakeUnique;
using mozilla::MakeUniqueFallible;
+using mozilla::nsRFPService;
+using mozilla::RFPTarget;
using mozilla::UniquePtr;
/*
@@ -74,6 +77,10 @@ nsresult txNodeSorter::addSortElement(Expr* aSelectExpr, Expr* aLangExpr,
if (aLangExpr) {
rv = aLangExpr->evaluateToString(aContext, lang);
NS_ENSURE_SUCCESS(rv, rv);
+ } else if (aContext->getContextNode()
+ .OwnerDoc()
+ ->ShouldResistFingerprinting(RFPTarget::JSLocale)) {
+ CopyUTF8toUTF16(nsRFPService::GetSpoofedJSLocale(), lang);
}
// Case-order
=====================================
mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/OriginView.kt
=====================================
@@ -7,6 +7,7 @@ package mozilla.components.browser.toolbar.display
import android.animation.LayoutTransition
import android.content.Context
import android.graphics.Typeface
+import android.text.Spanned
import android.util.AttributeSet
import android.util.TypedValue
import android.view.Gravity
@@ -17,6 +18,7 @@ import androidx.annotation.VisibleForTesting
import androidx.core.view.isVisible
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.browser.toolbar.R
+import mozilla.components.concept.toolbar.Toolbar
/**
* View displaying the URL and optionally the title of a website.
@@ -48,6 +50,9 @@ internal class OriginView @JvmOverloads constructor(
isClickable = true
isFocusable = true
+ textDirection = View.TEXT_DIRECTION_LTR
+ layoutDirection = View.LAYOUT_DIRECTION_LTR
+
setOnClickListener {
if (onUrlClicked()) {
toolbar.editMode()
@@ -134,9 +139,50 @@ internal class OriginView @JvmOverloads constructor(
titleView.setOnLongClickListener(handler)
}
+ /**
+ * Scrolls the URL view to ensure the registrable domain is visible.
+ */
+ @VisibleForTesting
+ internal fun scrollToShowRegistrableDomain() {
+ val text = urlView.text
+
+ val spans = (text as? Spanned)?.getSpans(
+ 0,
+ text.length,
+ Toolbar.RegistrableDomainColorSpan::class.java,
+ )
+
+ if (spans?.size == 1) {
+ val registrableDomainSpan = (urlView.text as? Spanned)?.getSpans(
+ 0,
+ text.length,
+ Toolbar.RegistrableDomainColorSpan::class.java,
+ )?.getOrNull(0)
+
+ val valueUntilRegistrableDomainEnd = text.subSequence(0, text.getSpanEnd(registrableDomainSpan))
+
+ val urlViewWidth = urlView.width
+ val valueWidth = measureUrlTextWidh(valueUntilRegistrableDomainEnd.toString())
+
+ if (valueWidth > urlViewWidth) {
+ urlView.scrollTo((valueWidth - urlViewWidth).toInt(), 0)
+ return
+ }
+ }
+
+ urlView.scrollTo(0, 0)
+ }
+
+ @VisibleForTesting
+ internal fun measureUrlTextWidh(text: String) = urlView.paint.measureText(text)
+
internal var url: CharSequence
get() = urlView.text
- set(value) { urlView.text = value }
+ set(value) {
+ urlView.text = value
+
+ scrollToShowRegistrableDomain()
+ }
/**
* Sets the colour of the text to be displayed when the URL of the toolbar is empty.
=====================================
mobile/android/android-components/components/browser/toolbar/src/test/java/mozilla/components/browser/toolbar/display/OriginViewTest.kt
=====================================
@@ -0,0 +1,109 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar.display
+
+import android.graphics.Color
+import android.text.SpannableStringBuilder
+import android.text.SpannableStringBuilder.SPAN_INCLUSIVE_INCLUSIVE
+import android.text.style.ForegroundColorSpan
+import android.view.View
+import androidx.annotation.ColorInt
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.test.any
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.spy
+
+@RunWith(AndroidJUnit4::class)
+class OriginViewTest {
+
+ private fun SpannableStringBuilder.applyUrlColors(
+ @ColorInt urlColor: Int,
+ @ColorInt registrableDomainColor: Int,
+ registrableDomainOrHostSpan: Pair<Int, Int>,
+ ): SpannableStringBuilder = apply {
+ setSpan(
+ ForegroundColorSpan(urlColor),
+ 0,
+ length,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
+
+ val (start, end) = registrableDomainOrHostSpan
+ setSpan(
+ Toolbar.RegistrableDomainColorSpan(registrableDomainColor),
+ start,
+ end,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain scrolls when domain exceeds width`() {
+ val view = spy(OriginView(testContext))
+ val url = "https://www.really-long-example-domain.com/"
+ val spannedUrl = SpannableStringBuilder(url).apply {
+ applyUrlColors(
+ urlColor = Color.GREEN,
+ registrableDomainColor = Color.RED,
+ registrableDomainOrHostSpan = 8 to 42,
+ )
+ }
+
+ // Long domain wouldn't fit in the view
+ doReturn(500f).`when`(view).measureUrlTextWidh(any())
+ view.urlView.layout(0, 0, 200, 100)
+
+ view.url = spannedUrl
+
+ assertEquals(300, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain does not scroll when domain fits in view`() {
+ val view = spy(OriginView(testContext))
+ val url = "https://mozilla.org/"
+ val spannedUrl = SpannableStringBuilder(url).apply {
+ applyUrlColors(
+ urlColor = Color.GREEN,
+ registrableDomainColor = Color.RED,
+ registrableDomainOrHostSpan = 8 to 19,
+ )
+ }
+
+ doReturn(50f).`when`(view).measureUrlTextWidh(any())
+ view.urlView.layout(0, 0, 200, 100)
+
+ view.url = spannedUrl
+
+ assertEquals(0, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `scrollToShowRegistrableDomain does not scroll when no span exists`() {
+ val view = OriginView(testContext)
+
+ val spanned = SpannableStringBuilder("nospan.com") // no span set
+
+ view.measure(0, 0)
+ view.layout(0, 0, 500, 100)
+
+ view.url = spanned
+
+ assertEquals(0, view.urlView.scrollX)
+ }
+
+ @Test
+ fun `URL text direction is always LTR`() {
+ val originView = OriginView(testContext)
+ originView.url = "ختار.ار/www.mozilla.org/1"
+ assertEquals(View.TEXT_DIRECTION_LTR, originView.urlView.textDirection)
+ assertEquals(View.LAYOUT_DIRECTION_LTR, originView.urlView.layoutDirection)
+ }
+}
=====================================
mobile/android/android-components/components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
=====================================
@@ -5,11 +5,13 @@
package mozilla.components.concept.toolbar
import android.graphics.drawable.Drawable
+import android.text.style.ForegroundColorSpan
import android.view.View
import android.view.View.NO_ID
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
+import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.annotation.Dimension
import androidx.annotation.Dimension.Companion.DP
@@ -548,6 +550,13 @@ interface Toolbar : ScrollableToolbar {
*/
END,
}
+
+ /**
+ * Registrable domain foreground color span.
+ *
+ * This simple class extension is used so that we can filter for it elsewhere.
+ */
+ class RegistrableDomainColorSpan(@ColorInt color: Int) : ForegroundColorSpan(color)
}
private fun AppCompatImageButton.setTintResource(@ColorRes tintColorResource: Int) {
=====================================
mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarFeature.kt
=====================================
@@ -88,11 +88,13 @@ class ToolbarFeature(
)
/**
- * Controls how the url should be styled
+ * Controls how the URL should be styled
*
* RegistrableDomain: displays only the eTLD+1 (direct subdomain of the public suffix), uncolored
- * ColoredUrl: displays the registrableDomain with color and url with another color
- * UncoloredUrl: displays the full url, uncolored
+ * ColoredUrl: displays the full URL with distinct colors for the registrable domain and the rest of the URL.
+ * Colors the entire hostname if the registrable domain cannot be determined or is an IP address.
+ * Leaves non http(s) URLs uncolored.
+ * UncoloredUrl: displays the full URL, uncolored
*/
sealed class RenderStyle {
object RegistrableDomain : RenderStyle()
=====================================
mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/internal/URLRenderer.kt
=====================================
@@ -18,6 +18,11 @@ import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.launch
import mozilla.components.concept.toolbar.Toolbar
import mozilla.components.feature.toolbar.ToolbarFeature
+import mozilla.components.lib.publicsuffixlist.PublicSuffixList
+import mozilla.components.support.ktx.android.net.isHttpOrHttps
+import mozilla.components.support.ktx.kotlin.isIpv4OrIpv6
+
+private const val BLOB_URL_PREFIX = "blob:"
/**
* Asynchronous URL renderer.
@@ -73,13 +78,21 @@ internal class URLRenderer(
toolbar.url = when (configuration.renderStyle) {
// Display only the eTLD+1 (direct subdomain of the public suffix), uncolored
ToolbarFeature.RenderStyle.RegistrableDomain -> {
- val host = url.toUri().host?.ifEmpty { null }
- host?.let { getRegistrableDomain(host, configuration) } ?: url
+ getRegistrableDomainOrHostSpan(url, configuration.publicSuffixList)?.let { (start, end) ->
+ url.substring(start, end)
+ } ?: url
}
// Display the registrableDomain with color and URL with another color
ToolbarFeature.RenderStyle.ColoredUrl -> SpannableStringBuilder(url).apply {
- color(configuration.urlColor)
- colorRegistrableDomain(configuration)
+ val span = getRegistrableDomainOrHostSpan(url, configuration.publicSuffixList)
+
+ if (configuration.urlColor != null && span != null) {
+ applyUrlColors(
+ configuration.urlColor,
+ configuration.registrableDomainColor,
+ span,
+ )
+ }
}
// Display the full URL, uncolored
ToolbarFeature.RenderStyle.UncoloredUrl -> url
@@ -87,43 +100,98 @@ internal class URLRenderer(
}
}
-private suspend fun getRegistrableDomain(host: String, configuration: ToolbarFeature.UrlRenderConfiguration) =
- configuration.publicSuffixList.getPublicSuffixPlusOne(host).await()
+/**
+ * Determines the position span of the registrable domain within a host string.
+ *
+ * @param host The host string to analyze
+ * @param publicSuffixList The [PublicSuffixList] used to get the eTLD+1 for the host
+ * @return A Pair of (startIndex, endIndex) for the registrable domain within the host,
+ * or null if the host is an IP address or no registrable domain could be found
+ */
+@VisibleForTesting
+internal suspend fun getRegistrableDomainSpanInHost(
+ host: String,
+ publicSuffixList: PublicSuffixList,
+): Pair<Int, Int>? {
+ if (host.isIpv4OrIpv6()) return null
+
+ val normalizedHost = host.removeSuffix(".")
+
+ val registrableDomain = publicSuffixList
+ .getPublicSuffixPlusOne(normalizedHost)
+ .await() ?: return null
+
+ val start = normalizedHost.lastIndexOf(registrableDomain)
+ return if (start == -1) {
+ null
+ } else {
+ start to start + registrableDomain.length
+ }
+}
-private suspend fun SpannableStringBuilder.colorRegistrableDomain(
- configuration: ToolbarFeature.UrlRenderConfiguration,
-) {
- val url = toString()
- val host = url.toUri().host?.removeSuffix(".") ?: return
-
- val registrableDomain = configuration
- .publicSuffixList
- .getPublicSuffixPlusOne(host)
- .await() ?: return
-
- val indexOfHost = url.indexOf(host)
- val indexOfRegistrableDomain = host.lastIndexOf(registrableDomain)
- if (indexOfHost == -1 || indexOfRegistrableDomain == -1) {
- return
+/**
+ * Determines the position span of either the registrable domain or the full host
+ * within a URL string.
+ *
+ * @param url The complete URL to analyze
+ * @param publicSuffixList The [PublicSuffixList] used to get the eTLD+1 for the host
+ * @param allowBlobUnwrapping Whether to allow unwrapping blob URLs
+ * @return A Pair of (startIndex, endIndex) for either:
+ * - The registrable domain's position within the URL, or
+ * - The host's position within the URL if no registrable domain was found, or
+ * - null if the URL has no host or the host couldn't be located in the URL
+ */
+@Suppress("ReturnCount")
+@VisibleForTesting
+internal suspend fun getRegistrableDomainOrHostSpan(
+ url: String,
+ publicSuffixList: PublicSuffixList,
+ allowBlobUnwrapping: Boolean = true,
+): Pair<Int, Int>? {
+ if (url.startsWith(BLOB_URL_PREFIX)) {
+ if (!allowBlobUnwrapping) return null
+
+ val innerUrl = url.substring(BLOB_URL_PREFIX.length)
+ return getRegistrableDomainOrHostSpan(
+ innerUrl,
+ publicSuffixList,
+ allowBlobUnwrapping = false,
+ )?.let { (start, end) ->
+ BLOB_URL_PREFIX.length + start to BLOB_URL_PREFIX.length + end
+ }
}
- val index = indexOfHost + indexOfRegistrableDomain
+ val uri = url.toUri()
+ if (!uri.isHttpOrHttps) return null
- setSpan(
- ForegroundColorSpan(configuration.registrableDomainColor),
- index,
- index + registrableDomain.length,
- SPAN_INCLUSIVE_INCLUSIVE,
- )
-}
+ val host = uri.host ?: return null
+
+ val hostStart = url.indexOf(host)
+ if (hostStart == -1) return null
-private fun SpannableStringBuilder.color(@ColorInt urlColor: Int?) {
- urlColor ?: return
+ val domainSpan = getRegistrableDomainSpanInHost(host, publicSuffixList)
+ return domainSpan?.let { (start, end) ->
+ hostStart + start to hostStart + end
+ } ?: (hostStart to hostStart + host.length)
+}
+private fun SpannableStringBuilder.applyUrlColors(
+ @ColorInt urlColor: Int,
+ @ColorInt registrableDomainColor: Int,
+ registrableDomainOrHostSpan: Pair<Int, Int>,
+): SpannableStringBuilder = apply {
setSpan(
ForegroundColorSpan(urlColor),
0,
length,
SPAN_INCLUSIVE_INCLUSIVE,
)
+
+ val (start, end) = registrableDomainOrHostSpan
+ setSpan(
+ Toolbar.RegistrableDomainColorSpan(registrableDomainColor),
+ start,
+ end,
+ SPAN_INCLUSIVE_INCLUSIVE,
+ )
}
=====================================
mobile/android/android-components/components/feature/toolbar/src/test/java/mozilla/components/feature/toolbar/internal/URLRendererTest.kt
=====================================
@@ -5,8 +5,10 @@
package mozilla.components.feature.toolbar.internal
import android.graphics.Color
+import android.net.InetAddresses
import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan
+import android.util.Patterns
import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlinx.coroutines.Dispatchers
import mozilla.components.concept.toolbar.Toolbar
@@ -26,8 +28,12 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.verify
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.Implementation
+import org.robolectric.annotation.Implements
@RunWith(AndroidJUnit4::class)
+@Config(shadows = [ShadowInetAddresses::class])
class URLRendererTest {
@get:Rule
@@ -104,10 +110,7 @@ class URLRendererTest {
}
}
- private suspend fun testRenderWithColoredUrl(
- testUrl: String,
- expectedRegistrableDomainSpan: Pair<Int, Int>,
- ) {
+ private suspend fun getSpannedUrl(testUrl: String): SpannableStringBuilder {
val configuration = ToolbarFeature.UrlRenderConfiguration(
publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
registrableDomainColor = Color.RED,
@@ -124,9 +127,14 @@ class URLRendererTest {
val captor = argumentCaptor<CharSequence>()
verify(toolbar).url = captor.capture()
- assertNotNull(captor.value)
- assertTrue(captor.value is SpannableStringBuilder)
- val url = captor.value as SpannableStringBuilder
+ return requireNotNull(captor.value as? SpannableStringBuilder) { "Toolbar URL should not be null" }
+ }
+
+ private suspend fun testRenderWithColoredUrl(
+ testUrl: String,
+ expectedRegistrableDomainSpan: Pair<Int, Int>,
+ ) {
+ val url = getSpannedUrl(testUrl)
assertEquals(testUrl, url.toString())
@@ -143,8 +151,237 @@ class URLRendererTest {
assertEquals(expectedRegistrableDomainSpan.second, url.getSpanEnd(spans[1]))
}
+ private suspend fun testRenderWithUncoloredUrl(testUrl: String) {
+ val url = getSpannedUrl(testUrl)
+
+ assertEquals(testUrl, url.toString())
+
+ val spans = url.getSpans(0, url.length, ForegroundColorSpan::class.java)
+
+ assertEquals(0, spans.size)
+ }
+
+ private suspend fun testRenderWithRegistrableDomain(
+ testUrl: String,
+ expectedUrl: String,
+ ) {
+ val configuration = ToolbarFeature.UrlRenderConfiguration(
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ registrableDomainColor = Color.RED,
+ urlColor = Color.GREEN,
+ renderStyle = ToolbarFeature.RenderStyle.RegistrableDomain,
+ )
+
+ val toolbar: Toolbar = mock()
+
+ val renderer = URLRenderer(toolbar, configuration)
+
+ renderer.updateUrl(testUrl)
+
+ val captor = argumentCaptor<CharSequence>()
+ verify(toolbar).url = captor.capture()
+
+ assertNotNull(captor.value)
+ assertTrue(captor.value is String)
+ val url = captor.value as String
+
+ assertEquals(expectedUrl, url)
+ }
+
+ @Test
+ fun `GIVEN a simple domain WHEN getting registrable domain span in host THEN span is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "www.mozilla.org",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(4 to 15, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a host with a trailing period in the domain WHEN getting registrable domain span in host THEN span is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "www.mozilla.org.",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(4 to 15, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a host with a repeated domain WHEN getting registrable domain span in host THEN the span of the last occurrence of domain is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "mozilla.org.mozilla.org",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN an IPv4 address as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "127.0.0.1",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN an IPv6 address as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "[::1]",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a non PSL domain as host WHEN getting registrable domain span in host THEN null is returned`() {
+ runTestOnMain {
+ val domainSpan = getRegistrableDomainSpanInHost(
+ host = "localhost",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(domainSpan)
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN getting registrable domain or host span THEN span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://www.mozilla.org/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a trailing period in the domain WHEN getting registrable domain or host span THEN span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://www.mozilla.org./",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(12 to 23, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a repeated domain WHEN getting registrable domain or host span THEN the span of the last occurrence of domain is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "https://mozilla.org.mozilla.org/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(20 to 31, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN getting registrable domain or host span THEN the span of the IP part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://127.0.0.1/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 16, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN getting registrable domain or host span THEN the span of the IP part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://[::1]/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 12, span)
+ }
+ }
+
@Test
- fun `Render with simple URL`() {
+ fun `GIVEN a URL with a non PSL domain WHEN getting registrable domain or host span THEN the span of the host part is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "http://localhost/",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(7 to 16, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "about:mozilla",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "content://media/external/file/1000000000",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a blob URI WHEN getting registrable domain or host span THEN domain span is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "blob:https://www.mozilla.org/69a29afb-938c-4b9e-9fca-b2f79755047a",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertEquals(17 to 28, span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a blob URI with duplicated blob prefix WHEN getting registrable domain or host span THEN null is returned`() {
+ runTestOnMain {
+ val span = getRegistrableDomainOrHostSpan(
+ url = "blob:blob:https://www.mozilla.org/69a29afb-938c-4b9e-9fca-b2f79755047a",
+ publicSuffixList = PublicSuffixList(testContext, Dispatchers.Unconfined),
+ )
+
+ assertNull(span)
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN rendering it THEN registrable domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://www.mozilla.org/",
@@ -154,7 +391,7 @@ class URLRendererTest {
}
@Test
- fun `Render with URL containing domain with trailing period`() {
+ fun `GIVEN a URL with a trailing period in the domain WHEN rendering it THEN registrable domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://www.mozilla.org./",
@@ -164,7 +401,7 @@ class URLRendererTest {
}
@Test
- fun `Render with URL containing repeated domain`() {
+ fun `GIVEN a URL with a repeated domain WHEN rendering it THEN the last occurrence of domain is colored`() {
runTestOnMain {
testRenderWithColoredUrl(
testUrl = "https://mozilla.org.mozilla.org/",
@@ -172,4 +409,144 @@ class URLRendererTest {
)
}
}
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN rendering it THEN the IP part is colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://127.0.0.1/",
+ expectedRegistrableDomainSpan = 7 to 16,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN rendering it THEN the IP part is colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://[::1]/",
+ expectedRegistrableDomainSpan = 7 to 12,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a non PSL domain WHEN rendering it THEN host colored`() {
+ runTestOnMain {
+ testRenderWithColoredUrl(
+ testUrl = "http://localhost/",
+ expectedRegistrableDomainSpan = 7 to 16,
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN rendering it THEN nothing is colored`() {
+ runTestOnMain {
+ testRenderWithUncoloredUrl("about:mozilla")
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN rendering it THEN nothing is colored`() {
+ runTestOnMain {
+ testRenderWithUncoloredUrl("content://media/external/file/1000000000")
+ }
+ }
+
+ @Test
+ fun `GIVEN a simple URL WHEN rendering it THEN registrable domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://www.mozilla.org/",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a trailing period in the domain WHEN rendering it THEN registrable domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://www.mozilla.org./",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a repeated domain WHEN rendering it THEN the last occurrence of domain is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "https://mozilla.org.mozilla.org/",
+ expectedUrl = "mozilla.org",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv4 address WHEN rendering it THEN the IP part is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://127.0.0.1/",
+ expectedUrl = "127.0.0.1",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with an IPv6 address WHEN rendering it THEN the IP part is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://[::1]/",
+ expectedUrl = "[::1]",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a URL with a non PSL domain WHEN rendering it THEN host set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "http://localhost/",
+ expectedUrl = "localhost",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN an internal page name WHEN rendering it THEN it is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "about:mozilla",
+ expectedUrl = "about:mozilla",
+ )
+ }
+ }
+
+ @Test
+ fun `GIVEN a content URI WHEN rendering it THEN it is set`() {
+ runTestOnMain {
+ testRenderWithRegistrableDomain(
+ testUrl = "content://media/external/file/1000000000",
+ expectedUrl = "content://media/external/file/1000000000",
+ )
+ }
+ }
+}
+
+/**
+ * Robolectric default implementation of [InetAddresses] returns false for any address.
+ * This shadow is used to override that behavior and return true for any IP address.
+ */
+@Implements(InetAddresses::class)
+class ShadowInetAddresses {
+ companion object {
+ @Implementation
+ @JvmStatic
+ @Suppress("DEPRECATION")
+ fun isNumericAddress(address: String): Boolean {
+ return Patterns.IP_ADDRESS.matcher(address).matches() || address.contains(":")
+ }
+ }
}
=====================================
mobile/android/android-components/components/support/utils/src/main/java/mozilla/components/support/ktx/util/URLStringUtils.kt
=====================================
@@ -7,8 +7,6 @@ package mozilla.components.support.ktx.util
import android.text.TextUtils
import androidx.annotation.VisibleForTesting
import androidx.core.net.toUri
-import androidx.core.text.TextDirectionHeuristicCompat
-import androidx.core.text.TextDirectionHeuristicsCompat
import java.util.regex.Pattern
object URLStringUtils {
@@ -102,25 +100,9 @@ object URLStringUtils {
/**
* Generates a shorter version of the provided URL for display purposes by stripping it of
* https/http and/or WWW prefixes and/or trailing slash when applicable.
- *
- * The returned text will always be displayed from left to right.
- * If the directionality would otherwise be RTL "\u200E" will be prepended to the result to force LTR.
*/
- fun toDisplayUrl(
- originalUrl: CharSequence,
- textDirectionHeuristic: TextDirectionHeuristicCompat = TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR,
- ): CharSequence {
- val strippedText = maybeStripTrailingSlash(maybeStripUrlProtocol(originalUrl))
-
- return if (
- strippedText.isNotBlank() &&
- textDirectionHeuristic.isRtl(strippedText, 0, 1)
- ) {
- "\u200E" + strippedText
- } else {
- strippedText
- }
- }
+ fun toDisplayUrl(originalUrl: CharSequence): CharSequence =
+ maybeStripTrailingSlash(maybeStripUrlProtocol(originalUrl))
private fun maybeStripUrlProtocol(url: CharSequence): CharSequence {
if (url.startsWith(HTTPS)) {
=====================================
mobile/android/android-components/components/support/utils/src/test/java/mozilla/components/support/utils/URLStringUtilsTest.kt
=====================================
@@ -16,8 +16,6 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.verify
import kotlin.random.Random
@RunWith(AndroidJUnit4::class)
@@ -246,20 +244,9 @@ class URLStringUtilsTest {
}
@Test
- fun showDisplayUrlAsLTREvenIfTextStartsWithArabicCharacters() {
+ fun toDisplayUrlDoesNotAddImplicitDirectionalMarks() {
val testDisplayUrl = URLStringUtils.toDisplayUrl("http://ختار.ار/www.mozilla.org/1")
- assertEquals("\u200Eختار.ار/www.mozilla.org/1", testDisplayUrl)
- }
-
- @Test
- fun toDisplayUrlAlwaysUseATextDirectionHeuristicToDetermineDirectionality() {
- val textHeuristic = spy(TestTextDirectionHeuristicCompat())
-
- URLStringUtils.toDisplayUrl("http://ختار.ار/www.mozilla.org/1", textHeuristic)
- verify(textHeuristic).isRtl("ختار.ار/www.mozilla.org/1", 0, 1)
-
- URLStringUtils.toDisplayUrl("http://www.mozilla.org/1", textHeuristic)
- verify(textHeuristic).isRtl("mozilla.org/1", 0, 1)
+ assertEquals("ختار.ار/www.mozilla.org/1", testDisplayUrl)
}
@Test
=====================================
mobile/android/components/geckoview/GeckoViewStreamListener.cpp
=====================================
@@ -16,6 +16,8 @@
#include "nsIWebProgressListener.h"
#include "nsIX509Cert.h"
#include "nsPrintfCString.h"
+#include "nsContentSecurityUtils.h"
+#include "nsITransfer.h"
#include "nsNetUtil.h"
@@ -85,6 +87,16 @@ GeckoViewStreamListener::OnStartRequest(nsIRequest* aRequest) {
return NS_OK;
}
+ nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
+ if (channel) {
+ int32_t classification = nsContentSecurityUtils::ClassifyDownload(channel);
+ if (classification == nsITransfer::DOWNLOAD_FORBIDDEN) {
+ channel->Cancel(NS_ERROR_ABORT);
+ CompleteWithError(NS_ERROR_ABORT, channel);
+ return NS_OK;
+ }
+ }
+
// We're expecting data later via OnDataAvailable, so create the stream now.
InitializeStreamSupport(aRequest);
=====================================
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
=====================================
@@ -58,6 +58,7 @@ abstract class ToolbarIntegration(
urlRenderConfiguration = ToolbarFeature.UrlRenderConfiguration(
context.components.publicSuffixList,
context.getColorFromAttr(R.attr.textPrimary),
+ context.getColorFromAttr(R.attr.textSecondary),
renderStyle = renderStyle,
),
)
@@ -140,7 +141,7 @@ class DefaultToolbarIntegration(
interactor = interactor,
customTabId = customTabId,
isPrivate = isPrivate,
- renderStyle = ToolbarFeature.RenderStyle.UncoloredUrl,
+ renderStyle = ToolbarFeature.RenderStyle.ColoredUrl,
) {
@VisibleForTesting
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.tentative.html.ini
=====================================
@@ -6,7 +6,6 @@
if (os == "linux") and not fission and not debug: [PASS, FAIL]
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a download> triggered download in sandbox is blocked before a request is made.]
expected: FAIL
@@ -15,15 +14,12 @@
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a target="_blank" > triggered download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[<a target="_blank" rel="noopener" > triggered download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
- if os == "android": FAIL
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html.ini
=====================================
@@ -2,10 +2,8 @@
[Navigation resulted download in sandbox is blocked.]
expected:
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[Navigation resulted download in sandbox from <object> is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "mac") and not debug: [PASS, FAIL]
- if os == "android": FAIL
=====================================
testing/web-platform/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_window_open_download_block_downloads.tentative.html.ini
=====================================
@@ -3,17 +3,15 @@
expected:
if (os == "linux") and debug and not fission: [PASS, FAIL]
if (os == "linux") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[window.open(download, "_blank") triggering download in sandbox is blocked.]
expected:
if (os == "mac") and debug: [PASS, FAIL]
if (os == "linux") and not debug: [PASS, FAIL]
- if os == "android": FAIL
[window.open(download, "_blank", "noopener") triggering download in sandbox is blocked.]
expected:
if (os == "linux") and debug: PASS
if os == "win": PASS
- if os == "android": FAIL
+ if os == "android": PASS
[PASS, FAIL]
=====================================
testing/web-platform/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js
=====================================
@@ -1,5 +1,5 @@
function StreamDownloadFinishDelay() {
- return 1000;
+ return 2000;
}
function DownloadVerifyDelay() {
=====================================
uriloader/exthandler/nsExternalHelperAppService.cpp
=====================================
@@ -1626,8 +1626,7 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) {
return NS_OK;
}
- mDownloadClassification =
- nsContentSecurityUtils::ClassifyDownload(aChannel, MIMEType);
+ mDownloadClassification = nsContentSecurityUtils::ClassifyDownload(aChannel);
if (mDownloadClassification == nsITransfer::DOWNLOAD_FORBIDDEN) {
// If the download is rated as forbidden,
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/12c1cb…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/12c1cb…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] fixup! TB 41089: Add tor-browser build scripts + Makefile to tor-browser
by clairehurst (@clairehurst) 23 Jul '25
by clairehurst (@clairehurst) 23 Jul '25
23 Jul '25
clairehurst pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
a672bc1c by clairehurst at 2025-07-23T13:51:52-06:00
fixup! TB 41089: Add tor-browser build scripts + Makefile to tor-browser
Bug 43984: Update android build scripts and docs for ESR 140
- - - - -
4 changed files:
- tools/geckoview/Makefile
- tools/geckoview/android-env-linux-template.sh
- tools/geckoview/android-env-macos-template.sh
- tools/geckoview/install-fenix.sh
Changes:
=====================================
tools/geckoview/Makefile
=====================================
@@ -41,11 +41,13 @@ env:
test -e android-env.sh || { echo "copy android-env-...-template.sh to android-env.sh and edit appropriatly"; exit 1; }
install-release:
- ./install-fenix.sh $(DEV_ROOT) $(ANDROID_ARCH) release
+ ./install-fenix.sh $(DEV_ROOT) $(ARCH) $(ANDROID_ARCH) release
install-beta:
- ./install-fenix.sh $(DEV_ROOT) $(ANDROID_ARCH) beta
+ ./install-fenix.sh $(DEV_ROOT) $(ARCH) $(ANDROID_ARCH) beta
install-nightly:
- ./install-fenix.sh $(DEV_ROOT) $(ANDROID_ARCH) nightly
+ ./install-fenix.sh $(DEV_ROOT) $(ARCH) $(ANDROID_ARCH) nightly
+install-debug:
+ ./install-fenix.sh $(DEV_ROOT) $(ARCH) $(ANDROID_ARCH) debug
all: env geckoview fenix-nightly install-nightly
all-release: env geckoview fenix-release install-release
@@ -56,4 +58,3 @@ jslint:
clean:
rm -rf $(BUILD_OUTPUT)
-
=====================================
tools/geckoview/android-env-linux-template.sh
=====================================
@@ -1,6 +1,6 @@
-export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
+export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export ANDROID_HOME=$HOME/.mozbuild/android-sdk-linux/ # or $HOME/Android/Sdk/ # Or .../android-toolchain/android-sdk-linux if you extract android-toolchain from tor-browser-build
-export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/r26c/ # for 128esr
-export GRADLE_HOME=/FULL/PATH/TO/tor-browser-build/out/gradle/gradle-8.8 # Or the version that we currently use
+export ANDROID_NDK_HOME=$HOME/.mozbuild/android-ndk-r28b/ # for 140esr
+export GRADLE_HOME=$HOME/.mozbuild/gradle-8.14.3 # not included by default, need to download from https://gradle.org/releases/ and put the extracted directory "gradle-8.14.3" into ~/.mozbuild/
export LOCAL_DEV_BUILD=1
export PATH=/FULL/PATH/TO/tor-browser-build/out/clang/clang-16.x.y-arm/bin/:$PATH # prepend our newly built and assembled clang to the path so it gets used to build geckoview
=====================================
tools/geckoview/android-env-macos-template.sh
=====================================
@@ -1,8 +1,6 @@
-export JAVA_HOME=/opt/homebrew/opt/openjdk(a)17/libexec/openjdk.jdk/Contents/Home/ # for arm64. Or JAVA_HOME=/usr/local/opt/openjdk(a)17/libexec/openjdk.jdk/Contents/Home/ for x86_64.
-export ANDROID_HOME=$HOME/Library/Android/sdk # or $HOME/.mozbuild/android-sdk-macosx/
-export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/26.2.11394342 # will need to download the relevant NDK via android studio (e.g. 26.2.11394342)
-GRADLE_DIR=/opt/homebrew/Cellar/gradle # for arm64, or /usr/local/Cellar/gradle for x86_64. Download via homebrew.
-GRADLE_VERSION=`ls -1 "$GRADLE_DIR" | sort -hr | head -n 1` # Finds the latest gradle version in the specified GRADLE_DIR
-export GRADLE_HOME=$GRADLE_DIR/$GRADLE_VERSION
+export JAVA_HOME=/opt/homebrew/opt/openjdk(a)17/libexec/openjdk.jdk/Contents/Home # for arm64. Or JAVA_HOME=/usr/local/opt/openjdk(a)17/libexec/openjdk.jdk/Contents/Home for x86_64.
+export ANDROID_HOME=$HOME/.mozbuild/android-sdk-macosx
+export ANDROID_NDK_HOME=$HOME/.mozbuild/android-ndk-r28b # for ESR140
+export GRADLE_HOME=$HOME/.mozbuild/gradle-8.14.3 # not included by default, need to download from https://gradle.org/releases/ and put the extracted directory "gradle-8.14.3" into ~/.mozbuild/
export LOCAL_DEV_BUILD=1
-export PATH=$ANDROID_HOME/ndk/26.2.11394342/toolchains/llvm/prebuilt/darwin-x86_64/bin/:$PATH # prepend android studios latest ndk to the path so it's clang gets used to build geckoview. Note that it doesn't need to be the same version as above
+export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin:$PATH # prepend mozbuilds NDK to the PATH so it's clang gets used to build geckoview
=====================================
tools/geckoview/install-fenix.sh
=====================================
@@ -1,9 +1,16 @@
#!/bin/bash
set -e
DEV_ROOT=$1
-ANDROID_ARCH=$2
-VARIANT=$3
+ARCH=$2
+ANDROID_ARCH=$3
+VARIANT=$4
cd $DEV_ROOT
OBJ_DIR=$(MOZCONFIG=mozconfig-android-$ARCH ./mach environment --format json --verbose | jq -r .topobjdir)
-adb install "$OBJ_DIR/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$VARIANT/app-fenix-$ANDROID_ARCH-nightly-signed.apk"
+
+if [ $VARIANT == "debug" ]
+then
+ adb install "$OBJ_DIR/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$VARIANT/app-fenix-$ANDROID_ARCH-$VARIANT.apk"
+else
+ adb install "$OBJ_DIR/gradle/build/mobile/android/fenix/app/outputs/apk/fenix/$VARIANT/app-fenix-$ANDROID_ARCH-$VARIANT-signed.apk"
+fi
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/a672bc1…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/a672bc1…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-140.1.0esr-15.0-1-build1
by morgan (@morgan) 23 Jul '25
by morgan (@morgan) 23 Jul '25
23 Jul '25
morgan pushed new tag tor-browser-140.1.0esr-15.0-1-build1 at The Tor Project / Applications / Tor Browser
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/tor-brows…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser] Pushed new branch base-browser-140.1.0esr-15.0-1
by morgan (@morgan) 23 Jul '25
by morgan (@morgan) 23 Jul '25
23 Jul '25
morgan pushed new branch base-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/base-brow…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser] Pushed new tag base-browser-140.1.0esr-15.0-1-build1
by morgan (@morgan) 23 Jul '25
by morgan (@morgan) 23 Jul '25
23 Jul '25
morgan pushed new tag base-browser-140.1.0esr-15.0-1-build1 at The Tor Project / Applications / Tor Browser
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/base-brow…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] 223 commits: BB 43843: Do not bootstrap MacOS packaging tools if available
by morgan (@morgan) 23 Jul '25
by morgan (@morgan) 23 Jul '25
23 Jul '25
morgan pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser
Commits:
05d0cd22 by Beatriz Rizental at 2025-07-17T16:36:09+02:00
BB 43843: Do not bootstrap MacOS packaging tools if available
Do not bootstrap MacOS packing tools if they are already available in
the environment. This can be uplifted.
- - - - -
53328f51 by Henry Wilkes at 2025-07-17T16:36:09+02:00
BB 41454: Move focus after calling openPreferences for a sub-category.
Temporary fix until mozilla bug 1799153 gets a patch upstream.
- - - - -
7e4d7035 by Henry Wilkes at 2025-07-17T16:36:09+02:00
BB 43072: Add aria label and description to moz-message-bar.
Ensures that moz-message-bar, including notifications, are announced on
Orca.
This addresses upstream bugzilla bug 1895857 and should likely be
replaced when it is fixed.
- - - - -
41609b1a by Henry Wilkes at 2025-07-17T16:36:09+02:00
BB 42739: Use the brand name for profile error messages.
Some messages in profileSelection.properties use gAppData->name as
variable inputs. However, gAppData->name is still "Firefox" for our
base-browser builds, rather than the user-facing browser name. We swap
these instances with the displayed brand name instead.
- - - - -
2f260ef4 by Henry Wilkes at 2025-07-17T16:36:10+02:00
BB 41483: Remove the firefox override for appstrings.properties
Remove this patch after upstream bugzilla bug 1790187
- - - - -
6c9a91a6 by Marco Simonelli at 2025-07-17T16:36:10+02:00
BB 41459: WebRTC fails to build under mingw (Part 1)
- properly define NOMINMAX for just MSVC builds
- - - - -
cb5ad58e by Marco Simonelli at 2025-07-17T16:36:10+02:00
BB 41459: WebRTC fails to build under mingw (Part 2)
- fixes required to build third_party/libwebrtc
- - - - -
a2269e96 by Marco Simonelli at 2025-07-17T16:36:10+02:00
BB 41459: WebRTC fails to build under mingw (Part 3)
- fixes required to build third_party/sipcc
- - - - -
a4e24fe7 by Marco Simonelli at 2025-07-17T16:36:11+02:00
BB 41459: WebRTC fails to build under mingw (Part 4)
- fixes requried to build netwerk/sctp
- - - - -
91fac4db by Marco Simonelli at 2025-07-17T16:36:11+02:00
BB 41459: WebRTC fails to build under mingw (Part 5)
- fixes required to build dom/media/webrtc
- - - - -
dd1a795c by Marco Simonelli at 2025-07-17T16:36:11+02:00
BB 41459: WebRTC fails to build under mingw (Part 6)
- fixes required to build dom/media/systemservices
- - - - -
76534ac5 by june wilde at 2025-07-17T16:36:11+02:00
BB 42758: Fix WebRTC build errors.
- - - - -
a85eb161 by hackademix at 2025-07-17T16:36:12+02:00
BB 41854: Allow overriding download spam protection.
- - - - -
1a9264ae by hackademix at 2025-07-17T16:36:12+02:00
BB 42832: Download spam prevention exemption for browser extensions.
- - - - -
e3fa430e by Pier Angelo Vendrame at 2025-07-17T16:39:35+02:00
BB 42220: Allow for more file types to be forced-inline.
Firefox allows to open some files in the browser without any
confirmation, but this will result in a disk leak, because the file will
be downloaded to the temporary directory first (and not deleted, in some
cases).
A preference allows PDFs to be opened without being downloaded to disk.
So, we introduce a similar one to do the same for all the files that are
set to be opened automatically in the browser.
- - - - -
12794cd0 by hackademix at 2025-07-17T16:39:37+02:00
BB 42835: Create an actor to filter file data transfers
- - - - -
8a343468 by Beatriz Rizental at 2025-07-17T16:39:37+02:00
BB 42728: Modify ./mach lint to skip unused linters
- - - - -
2acfd6ed by Morgan at 2025-07-17T16:39:37+02:00
BB 43615: Add Gitlab Issue and Merge Request templates
- - - - -
d13a816d by Henry Wilkes at 2025-07-17T16:39:37+02:00
BB 41803: Add some developer tools for working on tor-browser.
- - - - -
5b54f479 by Henry Wilkes at 2025-07-17T16:39:43+02:00
fixup! BB 41803: Add some developer tools for working on tor-browser.
BB 43954: Handle lightweight tags for FIREFOX_.
- - - - -
db495998 by Henry Wilkes at 2025-07-17T16:39:49+02:00
fixup! BB 41803: Add some developer tools for working on tor-browser.
BB 43962: Update git rebase preprocessor for git 2.50.
- - - - -
3ceb32e7 by Henry Wilkes at 2025-07-17T17:08:55+02:00
fixup! BB 41803: Add some developer tools for working on tor-browser.
BB 43610: Add script for missing CSS variables.
- - - - -
cabbab2c by Richard Pospesel at 2025-07-17T17:08:59+02:00
BB 42683: Create script to generate issue triage csv file from bugzilla query and git logs
- - - - -
67538f7b by Henry Wilkes at 2025-07-17T17:08:59+02:00
BB 42305: Add script to combine translation files across versions.
- - - - -
3d19ce21 by Beatriz Rizental at 2025-07-17T17:09:00+02:00
BB 43535: Enable tests
- - - - -
4a8e31ad by Beatriz Rizental at 2025-07-17T17:09:00+02:00
Add CI for Base Browser
- - - - -
d0a32a3b by Pier Angelo Vendrame at 2025-07-17T17:09:00+02:00
Base Browser's .mozconfigs.
Bug 17858: Cannot create incremental MARs for hardened builds.
Define HOST_CFLAGS, etc. to avoid compiling programs such as mbsdiff
(which is part of mar-tools and is not distributed to end-users) with
ASan.
Bug 21849: Don't allow SSL key logging.
Bug 25741 - TBA: Disable features at compile-time
Define MOZ_ANDROID_NETWORK_STATE and MOZ_ANDROID_LOCATION
Bug 27623 - Export MOZILLA_OFFICIAL during desktop builds
This fixes a problem where some preferences had the wrong default value.
Also see bug 27472 where we made a similar fix for Android.
Bug 29859: Disable HLS support for now
Bug 30463: Explicitly disable MOZ_TELEMETRY_REPORTING
Bug 32493: Disable MOZ_SERVICES_HEALTHREPORT
Bug 33734: Set MOZ_NORMANDY to False
Bug 33851: Omit Parental Controls.
Bug 40252: Add --enable-rust-simd to our tor-browser mozconfig files
Bug 41584: Move some configuration options to base-browser level
- - - - -
0dbbe8eb by Pier Angelo Vendrame at 2025-07-17T17:09:00+02:00
Tweaks to the build system
Bug 40857: Modified the fat .aar creation file
This is a workaround to build fat .aars with the compiling enviornment
disabled.
Mozilla does not use a similar configuration, but either runs a Firefox
build and discards its output, or uses artifacts build.
We might switch to artifact builds too, and drop this patch, or write a
better one to upstream. But until then we need this patch.
See also https://bugzilla.mozilla.org/show_bug.cgi?id=1763770.
Bug 41458: Prevent `mach package-multi-locale` from actually creating a package
macOS builds need some files to be moved around with
./mach package-multi-locale to create multi-locale packages.
The required command isn't exposed through any other mach command.
So, we patch package-multi-locale both to prevent it from failing when
doing official builds and to detect any future changes on it.
- - - - -
6f163e45 by Pier Angelo Vendrame at 2025-07-17T17:09:01+02:00
BB 29320: Replace the gnu target with gnullvm for Rust.
- - - - -
92b15715 by Pier Angelo Vendrame at 2025-07-17T17:09:01+02:00
BB 42616: Remove VideoCaptureTest.kt.
This is a workaround to fix the GeckoView build with WebRTC disabled.
We should replace this workaround with a proper solution, that
excludes this test when MOZ_WEBRTC is undefined/False.
- - - - -
9cfb09d1 by Pier Angelo Vendrame at 2025-07-17T17:09:01+02:00
BB 41108: Remove privileged macOS installation from 102
- - - - -
474771ac by Dan Ballard at 2025-07-17T17:09:01+02:00
BB 41149: Re-enable DLL injection protection in all builds not just nightlies
- - - - -
499d693e by Henry Wilkes at 2025-07-17T17:09:02+02:00
BB 43092: Disable wayland by default in Base Browser.
- - - - -
bfee1211 by Matthew Finkel at 2025-07-17T17:09:02+02:00
BB 24796: Comment out excess permissions from GeckoView
The GeckoView AndroidManifest.xml is not preprocessed unlike Fennec's
manifest, so we can't use the ifdef preprocessor guards around the
permissions we do not want. Commenting the permissions is the
next-best-thing.
- - - - -
0fb0d02a by Matthew Finkel at 2025-07-17T17:09:02+02:00
BB 28125: Prevent non-Necko network connections
- - - - -
99118e50 by Mike Perry at 2025-07-17T17:09:02+02:00
BB 12974: Disable NTLM and Negotiate HTTP Auth
The Mozilla bugs: https://bugzilla.mozilla.org/show_bug.cgi?id=1046421,
https://bugzilla.mozilla.org/show_bug.cgi?id=1261591, tor-browser#27602
- - - - -
a686b94d by cypherpunks1 at 2025-07-17T17:09:03+02:00
BB 40717: Hide Windows SSO in settings
- - - - -
a2ab14e0 by Georg Koppen at 2025-07-17T17:09:03+02:00
BB 16285: Exclude ClearKey system for now
In the past the ClearKey system had not been compiled when specifying
--disable-eme. But that changed and it is even bundled nowadays (see:
Mozilla's bug 1300654). We don't want to ship it right now as the use
case for it is not really visible while the code had security
vulnerabilities in the past.
- - - - -
716bec09 by Kathy Brade at 2025-07-17T17:09:03+02:00
BB 21431: Clean-up system extensions shipped in Firefox
Only ship the pdfjs extension.
- - - - -
8b26a07b by Kathy Brade at 2025-07-17T17:09:03+02:00
BB 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
Hide elements on about:logins that mention sync, "Firefox LockWise", and
Mozilla's LockWise mobile apps.
Disable the "Create New Login" button when security.nocertdb is true.
- - - - -
860c1126 by Alex Catarineu at 2025-07-17T17:09:04+02:00
BB 41457: Remove Mozilla permissions
Bug 40025: Remove Mozilla add-on install permissions
- - - - -
4ae26a4c by Kathy Brade at 2025-07-17T17:09:04+02:00
BB 41662: Disable about:sync-logs
Even though we disable sync by default with
`identity.fxaccounts.enabled`, this about: page is still avilable.
We could throw an exception on the constructor of the related
component, but it would result only in an error in the console, without
a visible "this address does not look right" error page.
If we fix the issues with MOZ_SERVICES_SYNC, we can restore the
component.
- - - - -
6179098f by Morgan at 2025-07-17T17:09:04+02:00
BB 42716: Disable unwanted about: pages
- - - - -
43a107d2 by Arthur Edelstein at 2025-07-17T17:09:04+02:00
BB 26353: Prevent speculative connect that violated FPI.
Connections were observed in the catch-all circuit when
the user entered an https or http URL in the URL bar, or
typed a search term.
- - - - -
6e2588d7 by Alex Catarineu at 2025-07-17T17:09:05+02:00
BB 31740: Remove some unnecessary RemoteSettings instances
More concretely, SearchService.jsm 'hijack-blocklists' and
url-classifier-skip-urls.
Avoid creating instance for 'anti-tracking-url-decoration'.
If prefs are disabling their usage, avoid creating instances for
'cert-revocations' and 'intermediates'.
Do not ship JSON dumps for collections we do not expect to need. For
the ones in the 'main' bucket, this prevents them from being synced
unnecessarily (the code in remote-settings does so for collections
in the main bucket for which a dump or local data exists). For the
collections in the other buckets, we just save some size by not
shipping their dumps.
We also clear the collections database on the v2 -> v3 migration.
- - - - -
f76b8abe by cypherpunks1 at 2025-07-17T17:09:05+02:00
BB 41092: Add a RemoteSettings JSON dump for query-stripping
- - - - -
41da286d by cypherpunks1 at 2025-07-17T17:09:05+02:00
BB 42730: Patch RemoteSettings to use only local dumps as a data source
- - - - -
d247d4f1 by Pier Angelo Vendrame at 2025-07-17T18:08:57+02:00
fixup! BB 42730: Patch RemoteSettings to use only local dumps as a data source
TB 43852: Fix rebase errors.
- - - - -
98061ebf by Pier Angelo Vendrame at 2025-07-17T18:08:57+02:00
BB 41635: Disable the Normandy component
Do not include Normandy at all whenever MOZ_NORMANDY is False.
- - - - -
20ac28d2 by Georg Koppen at 2025-07-17T18:08:57+02:00
BB 30541: Disable WebGL readPixel() for web content
Related Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1428034
- - - - -
f0214b06 by Alex Catarineu at 2025-07-17T18:08:58+02:00
BB 28369: Stop shipping pingsender executable
- - - - -
3ddb388c by Henry Wilkes at 2025-07-17T18:08:58+02:00
BB 42630: Disable LaterRun module.
- - - - -
9b5ae35f by Pier Angelo Vendrame at 2025-07-17T18:08:58+02:00
BB 41599: Always return an empty string as network ID
Firefox computes an internal network ID used to detect network changes
and act consequently (e.g., to improve WebSocket UX).
However, there are a few ways to get this internal network ID, so we
patch them out, to be sure any new code will not be able to use them and
possibly link users.
We also sent a patch to Mozilla to seed the internal network ID, to
prevent any accidental leak in the future.
Upstream: https://bugzilla.mozilla.org/show_bug.cgi?id=1817756
- - - - -
e2d3bcc6 by Pier Angelo Vendrame at 2025-07-17T18:08:58+02:00
BB 43386: Use Firefox in the UA in RFP-exempt request.
XHR requests initiated by extensions are exempt from RFP.
Therefore, they report the actual app name, instead of Firefox, and the
actual Firefox minor version.
This happens whenever the app name has been customized and does not
match a hardcoded "Firefox".
- - - - -
098fd175 by Richard Pospesel at 2025-07-17T18:08:59+02:00
BB 41327: Disable UrlbarProviderInterventions
- - - - -
e03426ba by Richard Pospesel at 2025-07-17T18:08:59+02:00
BB 42037: Disable about:firefoxview page
- - - - -
ec761b4f by Mike Perry at 2025-07-17T18:08:59+02:00
Firefox preference overrides.
- - - - -
0f6bf85a by Henry Wilkes at 2025-07-17T18:08:59+02:00
fixup! Firefox preference overrides.
TB 43989: Disable the preference for the AI chatbot in the new sidebar.
- - - - -
5309bcad by Pier Angelo Vendrame at 2025-07-17T18:09:00+02:00
BB 43140: Tighten up fonts on Linux.
We ship a fontconfig configuration to esnure all Linux users have the
same defaults and reduce the chances of fingerprinting.
We used to add this file in tor-browser-build, but some users might
skip it by using the browser executable without the wrapper script.
Therefore, we decided to activate the file with the FontConfig API
instead of the environment variables.
Bug 41043: Hardcode the UI font on Linux
The mechanism to choose the UI font does not play well with our
fontconfig configuration. As a result, the final criterion to choose
the font for the UI was its version.
Since we hardcode Arimo as a default sans-serif on preferences, we use
it also for the UI. FontConfig will fall back to some other font for
scripts Arimo does not cover as expected (we tested with Japanese).
Bug 43141: Hardcode system-ui to Arimo.
- - - - -
64202248 by Pier Angelo Vendrame at 2025-07-17T18:54:51+02:00
BB 43322: Customize the font visibility lists.
Customize the lists of fonts to assign base visibility to in
base browser and derivatives.
Also, rename the files with the upstream lists, to make sure we do not
use them by mistake.
- - - - -
f69833a3 by Alex Catarineu at 2025-07-17T18:54:57+02:00
BB 30605: Honor privacy.spoof_english in Android
This checks `privacy.spoof_english` whenever `setLocales` is
called from Fenix side and sets `intl.accept_languages`
accordingly.
Bug 40198: Expose privacy.spoof_english pref in GeckoView
- - - - -
5bf5f364 by Pier Angelo Vendrame at 2025-07-17T18:54:57+02:00
BB 42562: Normalized the Accepted Languages on Android.
The OS language might be outside the list of actually supported
languages and it might leak the user's region.
Therefore, we force the locale reported in Accept-Language to match one
we support with translations, even when it means using a not exact
region tag.
- - - - -
562575fa by Alex Catarineu at 2025-07-17T18:54:57+02:00
BB 40171: Make WebRequest and GeckoWebExecutor First-Party aware
- - - - -
ef2ae3f6 by Alex Catarineu at 2025-07-17T18:54:57+02:00
BB 26345: Hide tracking protection UI
- - - - -
a73f6266 by Henry Wilkes at 2025-07-17T18:54:58+02:00
fixup! BB 26345: Hide tracking protection UI
TB 43947: Prevent import of ContentBlockingPrefs.
- - - - -
f3f0d5b0 by Henry Wilkes at 2025-07-17T18:54:58+02:00
BB 43109: Hide Firefox Relay from settings.
This should remain disabled, see tor-browser#42814.
- - - - -
ffd00e93 by Henry Wilkes at 2025-07-17T18:54:58+02:00
BB 42777: Hide Website Privacy Preferences.
We hide the Website Privacy Preferences section, which controls the
"global privacy control" (GPC) and "do not track" (DNT) settings.
- - - - -
3e4549cd by Morgan at 2025-07-17T18:54:58+02:00
BB 42070: Hide "Use smooth scrolling" from settings
- - - - -
925a5b3c by Arthur Edelstein at 2025-07-17T18:54:59+02:00
BB 18905: Hide unwanted items from help menu
Bug 25660: Remove the "New Private Window" option
- - - - -
2a83a1ed by Pier Angelo Vendrame at 2025-07-17T18:54:59+02:00
BB 41739: Remove "Website appearance" from about:preferences.
It is ignored because of RFP and it is confusing for users.
- - - - -
212b7273 by Henry Wilkes at 2025-07-17T18:54:59+02:00
BB 43117: Hide "Always underline links" from settings.
- - - - -
d8230c21 by Pier Angelo Vendrame at 2025-07-17T18:54:59+02:00
BB 42774: Always hide the third-pary certs UI.
- - - - -
38df0f08 by Henry Wilkes at 2025-07-17T18:55:00+02:00
BB 43118: Hide feature recommendation (CFR) settings.
- - - - -
737525e7 by Pier Angelo Vendrame at 2025-07-17T18:55:00+02:00
BB 9173: Change the default Firefox profile directory to be relative.
This commit makes Firefox look for the default profile directory in a
directory relative to the binary path.
The directory can be specified through the --with-relative-data-dir.
This is relative to the same directory as the firefox main binary for
Linux and Windows.
On macOS, we remove Contents/MacOS from it.
Or, in other words, the directory is relative to the application
bundle.
This behavior can be overriden at runtime, by placing a file called
system-install adjacent to the firefox main binary (also on macOS).
- - - - -
cb807d72 by Pier Angelo Vendrame at 2025-07-17T18:55:00+02:00
BB 42773: Replace ~ with the original home.
In Bug 93141, Mozilla started sending users to their home when they type
~ in the URL bar.
On Linux, we change $HOME for various reason, therefore you would be
redirected to the spoofed home directory when typing ~.
So, we check if the original home directory is known, and use that,
instead.
- - - - -
a3928883 by Alex Catarineu at 2025-07-17T18:55:00+02:00
BB 27604: Fix addon issues when moving the profile directory
Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1429838
- - - - -
9aeff2fb by Mike Perry at 2025-07-17T18:55:01+02:00
BB 13028: Prevent potential proxy bypass cases.
It looks like these cases should only be invoked in the NSS command line
tools, and not the browser, but I decided to patch them anyway because there
literally is a maze of network function pointers being passed around, and it's
very hard to tell if some random code might not pass in the proper proxied
versions of the networking code here by accident.
Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1433509
- - - - -
f286bd08 by Pier Angelo Vendrame at 2025-07-17T18:55:01+02:00
BB 40309: Avoid using regional OS locales
Avoid regional OS locales if the pref
`intl.regional_prefs.use_os_locales` is false but RFP is enabled.
- - - - -
62d3b92f by Matthew Finkel at 2025-07-17T18:55:01+02:00
BB 40432: Prevent probing installed applications
Bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1711084
- - - - -
40692993 by Henry Wilkes at 2025-07-17T18:55:01+02:00
BB 29745: Limit remote access to content accessible resources
- - - - -
21672662 by cypherpunks1 at 2025-07-17T18:55:02+02:00
BB 33955: When copying an image only copy the image contents to the clipboard
- - - - -
d5387f2c by cypherpunks1 at 2025-07-17T18:55:02+02:00
BB 41791: Omit the source URL when copying page contents to the clipboard
- - - - -
f97ab225 by Pier Angelo Vendrame at 2025-07-17T18:55:02+02:00
BB 43196: Remove the vendor name from media notifications on Linux.
Firefox shows "vendor remoteName" as a title of the "... is playing
media" notification on Linux.
However, for our browser the remote name is enough, and prepending the
vendor to it creates a string users usually never see.
- - - - -
dba9e6dc by Pier Angelo Vendrame at 2025-07-17T18:55:02+02:00
Base Browser strings
This commit adds all the strings needed by following Base Browser
patches.
- - - - -
6496d989 by Henry Wilkes at 2025-07-17T18:55:03+02:00
fixup! Base Browser strings
TB 43905: Add base-browser.ftl to about:addons.
- - - - -
df95c443 by Henry Wilkes at 2025-07-17T18:55:03+02:00
BB 42583: Modify moz-support-link for Base Browser.
- - - - -
f67dbe83 by Pier Angelo Vendrame at 2025-07-17T18:55:03+02:00
BB 41369: Improve Firefox language settings for multi-lingual packages
Change the language selector to be sorted by language code, rather than
name, and to display the language code to the user.
Bug 41372: Handle Japanese as a special case in preferences on macOS
Japanese is treated in a special way on macOS. However, seeing the
Japanese language tag could be confusing for users, and moreover the
language name is not localized correctly like other langs.
Bug 41378: Tell users that they can change their language at the first start
With multi-lingual builds, Tor Browser matches the user's system
language, but some users might want to change it.
So, we tell them that it is possible, but only once.
- - - - -
9592e11f by p13dz at 2025-07-17T18:55:03+02:00
BB 40283: Workaround for the file upload bug
- - - - -
26c0fb22 by hackademix at 2025-07-17T18:55:04+02:00
BB 42019: Empty browser's clipboard on browser shutdown
- - - - -
51c2f5f5 by hackademix at 2025-07-17T18:55:04+02:00
BB 42084: Ensure English spoofing works even if preferences are set out of order.
- - - - -
46afa587 by Pier Angelo Vendrame at 2025-07-17T18:55:04+02:00
BB 41930: Remove the UI to customize accept_languages.
- - - - -
f4345a2f by hackademix at 2025-07-17T18:55:04+02:00
BB 32308: Use direct browser sizing for letterboxing.
Bug 30556: align letterboxing with 200x100 new win width stepping
- - - - -
ef64e7c9 by hackademix at 2025-07-17T18:55:05+02:00
BB 41631: Prevent weird initial window dimensions caused by subpixel computations
- - - - -
ef96c05c by hackademix at 2025-07-17T18:55:05+02:00
BB 41918: Option to reuse last window size when letterboxing is enabled.
- - - - -
97e6944c by hackademix at 2025-07-17T18:55:05+02:00
BB 41916: Letterboxing preferences UI
- - - - -
d9185426 by hackademix at 2025-07-17T18:55:05+02:00
BB 41695: Warn on window maximization without letterboxing in RFPHelper module
- - - - -
967f3a15 by hackademix at 2025-07-17T18:55:06+02:00
BB 42443: Shrink window to match letterboxing size when the emtpy area is clicked.
- - - - -
05e74319 by hackademix at 2025-07-17T18:55:06+02:00
BB 41919: Letterboxing, add temporarily visible web content-size indicator on window resizing.
- - - - -
0376a66a by Henry Wilkes at 2025-07-17T18:55:06+02:00
BB 42528: Don't leak system scrollbar size on windows.
- - - - -
904e2bb1 by Henry Wilkes at 2025-07-17T18:55:06+02:00
BB 31575: Disable Firefox Home (Activity Stream)
Treat about:blank as the default home page and new tab page.
Avoid loading AboutNewTab in BrowserGlue.sys.mjs in order
to avoid several network requests that we do not need.
Bug 41624: Disable about:pocket-* pages.
Bug 40144: Redirect about:privatebrowsing to the user's home
- - - - -
2137d205 by Henry Wilkes at 2025-07-17T18:55:07+02:00
amend! BB 31575: Disable Firefox Home (Activity Stream)
BB 31575: Disable Firefox Home (Activity Stream)
Treat about:blank as the default home page and new tab page.
BB 43886: Disable the newtab component/addon.
Bug 41624: Disable about:pocket-* pages.
Bug 40144: Redirect about:privatebrowsing to the user's home
- - - - -
3f83d92b by Henry Wilkes at 2025-07-17T18:55:07+02:00
fixup! BB 31575: Disable Firefox Home (Activity Stream)
TB 43886: Drop base-browser changes to AboutNewTabRedirector.sys.mjs
since the module is now excluded.
- - - - -
4bb3cb7f by Kathy Brade at 2025-07-17T18:55:07+02:00
BB 4234: Use the Firefox Update Process for Base Browser.
Windows: disable "runas" code path in updater (15201).
Windows: avoid writing to the registry (16236).
Also includes fixes for tickets 13047, 13301, 13356, 13594, 15406,
16014, 16909, 24476, and 25909.
Also fix bug 27221: purge the startup cache if the Base Browser
version changed (even if the Firefox version and build ID did
not change), e.g., after a minor Base Browser update.
Also fix 32616: Disable GetSecureOutputDirectoryPath() functionality.
Bug 26048: potentially confusing "restart to update" message
Within the update doorhanger, remove the misleading message that mentions
that windows will be restored after an update is applied, and replace the
"Restart and Restore" button label with an existing
"Restart to update Tor Browser" string.
Bug 28885: notify users that update is downloading
Add a "Downloading Base Browser update" item which appears in the
hamburger (app) menu while the update service is downloading a MAR
file. Before this change, the browser did not indicate to the user
that an update was in progress, which is especially confusing in
Tor Browser because downloads often take some time. If the user
clicks on the new menu item, the about dialog is opened to allow
the user to see download progress.
As part of this fix, the update service was changed to always show
update-related messages in the hamburger menu, even if the update
was started in the foreground via the about dialog or via the
"Check for Tor Browser Update" toolbar menu item. This change is
consistent with the Tor Browser goal of making sure users are
informed about the update process.
Removed #28885 parts of this patch which have been uplifted to Firefox.
- - - - -
447d65a6 by Pier Angelo Vendrame at 2025-07-17T18:55:07+02:00
BB 42061: Create an alpha update channel.
- - - - -
07c0ae2d by Nicolas Vigier at 2025-07-17T18:55:08+02:00
BB 41682: Add base-browser nightly mar signing key
- - - - -
a790a3ec by Pier Angelo Vendrame at 2025-07-17T18:55:08+02:00
BB 41603: Customize the creation of MOZ_SOURCE_URL
MOZ_SOURCE_URL is created by combining MOZ_SOURCE_REPO and
MOZ_SOURCE_CHANGESET.
But the code takes for granted that it refers to a Hg instance, so it
combines them as `$MOZ_SOURCE_REPO/rev/$MOZ_SOURCE_CHANGESET`.
With this commit, we change this logic to combine them to create a URL
that is valid for GitLab.
$MOZ_SOURCE_CHANGESET needs to be a commit hash, not a branch or a tag.
If that is needed, we could use /-/tree/, instead of /-/commit/.
- - - - -
07d45b1a by Pier Angelo Vendrame at 2025-07-17T18:55:08+02:00
BB 42438: Tweaks to the migration wizard.
Remove the items not compatible with our features (such as history) from
the migration wizard.
On Linux, allow to specify an alternative home directory, since we
usually change $HOME in our startup script.
- - - - -
f81f01f0 by Alex Catarineu at 2025-07-17T18:55:08+02:00
BB 40069: Add helpers for message passing with extensions
- - - - -
1bd88042 by Matthew Finkel at 2025-07-17T18:55:09+02:00
BB 41598: Prevent NoScript from being removed/disabled.
Bug 40253: Explicitly allow NoScript in Private Browsing mode.
- - - - -
321cc0e9 by Henry Wilkes at 2025-07-17T18:55:09+02:00
BB 41581: Hide NoScript extension's toolbar button by default.
This hides it from both the toolbar and the unified extensions panel.
We also hide the unified-extension-button if the panel would be empty:
not including the NoScript button when it is hidden. As a result, this
will be hidden by default until a user installs another extension (or
shows the NoScript button and unpins it).
- - - - -
e08d8b36 by hackademix at 2025-07-17T18:55:09+02:00
BB 41834: Hide "Can't Be Removed - learn more" menu line for uninstallable add-ons
- - - - -
4afd58b9 by Pier Angelo Vendrame at 2025-07-17T18:55:09+02:00
BB 40925: Implemented the Security Level component
This component adds a new Security Level toolbar button which visually
indicates the current global security level via icon (as defined by the
extensions.torbutton.security_slider pref), a drop-down hanger with a
short description of the current security level, and a new section in
the about:preferences#privacy page where users can change their current
security level. In addition, the hanger and the preferences page will
show a visual warning when the user has modified prefs associated with
the security level and provide a one-click 'Restore Defaults' button to
get the user back on recommended settings.
Bug 40125: Expose Security Level pref in GeckoView
- - - - -
fabff348 by Henry Wilkes at 2025-07-17T18:55:10+02:00
fixup! BB 40925: Implemented the Security Level component
TB 43610: Update CSS variable names.
Also change the security level shield background to a new variable with
closer semantics.
- - - - -
c896d844 by Pier Angelo Vendrame at 2025-07-17T18:55:10+02:00
BB 40926: Implemented the New Identity feature
- - - - -
0e5adbfd by Henry Wilkes at 2025-07-17T18:55:10+02:00
fixup! BB 40926: Implemented the New Identity feature
TB 43638: Add the cmd_newIdentity command element and use it.
- - - - -
97321ea6 by Henry Wilkes at 2025-07-17T18:55:10+02:00
BB 41736: Customize toolbar for base-browser.
- - - - -
5de65ca9 by Pier Angelo Vendrame at 2025-07-17T18:55:11+02:00
BB 42027: Base Browser migration procedures.
This commit implmenents the the Base Browser's version of _migrateUI.
- - - - -
12c1cb96 by Neel Chauhan at 2025-07-17T18:55:11+02:00
fixup! BB 42027: Base Browser migration procedures.
BB 43629: Check for this._isNewProfile in _migrateUIBB()
- - - - -
295f72d1 by Henry Wilkes at 2025-07-17T18:55:11+02:00
TB 42308: Create README for tor-browser.
We drop the README.txt that comes from Mozilla Firefox and add README.md
for tor-browser.
- - - - -
e7a51114 by Morgan at 2025-07-17T18:55:11+02:00
TB 43616: Customize Gitlab Issue and Merge Request templates
- - - - -
339a07b2 by Beatriz Rizental at 2025-07-17T18:55:12+02:00
Add CI for Tor Browser
- - - - -
dff633f5 by Beatriz Rizental at 2025-07-17T18:55:12+02:00
fixup! Add CI for Tor Browser
Just use latest Rust and Node.js in the base container.
- - - - -
dfa603c7 by Richard Pospesel at 2025-07-17T18:55:12+02:00
TB 41089: Add tor-browser build scripts + Makefile to tor-browser
- - - - -
23c5d5cb by Alex Catarineu at 2025-07-17T18:55:12+02:00
Add TorStrings module for localization
- - - - -
f483f6c0 by Henry Wilkes at 2025-07-17T18:55:13+02:00
Tor Browser strings
This commit adds all the strings needed for Tor Browser patches.
- - - - -
1e0f0002 by Henry Wilkes at 2025-07-17T18:55:13+02:00
Tor Browser localization migration scripts.
- - - - -
3fbc721d by Mike Perry at 2025-07-17T18:55:13+02:00
TB 2176: Rebrand Firefox to TorBrowser
See also Bugs #5194, #7187, #8115, #8219.
This patch does some basic renaming of Firefox to TorBrowser. The rest of the
branding is done by images and icons.
Also fix bug 27905.
Bug 25702: Update Tor Browser icon to follow design guidelines
- Updated all of the branding in /browser/branding/official with new 'stable'
icon series.
- Updated /extensions/onboarding/content/img/tor-watermark.png with new icon and
add the source svg in the same directory
- Copied /browser/branding/official over /browser/branding/nightly and the new
/browser/branding/alpha directories. Replaced content with 'nightly' and
'alpha' icon series.
Updated VisualElements_70.png and VisualElements_150.png with updated icons in
each branding directory (fixes #22654)
- Updated firefox.VisualElementsManfiest.xml with updated colors in each
branding directory
- Added firefox.svg to each branding directory from which all the other icons
are derived (apart from document.icns and document.ico)
- Added default256.png and default512.png icons
- Updated aboutTBUpdate.css to point to branding-aware icon128.png and removed
original icon
- Use the Tor Browser icon within devtools/client/themes/images/.
Bug 30631: Blurry Tor Browser icon on macOS app switcher
It would seem the png2icns tool does not generate correct icns files and
so on macOS the larger icons were missing resulting in blurry icons in
the OS chrome. Regenerated the padded icons in a macOS VM using
iconutil.
Bug 28196: preparations for using torbutton tor-browser-brand.ftl
A small change to Fluent FileSource class is required so that we
can register a new source without its supported locales being
counted as available locales for the browser.
Bug 31803: Replaced about:debugging logo with flat version
Bug 21724: Make Firefox and Tor Browser distinct macOS apps
When macOS opens a document or selects a default browser, it sometimes
uses the CFBundleSignature. Changing from the Firefox MOZB signature to
a different signature TORB allows macOS to distinguish between Firefox
and Tor Browser.
Bug 32092: Fix Tor Browser Support link in preferences
For bug 40562, we moved onionPattern* from bug 27476 to here, as
about:tor needs these files but it is included earlier.
Bug 41278: Create Tor Browser styled pdf logo similar to the vanilla Firefox one
Bug 42088: New application icons (used in-app and on linux).
Bug 42087: New application icons (windows).
- - - - -
b325a2e7 by Henry Wilkes at 2025-07-17T18:55:13+02:00
Customize moz-toggle for tor-browser.
- - - - -
7ca797ca by Henry Wilkes at 2025-07-17T18:55:14+02:00
TB 43087: Add onion-pattern to be used on Tor pages.
- - - - -
b7ee0821 by hackademix at 2025-07-17T18:55:14+02:00
TB 41917: Tor brand-specific styles.
- - - - -
2c22acc3 by Henry Wilkes at 2025-07-17T18:55:14+02:00
fixup! TB 41917: Tor brand-specific styles.
TB 43879: revert commit 7d3002c8b84ce892f47e3265de50b0746b6b26de.
- - - - -
3089594d by Henry Wilkes at 2025-07-17T18:55:14+02:00
TB 41817: tor-browser semantic colors.
- - - - -
78a3e663 by Henry Wilkes at 2025-07-17T18:55:15+02:00
TB 41917: Change letterboxing styling for Tor Browser.
- - - - -
47649abf by Henry Wilkes at 2025-07-17T18:55:15+02:00
TB 42110: Add TorUIUtils module for common tor component methods.
- - - - -
cffbdf00 by Henry Wilkes at 2025-07-17T18:55:15+02:00
Add purple tor version of the loading APNG.
- - - - -
92b8275b by Henry Wilkes at 2025-07-17T18:55:15+02:00
TB 42583: Modify moz-support-link for Tor Browser.
- - - - -
2dd3457e by sanketh at 2025-07-17T18:55:16+02:00
TB 40209: Implement Basic Crypto Safety
Adds a CryptoSafety actor which detects when you've copied a crypto
address from a HTTP webpage and shows a warning.
Closes #40209.
Bug 40428: Fix string attribute names
- - - - -
6c422341 by Mike Perry at 2025-07-17T18:55:16+02:00
TB3: Tor Browser's official .mozconfigs.
Also:
Add an --enable-tor-browser-data-outside-app-dir configure option
Add --with-tor-browser-version configure option
Bug 31457: disable per-installation profiles
The dedicated profiles (per-installation) feature does not interact
well with our bundled profiles on Linux and Windows, and it also causes
multiple profiles to be created on macOS under TorBrowser-Data.
Bug 31935: Disable profile downgrade protection.
Since Tor Browser does not support more than one profile, disable
the prompt and associated code that offers to create one when a
version downgrade situation is detected.
Add --enable-tor-browser-update build option
Bug 40793: moved Tor configuration options from old-configure.in to moz.configure
Bug 41584: Move some configuration options to base-browser level
- - - - -
e5d7d25e by Henry Wilkes at 2025-07-17T18:55:16+02:00
TB 41340: Enable TOR_BROWSER_NIGHTLY_BUILD features for dev and nightly builds
tor-browser#41285: Enable fluent warnings.
- - - - -
dfebcf6a by Pier Angelo Vendrame at 2025-07-17T18:55:16+02:00
TB 40562: Added Tor Browser preferences to 000-tor-browser.js
Before reordering patches, we used to keep the Tor-related patches
(torbutton and tor-launcher) at the beginning.
After that issue, we decided to move them towards the end.
In addition to that, we have decided to move Tor Browser-only
preferences there, too, to make Base Browser-only fixups easier to
apply.
- - - - -
1f259c98 by Pier Angelo Vendrame at 2025-07-17T18:55:17+02:00
TB 13252: Customize profile management on macOS
On macOS we allow both portable mode and system installation.
However, in the latter case, we customize Firefox's directories to
match the hierarchy we use for the portable mode.
Also, display an informative error message if the TorBrowser-Data
directory cannot be created due to an "access denied" or a
"read only volume" error.
- - - - -
3fb69fd2 by Pier Angelo Vendrame at 2025-07-17T18:55:17+02:00
TB 40933: Add tor-launcher functionality
Bug 41926: Reimplement the control port
- - - - -
8097c04c by Cecylia Bocovich at 2025-07-17T18:55:17+02:00
Lox integration
- - - - -
7f401260 by Henry Wilkes at 2025-07-17T18:55:17+02:00
fixup! Lox integration
TB 43765: Disable lox on alpha channel.
- - - - -
37ffeffa by Richard Pospesel at 2025-07-17T18:55:18+02:00
TB 40597: Implement TorSettings module
- migrated in-page settings read/write implementation from about:preferences#tor
to the TorSettings module
- TorSettings initially loads settings from the tor daemon, and saves them to
firefox prefs
- TorSettings notifies observers when a setting has changed; currently only
QuickStart notification is implemented for parity with previous preference
notify logic in about:torconnect and about:preferences#tor
- about:preferences#tor, and about:torconnect now read and write settings
thorugh the TorSettings module
- all tor settings live in the torbrowser.settings.* preference branch
- removed unused pref modify permission for about:torconnect content page from
AsyncPrefs.jsm
Bug 40645: Migrate Moat APIs to Moat.jsm module
- - - - -
2c57cef4 by Henry Wilkes at 2025-07-17T18:55:18+02:00
fixup! TB 40597: Implement TorSettings module
TB 43766: Save TorSettings to preferences in separate groups.
- - - - -
bcb980e1 by Henry Wilkes at 2025-07-17T18:55:18+02:00
fixup! TB 40597: Implement TorSettings module
TB 43766: Update a FIXME comment to point to a newer issue.
- - - - -
1f9e2cef by Pier Angelo Vendrame at 2025-07-17T18:55:18+02:00
fixup! TB 40597: Implement TorSettings module
TBB 41508: Switch built-in meek bridge to meek-unredacted
- - - - -
4b1285ee by Arthur Edelstein at 2025-07-17T18:55:19+02:00
TB 3455: Add DomainIsolator, for isolating circuit by domain.
Add an XPCOM component that registers a ProtocolProxyChannelFilter
which sets the username/password for each web request according to
url bar domain.
Bug 9442: Add New Circuit button
Bug 13766: Set a 10 minute circuit dirty timeout for the catch-all circ.
Bug 19206: Include a 128 bit random tag as part of the domain isolator nonce.
Bug 19206: Clear out the domain isolator state on `New Identity`.
Bug 21201.2: Isolate by firstPartyDomain from OriginAttributes
Bug 21745: Fix handling of catch-all circuit
Bug 41741: Refactor the domain isolator and new circuit
- - - - -
1bd9dbcd by Henry Wilkes at 2025-07-17T18:55:19+02:00
fixup! TB 3455: Add DomainIsolator, for isolating circuit by domain.
TB 43638: Update the usage of cmd_newCircuit.
- - - - -
5e4272c1 by Henry Wilkes at 2025-07-17T18:55:19+02:00
TB 41600: Add a tor circuit display panel.
- - - - -
f6e8f90c by Pier Angelo Vendrame at 2025-07-17T18:55:20+02:00
TB 42247: Android helpers for the TorProvider
GeckoView is missing some API we use on desktop for the integration
with the tor daemon, such as subprocess.
Therefore, we need to implement them in Java and plumb the data
back and forth between JS and Java.
- - - - -
d654d5cd by hackademix at 2025-07-17T18:55:20+02:00
TB 8324: Prevent DNS proxy bypasses caused by Drag&Drop
Bug 41613: Skip Drang & Drop filtering for DNS-safe URLs
- - - - -
377481f5 by Matthew Finkel at 2025-07-17T18:55:20+02:00
TB 25741: TBA: Disable GeckoNetworkManager
The browser should not need information related to the network
interface or network state, tor should take care of that.
- - - - -
466044e7 by Pier Angelo Vendrame at 2025-07-17T18:55:20+02:00
TB 40807: Added QRCode.js to toolkit/modules
- - - - -
6a018e74 by Richard Pospesel at 2025-07-17T18:55:21+02:00
TB 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
This patch adds a new about:preferences#connection page which allows
modifying bridge, proxy, and firewall settings from within Tor Browser.
All of the functionality present in tor-launcher's Network
Configuration panel is present:
- Setting built-in bridges
- Requesting bridges from BridgeDB via moat
- Using user-provided bridges
- Configuring SOCKS4, SOCKS5, and HTTP/HTTPS proxies
- Setting firewall ports
- Viewing and Copying Tor's logs
- The Networking Settings in General preferences has been removed
Bug 40774: Update about:preferences page to match new UI designs
- - - - -
ae8f464d by Henry Wilkes at 2025-07-17T18:55:21+02:00
fixup! TB 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
TB 43610: Update CSS variable names.
- - - - -
5ca3b2c3 by Richard Pospesel at 2025-07-17T18:55:21+02:00
TB 27476: Implement about:torconnect captive portal within Tor Browser
- implements new about:torconnect page as tor-launcher replacement
- adds new torconnect component to browser
- tor process management functionality remains implemented in tor-launcher through the TorProtocolService module
- adds warning/error box to about:preferences#tor when not connected to tor
Bug 40773: Update the about:torconnect frontend page to match additional UI flows.
Bug 41608: Add a toolbar status button and a urlbar "Connect" button.
- - - - -
de039da0 by Henry Wilkes at 2025-07-17T18:55:21+02:00
fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser
TB 43610: Update CSS variable names.
Also drop the --onion-opacity and --onion-color variables and use
--icon-color instead.
- - - - -
e2b836b5 by Pier Angelo Vendrame at 2025-07-17T18:55:22+02:00
Temporary changes to about:torconnect for Android.
We are planning of tempoorarily using about:torconnect on Android, until
the native UX is ready.
- - - - -
5406b8b2 by Henry Wilkes at 2025-07-17T18:55:22+02:00
fixup! Temporary changes to about:torconnect for Android.
TB 43610: Drop the --onion-color variable.
- - - - -
b066d168 by Henry Wilkes at 2025-07-17T18:55:22+02:00
TB 43405: Show a prompt whenever we fail to apply Tor settings.
- - - - -
be867f37 by Henry Wilkes at 2025-07-17T18:59:52+02:00
TB 7494: Create local home page for TBB.
Bug 41333: Update about:tor to new design. Including:
+ make the favicon match the branding icon.
+ make the location bar show a search icon.
- - - - -
6cc1491b by Henry Wilkes at 2025-07-17T18:59:55+02:00
fixup! TB 7494: Create local home page for TBB.
TB 43886: Move about:tor redirector to browser/components/about/ and
change the home page to about:tor.
- - - - -
e6c3a0a6 by Henry Wilkes at 2025-07-17T18:59:55+02:00
fixup! TB 7494: Create local home page for TBB.
TB 42738: Temporarily revert the about:tor changes to
BrowserContentHandler.sys.mjs.
- - - - -
02e7ebba by Henry Wilkes at 2025-07-17T18:59:56+02:00
fixup! TB 7494: Create local home page for TBB.
TB 43929: Update about:tor override page logic for ESR 140.
Unlike ESR 128, we do not try and move the startPage logic to earlier in
the method since it would complicate the patch and upstream's logic.
Instead, we delay out duplicate about:tor logic until the end of the
method.
- - - - -
9b911287 by Henry Wilkes at 2025-07-17T18:59:56+02:00
fixup! TB 7494: Create local home page for TBB.
TB 43930: Centre-align the onionize toggle.
- - - - -
9eb85b41 by Pier Angelo Vendrame at 2025-07-17T18:59:56+02:00
TB 41668: Tweaks to the Base Browser updater for Tor Browser
This commit was once part of "Bug 4234: Use the Firefox Update Process
for Tor Browser.".
However, some parts of it were not needed for Base Browser and some
derivative browsers.
Therefore, we extracted from that commit the parts for Tor Browser
legacy, and we add them back to the patch set with this commit.
- - - - -
9c8bd72a by Kathy Brade at 2025-07-17T18:59:56+02:00
TB 12647: Support symlinks in the updater.
- - - - -
a1103b4d by Georg Koppen at 2025-07-17T18:59:57+02:00
TB 32658: Create a new MAR signing key
It's time for our rotation again: Move the backup key in the front
position and add a new backup key.
Bug 33803: Move our primary nightly MAR signing key to tor-browser
Bug 33803: Add a secondary nightly MAR signing key
- - - - -
3e4e73b1 by Pier Angelo Vendrame at 2025-07-17T18:59:57+02:00
TB 42891: Set the bundled search engine for Tor Browser.
After upstream changes between Firefox 115 and 128, we had to
completely rework the way in which we define our search engines.
This commit replaces the old "Omnibox: Add DDG, Startpage, Disconnect,
Youtube, Twitter; remove Amazon, eBay, bing".
With that commit, we customized a list of addons IDs to ship as
built-in search engines, but then upsteam moved to using only
RemoteSettings.
The configuration has many more fields, and it would be quite long to
include it in the source code. Therefore, we use some local JSON files
and load the settings from them.
- - - - -
7dc3d2b5 by Henry Wilkes at 2025-07-17T18:59:57+02:00
TB 41906: Hide DNS over HTTPS preferences.
- - - - -
5db52587 by Richard Pospesel at 2025-07-17T18:59:57+02:00
TB 23247: Communicating security expectations for .onion
Encrypting pages hosted on Onion Services with SSL/TLS is redundant
(in terms of hiding content) as all traffic within the Tor network is
already fully encrypted. Therefore, serving HTTP pages from an Onion
Service is more or less fine.
Prior to this patch, Tor Browser would mostly treat pages delivered
via Onion Services as well as pages delivered in the ordinary fashion
over the internet in the same way. This created some inconsistencies
in behaviour and misinformation presented to the user relating to the
security of pages delivered via Onion Services:
- HTTP Onion Service pages did not have any 'lock' icon indicating
the site was secure
- HTTP Onion Service pages would be marked as unencrypted in the Page
Info screen
- Mixed-mode content restrictions did not apply to HTTP Onion Service
pages embedding Non-Onion HTTP content
This patch fixes the above issues, and also adds several new 'Onion'
icons to the mix to indicate all of the various permutations of Onion
Services hosted HTTP or HTTPS pages with HTTP or HTTPS content.
Strings for Onion Service Page Info page are pulled from Torbutton's
localization strings.
- - - - -
f5f5d3cb by Kathy Brade at 2025-07-17T18:59:58+02:00
TB 30237: Add v3 onion services client authentication prompt
When Tor informs the browser that client authentication is needed,
temporarily load about:blank instead of about:neterror and prompt
for the user's key.
If a correctly formatted key is entered, use Tor's ONION_CLIENT_AUTH_ADD
control port command to add the key (via Torbutton's control port
module) and reload the page.
If the user cancels the prompt, display the standard about:neterror
"Unable to connect" page. This requires a small change to
browser/actors/NetErrorChild.jsm to account for the fact that the
docShell no longer has the failedChannel information. The failedChannel
is used to extract TLS-related error info, which is not applicable
in the case of a canceled .onion authentication prompt.
Add a leaveOpen option to PopupNotifications.show so we can display
error messages within the popup notification doorhanger without
closing the prompt.
Add support for onion services strings to the TorStrings module.
Add support for Tor extended SOCKS errors (Tor proposal 304) to the
socket transport and SOCKS layers. Improved display of all of these
errors will be implemented as part of bug 30025.
Also fixes bug 19757:
Add a "Remember this key" checkbox to the client auth prompt.
Add an "Onion Services Authentication" section within the
about:preferences "Privacy & Security section" to allow
viewing and removal of v3 onion client auth keys that have
been stored on disk.
Also fixes bug 19251: use enhanced error pages for onion service errors.
- - - - -
51fed0f2 by Henry Wilkes at 2025-07-17T18:59:58+02:00
fixup! TB 30237: Add v3 onion services client authentication prompt
TB 43610: Update CSS variable names.
- - - - -
305b7d42 by Alex Catarineu at 2025-07-17T18:59:58+02:00
TB 21952: Implement Onion-Location
Whenever a valid Onion-Location HTTP header (or corresponding HTML
<meta> http-equiv attribute) is found in a document load, we either
redirect to it (if the user opted-in via preference) or notify the
presence of an onionsite alternative with a badge in the urlbar.
- - - - -
cdd9dc94 by Pier Angelo Vendrame at 2025-07-17T18:59:59+02:00
TB 40458: Implement .tor.onion aliases
We have enabled HTTPS-Only mode, therefore we do not need
HTTPS-Everywhere anymore.
However, we want to keep supporting .tor.onion aliases (especially for
securedrop).
Therefore, in this patch we implemented the parsing of HTTPS-Everywhere
rulesets, and the redirect of .tor.onion domains.
Actually, Tor Browser believes they are actual domains. We change them
on the fly on the SOCKS proxy requests to resolve the domain, and on
the code that verifies HTTPS certificates.
- - - - -
340d7753 by Henry Wilkes at 2025-07-17T18:59:59+02:00
fixup! TB 40458: Implement .tor.onion aliases
TB 43610: Update CSS variable names.
- - - - -
d0814f65 by Pier Angelo Vendrame at 2025-07-17T18:59:59+02:00
TB 11698: Incorporate Tor Browser Manual pages into Tor Browser
This patch associates the about:manual page to a translated page that
must be injected to browser/omni.ja after the build.
The content must be placed in chrome/browser/content/browser/manual/, so
that is then available at chrome://browser/content/manual/.
We preferred giving absolute freedom to the web team, rather than having
to change the patch in case of changes on the documentation.
- - - - -
9e7b1203 by Pier Angelo Vendrame at 2025-07-17T18:59:59+02:00
TB 41435: Add a Tor Browser migration function
For now this function only deletes old language packs for which we are
already packaging the strings with the application.
- - - - -
3510275d by Dan Ballard at 2025-07-17T19:00:00+02:00
TB 40701: Add security warning when downloading a file
Shown in the downloads panel, about:downloads and places.xhtml.
- - - - -
8c5584a3 by Henry Wilkes at 2025-07-17T19:00:00+02:00
TB 41736: Customize toolbar for tor-browser.
- - - - -
f0dfd260 by hackademix at 2025-07-17T19:00:00+02:00
TB 41728: Pin bridges.torproject.org domains to Let's Encrypt's root cert public key
- - - - -
11cbc878 by Richard Pospesel at 2025-07-17T19:00:00+02:00
TB 41822: Unconditionally disable default browser UX in about:preferences
- - - - -
fbaa70df by Cecylia Bocovich at 2025-07-17T19:00:01+02:00
Temporary commit: manually place generated wasm files
These files are built reproducibly using tor-browser-build: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/merge_re…
We're manually adding them here while working on the interface, but
eventually these should be placed in the right location using
tor-browser-build.
- - - - -
b9be5411 by Pier Angelo Vendrame at 2025-07-17T19:00:01+02:00
[android] TBA strings
- - - - -
6d2b92b5 by Dan Ballard at 2025-07-17T19:00:01+02:00
TB 42660: Disable ProxySelector.openConnectionWithProxy and NOPify CrashReporter.sendCrashReport
- - - - -
559f2399 by Dan Ballard at 2025-07-17T19:00:01+02:00
TB 43006: Disable RFP for Font Visibility on Android
- - - - -
a4fc4254 by Matthew Finkel at 2025-07-17T19:00:02+02:00
TB 40005: [android] Modify Default toolbar menu
Originally android-components#40005.
- - - - -
921a29aa by Alex Catarineu at 2025-07-17T19:00:02+02:00
TB 34378: [android] Port external helper app prompting
Together with the corresponding fenix patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.
Originally, android-components#40007 and fenix#34378.
- - - - -
c45ea08c by Alex Catarineu at 2025-07-17T19:00:02+02:00
TB 40002: [android] Ensure system download manager is not used
Originally, android-components#40002.
android-components#40075: Support scoped storage to enable downloads on API < 29
- in android-components!7, we blocked all usage of Scoped
Storage in an attempt to block usage of Android's
DownloadManager, which is known to cause proxy bypasses
- as of Android API 29, downloads will not work without Scoped Storage,
causing all downlaods to fail (see: fenix##40192)
- here, we enable usage of scoped storage for API >= 29, but block
calls to DownloadManager on API < 29
- - - - -
4c0a9a08 by Alex Catarineu at 2025-07-17T19:00:02+02:00
TB 40009: [android] Change the default search engines
Originally, android-components#40009.
This matches the search engines from desktop, that is:
DDG as the default, then YouTube, Google, DDGOnion,
Startpage, Twitter, Wikipedia and Yahoo.
android-components#40062: Update DuckDuckGo onion search plugin
- - - - -
8b3f2fdf by hackademix at 2025-07-17T19:00:03+02:00
TB 42191: [android] Temporary StrictMode relaxation to clear the thumbnail cache.
- - - - -
42a6a3a8 by hackademix at 2025-07-17T19:00:03+02:00
[android] Modify add-on support
Bug 41160: One-time ultimate switch Tor Browser Android to HTTPS-Only.
Bug 41159: Remove HTTPS-Everywhere extension from Tor Browser Android.
Bug 41094: Enable HTTPS-Only Mode by default in Tor Browser Android.
Turn shouldUseHttpsOnly's default to true.
Bug 40225: Bundled extensions don't get updated with Android Tor
Browser updates.
Bug 40030: Install NoScript addon on startup.
Also 40070: Consider storing the list of recommended addons
This implements our own AddonsProvider, which loads the list of
available addons from assets instead of fetching it from an
endpoint.
Also, we hide the uninstall button for builtin addons.
Bug 40058: Hide option for disallowing addon in private mode
- - - - -
b73d0dcd by Alex Catarineu at 2025-07-17T19:00:03+02:00
[android] Modify Addon support
android-components#40011: Hide option for disallowing addons in private mode
android-components#40016: Allow inheriting from AddonCollectionProvider
This will allow implementing our own AddonsProvider in fenix.
- - - - -
7bd282fc by Alex Catarineu at 2025-07-17T19:00:04+02:00
TB 40015: [android] Port padlock states for .onion services
Originally, android-components#40015.
- - - - -
a07fe178 by Matthew Finkel at 2025-07-17T19:00:04+02:00
[android] Modify Tracking Protection configuration
android-components#40020: Disable third-party cookies
android-components#40024: Disable tracking protection by default
- - - - -
a2e3ed29 by Matthew Finkel at 2025-07-17T19:00:04+02:00
TB 40023: [android] Stop PrivateNotificationService
Originally, android-components#40023.
- - - - -
6b841438 by Alex Catarineu at 2025-07-17T19:00:04+02:00
TB 34439 [android]: Isolate Icon loader on Android.
Originally, android-components#34439.
- - - - -
f3edc525 by Matthew Finkel at 2025-07-17T19:00:05+02:00
[android] Disable features and functionality
Bug 33594: Disable data collection by default (Glean)
Bug 40019: Adjust is disabled on Release when data collection is disabled
Bug 34338: Disable the crash reporter
Bug 40014: Neuter Google Advertising ID
Bug 40018: Disable Push service
Bug 40034: Disable PWA onboading
Bug 40072: Disable Tracking Protection
Bug 40061: Do not show "Send to device" in sharing menu
Bug 40109: Reduce requested permissions
Exclude LOCATION and NETWORK_STATE
- - - - -
32d1467e by Matthew Finkel at 2025-07-17T19:00:05+02:00
TB 40032 [android]: Set usesCleartextTraffic as false
Originally, fenix#40032.
- - - - -
33ab7d09 by Matthew Finkel at 2025-07-17T19:00:05+02:00
[android] Rename as Tor Browser
Bug 40020: Change applicationId
Bug 40020: Change app name
Bug 40020: Change deeplink scheme
Bug 40020: Change App icons
Bug 40073: Use correct branding on About page
Bug 40088: Use Tor Browser logo in migration screen
- - - - -
757b085a by Georg Koppen at 2025-07-17T19:00:05+02:00
[android] Modify build system
Bug 40083: Make locale ordering in BuildConfig deterministic
Bug 40042: Add option do overwrite timestamp in extension version
Bug 40059: Use MOZ_BUILD_DATE for versionCode
At the same time we adapt MOZ_BUILD_DATE to our needs where it is
actually used and not in tor-browser-build. This gives us more
flexibility. See: tor-browser-build#40084.
Bug 40067: Fix reproducibility issue in classes2.dex
We make sure our MOZ_BUILD_DATE gets used as a source for showing date
related information on the Fenix about page.
Bug 40071: Show only supported locales
Bug 40064: Use Gecko Beta for Nightly and Debug variants
Bug 40123: Allow building the instrumented tests apks for variants other than debug
This allows to specify the variant of the instrumented tests via
a `testBuildType` gradle argument. It also applies a workaround for
a R8 issue from https://issuetracker.google.com/issues/140851070.
Bug 40143: Use deterministic date in Test apk
The build config was using Date() when generating the Test apk's
versionName.
- - - - -
98b9b39b by Nicolas Vigier at 2025-07-17T19:00:06+02:00
TB 43987 [Android]: disable optimization for org.mozilla.experiments.nimbus.Nimbus
Fixing a reproducibility issue.
- - - - -
e7186c77 by Nicolas Vigier at 2025-07-17T19:00:06+02:00
amend! TB 43987 [Android]: disable optimization for org.mozilla.experiments.nimbus.Nimbus
TB 43987 [Android]: disable optimization for org.mozilla.experiments.nimbus
Fixing a reproducibility issue.
- - - - -
30f576c5 by Matthew Finkel at 2025-07-17T19:00:06+02:00
TB 40185: [android] Use NimbusDisabled
Originally, fenix#40185.
- - - - -
67b38b85 by Beatriz Rizental at 2025-07-17T19:00:06+02:00
Revert "TB 40185: [android] Use NimbusDisabled"
This reverts commit c98c78c527f11856aab9f7e16ff503f267e665e2.
- - - - -
e1963cff by Beatriz Rizental at 2025-07-17T19:00:07+02:00
[android] Override settings
- - - - -
73cccc59 by Alex Catarineu at 2025-07-17T19:00:07+02:00
TB 40087 [android]: Implement a switch for spoof English.
Originally, fenix#40087 and android-components#40019.
- - - - -
ec7fab12 by Matthew Finkel at 2025-07-17T19:00:07+02:00
TB 34403 [android]: Disable Normal mode by default.
Originally, fenix#34403.
- - - - -
216a8594 by Matthew Finkel at 2025-07-17T19:00:07+02:00
TB 40016 [android]: Don't install WebCompat webext.
Originally, fenix#40016.
- - - - -
15e518ba by Matthew Finkel at 2025-07-17T19:00:08+02:00
[android] Modify UI/UX
Bug 40015: Modify Home menu
Bug 40016: Hide unwanted Settings
Bug 40016: Modify Default toolbar menu
Bug 40016: Add Donate settings button
Bug 40016: Move Allow Screenshots under Advanced
Bug 40016: Don't install WebCompat webext
Bug 40016: Don't onboard Search Suggestions
Bug 40094: Do not use MasterPasswordTipProvider in HomeFragment
Bug 40095: Hide "Sign in to sync" in bookmarks
Bug 40031: Hide Mozilla-specific items on About page
Bug 40063: Do not sort search engines alphabetically
Bug 40141: Hide EME site permission
Bug 40166: Hide "Normal" tab (again) and Sync tab in TabTray
Bug 40167: Hide "Save to Collection" in menu
Bug 40172: Find the Quit button
Bug 40186: Hide Credit Cards in Settings
Bug 40198: Spoof English toggle now overlaps with locale list
- - - - -
f5eebae4 by Matthew Finkel at 2025-07-17T19:00:08+02:00
TB 40026 [android]: Implement Security Level settings on Android.
Originally, fenix#40026.
- - - - -
16d2974c by Dan Ballard at 2025-07-17T19:00:08+02:00
TB 41972: [android] Disable Mozilla onboarding
- - - - -
0bd66a9d by Dan Ballard at 2025-07-17T19:00:08+02:00
TB 41878: [android] Add standalone Tor Bootstrap
- - - - -
e363ef7d by Matthew Finkel at 2025-07-17T19:00:09+02:00
TB 40041 [android]: Implement Tor Network Settings
Originally, fenix#40041.
- - - - -
ba46d6a8 by clairehurst at 2025-07-17T19:00:09+02:00
[android] Implement Android-native Connection Assist UI
- - - - -
91c998ef by clairehurst at 2025-07-17T19:00:09+02:00
TB 42655 [android]: Implement "New circuit for this site" on Android
- - - - -
86ce8803 by clairehurst at 2025-07-17T19:00:09+02:00
TB 42089: [android] Remove ability to submit site support requests
- - - - -
5ab2e687 by clairehurst at 2025-07-17T19:00:10+02:00
[android] Delete unused media
- - - - -
4108f1f6 by Beatriz Rizental at 2025-07-17T19:00:10+02:00
TB 43243: [android] Implement Android launch test
Also remove exit call from terminate function.
It causes all espresso tests to crash on exit and otherwise doesn't do anything.
- - - - -
f738db69 by Beatriz Rizental at 2025-07-17T19:00:10+02:00
TB 42669: [android] Use custom no-op app-services
Fetch the custom built no-op application services library
from tor-browser-build when building for Android.
- - - - -
ac30c70c by Beatriz Rizental at 2025-07-17T19:00:10+02:00
Various Android workarounds
- - - - -
1824 changed files:
- .gitignore
- + .gitlab-ci.yml
- + .gitlab/ci/containers/base/Containerfile
- + .gitlab/ci/jobs/lint/helpers.py
- + .gitlab/ci/jobs/lint/lint.yml
- + .gitlab/ci/jobs/startup-test/startup-test-android.py
- + .gitlab/ci/jobs/startup-test/startup-test.py
- + .gitlab/ci/jobs/startup-test/startup-test.yml
- + .gitlab/ci/jobs/update-containers.yml
- + .gitlab/ci/jobs/update-translations.yml
- + .gitlab/ci/mixins.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/031 Fingerprinting.md
- + .gitlab/issue_templates/040 Feature.md
- + .gitlab/issue_templates/050 Backport.md
- + .gitlab/issue_templates/060 Rebase - Alpha.md
- + .gitlab/issue_templates/061 Rebase - Stable.md
- + .gitlab/issue_templates/062 Rebase - Legacy.md
- + .gitlab/issue_templates/063 Rebase - Rapid.md
- + .gitlab/issue_templates/070 Uplift.md
- + .gitlab/issue_templates/080 Security Backports.md
- + .gitlab/issue_templates/090 Emergency Security Issue.md
- + .gitlab/issue_templates/100 Release QA - Desktop.md
- + .gitlab/issue_templates/101 Release QA - Android.md
- + .gitlab/issue_templates/110 Bugzilla Triage.md
- + .gitlab/issue_templates/120 Bugzilla Audit.md
- + .gitlab/issue_templates/Default.md
- + .gitlab/merge_request_templates/Default.md
- .prettierignore
- README.md
- + browser/actors/CryptoSafetyChild.sys.mjs
- + browser/actors/CryptoSafetyParent.sys.mjs
- browser/actors/moz.build
- browser/app/Makefile.in
- browser/app/macbuild/Contents/Info.plist.in
- browser/app/macbuild/Contents/MacOS-files.in
- browser/app/moz.build
- browser/app/permissions
- + browser/app/profile/000-tor-browser.js
- + browser/app/profile/001-base-profile.js
- browser/app/profile/firefox.js
- browser/base/content/aboutDialog-appUpdater.js
- browser/base/content/aboutDialog.js
- browser/base/content/aboutDialog.xhtml
- + browser/base/content/aboutDialogTor.css
- browser/base/content/appmenu-viewcache.inc.xhtml
- browser/base/content/browser-addons.js
- browser/base/content/browser-context.js
- browser/base/content/browser-init.js
- browser/base/content/browser-main.js
- browser/base/content/browser-menubar.inc
- browser/base/content/browser-menubar.js
- browser/base/content/browser-places.js
- browser/base/content/browser-safebrowsing.js
- browser/base/content/browser-sets.inc
- browser/base/content/browser-sets.js
- browser/base/content/browser-siteIdentity.js
- browser/base/content/browser.js
- browser/base/content/browser.js.globals
- browser/base/content/browser.xhtml
- browser/base/content/default-bookmarks.html
- + browser/base/content/languageNotification.js
- browser/base/content/main-popupset.inc.xhtml
- browser/base/content/navigator-toolbox.inc.xhtml
- browser/base/content/pageinfo/pageInfo.xhtml
- browser/base/content/pageinfo/security.js
- browser/base/content/popup-notifications.inc.xhtml
- browser/base/content/utilityOverlay.js
- browser/base/jar.mn
- browser/base/moz.build
- browser/branding/branding-common.mozbuild
- + browser/branding/tb-alpha/VisualElements_150.png
- + browser/branding/tb-alpha/VisualElements_70.png
- + browser/branding/tb-alpha/configure.sh
- + browser/branding/tb-alpha/content/about-logo.png
- + browser/branding/tb-alpha/content/about-logo.svg
- + browser/branding/tb-alpha/content/about-logo(a)2x.png
- + browser/branding/tb-alpha/content/about-wordmark.svg
- + browser/branding/tb-alpha/content/about.png
- + browser/branding/tb-alpha/content/aboutDialog.css
- + browser/branding/tb-alpha/content/firefox-wordmark.svg
- + browser/branding/tb-alpha/content/jar.mn
- + browser/branding/tb-alpha/content/moz.build
- + browser/branding/tb-alpha/default128.png
- + browser/branding/tb-alpha/default16.png
- + browser/branding/tb-alpha/default22.png
- + browser/branding/tb-alpha/default24.png
- + browser/branding/tb-alpha/default256.png
- + browser/branding/tb-alpha/default32.png
- + browser/branding/tb-alpha/default48.png
- + browser/branding/tb-alpha/default64.png
- + browser/branding/tb-alpha/document.icns
- + browser/branding/tb-alpha/document.ico
- + browser/branding/tb-alpha/document_pdf.ico
- + browser/branding/tb-alpha/firefox.VisualElementsManifest.xml
- + browser/branding/tb-alpha/firefox.icns
- + browser/branding/tb-alpha/firefox.ico
- + browser/branding/tb-alpha/locales/en-US/brand.ftl
- + browser/branding/tb-alpha/locales/en-US/brand.properties
- + browser/branding/tb-alpha/locales/jar.mn
- + browser/branding/tb-alpha/locales/moz.build
- + browser/branding/tb-alpha/moz.build
- + browser/branding/tb-alpha/newtab.ico
- + browser/branding/tb-alpha/newwindow.ico
- + browser/branding/tb-alpha/pbmode.ico
- + browser/branding/tb-alpha/pref/firefox-branding.js
- + browser/branding/tb-nightly/VisualElements_150.png
- + browser/branding/tb-nightly/VisualElements_70.png
- + browser/branding/tb-nightly/configure.sh
- + browser/branding/tb-nightly/content/about-logo.png
- + browser/branding/tb-nightly/content/about-logo.svg
- + browser/branding/tb-nightly/content/about-logo(a)2x.png
- + browser/branding/tb-nightly/content/about-wordmark.svg
- + browser/branding/tb-nightly/content/about.png
- + browser/branding/tb-nightly/content/aboutDialog.css
- + browser/branding/tb-nightly/content/firefox-wordmark.svg
- + browser/branding/tb-nightly/content/jar.mn
- + browser/branding/tb-nightly/content/moz.build
- + browser/branding/tb-nightly/default128.png
- + browser/branding/tb-nightly/default16.png
- + browser/branding/tb-nightly/default22.png
- + browser/branding/tb-nightly/default24.png
- + browser/branding/tb-nightly/default256.png
- + browser/branding/tb-nightly/default32.png
- + browser/branding/tb-nightly/default48.png
- + browser/branding/tb-nightly/default64.png
- + browser/branding/tb-nightly/document.icns
- + browser/branding/tb-nightly/document.ico
- + browser/branding/tb-nightly/document_pdf.ico
- + browser/branding/tb-nightly/firefox.VisualElementsManifest.xml
- + browser/branding/tb-nightly/firefox.icns
- + browser/branding/tb-nightly/firefox.ico
- + browser/branding/tb-nightly/locales/en-US/brand.ftl
- + browser/branding/tb-nightly/locales/en-US/brand.properties
- + browser/branding/tb-nightly/locales/jar.mn
- + browser/branding/tb-nightly/locales/moz.build
- + browser/branding/tb-nightly/moz.build
- + browser/branding/tb-nightly/newtab.ico
- + browser/branding/tb-nightly/newwindow.ico
- + browser/branding/tb-nightly/pbmode.ico
- + browser/branding/tb-nightly/pref/firefox-branding.js
- + browser/branding/tb-release/VisualElements_150.png
- + browser/branding/tb-release/VisualElements_70.png
- + browser/branding/tb-release/configure.sh
- + browser/branding/tb-release/content/about-logo.png
- + browser/branding/tb-release/content/about-logo.svg
- + browser/branding/tb-release/content/about-logo(a)2x.png
- + browser/branding/tb-release/content/about-wordmark.svg
- + browser/branding/tb-release/content/about.png
- + browser/branding/tb-release/content/aboutDialog.css
- + browser/branding/tb-release/content/firefox-wordmark.svg
- + browser/branding/tb-release/content/jar.mn
- + browser/branding/tb-release/content/moz.build
- + browser/branding/tb-release/default128.png
- + browser/branding/tb-release/default16.png
- + browser/branding/tb-release/default22.png
- + browser/branding/tb-release/default24.png
- + browser/branding/tb-release/default256.png
- + browser/branding/tb-release/default32.png
- + browser/branding/tb-release/default48.png
- + browser/branding/tb-release/default64.png
- + browser/branding/tb-release/document.icns
- + browser/branding/tb-release/document.ico
- + browser/branding/tb-release/document_pdf.ico
- + browser/branding/tb-release/firefox.VisualElementsManifest.xml
- + browser/branding/tb-release/firefox.icns
- + browser/branding/tb-release/firefox.ico
- + browser/branding/tb-release/locales/en-US/brand.ftl
- + browser/branding/tb-release/locales/en-US/brand.properties
- + browser/branding/tb-release/locales/jar.mn
- + browser/branding/tb-release/locales/moz.build
- + browser/branding/tb-release/moz.build
- + browser/branding/tb-release/newtab.ico
- + browser/branding/tb-release/newwindow.ico
- + browser/branding/tb-release/pbmode.ico
- + browser/branding/tb-release/pref/firefox-branding.js
- browser/components/BrowserComponents.manifest
- browser/components/BrowserContentHandler.sys.mjs
- browser/components/BrowserGlue.sys.mjs
- browser/components/DesktopActorRegistry.sys.mjs
- browser/components/about/AboutRedirector.cpp
- browser/components/about/components.conf
- browser/components/aboutlogins/AboutLoginsParent.sys.mjs
- browser/components/aboutlogins/content/aboutLogins.css
- browser/components/aboutlogins/content/aboutLogins.mjs
- browser/components/aboutlogins/content/components/fxaccounts-button.css
- + browser/components/abouttor/AboutTorChild.sys.mjs
- + browser/components/abouttor/AboutTorMessage.sys.mjs
- + browser/components/abouttor/AboutTorParent.sys.mjs
- + browser/components/abouttor/HomepageOverride.sys.mjs
- + browser/components/abouttor/content/1f44b-waving-hand.svg
- + browser/components/abouttor/content/1f4e3-megaphone.svg
- + browser/components/abouttor/content/26a1-high-voltage.svg
- + browser/components/abouttor/content/2728-sparkles.svg
- + browser/components/abouttor/content/2764-red-heart.svg
- + browser/components/abouttor/content/aboutTor.css
- + browser/components/abouttor/content/aboutTor.html
- + browser/components/abouttor/content/aboutTor.js
- + browser/components/abouttor/content/dax-logo.svg
- + browser/components/abouttor/jar.mn
- + browser/components/abouttor/moz.build
- browser/components/customizableui/CustomizableUI.sys.mjs
- browser/components/customizableui/CustomizeMode.sys.mjs
- browser/components/customizableui/content/panelUI.inc.xhtml
- browser/components/customizableui/content/panelUI.js
- browser/components/downloads/DownloadSpamProtection.sys.mjs
- + browser/components/downloads/DownloadsTorWarning.sys.mjs
- browser/components/downloads/content/contentAreaDownloadsView.js
- browser/components/downloads/content/contentAreaDownloadsView.xhtml
- browser/components/downloads/content/downloads.css
- browser/components/downloads/content/downloads.js
- browser/components/downloads/content/downloadsPanel.inc.xhtml
- browser/components/downloads/moz.build
- browser/components/extensions/parent/ext-browserAction.js
- browser/components/extensions/schemas/chrome_settings_overrides.json
- browser/components/migration/ChromeMigrationUtils.sys.mjs
- browser/components/migration/content/migration-wizard.mjs
- browser/components/moz.build
- + browser/components/newidentity/content/newIdentityDialog.css
- + browser/components/newidentity/content/newIdentityDialog.js
- + browser/components/newidentity/content/newIdentityDialog.xhtml
- + browser/components/newidentity/content/newidentity.js
- + browser/components/newidentity/jar.mn
- + browser/components/newidentity/moz.build
- browser/components/newtab/AboutHomeStartupCache.sys.mjs
- + browser/components/onionservices/OnionAliasStore.sys.mjs
- + browser/components/onionservices/OnionLocationChild.sys.mjs
- + browser/components/onionservices/OnionLocationParent.sys.mjs
- + browser/components/onionservices/TorRequestWatch.sys.mjs
- + browser/components/onionservices/content/authNotificationIcon.inc.xhtml
- + browser/components/onionservices/content/authPopup.inc.xhtml
- + browser/components/onionservices/content/authPreferences.css
- + browser/components/onionservices/content/authPreferences.inc.xhtml
- + browser/components/onionservices/content/authPreferences.js
- + browser/components/onionservices/content/authPrompt.js
- + browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
- + browser/components/onionservices/content/onionlocation.css
- + browser/components/onionservices/content/onionservices.css
- + browser/components/onionservices/content/savedKeysDialog.js
- + browser/components/onionservices/content/savedKeysDialog.xhtml
- + browser/components/onionservices/jar.mn
- + browser/components/onionservices/moz.build
- browser/components/places/PlacesUIUtils.sys.mjs
- browser/components/places/content/controller.js
- browser/components/places/content/places.css
- browser/components/places/content/places.js
- browser/components/places/content/places.xhtml
- browser/components/preferences/home.inc.xhtml
- browser/components/preferences/home.js
- browser/components/preferences/jar.mn
- + browser/components/preferences/letterboxing-middle-dark.svg
- + browser/components/preferences/letterboxing-middle-light.svg
- + browser/components/preferences/letterboxing-top-dark.svg
- + browser/components/preferences/letterboxing-top-light.svg
- + browser/components/preferences/letterboxing.css
- + browser/components/preferences/letterboxing.inc.xhtml
- + browser/components/preferences/letterboxing.js
- browser/components/preferences/main.inc.xhtml
- browser/components/preferences/main.js
- browser/components/preferences/preferences.js
- browser/components/preferences/preferences.xhtml
- browser/components/preferences/privacy.inc.xhtml
- browser/components/preferences/privacy.js
- + browser/components/rulesets/RulesetsChild.sys.mjs
- + browser/components/rulesets/RulesetsParent.sys.mjs
- + browser/components/rulesets/content/aboutRulesets.css
- + browser/components/rulesets/content/aboutRulesets.html
- + browser/components/rulesets/content/aboutRulesets.js
- + browser/components/rulesets/content/securedrop.svg
- + browser/components/rulesets/jar.mn
- + browser/components/rulesets/moz.build
- browser/components/search/SERPCategorization.sys.mjs
- browser/components/search/SearchSERPTelemetry.sys.mjs
- + browser/components/search/extensions/ddg-onion/favicon.ico
- + browser/components/search/extensions/ddg-onion/manifest.json
- browser/components/search/extensions/ddg/manifest.json
- + browser/components/search/extensions/startpage-onion/favicon.png
- + browser/components/search/extensions/startpage-onion/manifest.json
- + browser/components/search/extensions/startpage/favicon.png
- + browser/components/search/extensions/startpage/manifest.json
- + browser/components/securitylevel/SecurityLevelUIUtils.sys.mjs
- + browser/components/securitylevel/content/securityLevel.js
- + browser/components/securitylevel/content/securityLevelButton.css
- + browser/components/securitylevel/content/securityLevelButton.inc.xhtml
- + browser/components/securitylevel/content/securityLevelDialog.js
- + browser/components/securitylevel/content/securityLevelDialog.xhtml
- + browser/components/securitylevel/content/securityLevelIcon.svg
- + browser/components/securitylevel/content/securityLevelPanel.css
- + browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
- + browser/components/securitylevel/content/securityLevelPreferences.css
- + browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
- + browser/components/securitylevel/jar.mn
- + browser/components/securitylevel/moz.build
- browser/components/tabbrowser/content/tabbrowser.js
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1fd.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e6-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1e7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ef.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e7-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1fd.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e8-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1ef.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1e9-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ea-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1ef.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1eb-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1e7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ec-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ed-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ee-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ef-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ef-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ef-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ef-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f0-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1e7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f1-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1fd.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f2-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1f5.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f3-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f4-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f5-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f6-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f7-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f7-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f7-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f7-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f7-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1e7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ef.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1fd.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f8-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1e9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1ed.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1ef.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f1.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f4.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f7.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1fb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1f9-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1fe.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fa-1f1ff.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1e8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1ec.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1ee.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1f3.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fb-1f1fa.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fc-1f1eb.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fc-1f1f8.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fd-1f1f0.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fe-1f1ea.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1fe-1f1f9.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ff-1f1e6.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ff-1f1f2.svg
- + browser/components/torcircuit/content/tor-circuit-flags/1f1ff-1f1fc.svg
- + browser/components/torcircuit/content/tor-circuit-flags/README.txt
- + browser/components/torcircuit/content/tor-circuit-icon-mask.svg
- + browser/components/torcircuit/content/tor-circuit-node-end.svg
- + browser/components/torcircuit/content/tor-circuit-node-middle.svg
- + browser/components/torcircuit/content/tor-circuit-node-relays.svg
- + browser/components/torcircuit/content/tor-circuit-node-start.svg
- + browser/components/torcircuit/content/tor-circuit-redirect.svg
- + browser/components/torcircuit/content/torCircuitPanel.css
- + browser/components/torcircuit/content/torCircuitPanel.inc.xhtml
- + browser/components/torcircuit/content/torCircuitPanel.js
- + browser/components/torcircuit/jar.mn
- + browser/components/torcircuit/moz.build
- + browser/components/torpreferences/content/bridge-bot.svg
- + browser/components/torpreferences/content/bridge-qr.svg
- + browser/components/torpreferences/content/bridge.svg
- + browser/components/torpreferences/content/bridgeQrDialog.js
- + browser/components/torpreferences/content/bridgeQrDialog.xhtml
- + browser/components/torpreferences/content/bridgemoji/BridgeEmoji.js
- + browser/components/torpreferences/content/bridgemoji/annotations.json
- + browser/components/torpreferences/content/bridgemoji/bridge-emojis.json
- + browser/components/torpreferences/content/bridgemoji/svgs/1f300.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f308.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f30a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f30b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f319.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f31f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f321.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f32d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f32e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f332.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f333.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f334.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f335.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f336.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f337.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f339.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f33a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f33b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f33d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f33f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f341.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f344.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f345.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f346.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f347.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f348.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f349.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f34a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f34b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f34c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f34d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f34f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f350.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f351.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f352.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f353.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f354.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f355.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f368.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f369.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f36a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f36b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f36c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f36d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f37f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f380.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f381.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f382.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f383.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f388.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f389.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f38f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f392.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f399.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f39f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3a0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3a1.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3a2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3a8.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3ac.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3af.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3b2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3b6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3b7.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3b8.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3ba.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3bb.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3be.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3c0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3c6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3c8.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3d3.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3d4.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3d5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3dd.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3e1.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3ee.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3f7.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3f8.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f3f9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f40a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f40c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f40d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f417.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f418.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f419.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f41a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f41b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f41d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f41e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f41f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f420.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f422.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f425.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f426.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f428.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f42a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f42c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f42d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f42e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f42f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f430.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f431.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f432.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f433.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f434.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f435.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f436.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f437.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f43a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f43b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f43f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f441.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f451.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f455.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f457.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f45f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f47d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f484.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f488.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f48d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f48e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f490.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4a1.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4a7.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4b3.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4bf.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4cc.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4ce.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4d5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4e1.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4e2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f4fb.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f50b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f511.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f525.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f526.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f52c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f52d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f52e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f54a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f58c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f58d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f5ff.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f680.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f681.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f686.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f68b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f68d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f695.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f697.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f69a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f69c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6a0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6a2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6a4.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f4.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f8.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6f9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6fa.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f6fc.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f916.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f93f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f941.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f94c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f94f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f950.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f951.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f955.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f956.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f95c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f95d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f95e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f965.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f966.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f968.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f96c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f96d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f96f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f980.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f981.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f984.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f986.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f987.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f988.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f989.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f98a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f98b.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f98c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f98e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f98f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f992.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f993.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f994.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f995.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f998.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f999.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f99a.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f99c.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f99d.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f99e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a3.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a4.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a7.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9a9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9ad.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9c1.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9c3.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9c5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9c7.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9c9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9d9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9da.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9dc.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9e0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9e2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9e6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9e9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9ea.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9ec.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9ed.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9ee.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9f2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9f5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1f9f9.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa73.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa80.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa81.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa83.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa90.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa91.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa95.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fa97.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fab6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fad0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fad2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/1fad6.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/23f0.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2600.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2602.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2604.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/260e.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2693.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2696.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/26bd.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/26f2.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/26f5.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2708.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/270f.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2728.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/2744.svg
- + browser/components/torpreferences/content/bridgemoji/svgs/README.txt
- + browser/components/torpreferences/content/builtinBridgeDialog.js
- + browser/components/torpreferences/content/builtinBridgeDialog.xhtml
- + browser/components/torpreferences/content/connectionCategory.inc.xhtml
- + browser/components/torpreferences/content/connectionPane.js
- + browser/components/torpreferences/content/connectionPane.xhtml
- + browser/components/torpreferences/content/connectionSettingsDialog.js
- + browser/components/torpreferences/content/connectionSettingsDialog.xhtml
- + browser/components/torpreferences/content/lox-bridge-icon.svg
- + browser/components/torpreferences/content/lox-bridge-pass.svg
- + browser/components/torpreferences/content/lox-complete-ring.svg
- + browser/components/torpreferences/content/lox-invite-icon.svg
- + browser/components/torpreferences/content/lox-progress-ring.svg
- + browser/components/torpreferences/content/lox-success.svg
- + browser/components/torpreferences/content/loxInviteDialog.js
- + browser/components/torpreferences/content/loxInviteDialog.xhtml
- + browser/components/torpreferences/content/mail.svg
- + browser/components/torpreferences/content/network-broken.svg
- + browser/components/torpreferences/content/network.svg
- + browser/components/torpreferences/content/provideBridgeDialog.js
- + browser/components/torpreferences/content/provideBridgeDialog.xhtml
- + browser/components/torpreferences/content/requestBridgeDialog.js
- + browser/components/torpreferences/content/requestBridgeDialog.xhtml
- + browser/components/torpreferences/content/telegram-logo.svg
- + browser/components/torpreferences/content/torLogDialog.js
- + browser/components/torpreferences/content/torLogDialog.xhtml
- + browser/components/torpreferences/content/torPreferences.css
- + browser/components/torpreferences/jar.mn
- + browser/components/torpreferences/moz.build
- browser/components/urlbar/UrlbarProvidersManager.sys.mjs
- browser/components/urlbar/UrlbarUtils.sys.mjs
- browser/components/urlbar/moz.build
- + browser/config/mozconfigs/base-browser
- + browser/config/mozconfigs/base-browser-android
- + browser/config/mozconfigs/tor-browser
- + browser/config/mozconfigs/tor-browser-android
- browser/extensions/moz.build
- + browser/fonts/fonts.conf
- browser/fonts/moz.build
- browser/installer/Makefile.in
- browser/installer/package-manifest.in
- browser/installer/windows/nsis/shared.nsh
- − browser/locales/en-US/chrome/overrides/appstrings.properties
- browser/locales/jar.mn
- browser/locales/l10n.toml
- browser/modules/AboutNewTab.sys.mjs
- browser/modules/BrowserWindowTracker.sys.mjs
- browser/modules/HomePage.sys.mjs
- browser/modules/LaterRun.sys.mjs
- + browser/modules/SecurityLevelRestartNotification.sys.mjs
- + browser/modules/TorSettingsNotification.sys.mjs
- + browser/modules/TorUIUtils.sys.mjs
- browser/modules/URILoadingHelper.sys.mjs
- browser/modules/moz.build
- browser/moz.build
- browser/moz.configure
- browser/themes/shared/addons/unified-extensions.css
- browser/themes/shared/browser-shared.css
- browser/themes/shared/controlcenter/panel.css
- browser/themes/shared/downloads/contentAreaDownloadsView.css
- + browser/themes/shared/icons/new_circuit.svg
- + browser/themes/shared/icons/new_identity.svg
- browser/themes/shared/identity-block/identity-block.css
- browser/themes/shared/jar.inc.mn
- browser/themes/shared/notification-icons.css
- browser/themes/shared/preferences/preferences.css
- browser/themes/shared/tabbrowser/content-area.css
- browser/themes/shared/tabbrowser/tabs.css
- browser/themes/shared/toolbarbutton-icons.css
- + browser/themes/shared/tor-urlbar-button.css
- build.gradle
- build/application.ini.in
- build/moz.build
- build/moz.configure/init.configure
- build/moz.configure/rust.configure
- build/moz.configure/update-programs.configure
- build/moz.configure/windows.configure
- build/variables.py
- caps/nsScriptSecurityManager.cpp
- config/createprecomplete.py
- devtools/client/aboutdebugging/src/actions/runtimes.js
- devtools/client/netmonitor/src/components/SecurityState.js
- devtools/client/themes/images/aboutdebugging-firefox-logo.svg
- docshell/base/URIFixup.sys.mjs
- docshell/base/nsAboutRedirector.cpp
- docshell/base/nsDocShell.cpp
- docshell/build/components.conf
- dom/base/ContentAreaDropListener.sys.mjs
- dom/base/Document.cpp
- dom/base/Document.h
- dom/base/nsContentUtils.cpp
- dom/base/nsContentUtils.h
- dom/base/nsCopySupport.cpp
- dom/base/nsGlobalWindowOuter.cpp
- dom/canvas/ClientWebGLContext.cpp
- dom/ipc/BrowserParent.cpp
- dom/ipc/BrowserParent.h
- dom/ipc/PBrowser.ipdl
- dom/ipc/WindowGlobalActor.cpp
- dom/ipc/WindowGlobalChild.cpp
- dom/media/systemservices/video_engine/desktop_device_info.cc
- dom/media/webrtc/libwebrtcglue/VideoConduit.cpp
- dom/media/webrtc/sdp/RsdparsaSdpAttributeList.cpp
- dom/media/webrtc/transport/nrinterfaceprioritizer.cpp
- dom/media/webrtc/transport/sigslot.h
- dom/media/webrtc/transport/test/ice_unittest.cpp
- dom/media/webrtc/transport/third_party/nICEr/src/net/local_addr.c
- dom/media/webrtc/transport/third_party/nICEr/src/net/local_addr.h
- dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c
- dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-win32.c
- dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs.c
- dom/media/webrtc/transport/third_party/nrappkit/src/log/r_log.c
- dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry.c
- dom/security/nsContentSecurityUtils.cpp
- dom/security/nsMixedContentBlocker.cpp
- dom/webidl/Document.webidl
- dom/websocket/WebSocket.cpp
- eslint-file-globals.config.mjs
- eslint-ignores.config.mjs
- extensions/auth/nsHttpNegotiateAuth.cpp
- gfx/thebes/StandardFonts-linux.inc → gfx/thebes/StandardFonts-linux-upstream.inc
- + gfx/thebes/StandardFonts-macos-bb.inc
- gfx/thebes/StandardFonts-macos.inc → gfx/thebes/StandardFonts-macos-upstream.inc
- + gfx/thebes/StandardFonts-win10-bb.inc
- gfx/thebes/StandardFonts-win10.inc
- gfx/thebes/gfxDWriteFontList.cpp
- gfx/thebes/gfxFcPlatformFontList.cpp
- gfx/thebes/gfxGDIFontList.cpp
- gfx/thebes/gfxMacPlatformFontList.mm
- gfx/thebes/gfxPlatformFontList.cpp
- intl/l10n/Localization.h
- intl/locale/LocaleService.cpp
- js/xpconnect/src/xpc.msg
- layout/base/nsLayoutUtils.cpp
- mobile/android/android-components/components/browser/engine-gecko/build.gradle
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorage.kt
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepository.kt
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/fetch/GeckoViewFetchClient.kt
- mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webextension/GeckoWebExtension.kt
- mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorageTest.kt
- mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepositoryTest.kt
- mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt
- mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/WebExtensionBrowserMenuBuilder.kt
- mobile/android/android-components/components/browser/storage-sync/src/main/java/mozilla/components/browser/storage/sync/RemoteTabsStorage.kt
- mobile/android/android-components/components/browser/thumbnails/src/main/java/mozilla/components/browser/thumbnails/utils/ThumbnailDiskCache.kt
- mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt
- mobile/android/android-components/components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/SiteInfoIconView.kt
- mobile/android/android-components/components/browser/toolbar/src/main/res/drawable/mozac_ic_site_info.xml
- mobile/android/android-components/components/browser/toolbar/src/main/res/values/attrs_browser_toolbar.xml
- mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/EngineSession.kt
- mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
- mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/cookiehandling/CookieBannersStorage.kt
- mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/webextension/WebExtension.kt
- mobile/android/android-components/components/concept/engine/src/test/java/mozilla/components/concept/engine/SettingsTest.kt
- mobile/android/android-components/components/concept/fetch/src/main/java/mozilla/components/concept/fetch/Request.kt
- mobile/android/android-components/components/concept/sync/src/main/java/mozilla/components/concept/sync/AccountEvent.kt
- mobile/android/android-components/components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
- mobile/android/android-components/components/feature/accounts/build.gradle
- mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
- mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AMOAddonsProvider.kt
- mobile/android/android-components/components/feature/app-links/build.gradle
- mobile/android/android-components/components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksFeature.kt
- mobile/android/android-components/components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksUseCases.kt
- mobile/android/android-components/components/feature/awesomebar/src/main/java/mozilla/components/feature/awesomebar/provider/SessionAutocompleteProvider.kt
- mobile/android/android-components/components/feature/awesomebar/src/main/java/mozilla/components/feature/awesomebar/provider/SessionSuggestionProvider.kt
- mobile/android/android-components/components/feature/contextmenu/src/main/java/mozilla/components/feature/contextmenu/ContextMenuCandidate.kt
- mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/AbstractFetchDownloadService.kt
- mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadsFeature.kt
- mobile/android/android-components/components/feature/downloads/src/test/java/mozilla/components/feature/downloads/DownloadsFeatureTest.kt
- mobile/android/android-components/components/feature/fxsuggest/build.gradle
- mobile/android/android-components/components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt
- mobile/android/android-components/components/feature/search/build.gradle
- mobile/android/android-components/components/feature/search/src/main/assets/search/list.json
- + mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/ddg-onion.xml
- mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/ddg.xml
- + mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/startpage-onion.xml
- + mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/startpage.xml
- mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/SearchUseCases.kt
- mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/ext/SearchEngine.kt
- mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt
- mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/storage/SearchEngineReader.kt
- mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepository.kt
- mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/telemetry/BaseSearchTelemetryTest.kt
- mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/telemetry/SerpTelemetryRepositoryTest.kt
- mobile/android/android-components/components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarPresenter.kt
- mobile/android/android-components/components/service/firefox-accounts/src/main/java/mozilla/components/service/fxa/FxaDeviceConstellation.kt
- mobile/android/android-components/components/service/firefox-accounts/src/main/java/mozilla/components/service/fxa/Types.kt
- mobile/android/android-components/components/service/firefox-accounts/src/main/java/mozilla/components/service/fxa/sync/WorkManagerSyncManager.kt
- mobile/android/android-components/components/service/nimbus/build.gradle
- mobile/android/android-components/components/service/sync-logins/src/main/java/mozilla/components/service/sync/logins/SyncableLoginsStorage.kt
- mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/Context.kt
- mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt
- mobile/android/android-components/components/support/remotesettings/src/main/java/mozilla/components/support/remotesettings/RemoteSettingsClient.kt
- mobile/android/android-components/components/support/rustlog/src/main/java/mozilla/components/support/rustlog/RustLog.kt
- + mobile/android/android-components/components/support/utils/src/main/java/mozilla/components/support/utils/TorUtils.kt
- mobile/android/android-components/components/support/webextensions/src/main/java/mozilla/components/support/webextensions/WebExtensionSupport.kt
- + mobile/android/android-components/components/ui/icons/src/main/res/drawable/mozac_ic_onion.xml
- mobile/android/android-components/plugins/config/src/main/java/ConfigPlugin.kt
- mobile/android/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt
- mobile/android/android-components/samples/browser/src/main/res/layout/activity_installed_add_on_details.xml
- + mobile/android/app/000-tor-browser-android.js
- mobile/android/app/geckoview-prefs.js
- mobile/android/app/moz.build
- + mobile/android/basebrowser.configure
- + mobile/android/branding/tb-alpha/configure.sh
- + mobile/android/branding/tb-alpha/content/favicon32.png
- + mobile/android/branding/tb-alpha/content/favicon64.png
- + mobile/android/branding/tb-alpha/content/jar.mn
- + mobile/android/branding/tb-alpha/content/moz.build
- + mobile/android/branding/tb-alpha/locales/en-US/brand.ftl
- + mobile/android/branding/tb-alpha/locales/en-US/brand.properties
- + mobile/android/branding/tb-alpha/locales/jar.mn
- + mobile/android/branding/tb-alpha/locales/moz.build
- + mobile/android/branding/tb-alpha/moz.build
- + mobile/android/branding/tb-nightly/configure.sh
- + mobile/android/branding/tb-nightly/content/favicon32.png
- + mobile/android/branding/tb-nightly/content/favicon64.png
- + mobile/android/branding/tb-nightly/content/jar.mn
- + mobile/android/branding/tb-nightly/content/moz.build
- + mobile/android/branding/tb-nightly/locales/en-US/brand.ftl
- + mobile/android/branding/tb-nightly/locales/en-US/brand.properties
- + mobile/android/branding/tb-nightly/locales/jar.mn
- + mobile/android/branding/tb-nightly/locales/moz.build
- + mobile/android/branding/tb-nightly/moz.build
- + mobile/android/branding/tb-release/configure.sh
- + mobile/android/branding/tb-release/content/favicon32.png
- + mobile/android/branding/tb-release/content/favicon64.png
- + mobile/android/branding/tb-release/content/jar.mn
- + mobile/android/branding/tb-release/content/moz.build
- + mobile/android/branding/tb-release/locales/en-US/brand.ftl
- + mobile/android/branding/tb-release/locales/en-US/brand.properties
- + mobile/android/branding/tb-release/locales/jar.mn
- + mobile/android/branding/tb-release/locales/moz.build
- + mobile/android/branding/tb-release/moz.build
- mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
- mobile/android/fenix/.buildconfig.yml
- mobile/android/fenix/app/build.gradle
- mobile/android/fenix/app/lint-baseline.xml
- mobile/android/fenix/app/nimbus.fml.yaml
- mobile/android/fenix/app/onboarding.fml.yaml
- mobile/android/fenix/app/proguard-rules.pro
- + mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/AppStartupTest.kt
- mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt
- mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt
- mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt
- + mobile/android/fenix/app/src/beta/ic_launcher-playstore.png
- + mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png
- − mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.webp
- − mobile/android/fenix/app/src/beta/res/drawable/animated_splash_screen.xml
- + mobile/android/fenix/app/src/beta/res/drawable/ic_launcher_background.xml
- + mobile/android/fenix/app/src/beta/res/drawable/ic_launcher_monochrome_foreground.xml
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml → mobile/android/fenix/app/src/beta/res/mipmap-anydpi-v26/ic_launcher.xml
- + mobile/android/fenix/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_monochrome.xml
- + mobile/android/fenix/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_monochrome_round.xml
- + mobile/android/fenix/app/src/beta/res/mipmap-anydpi-v26/ic_launcher_round.xml
- mobile/android/fenix/app/src/beta/res/mipmap-hdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-hdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-hdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-hdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-hdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-mdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-mdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-mdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-mdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-mdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.webp
- + mobile/android/fenix/app/src/beta/res/values/ic_launcher_monochrome_background.xml
- mobile/android/fenix/app/src/beta/res/values/static_strings.xml
- mobile/android/fenix/app/src/beta/res/xml/shortcuts.xml
- − mobile/android/fenix/app/src/debug/ic_launcher-web.webp
- + mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png
- − mobile/android/fenix/app/src/debug/res/drawable/animated_splash_screen.xml
- + mobile/android/fenix/app/src/debug/res/drawable/ic_launcher_background.xml
- + mobile/android/fenix/app/src/debug/res/drawable/ic_launcher_monochrome_foreground.xml
- mobile/android/fenix/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml
- + mobile/android/fenix/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_monochrome.xml
- + mobile/android/fenix/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_monochrome_round.xml
- mobile/android/fenix/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml
- mobile/android/fenix/app/src/debug/res/mipmap-hdpi/ic_launcher.webp
- mobile/android/fenix/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-hdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-hdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-hdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-mdpi/ic_launcher.webp
- mobile/android/fenix/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-mdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-mdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-mdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xhdpi/ic_launcher.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxhdpi/ic_launcher.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/debug/res/values/colors.xml
- + mobile/android/fenix/app/src/debug/res/values/ic_launcher_monochrome_background.xml
- mobile/android/fenix/app/src/debug/res/xml/shortcuts.xml
- mobile/android/fenix/app/src/main/AndroidManifest.xml
- + mobile/android/fenix/app/src/main/assets/common/torrc-defaults
- − mobile/android/fenix/app/src/main/assets/searchplugins/reddit.xml
- − mobile/android/fenix/app/src/main/assets/searchplugins/youtube.xml
- − mobile/android/fenix/app/src/main/ic_launcher-web.webp
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/OpenInAppOnboardingObserver.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Analytics.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/NotificationManager.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/UseCases.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/appstate/setup/checklist/ChecklistItem.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuNavigationMiddleware.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/AdjustMetricsService.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsUtils.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserMenuSignIn.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenter.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/snackbar/Snackbar.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabToolbarMenu.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/customtabs/PoweredByNotification.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/dialog/DynamicDownloadDialog.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/experiments/view/ResearchSurfaceSurvey.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/ext/Activity.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeMenuView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/intent/HomeDeepLinkIntentProcessor.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/PrivateBrowsingDescriptionViewHolder.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/topsites/PagerIndicator.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolder.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/topsites/TopSites.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/ui/Homepage.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkItemMenu.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/microsurvey/ui/MicrosurveyCompleted.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/microsurvey/ui/MicrosurveyHeader.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/microsurvey/ui/MicrosurveyRequestPrompt.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/MarketingDataOnboardingPage.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPage.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingScreen.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/TermsOfServiceOnboardingPage.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/UpgradeOnboarding.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TorBridgeConfigFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/account/AccountUiView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/view/SavedLoginsListView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/ProtectionsView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsController.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsInteractor.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsView.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannersStorageExt.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsManagePhoneFeatureFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/ShareController.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/shortcut/PwaOnboardingObserver.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/syncedtabs/SyncedTabsList.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/ConnectAssistUiState.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/QuickstartViewModel.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapProgressViewModel.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorBridgeTransports.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorLog.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorLogsComposeFragment.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorLogsViewModel.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorSecurityLevel.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorSecurityLevelFragment.kt
- + mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/UrlQuickLoadViewModel.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/trackingprotection/ProtectionsStore.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/NotificationBase.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- mobile/android/fenix/app/src/main/java/org/mozilla/gecko/search/SearchWidgetProvider.kt
- + mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png
- − mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.webp
- − mobile/android/fenix/app/src/main/res/drawable-hdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable-hdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/main/res/drawable-mdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable-mdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/main/res/drawable-night/onboarding_ctd_default_browser.xml
- mobile/android/fenix/app/src/main/res/drawable-v23/splash_screen.xml
- − mobile/android/fenix/app/src/main/res/drawable-xhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable-xhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/main/res/drawable-xxhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable-xxhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/main/res/drawable/animated_splash_screen.xml
- + mobile/android/fenix/app/src/main/res/drawable/browser_location.xml
- + mobile/android/fenix/app/src/main/res/drawable/connect.xml
- + mobile/android/fenix/app/src/main/res/drawable/connect_broken.xml
- + mobile/android/fenix/app/src/main/res/drawable/globe_broken.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_account.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_account_warning.xml
- + mobile/android/fenix/app/src/main/res/drawable/ic_favorite.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_firefox.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_fx_accounts_avatar.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_notification_permission.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_onboarding_key_features.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_onboarding_key_features_icons_only.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_onboarding_search_widget.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_onboarding_sync.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_onboarding_welcome.xml
- + mobile/android/fenix/app/src/main/res/drawable/ic_onion_pattern.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_pocket.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_scan.xml
- + mobile/android/fenix/app/src/main/res/drawable/ic_screenshot.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_sign_in.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_signed_out.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_status_logo.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_sync_disconnected.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_synced_tabs.xml
- + mobile/android/fenix/app/src/main/res/drawable/ic_tor_config_bridge.xml
- + mobile/android/fenix/app/src/main/res/drawable/ic_tor_network_settings.xml
- − mobile/android/fenix/app/src/main/res/drawable/ic_wordmark_logo.webp
- − mobile/android/fenix/app/src/main/res/drawable/ic_wordmark_text_normal.webp
- − mobile/android/fenix/app/src/main/res/drawable/ic_wordmark_text_private.webp
- − mobile/android/fenix/app/src/main/res/drawable/microsurvey_success.xml
- + mobile/android/fenix/app/src/main/res/drawable/new_circuit.xml
- − mobile/android/fenix/app/src/main/res/drawable/onboarding_ctd_default_browser.xml
- − mobile/android/fenix/app/src/main/res/drawable/onboarding_ctd_notification.xml
- − mobile/android/fenix/app/src/main/res/drawable/onboarding_ctd_sync.xml
- mobile/android/fenix/app/src/main/res/drawable/progress_gradient.xml
- mobile/android/fenix/app/src/main/res/drawable/pager_dot.xml → mobile/android/fenix/app/src/main/res/drawable/rounded_corners.xml
- + mobile/android/fenix/app/src/main/res/drawable/tor_bootstrap_background_gradient.xml
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher_private.xml → mobile/android/fenix/app/src/main/res/drawable/tor_onboarding_donate_gradient.xml
- mobile/android/fenix/app/src/main/res/drawable-night/ic_logo_wordmark_normal.xml → mobile/android/fenix/app/src/main/res/drawable/tor_onboarding_donate_rounded_corners.xml
- mobile/android/fenix/app/src/main/res/layout/component_cookie_banner_details_panel.xml
- mobile/android/fenix/app/src/main/res/layout/fragment_about.xml
- mobile/android/fenix/app/src/main/res/layout/fragment_create_shortcut.xml
- mobile/android/fenix/app/src/main/res/layout/fragment_home.xml
- mobile/android/fenix/app/src/main/res/layout/fragment_locale_settings.xml
- + mobile/android/fenix/app/src/main/res/layout/fragment_tor_connection_assist.xml
- + mobile/android/fenix/app/src/main/res/layout/fragment_tor_security_level_preferences.xml
- mobile/android/fenix/app/src/main/res/layout/fragment_turn_on_sync.xml
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher_private_round.xml → mobile/android/fenix/app/src/main/res/layout/preference_quick_start.xml
- mobile/android/fenix/app/src/main/res/layout/quicksettings_permissions.xml
- mobile/android/fenix/app/src/main/res/layout/quicksettings_protections_panel.xml
- mobile/android/fenix/app/src/main/res/layout/search_widget_extra_small_v1.xml
- mobile/android/fenix/app/src/main/res/layout/search_widget_extra_small_v2.xml
- mobile/android/fenix/app/src/main/res/layout/search_widget_large.xml
- mobile/android/fenix/app/src/main/res/layout/search_widget_medium.xml
- mobile/android/fenix/app/src/main/res/layout/search_widget_small.xml
- mobile/android/fenix/app/src/main/res/layout/sign_in_preference.xml
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher_alternative.xml
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round_alternative.xml
- − mobile/android/fenix/app/src/main/res/mipmap-hdpi/ic_launcher.webp
- − mobile/android/fenix/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
- − mobile/android/fenix/app/src/main/res/mipmap-mdpi/ic_launcher.webp
- − mobile/android/fenix/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
- − mobile/android/fenix/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/main/res/navigation/nav_graph.xml
- mobile/android/fenix/app/src/main/res/values-night-v27/styles.xml
- mobile/android/fenix/app/src/main/res/values-night/styles.xml
- mobile/android/fenix/app/src/main/res/values-v24/styles.xml
- mobile/android/fenix/app/src/main/res/values-v27/styles.xml
- mobile/android/fenix/app/src/main/res/values/attrs.xml
- mobile/android/fenix/app/src/main/res/values/colors.xml
- + mobile/android/fenix/app/src/main/res/values/ic_launcher_monochrome_background.xml
- mobile/android/fenix/app/src/main/res/values/preference_keys.xml
- mobile/android/fenix/app/src/main/res/values/static_strings.xml
- mobile/android/fenix/app/src/main/res/values/styles.xml
- + mobile/android/fenix/app/src/main/res/values/torbrowser_strings.xml
- mobile/android/fenix/app/src/main/res/xml/logins_preferences.xml
- mobile/android/fenix/app/src/main/res/xml/preferences.xml
- mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml
- mobile/android/fenix/app/src/main/res/xml/search_settings_preferences.xml
- mobile/android/fenix/app/src/main/res/xml/shortcuts.xml
- mobile/android/fenix/app/src/main/res/xml/site_permissions_details_exceptions_preferences.xml
- mobile/android/fenix/app/src/main/res/xml/site_permissions_preferences.xml
- mobile/android/fenix/app/src/main/res/xml/sync_problem.xml
- + mobile/android/fenix/app/src/main/res/xml/tor_bridge_config_preferences.xml
- + mobile/android/fenix/app/src/nightly/ic_launcher-playstore.png
- + mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png
- − mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-hdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-hdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-mdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-mdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xxhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xxhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xxxhdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable-xxxhdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/nightly/res/drawable/animated_splash_screen.xml
- + mobile/android/fenix/app/src/nightly/res/drawable/ic_launcher_background.xml
- − mobile/android/fenix/app/src/nightly/res/drawable/ic_launcher_foreground.xml
- + mobile/android/fenix/app/src/nightly/res/drawable/ic_launcher_monochrome_foreground.xml
- − mobile/android/fenix/app/src/nightly/res/drawable/ic_wordmark_logo.webp
- − mobile/android/fenix/app/src/nightly/res/drawable/ic_wordmark_text_normal.webp
- − mobile/android/fenix/app/src/nightly/res/drawable/ic_wordmark_text_private.webp
- − mobile/android/fenix/app/src/nightly/res/ic_launcher-web.webp
- mobile/android/fenix/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml → mobile/android/fenix/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher.xml
- + mobile/android/fenix/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_monochrome.xml
- + mobile/android/fenix/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_monochrome_round.xml
- + mobile/android/fenix/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_round.xml
- mobile/android/fenix/app/src/nightly/res/mipmap-hdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-hdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-hdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-hdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-hdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-mdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-mdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-mdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-mdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-mdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_round.webp
- + mobile/android/fenix/app/src/nightly/res/values/ic_launcher_monochrome_background.xml
- mobile/android/fenix/app/src/nightly/res/values/static_strings.xml
- mobile/android/fenix/app/src/nightly/res/xml/shortcuts.xml
- + mobile/android/fenix/app/src/release/ic_launcher-playstore.png
- + mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png
- − mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.webp
- − mobile/android/fenix/app/src/release/res/drawable-hdpi/ic_logo_wordmark_normal.webp
- − mobile/android/fenix/app/src/release/res/drawable-hdpi/ic_logo_wordmark_private.webp
- − mobile/android/fenix/app/src/release/res/drawable/animated_splash_screen.xml
- + mobile/android/fenix/app/src/release/res/drawable/ic_launcher_background.xml
- + mobile/android/fenix/app/src/release/res/drawable/ic_launcher_monochrome_foreground.xml
- + mobile/android/fenix/app/src/release/res/mipmap-anydpi-v26/ic_launcher.xml
- + mobile/android/fenix/app/src/release/res/mipmap-anydpi-v26/ic_launcher_monochrome.xml
- + mobile/android/fenix/app/src/release/res/mipmap-anydpi-v26/ic_launcher_monochrome_round.xml
- + mobile/android/fenix/app/src/release/res/mipmap-anydpi-v26/ic_launcher_round.xml
- mobile/android/fenix/app/src/release/res/mipmap-hdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/release/res/mipmap-hdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/release/res/mipmap-hdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/release/res/mipmap-hdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-hdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-mdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/release/res/mipmap-mdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/release/res/mipmap-mdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/release/res/mipmap-mdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-mdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xxhdpi/ic_launcher_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xxxhdpi/ic_launcher.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxxhdpi/ic_launcher_monochrome.webp
- + mobile/android/fenix/app/src/release/res/mipmap-xxxhdpi/ic_launcher_monochrome_round.webp
- mobile/android/fenix/app/src/release/res/mipmap-xxxhdpi/ic_launcher_round.webp
- + mobile/android/fenix/app/src/release/res/values/ic_launcher_monochrome_background.xml
- mobile/android/fenix/app/src/release/res/values/static_strings.xml
- mobile/android/fenix/app/src/release/res/xml/shortcuts.xml
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/menu/MenuNavigationMiddlewareTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/metrics/MetricsUtilsTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/ext/ContextTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/HomeMenuViewTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/view/OnboardingPageUiDataTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/ProtectionsViewTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragmentTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsViewTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/DefaultCookieBannerDetailsControllerTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/share/viewholders/AppViewHolderTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/ProtectionsStoreTest.kt
- mobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt
- mobile/android/fenix/build.gradle
- + mobile/android/fenix/tools/tba-fetch-deps.sh
- + mobile/android/fenix/tools/tba-sign-devbuilds.sh
- mobile/android/geckoview/api.txt
- mobile/android/geckoview/build.gradle
- − mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/VideoCaptureTest.kt
- mobile/android/geckoview/src/main/AndroidManifest.xml
- mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
- mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/CrashReporter.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoSession.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorBootstrappingStatus.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStage.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStageName.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorSettings.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebExtensionController.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/WebRequest.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/androidlegacysettings/Prefs.java
- + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/androidlegacysettings/TorLegacyAndroidSettings.java
- mobile/android/gradle/with_gecko_binaries.gradle
- mobile/android/installer/package-manifest.in
- mobile/android/locales/filter.py
- mobile/android/locales/jar.mn
- mobile/android/locales/l10n.toml
- mobile/android/moz.configure
- mobile/android/shared-settings.gradle
- mobile/locales/filter.py
- mobile/shared/chrome/geckoview/geckoview.js
- mobile/shared/components/geckoview/GeckoViewStartup.sys.mjs
- mobile/shared/modules/geckoview/GeckoViewContent.sys.mjs
- mobile/shared/modules/geckoview/GeckoViewProgress.sys.mjs
- mobile/shared/modules/geckoview/GeckoViewWebExtension.sys.mjs
- modules/libpref/Preferences.cpp
- modules/libpref/init/StaticPrefList.yaml
- modules/libpref/init/all.js
- moz.configure
- + mozconfig-android-aarch64
- + mozconfig-android-all
- + mozconfig-android-armv7
- + mozconfig-android-x86
- + mozconfig-android-x86_64
- + mozconfig-linux-aarch64
- + mozconfig-linux-aarch64-dev
- + mozconfig-linux-arm
- + mozconfig-linux-i686
- + mozconfig-linux-x86_64
- + mozconfig-linux-x86_64-asan
- + mozconfig-linux-x86_64-dev
- + mozconfig-macos
- + mozconfig-macos-dev
- + mozconfig-windows-i686
- + mozconfig-windows-x86_64
- netwerk/base/nsNetUtil.cpp
- netwerk/base/nsSocketTransport2.cpp
- netwerk/build/components.conf
- netwerk/build/nsNetCID.h
- + netwerk/dns/IOnionAliasService.idl
- + netwerk/dns/OnionAliasService.cpp
- + netwerk/dns/OnionAliasService.h
- netwerk/dns/effective_tld_names.dat
- netwerk/dns/moz.build
- netwerk/protocol/http/HttpBaseChannel.cpp
- netwerk/protocol/http/nsHttpHandler.cpp
- netwerk/protocol/http/nsHttpNTLMAuth.cpp
- netwerk/sctp/src/moz.build
- netwerk/sctp/src/netinet/sctp_cc_functions.c
- netwerk/sctp/src/netinet/sctp_indata.c
- netwerk/sctp/src/netinet/sctp_input.c
- netwerk/sctp/src/netinet/sctp_output.c
- netwerk/sctp/src/netinet/sctp_usrreq.c
- netwerk/sctp/src/netinet/sctputil.c
- netwerk/sctp/src/user_mbuf.c
- netwerk/sctp/src/user_socket.c
- netwerk/socket/nsSOCKSIOLayer.cpp
- netwerk/system/android/nsAndroidNetworkLinkService.cpp
- netwerk/system/linux/nsNetworkLinkService.cpp
- netwerk/system/mac/nsNetworkLinkService.mm
- netwerk/system/netlink/NetlinkService.cpp
- netwerk/system/win32/nsNotifyAddrListener.cpp
- netwerk/url-classifier/UrlClassifierFeatureBase.cpp
- netwerk/url-classifier/components.conf
- python/mach/mach/telemetry.py
- python/mozbuild/mozbuild/action/make_dmg.py
- python/mozbuild/mozbuild/artifacts.py
- python/mozbuild/mozbuild/mach_commands.py
- python/mozlint/mozlint/cli.py
- python/sites/mach.txt
- security/certverifier/CertVerifier.cpp
- security/manager/ssl/NSSSocketControl.cpp
- security/manager/ssl/RemoteSecuritySettings.sys.mjs
- security/manager/ssl/SSLServerCertVerification.cpp
- security/manager/ssl/SSLServerCertVerification.h
- security/manager/ssl/StaticHPKPins.h
- security/manager/ssl/nsSecureBrowserUI.cpp
- security/moz.build
- security/nss/lib/certhigh/ocsp.c
- security/nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_socket.c
- security/nss/lib/mozpkix/include/pkix/Result.h
- security/nss/lib/mozpkix/include/pkix/pkixnss.h
- security/nss/lib/ssl/Makefile
- services/settings/Attachments.sys.mjs
- services/settings/IDBHelpers.sys.mjs
- services/settings/RemoteSettingsClient.sys.mjs
- services/settings/dumps/gen_last_modified.py
- services/settings/dumps/main/moz.build
- services/settings/remote-settings.sys.mjs
- services/settings/servicesSettings.manifest
- services/settings/static-dumps/main/moz.build
- + services/settings/static-dumps/main/query-stripping.json
- services/sync/components.conf
- testing/mozbase/mozinstall/mozinstall/mozinstall.py
- testing/mozbase/setup_development.py
- testing/mozharness/scripts/does_it_crash.py
- testing/specialpowers/api.js
- third_party/abseil-cpp/absl/base/internal/thread_identity.cc
- third_party/abseil-cpp/absl/base/internal/thread_identity.h
- third_party/libwebrtc/modules/audio_coding/codecs/isac/main/source/os_specific_inline.h
- third_party/libwebrtc/modules/desktop_capture/desktop_capture_types.h
- third_party/libwebrtc/modules/desktop_capture/win/desktop_capture_utils.cc
- third_party/libwebrtc/modules/desktop_capture/win/wgc_capture_session.cc
- third_party/libwebrtc/modules/desktop_capture/win/wgc_capturer_win.cc
- third_party/libwebrtc/modules/desktop_capture/win/wgc_capturer_win.h
- third_party/libwebrtc/modules/video_capture/windows/device_info_ds.h
- third_party/libwebrtc/rtc_base/platform_thread_types.cc
- third_party/libwebrtc/rtc_base/socket.h
- third_party/libwebrtc/rtc_base/system/file_wrapper.cc
- third_party/libwebrtc/rtc_base/win/create_direct3d_device.h
- third_party/sipcc/cpr_win_types.h
- third_party/sipcc/sdp_token.c
- toolkit/.eslintrc.mjs
- toolkit/actors/AboutHttpsOnlyErrorParent.sys.mjs
- + toolkit/actors/FilesFilterChild.sys.mjs
- + toolkit/actors/FilesFilterParent.sys.mjs
- toolkit/actors/NetErrorParent.sys.mjs
- toolkit/actors/moz.build
- toolkit/components/antitracking/antitracking.manifest
- toolkit/components/antitracking/components.conf
- toolkit/components/downloads/DownloadCore.sys.mjs
- toolkit/components/downloads/DownloadIntegration.sys.mjs
- toolkit/components/extensions/Extension.sys.mjs
- toolkit/components/extensions/ExtensionParent.sys.mjs
- toolkit/components/httpsonlyerror/content/errorpage.js
- + toolkit/components/lox/Lox.sys.mjs
- + toolkit/components/lox/content/lox_wasm_bg.wasm
- + toolkit/components/lox/jar.mn
- + toolkit/components/lox/lox_wasm.jsm
- + toolkit/components/lox/moz.build
- toolkit/components/moz.build
- toolkit/components/places/PlacesUtils.sys.mjs
- toolkit/components/remotebrowserutils/RemoteWebNavigation.sys.mjs
- toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
- toolkit/components/resistfingerprinting/content/letterboxing.css
- toolkit/components/search/AppProvidedSearchEngine.sys.mjs
- toolkit/components/search/SearchEngine.sys.mjs
- toolkit/components/search/SearchService.sys.mjs
- + toolkit/components/search/content/duckduckgo.ico
- + toolkit/components/search/content/startpage.png
- + toolkit/components/search/content/torBrowserSearchEngineIcons.json
- + toolkit/components/search/content/torBrowserSearchEngines.json
- + toolkit/components/search/content/wikipedia.ico
- + toolkit/components/search/jar.mn
- toolkit/components/search/moz.build
- + toolkit/components/securitylevel/SecurityLevel.manifest
- + toolkit/components/securitylevel/SecurityLevel.sys.mjs
- + toolkit/components/securitylevel/components.conf
- + toolkit/components/securitylevel/moz.build
- toolkit/components/telemetry/app/TelemetrySend.sys.mjs
- toolkit/components/telemetry/moz.build
- + toolkit/components/tor-launcher/TorBootstrapRequest.sys.mjs
- + toolkit/components/tor-launcher/TorControlPort.sys.mjs
- + toolkit/components/tor-launcher/TorDomainIsolator.sys.mjs
- + toolkit/components/tor-launcher/TorLauncherUtil.sys.mjs
- + toolkit/components/tor-launcher/TorParsers.sys.mjs
- + toolkit/components/tor-launcher/TorProcess.sys.mjs
- + toolkit/components/tor-launcher/TorProcessAndroid.sys.mjs
- + toolkit/components/tor-launcher/TorProvider.sys.mjs
- + toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs
- + toolkit/components/tor-launcher/TorStartupService.sys.mjs
- + toolkit/components/tor-launcher/components.conf
- + toolkit/components/tor-launcher/moz.build
- + toolkit/components/tor-launcher/tor-launcher.manifest
- + toolkit/components/torconnect/TorConnectChild.sys.mjs
- + toolkit/components/torconnect/TorConnectParent.sys.mjs
- + toolkit/components/torconnect/content/aboutTorConnect.css
- + toolkit/components/torconnect/content/aboutTorConnect.html
- + toolkit/components/torconnect/content/aboutTorConnect.js
- + toolkit/components/torconnect/content/arrow-right.svg
- + toolkit/components/torconnect/content/bridge.svg
- + toolkit/components/torconnect/content/connection-failure.svg
- + toolkit/components/torconnect/content/connection-location.svg
- + toolkit/components/torconnect/content/tor-connect-broken.svg
- + toolkit/components/torconnect/content/tor-connect.svg
- + toolkit/components/torconnect/content/tor-not-connected-to-connected-animated.svg
- + toolkit/components/torconnect/content/torConnectTitlebarStatus.css
- + toolkit/components/torconnect/content/torConnectTitlebarStatus.js
- + toolkit/components/torconnect/content/torConnectUrlbarButton.js
- + toolkit/components/torconnect/jar.mn
- + toolkit/components/torconnect/moz.build
- toolkit/components/urlformatter/URLFormatter.sys.mjs
- toolkit/components/windowwatcher/nsWindowWatcher.cpp
- toolkit/content/.eslintrc.mjs
- toolkit/content/aboutNetError.html
- toolkit/content/aboutNetError.mjs
- toolkit/content/aboutSupport.js
- toolkit/content/jar.mn
- toolkit/content/license.html
- + toolkit/content/moat_countries_dev_build.json
- + toolkit/content/pt_config.json
- toolkit/content/widgets/infobar.css
- toolkit/content/widgets/moz-message-bar/moz-message-bar.mjs
- toolkit/content/widgets/moz-support-link/moz-support-link.mjs
- toolkit/content/widgets/moz-toggle/moz-toggle.mjs
- toolkit/content/widgets/notificationbox.js
- + toolkit/locales-preview/base-browser-no-translate.ftl
- + toolkit/locales-preview/tor-browser-no-translate.ftl
- + toolkit/locales/en-US/toolkit/global/base-browser.ftl
- + toolkit/locales/en-US/toolkit/global/tor-browser.ftl
- toolkit/locales/jar.mn
- toolkit/modules/ActorManagerParent.sys.mjs
- toolkit/modules/AppConstants.sys.mjs
- + toolkit/modules/Bech32Decode.sys.mjs
- + toolkit/modules/BridgeDB.sys.mjs
- + toolkit/modules/DomainFrontedRequests.sys.mjs
- + toolkit/modules/DragDropFilter.sys.mjs
- + toolkit/modules/Moat.sys.mjs
- toolkit/modules/PopupNotifications.sys.mjs
- + toolkit/modules/QRCode.sys.mjs
- toolkit/modules/RemotePageAccessManager.sys.mjs
- + toolkit/modules/TorAndroidIntegration.sys.mjs
- + toolkit/modules/TorConnect.sys.mjs
- + toolkit/modules/TorSettings.sys.mjs
- + toolkit/modules/TorStrings.sys.mjs
- toolkit/modules/UpdateUtils.sys.mjs
- toolkit/modules/moz.build
- toolkit/moz.build
- toolkit/mozapps/extensions/AddonManager.sys.mjs
- toolkit/mozapps/extensions/components.conf
- toolkit/mozapps/extensions/content/aboutaddons.html
- toolkit/mozapps/extensions/content/aboutaddons.js
- toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
- toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs
- toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs
- toolkit/mozapps/extensions/test/browser/head.js
- toolkit/mozapps/extensions/test/xpcshell/head_addons.js
- toolkit/mozapps/installer/packager.mk
- toolkit/mozapps/installer/upload-files.mk
- toolkit/mozapps/update/UpdateService.sys.mjs
- toolkit/mozapps/update/UpdateServiceStub.sys.mjs
- toolkit/mozapps/update/common/updatehelper.cpp
- toolkit/mozapps/update/updater/launchchild_osx.mm
- toolkit/mozapps/update/updater/moz.build
- 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/mozapps/update/updater/updater.cpp
- toolkit/themes/shared/aboutNetError.css
- toolkit/themes/shared/desktop-jar.inc.mn
- + toolkit/themes/shared/icons/onion-site.svg
- + toolkit/themes/shared/icons/onion-slash.svg
- + toolkit/themes/shared/icons/onion-warning.svg
- + toolkit/themes/shared/icons/tor-dark-loading.png
- + toolkit/themes/shared/icons/tor-dark-loading(a)2x.png
- + toolkit/themes/shared/icons/tor-light-loading.png
- + toolkit/themes/shared/icons/tor-light-loading(a)2x.png
- + toolkit/themes/shared/icons/torbrowser.png
- toolkit/themes/shared/minimal-toolkit.jar.inc.mn
- + toolkit/themes/shared/onion-pattern.css
- + toolkit/themes/shared/onion-pattern.svg
- + toolkit/themes/shared/tor-colors.css
- + toolkit/torbutton/chrome/locale/en-US/onionLocation.properties
- + toolkit/torbutton/chrome/locale/en-US/settings.properties
- + toolkit/torbutton/chrome/locale/en-US/torConnect.properties
- + toolkit/torbutton/chrome/locale/en-US/torlauncher.properties
- + toolkit/torbutton/jar.mn
- + toolkit/torbutton/moz.build
- toolkit/xre/LauncherRegistryInfo.cpp
- toolkit/xre/MacLaunchHelper.h
- toolkit/xre/MacLaunchHelper.mm
- toolkit/xre/MacRunFromDmgUtils.mm
- toolkit/xre/ProfileReset.cpp
- toolkit/xre/dllservices/mozglue/WindowsDllBlocklist.cpp
- toolkit/xre/nsAppRunner.cpp
- toolkit/xre/nsIXREDirProvider.idl
- toolkit/xre/nsUpdateDriver.cpp
- toolkit/xre/nsXREDirProvider.cpp
- toolkit/xre/nsXREDirProvider.h
- + tools/base-browser/git-rebase-fixup-preprocessor
- + tools/base-browser/l10n/combine-translation-versions.py
- + tools/base-browser/l10n/combine/__init__.py
- + tools/base-browser/l10n/combine/combine.py
- + tools/base-browser/l10n/combine/tests/README
- + tools/base-browser/l10n/combine/tests/__init__.py
- + tools/base-browser/l10n/combine/tests/test_android.py
- + tools/base-browser/l10n/combine/tests/test_dtd.py
- + tools/base-browser/l10n/combine/tests/test_fluent.py
- + tools/base-browser/l10n/combine/tests/test_properties.py
- + tools/base-browser/missing-css-variables.py
- + tools/base-browser/tb-dev
- + tools/geckoview/.gitignore
- + tools/geckoview/Makefile
- + tools/geckoview/android-env-linux-template.sh
- + tools/geckoview/android-env-macos-template.sh
- + tools/geckoview/build-fenix.sh
- + tools/geckoview/build-geckoview.sh
- + tools/geckoview/clobber.sh
- + tools/geckoview/config.sh
- + tools/geckoview/install-fenix.sh
- + tools/geckoview/jslint.sh
- tools/lint/fluent-lint/exclusions.yml
- + tools/torbrowser/Makefile
- + tools/torbrowser/browser-self-sign-macos.sh
- + tools/torbrowser/build.sh
- + tools/torbrowser/clobber.sh
- + tools/torbrowser/config.sh
- + tools/torbrowser/deploy.sh
- + tools/torbrowser/fetch.sh
- + tools/torbrowser/generate-bugzilla-triage-csv.sh
- + tools/torbrowser/generate_tor_loading_png.py
- + tools/torbrowser/ide.sh
- + tools/torbrowser/jslint.sh
- + tools/torbrowser/l10n/migrate.py
- + tools/torbrowser/l10n/migrations/__init__.py
- + tools/torbrowser/l10n/migrations/bug-41333-new-about-tor.py
- + tools/torbrowser/l10n/migrations/bug-41622-neterror.py
- + tools/torbrowser/l10n/migrations/bug-41820-moz-message-bar-download-warning.py
- + tools/torbrowser/l10n/migrations/bug-42202-crypto-safety.py
- + tools/torbrowser/l10n/migrations/bug-42203-about-dialog.py
- + tools/torbrowser/l10n/migrations/bug-42206-rulesets.py
- + tools/torbrowser/l10n/migrations/bug-42207-settings.py
- + tools/torbrowser/l10n/migrations/bug-42209-tor-circuit.py
- + tools/torbrowser/l10n/migrations/bug-42210-download-warning.py
- + tools/torbrowser/l10n/migrations/bug-42211-new-identity.py
- + tools/torbrowser/l10n/migrations/bug-42212-onion-services.py
- + tools/torbrowser/l10n/migrations/bug-42214-security-level.py
- + tools/torbrowser/l10n/migrations/bug-43531-bridge-dialog-buttons.py
- + tools/torbrowser/prepare-tests.sh
- + tools/torbrowser/update_emojis.py
- tools/update-packaging/common.sh
- tools/update-packaging/make_full_update.sh
- tools/update-packaging/make_incremental_update.sh
- uriloader/base/nsURILoader.cpp
- uriloader/exthandler/nsExternalHelperAppService.cpp
- widget/ScrollbarDrawingWin.cpp
- widget/ScrollbarDrawingWin11.cpp
- widget/android/WebExecutorSupport.cpp
- widget/gtk/MPRISServiceHandler.cpp
- widget/gtk/WidgetUtilsGtk.cpp
- widget/windows/WinTaskbar.cpp
- widget/windows/nsDataObj.cpp
- xpcom/base/ErrorList.py
- xpcom/ds/StaticAtoms.py
- xpcom/io/CocoaFileUtils.mm
- xpcom/io/nsAppFileLocationProvider.cpp
- xpfe/appshell/AppWindow.cpp
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/229a8c…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/229a8c…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/mullvad-browser-update-responses][main] 4 commits: release: new version, 14.5.5 (linux-x86_64)
by ma1 (@ma1) 23 Jul '25
by ma1 (@ma1) 23 Jul '25
23 Jul '25
ma1 pushed to branch main at The Tor Project / Applications / mullvad-browser-update-responses
Commits:
4e1f7a21 by hackademix at 2025-07-23T15:09:58+02:00
release: new version, 14.5.5 (linux-x86_64)
- - - - -
0fb4b409 by hackademix at 2025-07-23T15:09:59+02:00
release: new version, 14.5.5 (macos)
- - - - -
eb80f31f by hackademix at 2025-07-23T15:09:59+02:00
release: new version, 14.5.5 (windows-x86_64)
- - - - -
5b4d1afd by hackademix at 2025-07-23T15:10:00+02:00
release: new version, 14.5.5
- - - - -
31 changed files:
- update_1/release/download-linux-x86_64.json
- update_1/release/download-macos.json
- update_1/release/download-windows-x86_64.json
- update_1/release/downloads.json
- update_1/release/linux-x86_64/.htaccess
- − update_1/release/linux-x86_64/update-14.5.1-14.5.4-linux-x86_64.xml
- − update_1/release/linux-x86_64/update-14.5.2-14.5.4-linux-x86_64.xml
- + update_1/release/linux-x86_64/update-14.5.2-14.5.5-linux-x86_64.xml
- − update_1/release/linux-x86_64/update-14.5.3-14.5.4-linux-x86_64.xml
- + update_1/release/linux-x86_64/update-14.5.3-14.5.5-linux-x86_64.xml
- + update_1/release/linux-x86_64/update-14.5.4-14.5.5-linux-x86_64.xml
- − update_1/release/linux-x86_64/update-14.5.4-linux-x86_64.xml
- + update_1/release/linux-x86_64/update-14.5.5-linux-x86_64.xml
- update_1/release/macos/.htaccess
- − update_1/release/macos/update-14.5.1-14.5.4-macos.xml
- − update_1/release/macos/update-14.5.2-14.5.4-macos.xml
- + update_1/release/macos/update-14.5.2-14.5.5-macos.xml
- − update_1/release/macos/update-14.5.3-14.5.4-macos.xml
- + update_1/release/macos/update-14.5.3-14.5.5-macos.xml
- + update_1/release/macos/update-14.5.4-14.5.5-macos.xml
- − update_1/release/macos/update-14.5.4-macos.xml
- + update_1/release/macos/update-14.5.5-macos.xml
- update_1/release/windows-x86_64/.htaccess
- − update_1/release/windows-x86_64/update-14.5.1-14.5.4-windows-x86_64.xml
- − update_1/release/windows-x86_64/update-14.5.2-14.5.4-windows-x86_64.xml
- + update_1/release/windows-x86_64/update-14.5.2-14.5.5-windows-x86_64.xml
- − update_1/release/windows-x86_64/update-14.5.3-14.5.4-windows-x86_64.xml
- + update_1/release/windows-x86_64/update-14.5.3-14.5.5-windows-x86_64.xml
- + update_1/release/windows-x86_64/update-14.5.4-14.5.5-windows-x86_64.xml
- − update_1/release/windows-x86_64/update-14.5.4-windows-x86_64.xml
- + update_1/release/windows-x86_64/update-14.5.5-windows-x86_64.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/tor-browser-update-responses][main] 7 commits: release: new version, 14.5.5 (linux-i686)
by ma1 (@ma1) 23 Jul '25
by ma1 (@ma1) 23 Jul '25
23 Jul '25
ma1 pushed to branch main at The Tor Project / Applications / Tor Browser update responses
Commits:
5e75d487 by hackademix at 2025-07-23T14:31:03+02:00
release: new version, 14.5.5 (linux-i686)
- - - - -
bf494c28 by hackademix at 2025-07-23T14:31:03+02:00
release: new version, 14.5.5 (linux-x86_64)
- - - - -
96a3ee72 by hackademix at 2025-07-23T14:31:04+02:00
release: new version, 14.5.5 (macos)
- - - - -
aea4b58e by hackademix at 2025-07-23T14:31:04+02:00
release: new version, 14.5.5 (windows-i686)
- - - - -
27e67839 by hackademix at 2025-07-23T14:31:05+02:00
release: new version, 14.5.5 (windows-x86_64)
- - - - -
96b0e06b by hackademix at 2025-07-23T14:31:05+02:00
release: new version, 14.5.5 (android)
- - - - -
30759805 by hackademix at 2025-07-23T14:31:06+02:00
release: new version, 14.5.5
- - - - -
73 changed files:
- update_3/release/download-android-aarch64.json
- update_3/release/download-android-armv7.json
- update_3/release/download-android-x86.json
- update_3/release/download-android-x86_64.json
- update_3/release/download-linux-i686.json
- update_3/release/download-linux-x86_64.json
- update_3/release/download-macos.json
- update_3/release/download-windows-i686.json
- update_3/release/download-windows-x86_64.json
- update_3/release/downloads.json
- update_3/release/linux-i686/.htaccess
- − update_3/release/linux-i686/update-14.5.1-14.5.4+13.5.18-linux-i686.xml
- − update_3/release/linux-i686/update-14.5.2-14.5.4+13.5.18-linux-i686.xml
- + update_3/release/linux-i686/update-14.5.2-14.5.5+13.5.20-linux-i686.xml
- − update_3/release/linux-i686/update-14.5.3-14.5.4+13.5.18-linux-i686.xml
- + update_3/release/linux-i686/update-14.5.3-14.5.5+13.5.20-linux-i686.xml
- − update_3/release/linux-i686/update-14.5.4+13.5.18-linux-i686.xml
- + update_3/release/linux-i686/update-14.5.4-14.5.5+13.5.20-linux-i686.xml
- + update_3/release/linux-i686/update-14.5.5+13.5.20-linux-i686.xml
- update_3/release/linux-x86_64/.htaccess
- − update_3/release/linux-x86_64/update-14.5.1-14.5.4+13.5.18-linux-x86_64.xml
- − update_3/release/linux-x86_64/update-14.5.2-14.5.4+13.5.18-linux-x86_64.xml
- + update_3/release/linux-x86_64/update-14.5.2-14.5.5+13.5.20-linux-x86_64.xml
- − update_3/release/linux-x86_64/update-14.5.3-14.5.4+13.5.18-linux-x86_64.xml
- + update_3/release/linux-x86_64/update-14.5.3-14.5.5+13.5.20-linux-x86_64.xml
- − update_3/release/linux-x86_64/update-14.5.4+13.5.18-linux-x86_64.xml
- + update_3/release/linux-x86_64/update-14.5.4-14.5.5+13.5.20-linux-x86_64.xml
- + update_3/release/linux-x86_64/update-14.5.5+13.5.20-linux-x86_64.xml
- update_3/release/macos/.htaccess
- − update_3/release/macos/update-13.5.15-14.5.4+13.5.18-macos.xml
- − update_3/release/macos/update-13.5.16-14.5.4+13.5.18-macos.xml
- − update_3/release/macos/update-13.5.17-14.5.4+13.5.18-macos.xml
- + update_3/release/macos/update-13.5.17-14.5.5+13.5.20-macos.xml
- + update_3/release/macos/update-13.5.18-14.5.5+13.5.20-macos.xml
- + update_3/release/macos/update-13.5.19-14.5.5+13.5.20-macos.xml
- − update_3/release/macos/update-14.5.1-14.5.4+13.5.18-macos.xml
- − update_3/release/macos/update-14.5.2-14.5.4+13.5.18-macos.xml
- + update_3/release/macos/update-14.5.2-14.5.5+13.5.20-macos.xml
- − update_3/release/macos/update-14.5.3-14.5.4+13.5.18-macos.xml
- + update_3/release/macos/update-14.5.3-14.5.5+13.5.20-macos.xml
- − update_3/release/macos/update-14.5.4+13.5.18-macos.xml
- + update_3/release/macos/update-14.5.4-14.5.5+13.5.20-macos.xml
- + update_3/release/macos/update-14.5.5+13.5.20-macos.xml
- update_3/release/windows-i686/.htaccess
- − update_3/release/windows-i686/update-13.5.15-14.5.4+13.5.18-windows-i686.xml
- − update_3/release/windows-i686/update-13.5.16-14.5.4+13.5.18-windows-i686.xml
- − update_3/release/windows-i686/update-13.5.17-14.5.4+13.5.18-windows-i686.xml
- + update_3/release/windows-i686/update-13.5.17-14.5.5+13.5.20-windows-i686.xml
- + update_3/release/windows-i686/update-13.5.18-14.5.5+13.5.20-windows-i686.xml
- + update_3/release/windows-i686/update-13.5.19-14.5.5+13.5.20-windows-i686.xml
- − update_3/release/windows-i686/update-14.5.1-14.5.4+13.5.18-windows-i686.xml
- − update_3/release/windows-i686/update-14.5.2-14.5.4+13.5.18-windows-i686.xml
- + update_3/release/windows-i686/update-14.5.2-14.5.5+13.5.20-windows-i686.xml
- − update_3/release/windows-i686/update-14.5.3-14.5.4+13.5.18-windows-i686.xml
- + update_3/release/windows-i686/update-14.5.3-14.5.5+13.5.20-windows-i686.xml
- − update_3/release/windows-i686/update-14.5.4+13.5.18-windows-i686.xml
- + update_3/release/windows-i686/update-14.5.4-14.5.5+13.5.20-windows-i686.xml
- + update_3/release/windows-i686/update-14.5.5+13.5.20-windows-i686.xml
- update_3/release/windows-x86_64/.htaccess
- − update_3/release/windows-x86_64/update-13.5.15-14.5.4+13.5.18-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-13.5.16-14.5.4+13.5.18-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-13.5.17-14.5.4+13.5.18-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-13.5.17-14.5.5+13.5.20-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-13.5.18-14.5.5+13.5.20-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-13.5.19-14.5.5+13.5.20-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-14.5.1-14.5.4+13.5.18-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-14.5.2-14.5.4+13.5.18-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-14.5.2-14.5.5+13.5.20-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-14.5.3-14.5.4+13.5.18-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-14.5.3-14.5.5+13.5.20-windows-x86_64.xml
- − update_3/release/windows-x86_64/update-14.5.4+13.5.18-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-14.5.4-14.5.5+13.5.20-windows-x86_64.xml
- + update_3/release/windows-x86_64/update-14.5.5+13.5.20-windows-x86_64.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses…
You're receiving this email because of your account on gitlab.torproject.org.
1
0