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

Keyboard Shortcuts

Thread View

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

tbb-commits

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

September 2026

  • 1 participants
  • 218 discussions
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.4.0esr-16.0-1] 2 commits: Bug 2054384 - Download notifications should truncate long filenames in the...
by ma1 (@ma1) 28 Sep '26

28 Sep '26
ma1 pushed to branch mullvad-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 4a1b9e9d by giorga at 2026-09-28T10:41:39+02:00 Bug 2054384 - Download notifications should truncate long filenames in the middle. r=android-reviewers,tthibaud Differential Revision: https://phabricator.services.mozilla.com/D321546 - - - - - 4065ff08 by Rob Wu at 2026-09-28T10:41:44+02:00 Bug 2061470 - Don't drop __proto__ from webRequest bodies r=rpl Differential Revision: https://phabricator.services.mozilla.com/D323631 - - - - - 6 changed files: - mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt - mobile/android/android-components/components/feature/downloads/src/test/java/mozilla/components/feature/downloads/DownloadNotificationTest.kt - mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt - mobile/android/android-components/components/support/ktx/src/test/java/mozilla/components/support/ktx/kotlin/StringTest.kt - toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html - toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs Changes: ===================================== mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt ===================================== @@ -28,6 +28,7 @@ import mozilla.components.feature.downloads.AbstractFetchDownloadService.Compani import mozilla.components.feature.downloads.AbstractFetchDownloadService.Companion.ACTION_RESUME import mozilla.components.feature.downloads.AbstractFetchDownloadService.Companion.ACTION_TRY_AGAIN import mozilla.components.feature.downloads.AbstractFetchDownloadService.DownloadJobState +import mozilla.components.support.ktx.kotlin.truncateMiddle import mozilla.components.support.utils.DownloadFileUtils import kotlin.random.Random import kotlin.time.Duration.Companion.seconds @@ -40,6 +41,7 @@ internal object DownloadNotification { internal const val NOTIFICATION_DOWNLOAD_GROUP_ID = 100 private const val LEGACY_NOTIFICATION_CHANNEL_ID = "Downloads" internal const val PERCENTAGE_MULTIPLIER = 100 + private const val MAX_FILENAME_LENGTH = 25 @VisibleForTesting internal fun createDownloadGroupNotification( @@ -89,11 +91,12 @@ internal object DownloadNotification { val channelId = ensureChannelExists(context) val isIndeterminate = downloadState.isIndeterminate() val percentCopied = downloadState.getPercent() ?: -1 + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setStyle( NotificationCompat.BigTextStyle() - .setBigContentTitle(downloadState.fileName.orEmpty()) + .setBigContentTitle(fileName) .setSummaryText( formatDownloadTimeRemaining( context = context, @@ -105,10 +108,8 @@ internal object DownloadNotification { ), ) .setSmallIcon(R.drawable.mozac_feature_download_ic_ongoing_download) - .setContentTitle(downloadState.fileName.orEmpty()) - .setContentText( - downloadState.getProgress(fileSizeFormatter = fileSizeFormatter), - ) + .setContentTitle(fileName) + .setContentText(downloadState.getProgress(fileSizeFormatter = fileSizeFormatter)) .setColor(ContextCompat.getColor(context, notificationAccentColor)) .setCategory(NotificationCompat.CATEGORY_PROGRESS) .setProgress(PERCENTAGE_MULTIPLIER, percentCopied, isIndeterminate) @@ -132,10 +133,11 @@ internal object DownloadNotification { notificationAccentColor: Int, ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setContentText( context.applicationContext.getString(R.string.mozac_feature_downloads_paused_notification_text), ) @@ -163,10 +165,11 @@ internal object DownloadNotification { contentIntent: PendingIntent = createOpenFilePendingIntent(context, downloadState, downloadFileUtils), ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download_complete) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setWhen(createdTime) .setOnlyAlertOnce(true) .setContentText( @@ -191,10 +194,11 @@ internal object DownloadNotification { notificationAccentColor: Int, ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download_failed) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setContentText( context.applicationContext.getString(R.string.mozac_feature_downloads_failed_notification_text2), ) @@ -217,7 +221,8 @@ internal object DownloadNotification { notifications: List<DownloadJobState>, ): List<String> { return notifications.take(2).map { downloadState -> - "${downloadState.state.fileName} ${downloadState.state.getStatusDescription( + val fileName = downloadState.state.fileName.orEmpty().truncateMiddle(MAX_FILENAME_LENGTH) + "$fileName ${downloadState.state.getStatusDescription( context = context, fileSizeFormatter = fileSizeFormatter, )}" ===================================== mobile/android/android-components/components/feature/downloads/src/test/java/mozilla/components/feature/downloads/DownloadNotificationTest.kt ===================================== @@ -4,6 +4,7 @@ package mozilla.components.feature.downloads +import android.app.Notification import android.app.PendingIntent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.EXTRA_PROGRESS @@ -307,6 +308,32 @@ class DownloadNotificationTest { assertEquals(true, notificationDownloadWithNoSize.extras.getBoolean(EXTRA_PROGRESS_INDETERMINATE)) } + @Test + fun `createOngoingDownloadNotification with long filename truncates from middle`() { + val longFileName = "this_is_a_very_long_filename_that_exceeds_forty_characters_to_test_truncation.pdf" + val downloadState = + DownloadState( + fileName = longFileName, + url = "mozilla.org/file.pdf", + contentLength = 100L, + currentBytesCopied = 10, + status = DownloadState.Status.DOWNLOADING, + ) + val style = AbstractFetchDownloadService.Style() + + val notification = + DownloadNotification.createOngoingDownloadNotification( + context = testContext, + downloadState = downloadState, + fileSizeFormatter = fakeFileSizeFormatter, + notificationAccentColor = style.notificationAccentColor, + downloadEstimator = DownloadEstimator(dateTimeProvider = FakeDateTimeProvider()), + ) + + val expectedTitle = "this_is_a_ve…uncation.pdf" + assertEquals(expectedTitle, notification.extras.getCharSequence(Notification.EXTRA_TITLE).toString()) + } + @Test fun getOngoingNotificationAccentColor() { val download = DownloadJobState( ===================================== mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt ===================================== @@ -498,3 +498,24 @@ internal fun String.extractBase6RawString(): String? { contentString } } + +/** + * Truncates the string from the middle if it exceeds [maxLength]. + * + * @param maxLength The maximum length of the string. + * @param ellipsis The string to use as ellipsis, defaults to "…". + * @return The truncated string. + */ +fun String.truncateMiddle(maxLength: Int, ellipsis: String = "…"): String { + if (length <= maxLength) { + return this + } + if (maxLength <= ellipsis.length) { + return take(maxLength) + } + + val half = (maxLength - ellipsis.length) / 2 + val start = take(half) + val end = takeLast(maxLength - ellipsis.length - half) + return "$start$ellipsis$end" +} ===================================== mobile/android/android-components/components/support/ktx/src/test/java/mozilla/components/support/ktx/kotlin/StringTest.kt ===================================== @@ -306,6 +306,16 @@ class StringTest { } } + @Test + fun truncateMiddle() { + assertEquals("123…890", "1234567890".truncateMiddle(7)) + assertEquals("1234567890", "1234567890".truncateMiddle(10)) + assertEquals("1234567890", "1234567890".truncateMiddle(20)) + assertEquals("1…0", "1234567890".truncateMiddle(3)) + assertEquals("1", "1234567890".truncateMiddle(1)) + assertEquals("123...890", "1234567890".truncateMiddle(9, "...")) + } + @Test fun `WHEN a string contains utf 8 encoded characters or illegal filename characters decode decodes it`() { // List of pairs of encoded strings or illegal filename characters and their expected decoded results ===================================== toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html ===================================== @@ -27,6 +27,7 @@ enctype="multipart/form-data" > <input type="text" name="textInput2" value="value2"> +<input type="text" name="__proto__" value="regression test for bug 2061470"> <input type="file" name="testFile"> <input type="file" name="emptyFile"> </form> @@ -161,11 +162,19 @@ add_task(async function test_xhr_forms() { } let action = new URL(form.action); let formData = new FormData(form); - let webRequestFD = {}; let updateActionURL = () => { + let webRequestFD = {}; for (let name of formData.keys()) { - webRequestFD[name] = name in uploads ? [uploads[name].fileName] : formData.getAll(name); + if (Object.hasOwn(webRequestFD, name)) { + // Ignore duplicate keys; formData.getAll already read all values. + continue; + } + const value = Object.hasOwn(uploads, name) ? [uploads[name].fileName] : formData.getAll(name); + // Cannot use webRequestFD[name] = value, because for "__proto__" as + // name, that would trigger the Object.prototype.__proto__ setter + // instead of defining a data property. + Object.defineProperty(webRequestFD, name, { value, enumerable: true }); } action.searchParams.set("upload", JSON.stringify(webRequestFD)); action.searchParams.set("enctype", form.enctype); ===================================== toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs ===================================== @@ -117,22 +117,6 @@ class Headers extends Map { } } -/** - * Creates a new Object with a corresponding property for every - * key-value pair in the given Map. - * - * @param {Map} map - * The map to convert. - * @returns {object} - */ -function mapToObject(map) { - let result = {}; - for (let [key, value] of map) { - result[key] = value; - } - return result; -} - /** * Rewinds the given seekable input stream to its beginning, and catches * any resulting errors. @@ -446,7 +430,7 @@ function createFormData(stream, channel, lenient) { try { let formData = parseFormData(stream, channel, lenient); if (formData) { - return mapToObject(formData); + return Object.fromEntries(formData); } } catch (e) { Cu.reportError(e); View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/58… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/58… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bump Firefox version to 153.4.0esr for nightly builds.
by Pier Angelo Vendrame (@pierov) 28 Sep '26

28 Sep '26
Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 357441c3 by Pier Angelo Vendrame at 2026-09-28T10:28:24+02:00 Bump Firefox version to 153.4.0esr for nightly builds. - - - - - 2 changed files: - projects/firefox/config - projects/geckoview/config Changes: ===================================== projects/firefox/config ===================================== @@ -18,12 +18,12 @@ container: use_container: 1 var: - firefox_platform_version: '153.3.0' + firefox_platform_version: '153.4.0' firefox_version: '[% c("var/firefox_platform_version") %]esr' browser_series: '16.0' browser_rebase: 1 browser_branch: '[% c("var/browser_series") %]-[% c("var/browser_rebase") %]' - browser_build: 2 + browser_build: 1 upstream_firefox_commit: FIREFOX_NIGHTLY_153_END copyright_year: '[% exec("git show -s --format=%ci " _ c("git_hash") _ "^{commit}", { exec_noco => 1 }).remove("-.*") %]' nightly_updates_publish_dir: '[% c("var/nightly_updates_publish_dir_prefix") %]nightly-[% c("var/osname") %]' ===================================== projects/geckoview/config ===================================== @@ -21,12 +21,12 @@ container: build_apk: '[% !c("var/online_build") %]' var: - firefox_platform_version: '153.3.0' + firefox_platform_version: '153.4.0' geckoview_version: '[% c("var/firefox_platform_version") %]esr' browser_series: '16.0' browser_rebase: 1 browser_branch: '[% c("var/browser_series") %]-[% c("var/browser_rebase") %]' - browser_build: 2 + browser_build: 1 gitlab_project: https://gitlab.torproject.org/tpo/applications/tor-browser git_commit: '[% exec("git rev-parse " _ c("git_hash") _ "^{commit}", { exec_noco => 1 }) %]' deps: View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/3… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/3… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-153.4.0esr-16.0-1-build2
by ma1 (@ma1) 28 Sep '26

28 Sep '26
ma1 pushed new tag tor-browser-153.4.0esr-16.0-1-build2 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. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.4.0esr-16.0-1] 2 commits: Bug 2054384 - Download notifications should truncate long filenames in the...
by ma1 (@ma1) 28 Sep '26

28 Sep '26
ma1 pushed to branch tor-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 5bdc9fc9 by giorga at 2026-09-26T19:19:21+02:00 Bug 2054384 - Download notifications should truncate long filenames in the middle. r=android-reviewers,tthibaud Differential Revision: https://phabricator.services.mozilla.com/D321546 - - - - - 2b4271f7 by Rob Wu at 2026-09-27T17:17:54+02:00 Bug 2061470 - Don't drop __proto__ from webRequest bodies r=rpl Differential Revision: https://phabricator.services.mozilla.com/D323631 - - - - - 6 changed files: - mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt - mobile/android/android-components/components/feature/downloads/src/test/java/mozilla/components/feature/downloads/DownloadNotificationTest.kt - mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt - mobile/android/android-components/components/support/ktx/src/test/java/mozilla/components/support/ktx/kotlin/StringTest.kt - toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html - toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs Changes: ===================================== mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt ===================================== @@ -28,6 +28,7 @@ import mozilla.components.feature.downloads.AbstractFetchDownloadService.Compani import mozilla.components.feature.downloads.AbstractFetchDownloadService.Companion.ACTION_RESUME import mozilla.components.feature.downloads.AbstractFetchDownloadService.Companion.ACTION_TRY_AGAIN import mozilla.components.feature.downloads.AbstractFetchDownloadService.DownloadJobState +import mozilla.components.support.ktx.kotlin.truncateMiddle import mozilla.components.support.utils.DownloadFileUtils import kotlin.random.Random import kotlin.time.Duration.Companion.seconds @@ -40,6 +41,7 @@ internal object DownloadNotification { internal const val NOTIFICATION_DOWNLOAD_GROUP_ID = 100 private const val LEGACY_NOTIFICATION_CHANNEL_ID = "Downloads" internal const val PERCENTAGE_MULTIPLIER = 100 + private const val MAX_FILENAME_LENGTH = 25 @VisibleForTesting internal fun createDownloadGroupNotification( @@ -89,11 +91,12 @@ internal object DownloadNotification { val channelId = ensureChannelExists(context) val isIndeterminate = downloadState.isIndeterminate() val percentCopied = downloadState.getPercent() ?: -1 + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setStyle( NotificationCompat.BigTextStyle() - .setBigContentTitle(downloadState.fileName.orEmpty()) + .setBigContentTitle(fileName) .setSummaryText( formatDownloadTimeRemaining( context = context, @@ -105,10 +108,8 @@ internal object DownloadNotification { ), ) .setSmallIcon(R.drawable.mozac_feature_download_ic_ongoing_download) - .setContentTitle(downloadState.fileName.orEmpty()) - .setContentText( - downloadState.getProgress(fileSizeFormatter = fileSizeFormatter), - ) + .setContentTitle(fileName) + .setContentText(downloadState.getProgress(fileSizeFormatter = fileSizeFormatter)) .setColor(ContextCompat.getColor(context, notificationAccentColor)) .setCategory(NotificationCompat.CATEGORY_PROGRESS) .setProgress(PERCENTAGE_MULTIPLIER, percentCopied, isIndeterminate) @@ -132,10 +133,11 @@ internal object DownloadNotification { notificationAccentColor: Int, ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setContentText( context.applicationContext.getString(R.string.mozac_feature_downloads_paused_notification_text), ) @@ -163,10 +165,11 @@ internal object DownloadNotification { contentIntent: PendingIntent = createOpenFilePendingIntent(context, downloadState, downloadFileUtils), ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download_complete) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setWhen(createdTime) .setOnlyAlertOnce(true) .setContentText( @@ -191,10 +194,11 @@ internal object DownloadNotification { notificationAccentColor: Int, ): Notification { val channelId = ensureChannelExists(context) + val fileName = downloadState.fileName?.truncateMiddle(MAX_FILENAME_LENGTH).orEmpty() return NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.mozac_feature_download_ic_download_failed) - .setContentTitle(downloadState.fileName) + .setContentTitle(fileName) .setContentText( context.applicationContext.getString(R.string.mozac_feature_downloads_failed_notification_text2), ) @@ -217,7 +221,8 @@ internal object DownloadNotification { notifications: List<DownloadJobState>, ): List<String> { return notifications.take(2).map { downloadState -> - "${downloadState.state.fileName} ${downloadState.state.getStatusDescription( + val fileName = downloadState.state.fileName.orEmpty().truncateMiddle(MAX_FILENAME_LENGTH) + "$fileName ${downloadState.state.getStatusDescription( context = context, fileSizeFormatter = fileSizeFormatter, )}" ===================================== mobile/android/android-components/components/feature/downloads/src/test/java/mozilla/components/feature/downloads/DownloadNotificationTest.kt ===================================== @@ -4,6 +4,7 @@ package mozilla.components.feature.downloads +import android.app.Notification import android.app.PendingIntent import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.EXTRA_PROGRESS @@ -307,6 +308,32 @@ class DownloadNotificationTest { assertEquals(true, notificationDownloadWithNoSize.extras.getBoolean(EXTRA_PROGRESS_INDETERMINATE)) } + @Test + fun `createOngoingDownloadNotification with long filename truncates from middle`() { + val longFileName = "this_is_a_very_long_filename_that_exceeds_forty_characters_to_test_truncation.pdf" + val downloadState = + DownloadState( + fileName = longFileName, + url = "mozilla.org/file.pdf", + contentLength = 100L, + currentBytesCopied = 10, + status = DownloadState.Status.DOWNLOADING, + ) + val style = AbstractFetchDownloadService.Style() + + val notification = + DownloadNotification.createOngoingDownloadNotification( + context = testContext, + downloadState = downloadState, + fileSizeFormatter = fakeFileSizeFormatter, + notificationAccentColor = style.notificationAccentColor, + downloadEstimator = DownloadEstimator(dateTimeProvider = FakeDateTimeProvider()), + ) + + val expectedTitle = "this_is_a_ve…uncation.pdf" + assertEquals(expectedTitle, notification.extras.getCharSequence(Notification.EXTRA_TITLE).toString()) + } + @Test fun getOngoingNotificationAccentColor() { val download = DownloadJobState( ===================================== mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt ===================================== @@ -507,3 +507,24 @@ internal fun String.extractBase6RawString(): String? { contentString } } + +/** + * Truncates the string from the middle if it exceeds [maxLength]. + * + * @param maxLength The maximum length of the string. + * @param ellipsis The string to use as ellipsis, defaults to "…". + * @return The truncated string. + */ +fun String.truncateMiddle(maxLength: Int, ellipsis: String = "…"): String { + if (length <= maxLength) { + return this + } + if (maxLength <= ellipsis.length) { + return take(maxLength) + } + + val half = (maxLength - ellipsis.length) / 2 + val start = take(half) + val end = takeLast(maxLength - ellipsis.length - half) + return "$start$ellipsis$end" +} ===================================== mobile/android/android-components/components/support/ktx/src/test/java/mozilla/components/support/ktx/kotlin/StringTest.kt ===================================== @@ -306,6 +306,16 @@ class StringTest { } } + @Test + fun truncateMiddle() { + assertEquals("123…890", "1234567890".truncateMiddle(7)) + assertEquals("1234567890", "1234567890".truncateMiddle(10)) + assertEquals("1234567890", "1234567890".truncateMiddle(20)) + assertEquals("1…0", "1234567890".truncateMiddle(3)) + assertEquals("1", "1234567890".truncateMiddle(1)) + assertEquals("123...890", "1234567890".truncateMiddle(9, "...")) + } + @Test fun `WHEN a string contains utf 8 encoded characters or illegal filename characters decode decodes it`() { // List of pairs of encoded strings or illegal filename characters and their expected decoded results ===================================== toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html ===================================== @@ -27,6 +27,7 @@ enctype="multipart/form-data" > <input type="text" name="textInput2" value="value2"> +<input type="text" name="__proto__" value="regression test for bug 2061470"> <input type="file" name="testFile"> <input type="file" name="emptyFile"> </form> @@ -161,11 +162,19 @@ add_task(async function test_xhr_forms() { } let action = new URL(form.action); let formData = new FormData(form); - let webRequestFD = {}; let updateActionURL = () => { + let webRequestFD = {}; for (let name of formData.keys()) { - webRequestFD[name] = name in uploads ? [uploads[name].fileName] : formData.getAll(name); + if (Object.hasOwn(webRequestFD, name)) { + // Ignore duplicate keys; formData.getAll already read all values. + continue; + } + const value = Object.hasOwn(uploads, name) ? [uploads[name].fileName] : formData.getAll(name); + // Cannot use webRequestFD[name] = value, because for "__proto__" as + // name, that would trigger the Object.prototype.__proto__ setter + // instead of defining a data property. + Object.defineProperty(webRequestFD, name, { value, enumerable: true }); } action.searchParams.set("upload", JSON.stringify(webRequestFD)); action.searchParams.set("enctype", form.enctype); ===================================== toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs ===================================== @@ -117,22 +117,6 @@ class Headers extends Map { } } -/** - * Creates a new Object with a corresponding property for every - * key-value pair in the given Map. - * - * @param {Map} map - * The map to convert. - * @returns {object} - */ -function mapToObject(map) { - let result = {}; - for (let [key, value] of map) { - result[key] = value; - } - return result; -} - /** * Rewinds the given seekable input stream to its beginning, and catches * any resulting errors. @@ -446,7 +430,7 @@ function createFormData(stream, channel, lenient) { try { let formData = parseFormData(stream, channel, lenient); if (formData) { - return mapToObject(formData); + return Object.fromEntries(formData); } } catch (e) { Cu.reportError(e); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/4590f5… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/4590f5… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-140.17.0esr-15.0-1-build2
by ma1 (@ma1) 28 Sep '26

28 Sep '26
ma1 pushed new tag tor-browser-140.17.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/tor-brows… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.17.0esr-15.0-1] 7 commits: Bug 2056767: Shut down DocAccessibleParents before we shut down platform accessibility. a=pascalc
by ma1 (@ma1) 28 Sep '26

28 Sep '26
ma1 pushed to branch tor-browser-140.17.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 19837410 by James Teh at 2026-09-27T15:56:21+02:00 Bug 2056767: Shut down DocAccessibleParents before we shut down platform accessibility. a=pascalc Original Revision: https://phabricator.services.mozilla.com/D322228 Differential Revision: https://phabricator.services.mozilla.com/D323108 - - - - - eca99650 by Rob Wu at 2026-09-27T17:19:00+02:00 Bug 2061470 - Don't drop __proto__ from webRequest bodies r=rpl Differential Revision: https://phabricator.services.mozilla.com/D323631 - - - - - bddd4de4 by Marco Bonardo at 2026-09-27T17:30:36+02:00 Bug 2066019. a=pascalc Original Revision: https://phabricator.services.mozilla.com/D321246 Differential Revision: https://phabricator.services.mozilla.com/D323563 - - - - - e8ce3fe3 by Tom Schuster at 2026-09-27T17:32:19+02:00 Bug 2066321 - Update nonceable attribute checks for link elements. r=freddyb Pending PR: https://github.com/w3c/webappsec-csp/pull/810 Differential Revision: https://phabricator.services.mozilla.com/D322966 - - - - - 5fd1f7de by Leo Tenenbaum at 2026-09-27T17:41:10+02:00 Bug 2067172 - a=pascalc Original Revision: https://phabricator.services.mozilla.com/D321879 Differential Revision: https://phabricator.services.mozilla.com/D322306 - - - - - 43f705a3 by Iain Ireland at 2026-09-27T18:23:46+02:00 Bug 2068385: Fix PBL a=pascalc Original Revision: https://phabricator.services.mozilla.com/D323744 Differential Revision: https://phabricator.services.mozilla.com/D324712 - - - - - b6746e50 by Iain Ireland at 2026-09-28T10:08:52+02:00 Bug 2068385: Don't support sparse arrays in SpreadMathMinMax a=pascalc Marking the testcase --slow because it takes 7+ minutes on my laptop in an opt-debug build. Original Revision: https://phabricator.services.mozilla.com/D323120 Differential Revision: https://phabricator.services.mozilla.com/D324692 - - - - - 14 changed files: - accessible/base/DocManager.cpp - accessible/ipc/DocAccessibleParent.cpp - browser/components/places/content/controller.js - browser/components/places/tests/browser/browser_toolbar_drop_bookmarklet.js - browser/components/places/tests/browser/browser_toolbar_drop_multiple_with_bookmarklet.js - dom/base/nsContentUtils.cpp - dom/script/ScriptLoader.cpp - dom/security/nsContentSecurityUtils.cpp - js/src/jit/BaselineIC.cpp - js/src/jit/CacheIR.cpp - js/src/jit/CacheIRWriter.h - js/src/vm/PortableBaselineInterpret.cpp - toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html - toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs Changes: ===================================== accessible/base/DocManager.cpp ===================================== @@ -31,6 +31,10 @@ #include "nsCoreUtils.h" #include "xpcAccessibleDocument.h" +#if defined(ANDROID) +# include "mozilla/Monitor.h" +#endif + using namespace mozilla; using namespace mozilla::a11y; using namespace mozilla::dom; @@ -195,6 +199,18 @@ void DocManager::Shutdown() { } ClearDocCache(); + // Even though remote documents aren't strictly managed by this DocManager + // instance, destroy them now because they might depend on platform specific + // state which is about to be torn down by PlatformShutdown. Iterate the array + // backwards because destroying the document removes it from this array. + if (sRemoteDocuments) { +#if defined(ANDROID) + MonitorAutoLock mal(nsAccessibilityService::GetAndroidMonitor()); +#endif + for (size_t i = sRemoteDocuments->Length(); i-- > 0;) { + (*sRemoteDocuments)[i]->Destroy(); + } + } } //////////////////////////////////////////////////////////////////////////////// ===================================== accessible/ipc/DocAccessibleParent.cpp ===================================== @@ -1241,15 +1241,14 @@ void DocAccessibleParent::MaybeInitWindowEmulation() { isActive = browserParent->GetDocShellIsActive(); } - // onCreate is guaranteed to be called synchronously by - // nsWinUtils::CreateNativeWindow, so this reference isn't really necessary. - // However, static analysis complains without it. RefPtr<DocAccessibleParent> thisRef = this; - nsWinUtils::NativeWindowCreateProc onCreate([thisRef](HWND aHwnd) -> void { - ::SetPropW(aHwnd, kPropNameDocAccParent, - reinterpret_cast<HANDLE>(thisRef.get())); - thisRef->SetEmulatedWindowHandle(aHwnd); - }); + nsWinUtils::NativeWindowCreateProc onCreate( + [thisRef](HWND aHwnd) mutable -> void { + thisRef->SetEmulatedWindowHandle(aHwnd); + HANDLE val; + thisRef.forget(&val); // Release in SetEmulatedWindowHandle. + ::SetPropW(aHwnd, kPropNameDocAccParent, val); + }); HWND parentWnd = reinterpret_cast<HWND>(rootDocument->GetNativeWindow()); DebugOnly<HWND> hWnd = nsWinUtils::CreateNativeWindow( @@ -1261,6 +1260,7 @@ void DocAccessibleParent::MaybeInitWindowEmulation() { void DocAccessibleParent::SetEmulatedWindowHandle(HWND aWindowHandle) { if (!aWindowHandle && mEmulatedWindowHandle && IsTopLevel()) { ::DestroyWindow(mEmulatedWindowHandle); + Release(); // AddRef in MaybeInitWindowEmulation. } mEmulatedWindowHandle = aWindowHandle; } ===================================== browser/components/places/content/controller.js ===================================== @@ -1610,7 +1610,7 @@ var PlacesControllerDragHelper = { if ( !flavor.startsWith("text/x-moz-place") && (validNodes.length > 1 || dropCount > 1) && - validNodes.some(n => n.uri?.startsWith("javascript:")) + validNodes.some(n => URL.parse(n.uri)?.protocol === "javascript:") ) { return false; } @@ -1687,18 +1687,14 @@ var PlacesControllerDragHelper = { if ( externalDrag && (nodes.length > 1 || dropCount > 1) && - nodes.some(n => n.uri?.startsWith("javascript:")) + nodes.some(n => URL.parse(n.uri)?.protocol === "javascript:") ) { throw new Error("Javascript bookmarklet passed with uris"); } // If a single javascript url is being dropped from the urlbar or an external source, // show the bookmark dialog as a speedbump protection against malicious cases. - if ( - nodes.length == 1 && - externalDrag && - nodes[0].uri?.startsWith("javascript") - ) { + if (nodes.length == 1 && externalDrag) { let uri; try { uri = Services.io.newURI(nodes[0].uri); @@ -1706,7 +1702,7 @@ var PlacesControllerDragHelper = { // Invalid uri, we skip this code and the entry will be discarded later. } - if (uri) { + if (uri?.scheme === "javascript") { let bookmarkGuid = await PlacesUIUtils.showBookmarkDialog( { action: "add", ===================================== browser/components/places/tests/browser/browser_toolbar_drop_bookmarklet.js ===================================== @@ -9,6 +9,7 @@ const sandbox = sinon.createSandbox(); const URL1 = "https://example.com/1/"; const URL2 = "https://example.com/2/"; const BOOKMARKLET_URL = `javascript: (() => {alert('Hello, World!');})();`; +const BOOKMARKLET_URL_MIXED_CASE = `JavaScript: (() => {})();`; let bookmarks; registerCleanupFunction(async function () { @@ -34,12 +35,18 @@ add_task(async function test() { Assert.ok(placesItems, "PlacesToolbarItems should not be null"); /** - * Simulates a drop of a bookmarklet URI onto the bookmarks bar. + * Simulates a drop of a bookmarklet URI onto the bookmarks bar and verifies + * the speedbump dialog appears. * * @param {string} aEffect * The effect to use for the drop operation: move, copy, or link. + * @param {string} aBookmarkletUrl + * The bookmarklet URL to be dropped onto the bookmarks bar. */ - let simulateDragDrop = async function (aEffect) { + let simulateBookmarkletDragDrop = async function ( + aEffect, + aBookmarkletUrl = BOOKMARKLET_URL + ) { info("Simulates drag/drop of a new javascript:URL to the bookmarks"); await withBookmarksDialog( true, @@ -47,7 +54,7 @@ add_task(async function test() { EventUtils.synthesizeDrop( toolbar, placesItems, - [[{ type: "text/x-moz-url", data: BOOKMARKLET_URL }]], + [[{ type: "text/x-moz-url", data: aBookmarkletUrl }]], aEffect, window ); @@ -61,11 +68,21 @@ add_task(async function test() { Assert.equal( location, - BOOKMARKLET_URL, + aBookmarkletUrl.trim().replace(/^javascript/i, "javascript"), "Should have opened the ShowBookmarksDialog with the correct bookmarklet url to be bookmarked" ); } ); + }; + + for (let effect of ["copy", "link"]) { + for (let bookmarkletUrl of [ + BOOKMARKLET_URL, + BOOKMARKLET_URL_MIXED_CASE, + ` javascript: (() => {})();`, + ]) { + await simulateBookmarkletDragDrop(effect, bookmarkletUrl); + } info("Simulates drag/drop of a new URL to the bookmarks"); let spy = sandbox @@ -81,18 +98,13 @@ add_task(async function test() { toolbar, placesItems, [[{ type: "text/x-moz-url", data: URL1 }]], - aEffect, + effect, window ); await promise; Assert.ok(spy.notCalled, "ShowBookmarksDialog on drop not called for url"); sandbox.restore(); - }; - - let effects = ["copy", "link"]; - for (let effect of effects) { - await simulateDragDrop(effect); } info("Move of existing bookmark / bookmarklet on toolbar"); ===================================== browser/components/places/tests/browser/browser_toolbar_drop_multiple_with_bookmarklet.js ===================================== @@ -18,12 +18,12 @@ add_task(async function test() { // matter because we will set its data, effect, and mimeType manually. let placesItems = document.getElementById("PlacesToolbarItems"); Assert.ok(placesItems, "PlacesToolbarItems should not be null"); - let simulateDragDrop = async function (aEffect, aMimeType) { - let urls = [ - "https://example.com/1/", - `javascript: (() => {alert('Hello, World!');})();`, - "https://example.com/2/", - ]; + let simulateDragDrop = async function ( + aEffect, + aMimeType, + aJsUrl = `javascript: (() => {alert('Hello, World!');})();` + ) { + let urls = ["https://example.com/1/", aJsUrl, "https://example.com/2/"]; let data = urls.map(spec => spec + "\n" + spec).join("\n"); @@ -43,8 +43,13 @@ add_task(async function test() { // Simulate a bookmark drop for all of the mime types and effects. let mimeType = ["text/x-moz-url"]; - let effects = ["copy", "link"]; - for (let effect of effects) { - await simulateDragDrop(effect, mimeType); + for (let effect of ["copy", "link"]) { + for (let jsUrl of [ + `javascript: (() => {alert('Hello, World!');})();`, + `JavaScript: (() => {})();`, + ` javascript: (() => {})();`, + ]) { + await simulateDragDrop(effect, mimeType, jsUrl); + } } }); ===================================== dom/base/nsContentUtils.cpp ===================================== @@ -5635,9 +5635,10 @@ void nsContentUtils::RequestFrameFocus(Element& aFrameElement, bool aCanRaise, RefPtr<Element> target = &aFrameElement; bool defaultAction = true; if (aCanRaise) { - DispatchEventOnlyToChrome(target->OwnerDoc(), target, - u"framefocusrequested"_ns, CanBubble::eYes, - Cancelable::eYes, &defaultAction); + RefPtr<Document> doc = target->OwnerDoc(); + DispatchEventOnlyToChrome(doc, target, u"framefocusrequested"_ns, + CanBubble::eYes, Cancelable::eYes, + &defaultAction); } if (!defaultAction) { return; ===================================== dom/script/ScriptLoader.cpp ===================================== @@ -240,27 +240,27 @@ ScriptLoader::~ScriptLoader() { FireScriptAvailable(NS_ERROR_ABORT, mParserBlockingRequest); } - for (ScriptLoadRequest* req = mXSLTRequests.getFirst(); req; + for (RefPtr<ScriptLoadRequest> req = mXSLTRequests.getFirst(); req; req = req->getNext()) { FireScriptAvailable(NS_ERROR_ABORT, req); } - for (ScriptLoadRequest* req = mDeferRequests.getFirst(); req; + for (RefPtr<ScriptLoadRequest> req = mDeferRequests.getFirst(); req; req = req->getNext()) { FireScriptAvailable(NS_ERROR_ABORT, req); } - for (ScriptLoadRequest* req = mLoadingAsyncRequests.getFirst(); req; + for (RefPtr<ScriptLoadRequest> req = mLoadingAsyncRequests.getFirst(); req; req = req->getNext()) { FireScriptAvailable(NS_ERROR_ABORT, req); } - for (ScriptLoadRequest* req = mLoadedAsyncRequests.getFirst(); req; + for (RefPtr<ScriptLoadRequest> req = mLoadedAsyncRequests.getFirst(); req; req = req->getNext()) { FireScriptAvailable(NS_ERROR_ABORT, req); } - for (ScriptLoadRequest* req = + for (RefPtr<ScriptLoadRequest> req = mNonAsyncExternalScriptInsertedRequests.getFirst(); req; req = req->getNext()) { FireScriptAvailable(NS_ERROR_ABORT, req); ===================================== dom/security/nsContentSecurityUtils.cpp ===================================== @@ -1179,8 +1179,9 @@ nsString nsContentSecurityUtils::GetIsElementNonceableNonce( // element’s attribute list: if (nsCOMPtr<nsIScriptElement> script = do_QueryInterface(const_cast<Element*>(&aElement))) { - auto containsScriptOrStyle = [](const nsAString& aStr) { - return aStr.LowerCaseFindASCII("<script") != kNotFound || + auto containsLinkScriptOrStyle = [](const nsAString& aStr) { + return aStr.LowerCaseFindASCII("<link") != kNotFound || + aStr.LowerCaseFindASCII("<script") != kNotFound || aStr.LowerCaseFindASCII("<style") != kNotFound; }; @@ -1188,21 +1189,21 @@ nsString nsContentSecurityUtils::GetIsElementNonceableNonce( uint32_t i = 0; while (BorrowedAttrInfo info = aElement.GetAttrInfoAt(i++)) { // Step 2.1. If attribute’s name contains an ASCII case-insensitive match - // for "<script" or "<style", return "Not Nonceable". + // for "<link", <script" or "<style", return "Not Nonceable". const nsAttrName* name = info.mName; if (nsAtom* prefix = name->GetPrefix()) { - if (containsScriptOrStyle(nsDependentAtomString(prefix))) { + if (containsLinkScriptOrStyle(nsDependentAtomString(prefix))) { return EmptyString(); } } - if (containsScriptOrStyle(nsDependentAtomString(name->LocalName()))) { + if (containsLinkScriptOrStyle(nsDependentAtomString(name->LocalName()))) { return EmptyString(); } // Step 2.2. If attribute’s value contains an ASCII case-insensitive match - // for "<script" or "<style", return "Not Nonceable". + // for "<link", "<script" or "<style", return "Not Nonceable". info.mValue->ToString(value); - if (containsScriptOrStyle(value)) { + if (containsLinkScriptOrStyle(value)) { return EmptyString(); } } ===================================== js/src/jit/BaselineIC.cpp ===================================== @@ -1735,10 +1735,15 @@ bool DoSpreadCallFallback(JSContext* cx, BaselineFrame* frame, // Transition stub state to megamorphic or generic if warranted. MaybeTransition(cx, frame, stub); + // The array is required to be packed, but may have indexed properties + // if its length exceeds MAX_DENSE_ELEMENTS_COUNT. Don't optimize in + // that case. + bool isIndexed = arr.toObject().as<NativeObject>().isIndexed(); + // Try attaching a call stub. bool handled = false; if (op != JSOp::SpreadEval && op != JSOp::StrictSpreadEval && - stub->state().canAttachStub()) { + stub->state().canAttachStub() && !isIndexed) { // Try CacheIR first: Rooted<ArrayObject*> aobj(cx, &arr.toObject().as<ArrayObject>()); MOZ_ASSERT(IsPackedArray(aobj)); ===================================== js/src/jit/CacheIR.cpp ===================================== @@ -6431,7 +6431,9 @@ ObjOperandId InlinableNativeIRGenerator::emitLoadArgsArray() { MOZ_ASSERT(!hasBoundArguments()); if (flags_.getArgFormat() == CallFlags::Spread) { - return writer.loadSpreadArgs(); + ObjOperandId result = writer.loadSpreadArgs(); + writer.guardArrayIsPacked(result); + return result; } MOZ_ASSERT(flags_.getArgFormat() == CallFlags::FunApplyArray); ===================================== js/src/jit/CacheIRWriter.h ===================================== @@ -523,7 +523,13 @@ class MOZ_RAII CacheIRWriter : public JS::CustomAutoRooter { ArgumentKind kind = ArgumentKind::Arg0; uint32_t argc = 1; CallFlags flags(CallFlags::Spread); - return ObjOperandId(loadArgumentFixedSlot(kind, argc, flags).id()); + ValOperandId argId = loadArgumentFixedSlot(kind, argc, flags); +#ifdef ENABLE_PORTABLE_BASELINE_INTERP + // PBL doesn't support implicit unboxing of objects. + return guardToObject(argId); +#else + return ObjOperandId(argId.id()); +#endif } void callScriptedFunction(ObjOperandId callee, Int32OperandId argc, ===================================== js/src/vm/PortableBaselineInterpret.cpp ===================================== @@ -3915,11 +3915,8 @@ uint64_t ICInterpretOps(uint64_t arg0, uint64_t arg1, ICStub* stub, CACHEOP_CASE(Int32MinMaxArrayResult) { ObjOperandId arrayId = cacheIRReader.objOperandId(); bool isMax = cacheIRReader.readBool(); - // ICs that use this opcode depend on implicit unboxing due to - // type-overload on ObjOperandId when a value is loaded - // directly from an argument slot. We explicitly unbox here. NativeObject* nobj = reinterpret_cast<NativeObject*>( - &READ_VALUE_REG(arrayId.id()).toObject()); + READ_REG(arrayId.id())); uint32_t len = nobj->getDenseInitializedLength(); if (len == 0) { FAIL_IC(); @@ -3948,11 +3945,8 @@ uint64_t ICInterpretOps(uint64_t arg0, uint64_t arg1, ICStub* stub, CACHEOP_CASE(NumberMinMaxArrayResult) { ObjOperandId arrayId = cacheIRReader.objOperandId(); bool isMax = cacheIRReader.readBool(); - // ICs that use this opcode depend on implicit unboxing due to - // type-overload on ObjOperandId when a value is loaded - // directly from an argument slot. We explicitly unbox here. NativeObject* nobj = reinterpret_cast<NativeObject*>( - &READ_VALUE_REG(arrayId.id()).toObject()); + READ_REG(arrayId.id())); uint32_t len = nobj->getDenseInitializedLength(); if (len == 0) { FAIL_IC(); ===================================== toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html ===================================== @@ -27,6 +27,7 @@ enctype="multipart/form-data" > <input type="text" name="textInput2" value="value2"> +<input type="text" name="__proto__" value="regression test for bug 2061470"> <input type="file" name="testFile"> <input type="file" name="emptyFile"> </form> @@ -161,11 +162,19 @@ add_task(async function test_xhr_forms() { } let action = new URL(form.action); let formData = new FormData(form); - let webRequestFD = {}; let updateActionURL = () => { + let webRequestFD = {}; for (let name of formData.keys()) { - webRequestFD[name] = name in uploads ? [uploads[name].fileName] : formData.getAll(name); + if (Object.hasOwn(webRequestFD, name)) { + // Ignore duplicate keys; formData.getAll already read all values. + continue; + } + const value = Object.hasOwn(uploads, name) ? [uploads[name].fileName] : formData.getAll(name); + // Cannot use webRequestFD[name] = value, because for "__proto__" as + // name, that would trigger the Object.prototype.__proto__ setter + // instead of defining a data property. + Object.defineProperty(webRequestFD, name, { value, enumerable: true }); } action.searchParams.set("upload", JSON.stringify(webRequestFD)); action.searchParams.set("enctype", form.enctype); ===================================== toolkit/components/extensions/webrequest/WebRequestUpload.sys.mjs ===================================== @@ -117,22 +117,6 @@ class Headers extends Map { } } -/** - * Creates a new Object with a corresponding property for every - * key-value pair in the given Map. - * - * @param {Map} map - * The map to convert. - * @returns {object} - */ -function mapToObject(map) { - let result = {}; - for (let [key, value] of map) { - result[key] = value; - } - return result; -} - /** * Rewinds the given seekable input stream to its beginning, and catches * any resulting errors. @@ -446,7 +430,7 @@ function createFormData(stream, channel, lenient) { try { let formData = parseFormData(stream, channel, lenient); if (formData) { - return mapToObject(formData); + return Object.fromEntries(formData); } } catch (e) { Cu.reportError(e); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/67c9d2… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/67c9d2… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser] Pushed new tag mullvad-browser-153.4.0esr-16.0-1-build1
by Pier Angelo Vendrame (@pierov) 28 Sep '26

28 Sep '26
Pier Angelo Vendrame pushed new tag mullvad-browser-153.4.0esr-16.0-1-build1 at The Tor Project / Applications / Mullvad Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/tree/mullv… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.4.0esr-16.0-1] 34 commits: Add CI for Mullvad Browser
by Pier Angelo Vendrame (@pierov) 28 Sep '26

28 Sep '26
Pier Angelo Vendrame pushed to branch mullvad-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: d2f78fa3 by Henry Wilkes at 2026-09-23T16:15:29+02:00 Add CI for Mullvad Browser - - - - - cb3e062a by Pier Angelo Vendrame at 2026-09-23T16:17:42+02:00 MB 38: Mullvad Browser configuration - - - - - 8adeecc1 by Pier Angelo Vendrame at 2026-09-23T16:17:43+02:00 MB 1: Mullvad Browser branding See also: mullvad-browser#5: Product name and directory customization mullvad-browser#12: Create new branding directories and integrate Mullvad icons+branding mullvad-browser#14: Remove Default Built-in bookmarks mullvad-browser#35: Add custom PDF icons for Windows builds mullvad-browser#48: Replace Mozilla copyright and legal trademarks in mullvadbrowser.exe metadata mullvad-browser#51: Update trademark string mullvad-browser#104: Update shipped dll metadata copyright/licensing info mullvad-browser#107: Add alpha and nightly icons - - - - - e2d8691c by Morgan at 2026-09-23T16:20:55+02:00 fixup! MB 1: Mullvad Browser branding MB 580: Migrate hiding feedbackPage menuitem to Mullvad Browser patchset - - - - - f5c53dd6 by Beatriz Rizental at 2026-09-23T16:20:55+02:00 fixup! MB 1: Mullvad Browser branding Bug 569: Drop kitty image from default browser dialog - - - - - c799a4be by Beatriz Rizental at 2026-09-23T16:20:55+02:00 fixup! MB 1: Mullvad Browser branding Bug 569: Use mullvad Browser logo in sidebar - - - - - f244e94d by Morgan at 2026-09-23T16:20:55+02:00 fixup! MB 1: Mullvad Browser branding switch hard-coded fill to 'context-fill' so firefox can colour the icon based on theme - - - - - e61fffb0 by Henry Wilkes at 2026-09-23T16:20:56+02:00 Mullvad Browser strings This commit adds strings needed by the following Mullvad Browser patches. - - - - - efbeadd5 by Pier Angelo Vendrame at 2026-09-23T16:20:56+02:00 MB 20: Allow packaged-addons in PBM. We install a few addons from the distribution directory, but they are not automatically enabled for PBM mode. This commit modifies the code that installs them to also add the PBM permission to the known ones. - - - - - 67ec33db by Pier Angelo Vendrame at 2026-09-23T16:20:56+02:00 MB 63: Customize some about pages for Mullvad Browser Also: mullvad-browser#57: Purge unneeded about: pages - - - - - 66da1a00 by Pier Angelo Vendrame at 2026-09-23T16:20:56+02:00 MB 37: Customization for the about dialog - - - - - 88fefb28 by Henry Wilkes at 2026-09-23T16:20:57+02:00 MB 39: Add home page about:mullvad-browser - - - - - 61fee7b2 by hackademix at 2026-09-23T16:20:57+02:00 MB 97: Remove UI cues to install new extensions. - - - - - f03709e2 by hackademix at 2026-09-23T16:20:57+02:00 MB 47: uBlock Origin customization - - - - - 322c7329 by Pier Angelo Vendrame at 2026-09-23T16:20:58+02:00 MB 21: Disable the password manager This commit disables the about:login page and removes the "Login and Password" section of about:preferences. We do not do anything to the real password manager of Firefox, that is in toolkit: it contains C++ parts that make it difficult to actually prevent it from being built.. Finally, we modify the the function that opens about:login to report an error in the console so that we can quickly get a backtrace to the code that tries to use it. - - - - - 8d48d51b by Pier Angelo Vendrame at 2026-09-23T16:20:58+02:00 MB 112: Updater customization for Mullvad Browser MB 71: Set the updater base URL to Mullvad domain - - - - - ab9ed3f5 by Pier Angelo Vendrame at 2026-09-23T16:21:46+02:00 fixup! MB 112: Updater customization for Mullvad Browser BB 45073: Part 1: Check tor-browser.js. We moved some common preferences that were defined both in 000-tor-browser.js and 000-mullvad-browser.js in the common file to reduce redundancy. - - - - - a99a3acc by Nicolas Vigier at 2026-09-23T16:21:47+02:00 MB 79: Add Mullvad Browser MAR signing keys MB 256: Add mullvad-browser nightly mar signing key - - - - - 30e40aaf by Pier Angelo Vendrame at 2026-09-23T16:21:47+02:00 MB 34: Hide unwanted setting controls in Mullvad Browser. - - - - - 95917ef9 by hackademix at 2026-09-23T16:21:47+02:00 MB 163: Prevent uBlock Origin from being uninstalled/disabled - - - - - ff1955a7 by Pier Angelo Vendrame at 2026-09-23T16:21:47+02:00 MB 160: Disable the cookie exceptions button Besides disabling the "Delete on close checkbox", disable also the "Manage Exceptions" button when always using PBM. - - - - - 255e5886 by Richard Pospesel at 2026-09-23T16:21:48+02:00 MB 188: Customize Gitlab Issue and Merge templates - - - - - ec8f10a6 by rui hildt at 2026-09-23T16:21:48+02:00 MB 213: Customize the search engines list. - - - - - 4bc363e4 by hackademix at 2026-09-23T16:21:48+02:00 MB 214: Enable cross-tab identity leak protection in "quiet" mode - - - - - b0f83a73 by Pier Angelo Vendrame at 2026-09-23T16:21:49+02:00 MB 320: Temporarily disable WebRTC and WDBA on Windows. WebRTC should be re-enabled when tor-browser#42758 is resolved, and and the default browser agent when in general we make this feature work again. - - - - - 8a76025b by Henry Wilkes at 2026-09-23T16:21:49+02:00 MB 329: Customize toolbar for mullvad-browser. - - - - - 7fb88f11 by Henry Wilkes at 2026-09-23T16:21:49+02:00 MB 419: Mullvad Browser migration procedures. This commit implements the the Mullvad Browser's version of _migrateUI. - - - - - b49c6ca2 by Henry Wilkes at 2026-09-23T16:21:49+02:00 MB 488: Adjust search engine removal notification for Mullvad Leta. - - - - - 3b81407a by Pier Angelo Vendrame at 2026-09-23T16:21:50+02:00 MB 80: Enable Mullvad Browser as a default browser - - - - - c82973db by Beatriz Rizental at 2026-09-23T16:21:50+02:00 MB 43564: Modify ./mach bootstrap for Mullvad Browser - - - - - ad69a5d7 by june wilde at 2026-09-23T16:21:50+02:00 MB 446: Selective Saving Mode Backend - - - - - d1197fe8 by Henry Wilkes at 2026-09-23T16:21:50+02:00 MB 538: Mullvad DoH discontinued notification. - - - - - 5f73743d by Morgan at 2026-09-23T16:21:51+02:00 fixup! MB 538: Mullvad DoH discontinued notification. MB 581: change Review settings button to move user to about:preferences#dnsOverHttps rather than about:preferences#privacy - - - - - 581885fb by Pier Angelo Vendrame at 2026-09-23T16:21:51+02:00 MB 549: Customize the DoH preferences UI. - - - - - 282 changed files: - .gitlab/ci/jobs/update-translations.yml - .gitlab/issue_templates/000 Bug Report.md - .gitlab/issue_templates/010 Proposal.md - .gitlab/issue_templates/020 Web Compatibility.md - .gitlab/issue_templates/030 Test.md - .gitlab/issue_templates/040 Feature.md - .gitlab/issue_templates/041 Time-Gated Feature.md - .gitlab/issue_templates/051 Revert.md - + .gitlab/issue_templates/060 Rebase - Alpha.md - + .gitlab/issue_templates/061 Rebase - Stable.md - .gitlab/issue_templates/090 Emergency Security Issue.md - .gitlab/merge_request_templates/Default.md - + .gitlab/merge_request_templates/Rebase.md - browser/app/Makefile.in - browser/app/macbuild/Contents/Info.plist.in - browser/app/module.ver - browser/app/firefox.exe.manifest → browser/app/mullvadbrowser.exe.manifest - + browser/app/profile/000-mullvad-browser.js - browser/app/profile/001-base-profile.js - browser/base/content/aboutDialog.xhtml - browser/base/content/appmenu-viewcache.inc.xhtml - browser/base/content/browser-main.js - browser/base/content/browser-menubar.inc.xhtml - browser/base/content/browser-places.js - browser/base/content/browser.js - browser/base/content/browser.xhtml - browser/base/content/default-bookmarks.html - + browser/base/content/mullvadDoHNotification.js - browser/base/content/nsContextMenu.sys.mjs - browser/base/content/pageinfo/pageInfo.xhtml - browser/base/content/utilityOverlay.js - browser/base/jar.mn - browser/branding/branding-common.mozbuild - + browser/branding/mb-alpha/VisualElements_150.png - + browser/branding/mb-alpha/VisualElements_70.png - + browser/branding/mb-alpha/configure.sh - + browser/branding/mb-alpha/content/about-logo.png - + browser/branding/mb-alpha/content/about-logo.svg - + browser/branding/mb-alpha/content/about-logo(a)2x.png - + browser/branding/mb-alpha/content/about-wordmark.svg - + browser/branding/mb-alpha/content/about.png - + browser/branding/mb-alpha/content/aboutDialog.css - + browser/branding/mb-alpha/content/document_pdf.svg - + browser/branding/mb-alpha/content/firefox-wordmark.svg - + browser/branding/mb-alpha/content/icon128.png - + browser/branding/mb-alpha/content/icon16.png - + browser/branding/mb-alpha/content/icon256.png - + browser/branding/mb-alpha/content/icon32.png - + browser/branding/mb-alpha/content/icon48.png - + browser/branding/mb-alpha/content/icon64.png - + browser/branding/mb-alpha/content/jar.mn - + browser/branding/mb-alpha/content/moz.build - + browser/branding/mb-alpha/content/mullvad-branding.css - + browser/branding/mb-alpha/default128.png - + browser/branding/mb-alpha/default16.png - + browser/branding/mb-alpha/default22.png - + browser/branding/mb-alpha/default24.png - + browser/branding/mb-alpha/default256.png - + browser/branding/mb-alpha/default32.png - + browser/branding/mb-alpha/default48.png - + browser/branding/mb-alpha/default64.png - + browser/branding/mb-alpha/document.icns - + browser/branding/mb-alpha/document.ico - + browser/branding/mb-alpha/document_pdf.ico - + browser/branding/mb-alpha/firefox.icns - + browser/branding/mb-alpha/firefox.ico - + browser/branding/mb-alpha/firefox.svg - + browser/branding/mb-alpha/locales/en-US/brand.ftl - + browser/branding/mb-alpha/locales/en-US/brand.properties - + browser/branding/mb-alpha/locales/jar.mn - + browser/branding/mb-alpha/locales/moz.build - + browser/branding/mb-alpha/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-alpha/moz.build - + browser/branding/mb-alpha/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-alpha/newtab.ico - + browser/branding/mb-alpha/newwindow.ico - + browser/branding/mb-alpha/pbmode.ico - + browser/branding/mb-alpha/pref/firefox-branding.js - + browser/branding/mb-nightly/VisualElements_150.png - + browser/branding/mb-nightly/VisualElements_70.png - + browser/branding/mb-nightly/configure.sh - + browser/branding/mb-nightly/content/about-logo.png - + browser/branding/mb-nightly/content/about-logo.svg - + browser/branding/mb-nightly/content/about-logo(a)2x.png - + browser/branding/mb-nightly/content/about-wordmark.svg - + browser/branding/mb-nightly/content/about.png - + browser/branding/mb-nightly/content/aboutDialog.css - + browser/branding/mb-nightly/content/document_pdf.svg - + browser/branding/mb-nightly/content/firefox-wordmark.svg - + browser/branding/mb-nightly/content/icon128.png - + browser/branding/mb-nightly/content/icon16.png - + browser/branding/mb-nightly/content/icon256.png - + browser/branding/mb-nightly/content/icon32.png - + browser/branding/mb-nightly/content/icon48.png - + browser/branding/mb-nightly/content/icon64.png - + browser/branding/mb-nightly/content/jar.mn - + browser/branding/mb-nightly/content/moz.build - + browser/branding/mb-nightly/content/mullvad-branding.css - + browser/branding/mb-nightly/default128.png - + browser/branding/mb-nightly/default16.png - + browser/branding/mb-nightly/default22.png - + browser/branding/mb-nightly/default24.png - + browser/branding/mb-nightly/default256.png - + browser/branding/mb-nightly/default32.png - + browser/branding/mb-nightly/default48.png - + browser/branding/mb-nightly/default64.png - + browser/branding/mb-nightly/document.icns - + browser/branding/mb-nightly/document.ico - + browser/branding/mb-nightly/document_pdf.ico - + browser/branding/mb-nightly/firefox.icns - + browser/branding/mb-nightly/firefox.ico - + browser/branding/mb-nightly/firefox.svg - + browser/branding/mb-nightly/locales/en-US/brand.ftl - + browser/branding/mb-nightly/locales/en-US/brand.properties - + browser/branding/mb-nightly/locales/jar.mn - + browser/branding/mb-nightly/locales/moz.build - + browser/branding/mb-nightly/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-nightly/moz.build - + browser/branding/mb-nightly/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-nightly/newtab.ico - + browser/branding/mb-nightly/newwindow.ico - + browser/branding/mb-nightly/pbmode.ico - + browser/branding/mb-nightly/pref/firefox-branding.js - + browser/branding/mb-release/VisualElements_150.png - + browser/branding/mb-release/VisualElements_70.png - + browser/branding/mb-release/configure.sh - + browser/branding/mb-release/content/about-logo.png - + browser/branding/mb-release/content/about-logo.svg - + browser/branding/mb-release/content/about-logo(a)2x.png - + browser/branding/mb-release/content/about-wordmark.svg - + browser/branding/mb-release/content/about.png - + browser/branding/mb-release/content/aboutDialog.css - + browser/branding/mb-release/content/document_pdf.svg - + browser/branding/mb-release/content/firefox-wordmark.svg - + browser/branding/mb-release/content/icon128.png - + browser/branding/mb-release/content/icon16.png - + browser/branding/mb-release/content/icon256.png - + browser/branding/mb-release/content/icon32.png - + browser/branding/mb-release/content/icon48.png - + browser/branding/mb-release/content/icon64.png - + browser/branding/mb-release/content/jar.mn - + browser/branding/mb-release/content/moz.build - + browser/branding/mb-release/content/mullvad-branding.css - + browser/branding/mb-release/default128.png - + browser/branding/mb-release/default16.png - + browser/branding/mb-release/default22.png - + browser/branding/mb-release/default24.png - + browser/branding/mb-release/default256.png - + browser/branding/mb-release/default32.png - + browser/branding/mb-release/default48.png - + browser/branding/mb-release/default64.png - + browser/branding/mb-release/document.icns - + browser/branding/mb-release/document.ico - + browser/branding/mb-release/document_pdf.ico - + browser/branding/mb-release/firefox.icns - + browser/branding/mb-release/firefox.ico - + browser/branding/mb-release/firefox.svg - + browser/branding/mb-release/locales/en-US/brand.ftl - + browser/branding/mb-release/locales/en-US/brand.properties - + browser/branding/mb-release/locales/jar.mn - + browser/branding/mb-release/locales/moz.build - + browser/branding/mb-release/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-release/moz.build - + browser/branding/mb-release/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-release/newtab.ico - + browser/branding/mb-release/newwindow.ico - + browser/branding/mb-release/pbmode.ico - + browser/branding/mb-release/pref/firefox-branding.js - browser/components/BrowserContentHandler.sys.mjs - browser/components/BrowserGlue.sys.mjs - browser/components/DesktopActorRegistry.sys.mjs - browser/components/ProfileDataUpgrader.sys.mjs - browser/components/about/AboutRedirector.cpp - browser/components/about/components.conf - browser/components/customizableui/CustomizableUI.sys.mjs - browser/components/moz.build - + browser/components/mullvad-browser/AboutMullvadBrowserChild.sys.mjs - + browser/components/mullvad-browser/AboutMullvadBrowserParent.sys.mjs - + browser/components/mullvad-browser/content/2728-sparkles.svg - + browser/components/mullvad-browser/content/aboutMullvadBrowser.css - + browser/components/mullvad-browser/content/aboutMullvadBrowser.html - + browser/components/mullvad-browser/content/aboutMullvadBrowser.js - + browser/components/mullvad-browser/jar.mn - + browser/components/mullvad-browser/moz.build - browser/components/preferences/config/passwords-autofill.mjs - browser/components/preferences/config/privacy.mjs - browser/components/preferences/config/search.mjs - browser/components/preferences/home.inc.xhtml - browser/components/preferences/main.js - browser/components/preferences/preferences.js - browser/components/preferences/preferences.xhtml - browser/components/preferences/privacy.inc.xhtml - browser/components/preferences/search.inc.xhtml - browser/components/search/SearchUIUtils.sys.mjs - browser/components/shell/ShellService.sys.mjs - browser/components/shell/WindowsDefaultBrowser.cpp - browser/components/shell/nsWindowsShellService.cpp - browser/components/tabbrowser/NewTabPagePreloading.sys.mjs - + browser/components/tests/unit/test_profileDataUpgrade_mullvad_doh.js - browser/components/tests/unit/xpcshell.toml - browser/config/mozconfigs/base-browser - + browser/config/mozconfigs/mullvad-browser - browser/installer/package-manifest.in - browser/installer/windows/nsis/updater_append.ini - browser/locales/l10n.toml - browser/modules/HomePage.sys.mjs - browser/moz.build - browser/moz.configure - browser/themes/shared/sidebar/firefox.svg - build/moz.configure/basebrowser-resources.configure - build/moz.configure/bootstrap.configure - config/create_rc.py - devtools/client/aboutdebugging/src/actions/runtimes.js - devtools/client/aboutdebugging/src/components/sidebar/Sidebar.js - devtools/client/jar.mn - devtools/client/themes/images/aboutdebugging-firefox-aurora.svg - devtools/client/themes/images/aboutdebugging-firefox-beta.svg - devtools/client/themes/images/aboutdebugging-firefox-logo.svg - devtools/client/themes/images/aboutdebugging-firefox-nightly.svg - devtools/client/themes/images/aboutdebugging-firefox-release.svg - + devtools/client/themes/images/aboutdebugging-mullvadbrowser-logo.svg - docshell/base/nsAboutRedirector.cpp - docshell/build/components.conf - moz.configure - mozconfig-linux-aarch64 - mozconfig-linux-aarch64-dev - mozconfig-linux-x86_64 - mozconfig-linux-x86_64-asan - mozconfig-linux-x86_64-dev - mozconfig-macos - mozconfig-macos-dev - mozconfig-windows-x86_64 - + other-licenses/nsis/Contrib/ApplicationID/Makefile - other-licenses/nsis/Contrib/ApplicationID/Set.cpp - + other-licenses/nsis/Contrib/CityHash/Makefile - python/mozboot/mozboot/bootstrap.py - python/mozbuild/mozbuild/backend/base.py - python/mozbuild/mozbuild/tbbutils.py - toolkit/components/aboutpdf/content/aboutPDF.html - toolkit/components/extensions/child/ext-storage.js - toolkit/components/extensions/parent/ext-storage.js - toolkit/components/moz.build - toolkit/components/passwordmgr/LoginHelper.sys.mjs - toolkit/components/remote/nsDBusRemoteClient.cpp - toolkit/components/remote/nsDBusRemoteServer.cpp - toolkit/components/search/SearchService.sys.mjs - toolkit/components/search/content/base-browser-search-engine-icons.json - toolkit/components/search/content/base-browser-search-engines.json - + toolkit/components/search/content/brave.svg - + toolkit/components/search/content/mojeek.ico - toolkit/components/search/tests/xpcshell/test_base_browser.js - toolkit/components/securitylevel/SecurityLevel.sys.mjs - + toolkit/components/selectivesavingmode/SelectiveSavingMode.manifest - + toolkit/components/selectivesavingmode/SelectiveSavingMode.sys.mjs - + toolkit/components/selectivesavingmode/components.conf - + toolkit/components/selectivesavingmode/content/broom-clean.svg - + toolkit/components/selectivesavingmode/content/broom-saved.svg - + toolkit/components/selectivesavingmode/jar.mn - + toolkit/components/selectivesavingmode/moz.build - + toolkit/components/selectivesavingmode/tests/xpcshell/test_selective_saving_mode.js - + toolkit/components/selectivesavingmode/tests/xpcshell/xpcshell.toml - + toolkit/content/aboutTelemetryMullvad.xhtml - toolkit/content/jar.mn - toolkit/content/widgets/moz-promo/moz-promo.css - toolkit/content/widgets/moz-promo/moz-promo.tokens.css - + toolkit/locales/en-US/toolkit/global/mullvad-browser.ftl - toolkit/mozapps/defaultagent/EventLog.h - toolkit/mozapps/defaultagent/SetDefaultBrowser.cpp - toolkit/mozapps/extensions/AddonManager.sys.mjs - toolkit/mozapps/extensions/content/aboutaddons.css - toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs - toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs - toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der - toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der - toolkit/mozapps/update/updater/release_primary.der - toolkit/mozapps/update/updater/release_secondary.der - + toolkit/themes/shared/icons/mullvadbrowser.png - toolkit/themes/shared/minimal-toolkit.jar.inc.mn - toolkit/xre/nsAppRunner.cpp - tools/lint/fluent-lint/exclusions.yml - widget/windows/WinTaskbar.cpp - widget/windows/moz.build The diff was not included because it is too large. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/44… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/44… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.4.0esr-16.0-1] fixup! [android] Implement Android-native Connection Assist UI
by Dan Ballard (@dan) 23 Sep '26

23 Sep '26
Dan Ballard pushed to branch tor-browser-153.4.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 4590f59d by Dan Ballard at 2026-09-23T15:44:48-07:00 fixup! [android] Implement Android-native Connection Assist UI TB 44132: MinSDK raised to 26/O, removing check if Android Version is N or above - - - - - 1 changed file: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt ===================================== @@ -158,11 +158,7 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler, SystemIn } private fun setProgressBarCompat(progress: Int) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - binding.torBootstrapProgressBar.setProgress(progress, true) - } else { - binding.torBootstrapProgressBar.progress = progress - } + binding.torBootstrapProgressBar.setProgress(progress, true) } private fun showScreen(screen: ConnectAssistUiState) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/4590f59… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/4590f59… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser] Pushed new tag mullvad-browser-140.17.0esr-15.0-1-build1
by Pier Angelo Vendrame (@pierov) 23 Sep '26

23 Sep '26
Pier Angelo Vendrame pushed new tag mullvad-browser-140.17.0esr-15.0-1-build1 at The Tor Project / Applications / Mullvad Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/tree/mullv… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
  • ← Newer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ...
  • 22
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.