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 -----
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

  • 1 participants
  • 19971 discussions
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] 3 commits: fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in...
by morgan (@morgan) 20 Feb '25

20 Feb '25
morgan pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: 8e663084 by Henry Wilkes at 2025-02-20T17:30:12+00:00 fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection TB 43328: Improve the Tor log dialog. - - - - - 0cc2f849 by Henry Wilkes at 2025-02-20T17:38:02+00:00 fixup! TB 40933: Add tor-launcher functionality TB 43328: Make getLog return the LogEntry data. - - - - - 21c61532 by Henry Wilkes at 2025-02-20T17:38:03+00:00 fixup! Tor Browser strings TB 43328: Improve the Tor log. - - - - - 5 changed files: - browser/components/torpreferences/content/torLogDialog.js - browser/components/torpreferences/content/torLogDialog.xhtml - browser/components/torpreferences/content/torPreferences.css - toolkit/components/tor-launcher/TorProvider.sys.mjs - toolkit/locales/en-US/toolkit/global/tor-browser.ftl Changes: ===================================== browser/components/torpreferences/content/torLogDialog.js ===================================== @@ -4,20 +4,18 @@ const { setTimeout, clearTimeout } = ChromeUtils.importESModule( "resource://gre/modules/Timer.sys.mjs" ); -const { TorProviderBuilder } = ChromeUtils.importESModule( +const { TorProviderBuilder, TorProviderTopics } = ChromeUtils.importESModule( "resource://gre/modules/TorProviderBuilder.sys.mjs" ); -window.addEventListener( - "DOMContentLoaded", - () => { +const gTorLogDialog = { + init() { const dialog = document.getElementById("torPreferences-torLog-dialog"); const copyLogButton = dialog.getButton("extra1"); copyLogButton.setAttribute("data-l10n-id", "tor-log-dialog-copy-button"); - const logText = document.getElementById( - "torPreferences-torDialog-textarea" - ); + this._logTable = document.getElementById("tor-log-table"); + this._logBody = document.getElementById("tor-log-body"); let restoreButtonTimeout = null; copyLogButton.addEventListener("command", () => { @@ -25,7 +23,14 @@ window.addEventListener( let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService( Ci.nsIClipboardHelper ); - clipboard.copyString(logText.value); + // The copied text should match the text content the user would get if + // they hand-selected the entire table. + clipboard.copyString( + Array.from( + this._logTable.querySelectorAll("td"), + el => el.textContent + ).join("\n") + ); copyLogButton.setAttribute( "data-l10n-id", @@ -47,13 +52,79 @@ window.addEventListener( }, RESTORE_TIME); }); + // Intercept the copy event. + // NOTE: We attach this to the window rather than the _logTable because if + // the whole table is selected it will not receive the "copy" event. + window.addEventListener("copy", event => { + event.preventDefault(); + event.clipboardData.setData( + "text", + // By default the selected text will insert "\n\t" between the <td> + // elements, which separates the timestamp from the message column. + // We drop this "\t" character, to just keep the "\n". + window.getSelection().toString().replace(/^\t/gm, "") + ); + }); + // A waiting state should not be needed at this point. // Also, we probably cannot even arrive here if the provider failed to // initialize, otherwise we could use a try/catch, and write the exception // text in the logs, instead. - TorProviderBuilder.build().then( - provider => (logText.value = provider.getLog()) - ); + TorProviderBuilder.build().then(provider => { + Services.obs.addObserver(this, TorProviderTopics.TorLog); + window.addEventListener( + "unload", + () => { + Services.obs.removeObserver(this, TorProviderTopics.TorLog); + }, + { once: true } + ); + + for (const logEntry of provider.getLog()) { + this.addLogEntry(logEntry, true); + } + // Set the initial scroll to the bottom. + this._logTable.scrollTo({ + top: this._logTable.scrollTopMax, + behaviour: "instant", + }); + }); + }, + + observe(subject, topic) { + if (topic === TorProviderTopics.TorLog) { + this.addLogEntry(subject.wrappedJSObject, false); + } + }, + + addLogEntry(logEntry, initial) { + const timeEl = document.createElement("td"); + timeEl.textContent = logEntry.timestamp; + timeEl.classList.add("time"); + const messageEl = document.createElement("td"); + messageEl.textContent = `[${logEntry.type}] ${logEntry.msg}`; + messageEl.classList.add("message"); + + const row = document.createElement("tr"); + row.append(timeEl, messageEl); + + // If this is a new entry, and we are currently scrolled to the bottom (with + // a 6px allowance) we keep the scroll position at the bottom to "follow" + // the updates. + const scrollToBottom = + !initial && this._logTable.scrollTop >= this._logTable.scrollTopMax - 6; + + this._logBody.append(row); + if (scrollToBottom) { + this._logTable.scrollTo({ top: this._logTable.scrollTopMax }); + } + }, +}; + +window.addEventListener( + "DOMContentLoaded", + () => { + gTorLogDialog.init(); }, { once: true } ); ===================================== browser/components/torpreferences/content/torLogDialog.xhtml ===================================== @@ -23,10 +23,33 @@ <script src="chrome://browser/content/torpreferences/torLogDialog.js" /> - <html:textarea - id="torPreferences-torDialog-textarea" - multiline="true" - readonly="true" - /> + <!-- We use a <table> element rather than a <ol>. A table structure allows + - screen reader users to navigate within one column so they can avoid the + - readback of the timestamp on every row. See tor-browser#43328. + - NOTE: We add the explicit role="table". Whilst this should not be + - neccessary, nor is it recommended, some screen readers (Orca 46) do not + - read out the default table role if the CSS `display` is not `table`. + - NOTE: Even though this table is updated with live information, we do + - not want to make this an aria-live area or use a "log updated" + - notification because the log messages are potentially busy. + - Moreover, the live updates is a convience so that the log doesn't need + - to be manually refreshed, rather than important information. + - NOTE: We add a tabindex=0 to make this element focusable with or + - without the overflow. This also makes the table the the initial focus + - of the dialog. + - NOTE: We add lang="en" and dir="ltr" to the <tbody> since the content + - of the log is in English. We do not add this to the <table> element + - since its aria-label is localised and we want the scrollbar to match + - the locale direction. + - NOTE: We avoid any whitespace between the <table> and <tbody> to ensure + - it does not contribute to the text content when the top of the table is + - manually copied. --> + <html:table + id="tor-log-table" + role="table" + data-l10n-id="tor-log-dialog-table" + tabindex="0" + ><html:tbody id="tor-log-body" lang="en" dir="ltr"></html:tbody + ></html:table> </dialog> </window> ===================================== browser/components/torpreferences/content/torPreferences.css ===================================== @@ -1058,12 +1058,39 @@ groupbox#torPreferences-bridges-group textarea { } /* Tor logs dialog */ -textarea#torPreferences-torDialog-textarea { +#tor-log-table { flex: 1 0 auto; - font-family: monospace; - font-size: 0.8em; - white-space: pre; overflow: auto; - /* 10 lines */ min-height: 20em; + height: 20em; + display: flex; + flex-direction: column; + padding: var(--space-small); + margin-block-end: 4px; + border: 1px solid var(--in-content-box-border-color); + border-radius: var(--border-radius-small); + font-size: var(--font-size-small); +} + +#tor-log-body, +#tor-log-table tr { + display: contents; +} + +#tor-log-table td { + flex: 0 0 auto; + padding: 0; +} + +#tor-log-table td.time { + color: var(--text-color-deemphasized); + margin-block-end: var(--space-xsmall); +} + +#tor-log-table td.message { + overflow-wrap: anywhere; +} + +#tor-log-table tr:not(:last-of-type) td.message { + margin-block-end: var(--space-medium); } ===================================== toolkit/components/tor-launcher/TorProvider.sys.mjs ===================================== @@ -512,14 +512,12 @@ export class TorProvider { } /** - * Returns captured log message as a text string (one message per line). + * Returns captured log messages. * - * @returns {string} The logs we collected from the tor daemon so far + * @returns {LogEntry[]} The logs we collected from the tor daemon so far. */ getLog() { - return this.#logs - .map(logObj => `${logObj.timestamp} [${logObj.type}] ${logObj.msg}`) - .join(TorLauncherUtil.isWindows ? "\r\n" : "\n"); + return structuredClone(this.#logs); } /** ===================================== toolkit/locales/en-US/toolkit/global/tor-browser.ftl ===================================== @@ -423,6 +423,9 @@ tor-view-log-button = View log… # "log" is a noun, referring to the recorded text output of the Tor process. tor-log-dialog-title = .title = Tor log +# The screen-reader name for the Tor log table. Should match the dialog title. +tor-log-dialog-table = + .aria-label = { tor-log-dialog-title.title } # "log" is a noun, referring to the recorded text output of the Tor process. tor-log-dialog-copy-button = .label = Copy Tor log to clipboard View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8aa4f8… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8aa4f8… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-14.0] bug 41337: always copy gcc/stdlibc++ into firefox and remove from tor-expert-bundle
by Dan Ballard (@dan) 20 Feb '25

20 Feb '25
Dan Ballard pushed to branch maint-14.0 at The Tor Project / Applications / tor-browser-build Commits: 90a754f9 by Dan Ballard at 2025-02-19T13:50:34-08:00 bug 41337: always copy gcc/stdlibc++ into firefox and remove from tor-expert-bundle - - - - - 4 changed files: - projects/browser/build - projects/firefox/build - projects/tor/README.md - projects/tor/build Changes: ===================================== projects/browser/build ===================================== @@ -120,12 +120,6 @@ mv [% c('input_files_by_name/noscript') %] "$TBDIR/$EXTSPATH/{73a6fe31-595d-460b # Move tor and dependencies to where TB expects them mv_tbdir tor/* "$TORBINPATH" - # on linux, libstdc++ lives in it's own directory - [% IF c("var/linux") %] - mkdir -p "$TBDIR/$TORBINPATH/libstdc++" - mv "$TBDIR/$TORBINPATH"/libstdc++.so.* "$TBDIR/$TORBINPATH/libstdc++" - [% END %] - # the expert bundle includes tor-gencert, which isn't needed for browser releases [% IF c("var/windows") %] rm "$TBDIR/$TORBINPATH/tor-gencert.exe" @@ -189,6 +183,13 @@ tar -C "${TB_STAGE_DIR}" -xf [% c('input_files_by_name/firefox') %]/browser.tar. done popd rm -rf $TMP_MANUAL_PATH + + # on linux, libstdc++ lives in it's own directory + [% IF c("var/linux") %] + # For legacy reasons, libstdc++ is with tor binaries in Tor Browser. + # We would have to test the updater to move it outside. + mv "$TBDIR/libstdc++" "$TBDIR/$TORBINPATH/libstdc++" + [% END %] [% END -%] [% IF c("var/namecoin") %] ===================================== projects/firefox/build ===================================== @@ -329,16 +329,20 @@ END; [% IF c("var/linux") -%] /var/tmp/dist/gcc/bin/g++ $rootdir/abicheck.cc -o Browser/abicheck -std=c++17 - [% IF !c("var/tor-browser") -%] - libdest=Browser/libstdc++ - mkdir -p "$libdest" - # FIXME: tor-browser-build#40749 - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libstdc++.so.* "$libdest" - [% IF c("var/asan") -%] - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libasan.so.* "$libdest" - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libubsan.so.* "$libdest" - [% END -%] + libdest=Browser/libstdc++ + mkdir -p "$libdest" + # Not copying libstdc++.so.* as that dups with the full libstdc++.so.6.0.xx the .6 links to + # and libstdc++.so.6.0.28-gdb.py which is also not needed + cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libstdc++.so.* "$libdest" + [% IF c("var/asan") -%] + cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libasan.so.* "$libdest" + cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libubsan.so.* "$libdest" [% END -%] + # Strip and generate debuginfo for libs + for LIB in "$libdest"/*so* + do + "$STRIP" "$LIB" + done [% END -%] echo "Starting to package artifacts $(date)" ===================================== projects/tor/README.md ===================================== @@ -38,8 +38,5 @@ We plan to do it also on desktop platforms, see ## Other Linux libraries -For Linux we also include here libstdc++ (and the sanitizers, if enabled), even -though they aren't needed by tor. - -Also, on we provide debug symbols, but only for Linux, and only in +For Linux we provide debug symbols, but only for Linux, and only in `tor-expert-bundle`. ===================================== projects/tor/build ===================================== @@ -52,22 +52,7 @@ openssldir=/var/tmp/dist/openssl cp $openssldir/lib/libssl.so.3 "$TORBINDIR" cp $openssldir/lib/libcrypto.so.3 "$TORBINDIR" cp $libeventdir/lib/libevent-2.1.so.7 "$TORBINDIR" - # We need to copy the libstdc++.so.6 for Tor Browser on older Linux distros. - # Copying it into /Browser, which feels more natural, and amending - # LD_LIBRARY_PATH breaks updates from a Tor Browser with the old - # LD_LIBRARY_PATH value to the Tor Browser with the newer one. Thus, we copy - # the libstdc++ into the directory with the libs tor depends on, too. See bug - # 13359 for further details. - libdir=[% c("var/libdir") %] - [% IF c("var/linux-cross") -%] - libdir="[% c("var/crosstarget") %]/$libdir" - [% END -%] - cp "/var/tmp/dist/gcc/$libdir/libstdc++.so.6" "$TORBINDIR" - [% IF c("var/asan") -%] - cp "/var/tmp/dist/gcc/$libdir/libasan.so.6" "$TORBINDIR" - cp "/var/tmp/dist/gcc/$libdir/libubsan.so.1" "$TORBINDIR" - [% END -%] - chmod 700 "$TORBINDIR"/*.so* + # This is needed to make RPATH unavailable. See bug 9150. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TORBINDIR" [% END %] @@ -136,17 +121,9 @@ cd $distdir do LIB=`basename $i` - if [ $LIB == 'libstdc++.so.6' ]; then - # keeping this separate to maintain reproducibility; we can probably - # treat this the same as the rest (though it seems libstdc++ doesn't come with - # any useful debug symbols since we don't build it, so maybe we should figure - # out how to package them - "$STRIP" "$TORBINDIR/$LIB" - else - "$OBJCOPY" --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB" - "$STRIP" "$TORBINDIR/$LIB" - "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB" - fi + "$OBJCOPY" --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB" + "$STRIP" "$TORBINDIR/$LIB" + "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB" done [% END %] View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/9… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/9… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Update uplift and add backport issue template for consistency with tor-browser
by morgan (@morgan) 20 Feb '25

20 Feb '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: fa7e94b4 by Morgan at 2025-02-20T14:59:12+00:00 Update uplift and add backport issue template for consistency with tor-browser - - - - - 2 changed files: - + .gitlab/issue_templates/Backport.md - .gitlab/issue_templates/Uplift.md Changes: ===================================== .gitlab/issue_templates/Backport.md ===================================== @@ -0,0 +1,29 @@ +<!-- +Title: + Backport tor-browser-build-browser#12345: Title of Issue + +This is an issue for tracking back-porting a patch-set (e.g. from main to maint-14.0) +--> + +## Backport Patchset + +### Book-keeping + +#### Gitlab Issue(s) +- tor-browser#12345 +- mullvad-browser#123 +- tor-browser-build#12345 + +#### Merge Request(s) +- tor-browser-build!1234 + +#### Target Channels + +- [ ] maint-14.0 +- [ ] maint-13.5 + +### Notes + +<!-- whatever additional info, context, etc that would be helpful for backporting --> + +/label ~"Apps::Type::Backport" ===================================== .gitlab/issue_templates/Uplift.md ===================================== @@ -1,17 +1,25 @@ <!-- Title: Uplift tor-browser-build#12345: Title of Issue + +This is an issue for tracking uplift of a patch-set to an upstream build-dependency (e.g. MinGW, clang, etc) + --> -# Uplift Patchset +## Uplift Patchset -## Gitlab Issue(s) +### Book-keeping + +#### Gitlab Issue(s) - tor-browser-build#12345 -## Upstream Project Issue(s): +#### Merge Request(s) +- tor-browser-build!1234 + +#### Upstream Project Issue(s): -## Notes +### Notes <!-- whatever additional info, context, etc that would be helpful for uplifting --> View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-128.7.0esr-14.5-1] 2 commits: fixup! Adding issue and merge request templates
by morgan (@morgan) 20 Feb '25

20 Feb '25
morgan pushed to branch mullvad-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Mullvad Browser Commits: a4dcc590 by Morgan at 2025-02-20T14:41:28+00:00 fixup! Adding issue and merge request templates add backport template and tweak the uplift template - - - - - 3551913c by Morgan at 2025-02-20T14:46:09+00:00 fixup! MB 188: Customize Gitlab Issue and Merge templates tweak backport temlpate for mullvad-browser - - - - - 1 changed file: - + .gitlab/issue_templates/Backport.md Changes: ===================================== .gitlab/issue_templates/Backport.md ===================================== @@ -0,0 +1,27 @@ +<!-- +Title: + Backport mullvad-browser#123: Title of Issue + +This is an issue for tracking back-porting a patch-set (e.g. from Alpha to Stable) +--> + +## Backport Patchset + +### Book-keeping + +#### Gitlab Issue(s) +- tor-browser#12345 +- mullvad-browser#123 + +#### Merge Request(s) +- mullvad-browser!123 + +#### Target Channels + +- [ ] Stable + +### Notes + +<!-- whatever additional info, context, etc that would be helpful for backporting --> + +/label ~"Apps::Type::Backport" View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/db… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/db… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] fixup! Adding issue and merge request templates
by morgan (@morgan) 20 Feb '25

20 Feb '25
morgan pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: 8aa4f8c7 by Morgan at 2025-02-20T14:38:14+00:00 fixup! Adding issue and merge request templates add backport template and tweak the uplift template - - - - - 2 changed files: - + .gitlab/issue_templates/Backport.md - .gitlab/issue_templates/Uplift.md Changes: ===================================== .gitlab/issue_templates/Backport.md ===================================== @@ -0,0 +1,28 @@ +<!-- +Title: + Backport tor-browser#12345: Title of Issue + +This is an issue for tracking back-porting a patch-set (e.g. from Alpha to Stable) +--> + +## Backport Patchset + +### Book-keeping + +#### Gitlab Issue(s) +- tor-browser#12345 +- mullvad-browser#123 + +#### Merge Request(s) +- tor-browser!123 + +#### Target Channels + +- [ ] Stable +- [ ] Legacy + +### Notes + +<!-- whatever additional info, context, etc that would be helpful for backporting --> + +/label ~"Apps::Type::Backport" ===================================== .gitlab/issue_templates/Uplift.md ===================================== @@ -1,18 +1,25 @@ <!-- Title: Uplift tor-browser#12345: Title of Issue + +This is an issue for tracking uplift of a patch-set to Firefox --> -# Uplift Patchset +## Uplift Patchset + +### Book-keeping -## Gitlab Issue(s) +#### Gitlab Issue(s) - tor-browser#12345 -- mullvad-browser#12345 +- mullvad-browser#123 + +#### Merge Request(s) +- tor-browser!123 -## Upstream Mozilla Issue(s): +#### Upstream Mozilla Issue(s): - https://bugzilla.mozilla.org/show_bug.cgi?id=12345 -## Notes +### Notes <!-- whatever additional info, context, etc that would be helpful for uplifting --> View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8aa4f8c… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8aa4f8c… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] fixup! TB 42669: [android] Use custom no-op app-services
by Dan Ballard (@dan) 19 Feb '25

19 Feb '25
Dan Ballard pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: 6c42a1f6 by Dan Ballard at 2025-02-19T18:04:53+00:00 fixup! TB 42669: [android] Use custom no-op app-services Bug 42669: use topsrcdir as defined by us in local.properties for gradle to support different project dirs in AS - - - - - 1 changed file: - mobile/android/fenix/app/build.gradle Changes: ===================================== mobile/android/fenix/app/build.gradle ===================================== @@ -315,8 +315,7 @@ android.applicationVariants.configureEach { variant -> if (project.hasProperty("disableTor")) { disableTor = project.getProperty("disableTor") } - System.setProperty("nimbusFml", rootProject.projectDir.toPath().resolve("tools").resolve("nimbus-fml").toAbsolutePath().toString()) - + System.setProperty("nimbusFml", "${topsrcdir}/mobile/android/tools/nimbus-fml") println("----------------------------------------------") println("Variant name: " + variant.name) View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/6c42a1f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/6c42a1f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-128.7.0esr-14.5-1] 2 commits: dropme! BB 40925: Implemented the Security Level component
by morgan (@morgan) 19 Feb '25

19 Feb '25
morgan pushed to branch mullvad-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Mullvad Browser Commits: 155722f5 by Pier Angelo Vendrame at 2025-02-19T14:29:30+00:00 dropme! BB 40925: Implemented the Security Level component BB 43498: Remove our old patch for 43129. This commit should be ignored at the next rebase (and we will likely have a conflict on the security level commit). - - - - - db2459bd by Pier Angelo Vendrame at 2025-02-19T14:29:30+00:00 Bug 1923260 - Exempt Android resources from svg.disabled. r=peterv Differential Revision: https://phabricator.services.mozilla.com/D224895 - - - - - 1 changed file: - dom/base/nsNodeInfoManager.cpp Changes: ===================================== dom/base/nsNodeInfoManager.cpp ===================================== @@ -344,16 +344,6 @@ void nsNodeInfoManager::RemoveNodeInfo(NodeInfo* aNodeInfo) { } static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { -#ifdef ANDROID - if (aPrincipal->SchemeIs("resource")) { - nsAutoCString spec; - aPrincipal->GetAsciiSpec(spec); - if (StringBeginsWith(spec, "resource://android/assets/"_ns)) { - return true; - } - } -#endif - return aPrincipal->IsSystemPrincipal() || BasePrincipal::Cast(aPrincipal)->AddonPolicy() || // NOTE: about:blank and about:srcdoc inherit the principal of their @@ -361,6 +351,21 @@ static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { aPrincipal->SchemeIs("about"); } +static bool IsAndroidResource(nsIURI* aURI) { +#ifdef ANDROID + if (aURI->SchemeIs("resource")) { + nsAutoCString host, path; + aURI->GetHost(host); + aURI->GetFilePath(path); + if (host.EqualsLiteral("android") && + StringBeginsWith(path, "/assets/"_ns)) { + return true; + } + } +#endif + return false; +} + bool nsNodeInfoManager::InternalSVGEnabled() { MOZ_ASSERT(!mSVGEnabled, "Caller should use the cached mSVGEnabled!"); @@ -386,6 +391,7 @@ bool nsNodeInfoManager::InternalSVGEnabled() { // of system or add-on UI or about: page) bool conclusion = (SVGEnabled || IsSystemOrAddonOrAboutPrincipal(mPrincipal) || + IsAndroidResource(mDocument->GetDocumentURI()) || (loadInfo && (loadInfo->GetExternalContentPolicyType() == ExtContentPolicy::TYPE_IMAGE || View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/5b… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/5b… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41372: Fix rename-branding-strings.py path.
by boklm (@boklm) 19 Feb '25

19 Feb '25
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: a395d359 by Henry Wilkes at 2025-02-19T14:11:51+00:00 Bug 41372: Fix rename-branding-strings.py path. - - - - - 1 changed file: - projects/firefox/build Changes: ===================================== projects/firefox/build ===================================== @@ -178,8 +178,8 @@ branding_dir=browser/branding/[% c("var/branding_directory_prefix") %]-[% c("var mkdir -p "$l10n_branding_dir" # Convert the translations repository branding files into files that work # for this specific build. - python3 rename-branding-strings.py $lang/branding/brand.ftl "$brand_ftl_renames" > "$l10n_branding_dir/brand.ftl" - python3 rename-branding-strings.py $lang/brand.properties "$brand_properties_renames" > "$l10n_branding_dir/brand.properties" + python3 $rootdir/rename-branding-strings.py $lang/branding/brand.ftl "$brand_ftl_renames" > "$l10n_branding_dir/brand.ftl" + python3 $rootdir/rename-branding-strings.py $lang/brand.properties "$brand_properties_renames" > "$l10n_branding_dir/brand.properties" done popd View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/a… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/a… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-128.7.0esr-14.5-1] 2 commits: dropme! BB 40925: Implemented the Security Level component
by morgan (@morgan) 19 Feb '25

19 Feb '25
morgan pushed to branch base-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: f675e2ca by Pier Angelo Vendrame at 2025-02-19T14:24:57+00:00 dropme! BB 40925: Implemented the Security Level component BB 43498: Remove our old patch for 43129. This commit should be ignored at the next rebase (and we will likely have a conflict on the security level commit). - - - - - 20e649a8 by Pier Angelo Vendrame at 2025-02-19T14:24:57+00:00 Bug 1923260 - Exempt Android resources from svg.disabled. r=peterv Differential Revision: https://phabricator.services.mozilla.com/D224895 - - - - - 1 changed file: - dom/base/nsNodeInfoManager.cpp Changes: ===================================== dom/base/nsNodeInfoManager.cpp ===================================== @@ -344,16 +344,6 @@ void nsNodeInfoManager::RemoveNodeInfo(NodeInfo* aNodeInfo) { } static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { -#ifdef ANDROID - if (aPrincipal->SchemeIs("resource")) { - nsAutoCString spec; - aPrincipal->GetAsciiSpec(spec); - if (StringBeginsWith(spec, "resource://android/assets/"_ns)) { - return true; - } - } -#endif - return aPrincipal->IsSystemPrincipal() || BasePrincipal::Cast(aPrincipal)->AddonPolicy() || // NOTE: about:blank and about:srcdoc inherit the principal of their @@ -361,6 +351,21 @@ static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { aPrincipal->SchemeIs("about"); } +static bool IsAndroidResource(nsIURI* aURI) { +#ifdef ANDROID + if (aURI->SchemeIs("resource")) { + nsAutoCString host, path; + aURI->GetHost(host); + aURI->GetFilePath(path); + if (host.EqualsLiteral("android") && + StringBeginsWith(path, "/assets/"_ns)) { + return true; + } + } +#endif + return false; +} + bool nsNodeInfoManager::InternalSVGEnabled() { MOZ_ASSERT(!mSVGEnabled, "Caller should use the cached mSVGEnabled!"); @@ -386,6 +391,7 @@ bool nsNodeInfoManager::InternalSVGEnabled() { // of system or add-on UI or about: page) bool conclusion = (SVGEnabled || IsSystemOrAddonOrAboutPrincipal(mPrincipal) || + IsAndroidResource(mDocument->GetDocumentURI()) || (loadInfo && (loadInfo->GetExternalContentPolicyType() == ExtContentPolicy::TYPE_IMAGE || View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/523639… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/523639… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] 2 commits: dropme! BB 40925: Implemented the Security Level component
by morgan (@morgan) 19 Feb '25

19 Feb '25
morgan pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: 7fc0ffe8 by Pier Angelo Vendrame at 2025-02-19T08:57:31+01:00 dropme! BB 40925: Implemented the Security Level component BB 43498: Remove our old patch for 43129. This commit should be ignored at the next rebase (and we will likely have a conflict on the security level commit). - - - - - 7b27fd84 by Pier Angelo Vendrame at 2025-02-19T08:57:43+01:00 Bug 1923260 - Exempt Android resources from svg.disabled. r=peterv Differential Revision: https://phabricator.services.mozilla.com/D224895 - - - - - 1 changed file: - dom/base/nsNodeInfoManager.cpp Changes: ===================================== dom/base/nsNodeInfoManager.cpp ===================================== @@ -344,16 +344,6 @@ void nsNodeInfoManager::RemoveNodeInfo(NodeInfo* aNodeInfo) { } static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { -#ifdef ANDROID - if (aPrincipal->SchemeIs("resource")) { - nsAutoCString spec; - aPrincipal->GetAsciiSpec(spec); - if (StringBeginsWith(spec, "resource://android/assets/"_ns)) { - return true; - } - } -#endif - return aPrincipal->IsSystemPrincipal() || BasePrincipal::Cast(aPrincipal)->AddonPolicy() || // NOTE: about:blank and about:srcdoc inherit the principal of their @@ -361,6 +351,21 @@ static bool IsSystemOrAddonOrAboutPrincipal(nsIPrincipal* aPrincipal) { aPrincipal->SchemeIs("about"); } +static bool IsAndroidResource(nsIURI* aURI) { +#ifdef ANDROID + if (aURI->SchemeIs("resource")) { + nsAutoCString host, path; + aURI->GetHost(host); + aURI->GetFilePath(path); + if (host.EqualsLiteral("android") && + StringBeginsWith(path, "/assets/"_ns)) { + return true; + } + } +#endif + return false; +} + bool nsNodeInfoManager::InternalSVGEnabled() { MOZ_ASSERT(!mSVGEnabled, "Caller should use the cached mSVGEnabled!"); @@ -386,6 +391,7 @@ bool nsNodeInfoManager::InternalSVGEnabled() { // of system or add-on UI or about: page) bool conclusion = (SVGEnabled || IsSystemOrAddonOrAboutPrincipal(mPrincipal) || + IsAndroidResource(mDocument->GetDocumentURI()) || (loadInfo && (loadInfo->GetExternalContentPolicyType() == ExtContentPolicy::TYPE_IMAGE || View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/6fa642… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/6fa642… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] 3 commits: Bug 41363: Split update_responses files per platform
by morgan (@morgan) 19 Feb '25

19 Feb '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 8b3ef788 by Nicolas Vigier at 2025-02-19T04:18:14+01:00 Bug 41363: Split update_responses files per platform To make reverting update for a single platform easier, we split update response files, using a separate directory for each platform. - - - - - 38dcaae7 by Nicolas Vigier at 2025-02-19T04:19:25+01:00 Bug 41363: Make separate update_responses commit for each platform - - - - - 7504979e by Nicolas Vigier at 2025-02-19T04:19:29+01:00 Bug 41363: Fix error message about $update_responses_repository_dir being undefined - - - - - 4 changed files: - projects/release/create_update_responses_tar - tools/signing/functions - tools/signing/upload-update_responses-to-staticiforme - tools/update-responses/update_responses Changes: ===================================== projects/release/create_update_responses_tar ===================================== @@ -1,9 +1,10 @@ #!/bin/bash [% c("var/set_default_env") -%] [% SET channel = c('var/channel') -%] +rm -Rf [% shell_quote(c("basedir")) %]/tools/update-responses/htdocs/[% channel %] [% shell_quote(c("basedir")) %]/tools/update-responses/update_responses [% channel %] mkdir -p [% shell_quote(path(dest_dir)) %]/update-responses mv [% shell_quote(c("basedir")) %]/tools/update-responses/htdocs/[% channel %] [% channel %] -chmod 775 [% channel %] -chmod 664 [% channel %]/.htaccess [% channel %]/* +find [% channel %] -type d -exec chmod 775 {} \; +find [% channel %] -type f -exec chmod 664 {} \; tar cf [% shell_quote(path(dest_dir)) %]/update-responses/update-responses-[% channel %]-[% c("version") %].tar [% channel %] ===================================== tools/signing/functions ===================================== @@ -23,7 +23,7 @@ function check_update_responses_repository_dir { if test -z "$update_responses_repository_dir" || ! test -d "$update_responses_repository_dir" then cat << 'EOF' > /dev/stderr -$aus1_repository_dir is not defined, or the directory does not exist +$update_responses_repository_dir is not defined, or the directory does not exist You should clone git@gitlab.torproject.org:tpo/applications/tor-browser-update-responses.git and set $update_responses_repository_dir in set-config.update-responses EOF ===================================== tools/signing/upload-update_responses-to-staticiforme ===================================== @@ -39,8 +39,32 @@ do mv "$file" "$tbb_version_type/$fname" done +# Keep directory from previous release if they are not in the new release. +# This happens when a release does not include some platforms. +for file in $(ls -1 "$old_ur/$tbb_version_type") +do + test -d "$old_ur/$tbb_version_type/$file" || continue + test -d "$tbb_version_type/$file" && continue + mv -f "$old_ur/$tbb_version_type/$file" "$tbb_version_type/$file" +done + +# Commit each sub-directory separately +for file in $(ls -1 "$tbb_version_type") +do + test -d "$tbb_version_type/$file" || continue + git add "$tbb_version_type/$file" + git add "$tbb_version_type/download-$file.json" + git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version ($file)" +done + +git add "$tbb_version_type"/download-android-*.json +git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version (android)" + git add "$tbb_version_type" -git commit -m "$tbb_version_type: new version, $tbb_version" +git diff --quiet --cached --exit-code || \ + git commit -m "$tbb_version_type: new version, $tbb_version" git push # we just need to push mullvadbrowser's update responses to git, not deploy to staticiforme ===================================== tools/update-responses/update_responses ===================================== @@ -29,7 +29,6 @@ setlocale(LC_ALL, "C"); my $htdocsdir = "$FindBin::Bin/htdocs"; my $config = LoadFile("$FindBin::Bin/config.yml"); -my %htdocsfiles; my $releases_dir = $config->{releases_dir}; $releases_dir = "$FindBin::Bin/$releases_dir" unless $releases_dir =~ m/^\//; my @check_errors; @@ -51,12 +50,6 @@ sub get_tmpdir { : ()); } -sub build_targets_by_os { - exit_error "Unknown build target for OS $_[0]" unless $config->{build_targets}{$_[0]}; - my $r = $config->{build_targets}{$_[0]}; - return ref $r eq 'ARRAY' ? @$r : ($r); -} - sub get_nbprocs { return $ENV{NUM_PROCS} if defined $ENV{NUM_PROCS}; if (-f '/proc/cpuinfo') { @@ -80,19 +73,11 @@ sub setup_martools { } sub write_htdocs { - my ($channel, $file, $content) = @_; + my ($channel, $dir, $file, $content) = @_; mkdir $htdocsdir unless -d $htdocsdir; mkdir "$htdocsdir/$channel" unless -d "$htdocsdir/$channel"; - write_file("$htdocsdir/$channel/$file", $content); - $htdocsfiles{$channel}->{$file} = 1; -} - -sub clean_htdocs { - my ($channel) = @_; - opendir(my $d, "$htdocsdir/$channel"); - my @files = grep { ! $htdocsfiles{$channel}->{$_} } readdir $d; - closedir $d; - unlink map { "$htdocsdir/$channel/$_" } @files; + mkdir "$htdocsdir/$channel/$dir" unless -d "$htdocsdir/$channel/$dir"; + write_file("$htdocsdir/$channel/$dir/$file", $content); } sub get_sha512_hex_of_file { @@ -418,24 +403,31 @@ sub write_responses { my $versions_str = join('+', @$versions); foreach my $os (keys %oses) { my $resp = get_response($config, $versions, $os); - write_htdocs($channel, "$versions_str-$os.xml", $resp); + write_htdocs($channel, $os, "$versions_str-$os.xml", $resp); foreach my $from_version (keys %from_versions) { $resp = get_response($config, $versions, $os, $from_version); - write_htdocs($channel, "$from_version-$versions_str-$os.xml", $resp); + write_htdocs($channel, $os, "$from_version-$versions_str-$os.xml", $resp); } + write_htdocs($channel, $os, 'no-update.xml', + '<?xml version="1.0" encoding="UTF-8"?>' + . "\n<updates></updates>\n"); } - write_htdocs($channel, 'no-update.xml', - '<?xml version="1.0" encoding="UTF-8"?>' - . "\n<updates></updates>\n"); } sub write_htaccess { my ($config, $channel) = @_; - my $flags = "[last]"; - my $htaccess = "RewriteEngine On\n"; - $htaccess .= $config->{htaccess_rewrite_rules}{$channel} // ''; + + my $htaccess_main = "RewriteEngine On\n"; + $htaccess_main .= $config->{htaccess_rewrite_rules}{$channel} // ''; my $versions = as_array($config->{channels}{$channel}); my $versions_str = join('+', @$versions); + foreach my $os (sort keys %{$config->{build_targets}}) { + foreach my $bt (@{ as_array($config->{build_targets}{$os}) }) { + $htaccess_main .= "RewriteRule ^$bt/(.*) $os/\$1 [last]\n"; + } + } + write_htdocs($channel, '.', '.htaccess', $htaccess_main); + my (%oses, %from_versions); foreach my $version (@$versions) { my $files = $config->{versions}{$version}{files}; @@ -445,20 +437,20 @@ sub write_htaccess { $from_versions{$from_version} = 1; } } - $htaccess .= "RewriteRule ^[^\/]+/$version/ no-update.xml $flags\n"; } - foreach my $os (sort keys %oses) { - foreach my $bt (build_targets_by_os($os)) { + foreach my $version (@$versions) { + my $files = $config->{versions}{$version}{files}; + foreach my $os (sort keys %oses) { + my $htaccess_os = "RewriteEngine On\n"; + $htaccess_os .= "RewriteRule ^$version/ no-update.xml [last]\n"; foreach my $from_version (sort keys %from_versions) { - $htaccess .= "RewriteRule ^$bt/$from_version/ALL " - . "$from_version-$versions_str-$os.xml $flags\n"; + $htaccess_os .= "RewriteRule ^$from_version/ " + . "$from_version-$versions_str-$os.xml [last]\n"; } - $htaccess .= "RewriteRule ^$bt/[^\/]+/ALL " - . "$versions_str-$os.xml $flags\n"; - $htaccess .= "RewriteRule ^$bt/ $versions_str-$os.xml $flags\n"; + $htaccess_os .= "RewriteRule ^[^\/]+/ $versions_str-$os.xml [last]\n"; + write_htdocs($channel, $os, '.htaccess', $htaccess_os); } } - write_htdocs($channel, '.htaccess', $htaccess); } sub write_downloads_json { @@ -472,11 +464,11 @@ sub write_downloads_json { tag => "$tag", downloads => get_version_downloads($config, $version), }; - write_htdocs($channel, 'downloads.json', + write_htdocs($channel, '.', 'downloads.json', JSON->new->utf8->canonical->encode($data)); my $pp_downloads = get_perplatform_downloads($config, $version, $tag); foreach my $os (keys %{$pp_downloads}) { - write_htdocs($channel, "download-$os.json", + write_htdocs($channel, '.', "download-$os.json", JSON->new->utf8->canonical->encode($pp_downloads->{$os})); } } @@ -636,11 +628,9 @@ my %actions = ( exit_error "Wrong arguments" unless @ARGV == 1; my $channel = $ARGV[0]; exit_error "Unknown channel $channel" unless $config->{channels}{$channel}; - $htdocsfiles{$channel} = { '.' => 1, '..' => 1 }; write_responses($config, $channel); write_htaccess($config, $channel); write_downloads_json($config, $channel); - clean_htdocs($channel); }, gen_incrementals => sub { my ($config) = @_; View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] 3 commits: Bug 41374: Remove support for migrate_archs and migrate_langs in update_responses
by morgan (@morgan) 18 Feb '25

18 Feb '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 8adf3820 by Nicolas Vigier at 2025-02-18T13:29:49+00:00 Bug 41374: Remove support for migrate_archs and migrate_langs in update_responses Those options have not been used for some time, and removing them simplifies the following changes we're doing to split files per platform. - - - - - 16dabc5e by Nicolas Vigier at 2025-02-18T13:29:49+00:00 Bug 40799: Remove legacy locale iteration in update-responses - - - - - 002fb3b9 by Nicolas Vigier at 2025-02-18T13:29:49+00:00 Bug 40799: Remove legacy locale support in tools/dmg2mar - - - - - 3 changed files: - projects/release/update_responses_config.yml - tools/dmg2mar - tools/update-responses/update_responses Changes: ===================================== projects/release/update_responses_config.yml ===================================== @@ -51,10 +51,6 @@ versions: - [% ver %] [% END; END -%] - # for example, osx32: osx64 - migrate_archs: - # for example, pt-PT: pt-BR - migrate_langs: # minSupportedOsVersion on macOS corresponds to the Darwin version ( https://en.wikipedia.org/wiki/Darwin_(operating_system) ) macos: # macOS v10.15.0 ===================================== tools/dmg2mar ===================================== @@ -102,7 +102,7 @@ sub get_dmg_files_from_sha256sums { next unless $filename; chomp $filename; next unless $filename =~ m/^$appname_dmg-macos-(.+)\.dmg$/; - push @files, { filename => $filename, version => $1, lang => 'ALL' }; + push @files, { filename => $filename, version => $1 }; } return @files; } @@ -116,11 +116,7 @@ sub convert_files { print "Finished $_[2]\n"; }); foreach my $file (get_dmg_files_from_sha256sums) { - # The 'ja' locale is a special case: it is called 'ja-JP-mac' - # internally on OSX, but the dmg file still uses 'ja' to avoid - # confusing users. - my $mar_lang = $file->{lang} eq 'ja' ? 'ja-JP-mac' : $file->{lang}; - my $output = "$appname_mar-macos-$file->{version}_$mar_lang.mar"; + my $output = "$appname_mar-macos-$file->{version}_ALL.mar"; my $step_name = "$file->{filename} -> $output"; print "Starting $step_name\n"; $pm->start($step_name) and next; ===================================== tools/update-responses/update_responses ===================================== @@ -113,9 +113,9 @@ sub get_version_files { foreach my $file (readdir $d) { next unless -f "$vdir/$file"; if ($file !~ m/incremental\.mar$/ && - $file =~ m/^$appname-(.+)-${version}_(.+)\.mar$/) { - my ($os, $lang) = ($1, $2); - $files->{$os}{$lang}{complete} = { + $file =~ m/^$appname-(.+)-${version}_ALL\.mar$/) { + my $os = $1; + $files->{$os}{complete} = { type => 'complete', URL => "$download_url/$file", size => -s "$vdir/$file", @@ -126,9 +126,9 @@ sub get_version_files { }; next; } - if ($file =~ m/^$appname-(.+)--(.+)-${version}_(.+)\.incremental\.mar$/) { - my ($os, $from_version, $lang) = ($1, $2, $3); - $files->{$os}{$lang}{partial}{$from_version} = { + if ($file =~ m/^$appname-(.+)--(.+)-${version}_ALL\.incremental\.mar$/) { + my ($os, $from_version) = ($1, $2); + $files->{$os}{partial}{$from_version} = { type => 'partial', URL => "$download_url/$file", size => -s "$vdir/$file", @@ -235,14 +235,14 @@ sub extract_mar { } sub mar_filename { - my ($config, $appname, $version, $os, $lang) = @_; - version_dir($config, $version) . "/$appname-$os-${version}_$lang.mar"; + my ($config, $appname, $version, $os) = @_; + version_dir($config, $version) . "/$appname-$os-${version}_ALL.mar"; } sub create_incremental_mar { - my ($config, $pm, $from_version, $new_version, $os, $lang, $channel) = @_; + my ($config, $pm, $from_version, $new_version, $os, $channel) = @_; my $appname = $config->{appname_marfile}; - my $mar_file = "$appname-$os--${from_version}-${new_version}_$lang.incremental.mar"; + my $mar_file = "$appname-$os--${from_version}-${new_version}_ALL.incremental.mar"; my $mar_file_path = version_dir($config, $new_version) . '/' . $mar_file; if ($ENV{MAR_SKIP_EXISTING} && -f $mar_file_path) { print "Skipping $mar_file\n"; @@ -253,7 +253,7 @@ sub create_incremental_mar { my $finished_file = sub { exit_error "Error creating $mar_file" unless $_[1] == 0; print "Finished $mar_file\n"; - $config->{versions}{$new_version}{files}{$os}{$lang}{partial}{$from_version} = { + $config->{versions}{$new_version}{files}{$os}{partial}{$from_version} = { type => 'partial', URL => "$download_url/$mar_file", size => -s $mar_file_path, @@ -267,9 +267,9 @@ sub create_incremental_mar { my $tmpdir = get_tmpdir($config); my $mar_c_from = get_config($config, $from_version, $os, 'mar_compression'); my $mar_c_new = get_config($config, $new_version, $os, 'mar_compression'); - extract_mar(mar_filename($config, $appname, $from_version, $os, $lang), + extract_mar(mar_filename($config, $appname, $from_version, $os), "$tmpdir/A", $mar_c_from); - extract_mar(mar_filename($config, $appname, $new_version, $os, $lang), + extract_mar(mar_filename($config, $appname, $new_version, $os), "$tmpdir/B", $mar_c_new); # bug 26054: make sure previous macOS version is code signed if (!$ENV{NO_CODESIGNATURE} && ($os eq 'macos') @@ -306,10 +306,8 @@ sub create_incremental_mars_for_version { get_version_files($config, $from_version); my $from_v = $config->{versions}{$from_version}; foreach my $os (keys %{$v->{files}}) { - foreach my $lang (keys %{$v->{files}{$os}}) { - next unless defined $from_v->{files}{$os}{$lang}{complete}; - create_incremental_mar($config, $pm, $from_version, $version, $os, $lang, $channel); - } + next unless defined $from_v->{files}{$os}{complete}; + create_incremental_mar($config, $pm, $from_version, $version, $os, $channel); } } $pm->wait_all_children; @@ -333,31 +331,29 @@ sub get_buildinfos { setup_martools; my $files = $config->{versions}{$version}{files}; foreach my $os (keys %$files) { - foreach my $lang (keys %{$files->{$os}}) { - next unless $files->{$os}{$lang}{complete}; - my $tmpdir = get_tmpdir($config); - my $mar_compression = get_config($config, $version, $os, 'mar_compression'); - extract_mar( - mar_filename($config, $config->{appname_marfile}, $version, $os, $lang), - "$tmpdir", - $mar_compression); - my $appfile = "$tmpdir/application.ini" if -f "$tmpdir/application.ini"; - $appfile = "$tmpdir/Contents/Resources/application.ini" - if -f "$tmpdir/Contents/Resources/application.ini"; - exit_error "Could not find application.ini" unless $appfile; - foreach my $line (read_file($appfile)) { - if ($line =~ m/^BuildID=(.*)$/) { - $config->{versions}{$version}{buildID} = $1; - return; - } + next unless $files->{$os}{complete}; + my $tmpdir = get_tmpdir($config); + my $mar_compression = get_config($config, $version, $os, 'mar_compression'); + extract_mar( + mar_filename($config, $config->{appname_marfile}, $version, $os), + "$tmpdir", + $mar_compression); + my $appfile = "$tmpdir/application.ini" if -f "$tmpdir/application.ini"; + $appfile = "$tmpdir/Contents/Resources/application.ini" + if -f "$tmpdir/Contents/Resources/application.ini"; + exit_error "Could not find application.ini" unless $appfile; + foreach my $line (read_file($appfile)) { + if ($line =~ m/^BuildID=(.*)$/) { + $config->{versions}{$version}{buildID} = $1; + return; } - exit_error "Could not extract buildID from application.ini"; } + exit_error "Could not extract buildID from application.ini"; } } sub get_response { - my ($config, $versions, $os, $lang, $from_version) = @_; + my ($config, $versions, $os, $from_version) = @_; my $res; my $writer = XML::Writer->new(OUTPUT => \$res, ENCODING => 'UTF-8'); $writer->xmlDecl; @@ -384,13 +380,13 @@ sub get_response { defined $minversion ? ( minSupportedOSVersion => $minversion ) : (), defined $mininstruc ? ( minSupportedInstructionSet => $mininstruc ) : (), ); - if (my $patch = $config->{versions}{$version}{files}{$os}{$lang}{complete}) { + if (my $patch = $config->{versions}{$version}{files}{$os}{complete}) { my @sorted_patch = map { $_ => $patch->{$_} } sort keys %$patch; $writer->startTag('patch', @sorted_patch); $writer->endTag('patch'); } if ($from_version) { - if (my $patch = $config->{versions}{$version}{files}{$os}{$lang}{partial}{$from_version}) { + if (my $patch = $config->{versions}{$version}{files}{$os}{partial}{$from_version}) { my @sorted_patch = map { $_ => $patch->{$_} } sort keys %$patch; $writer->startTag('patch', @sorted_patch); $writer->endTag('patch'); @@ -407,38 +403,25 @@ sub get_response { sub write_responses { my ($config, $channel) = @_; my $versions = as_array($config->{channels}{$channel}); - my (%oses, %langs, %from_versions); + my (%oses, %from_versions); foreach my $version (@$versions) { get_version_files($config, $version); get_buildinfos($config, $version); my $files = $config->{versions}{$version}{files}; - my $migrate_archs = $config->{versions}{$version}{migrate_archs} // {}; - foreach my $old_os (keys %$migrate_archs) { - my $new_os = $migrate_archs->{$old_os}; - foreach my $lang (keys %{$files->{$new_os}}) { - $files->{$old_os}{$lang}{complete} = - $files->{$new_os}{$lang}{complete}; - } - } foreach my $os (keys %$files) { $oses{$os} = 1; - foreach my $lang (keys %{$files->{$os}}) { - $langs{$lang} = 1; - foreach my $from_version (keys %{$files->{$os}{$lang}{partial}}) { - $from_versions{$from_version} = 1; - } + foreach my $from_version (keys %{$files->{$os}{partial}}) { + $from_versions{$from_version} = 1; } } } my $versions_str = join('+', @$versions); foreach my $os (keys %oses) { - foreach my $lang (keys %langs) { - my $resp = get_response($config, $versions, $os, $lang); - write_htdocs($channel, "$versions_str-$os-$lang.xml", $resp); - foreach my $from_version (keys %from_versions) { - $resp = get_response($config, $versions, $os, $lang, $from_version); - write_htdocs($channel, "$from_version-$versions_str-$os-$lang.xml", $resp); - } + my $resp = get_response($config, $versions, $os); + write_htdocs($channel, "$versions_str-$os.xml", $resp); + foreach my $from_version (keys %from_versions) { + $resp = get_response($config, $versions, $os, $from_version); + write_htdocs($channel, "$from_version-$versions_str-$os.xml", $resp); } } write_htdocs($channel, 'no-update.xml', @@ -453,38 +436,26 @@ sub write_htaccess { $htaccess .= $config->{htaccess_rewrite_rules}{$channel} // ''; my $versions = as_array($config->{channels}{$channel}); my $versions_str = join('+', @$versions); - my (%oses, %langs, %from_versions); - my $migrate_langs; + my (%oses, %from_versions); foreach my $version (@$versions) { - $migrate_langs = $config->{versions}{$version}{migrate_langs} - if $config->{versions}{$version}{migrate_langs}; my $files = $config->{versions}{$version}{files}; foreach my $os (keys %$files) { $oses{$os} = 1; - foreach my $lang (keys %{$files->{$os}}) { - $langs{$lang} = 1; - foreach my $from_version (keys %{$files->{$os}{$lang}{partial}}) { - $from_versions{$from_version} = 1; - } + foreach my $from_version (keys %{$files->{$os}{partial}}) { + $from_versions{$from_version} = 1; } } $htaccess .= "RewriteRule ^[^\/]+/$version/ no-update.xml $flags\n"; } foreach my $os (sort keys %oses) { foreach my $bt (build_targets_by_os($os)) { - foreach my $lang (sort keys %langs) { - foreach my $from_version (sort keys %from_versions) { - $htaccess .= "RewriteRule ^$bt/$from_version/$lang " - . "$from_version-$versions_str-$os-$lang.xml $flags\n"; - } - $htaccess .= "RewriteRule ^$bt/[^\/]+/$lang " - . "$versions_str-$os-$lang.xml $flags\n"; + foreach my $from_version (sort keys %from_versions) { + $htaccess .= "RewriteRule ^$bt/$from_version/ALL " + . "$from_version-$versions_str-$os.xml $flags\n"; } - foreach my $lang (sort keys %$migrate_langs) { - $htaccess .= "RewriteRule ^$bt/[^\/]+/$lang " - . "$versions_str-$os-$migrate_langs->{$lang}.xml $flags\n"; - } - $htaccess .= "RewriteRule ^$bt/ $versions_str-$os-ALL.xml $flags\n"; + $htaccess .= "RewriteRule ^$bt/[^\/]+/ALL " + . "$versions_str-$os.xml $flags\n"; + $htaccess .= "RewriteRule ^$bt/ $versions_str-$os.xml $flags\n"; } } write_htdocs($channel, '.htaccess', $htaccess); @@ -567,28 +538,26 @@ sub check_update_responses_channel { my $channel_versions = as_array($config->{channels}{$channel}); my ($channel_version) = @$channel_versions; foreach my $build_target (build_targets_list()) { - foreach my $lang (qw(en-US de)) { - my $url = "$base_url/$channel/$build_target/1.0/$lang"; - my $dom = get_remote_xml($url); - if ($dom) { - my $version = check_get_version($dom); - log_step($url, 'version', $version eq $channel_version, - "expected: $channel_version received: $version"); - } - $url = "$base_url/$channel/$build_target/$channel_version/$lang"; + my $url = "$base_url/$channel/$build_target/1.0/ALL"; + my $dom = get_remote_xml($url); + if ($dom) { + my $version = check_get_version($dom); + log_step($url, 'version', $version eq $channel_version, + "expected: $channel_version received: $version"); + } + $url = "$base_url/$channel/$build_target/$channel_version/ALL"; + $dom = get_remote_xml($url); + log_step($url, 'no_update', check_no_update($dom)) if $dom; + my @inc = @{$config->{versions}{$channel_version}{incremental_from}} + if $config->{versions}{$channel_version}{incremental_from}; + foreach my $inc_from (@inc) { + my $url = "$base_url/$channel/$build_target/$inc_from/ALL"; $dom = get_remote_xml($url); - log_step($url, 'no_update', check_no_update($dom)) if $dom; - my @inc = @{$config->{versions}{$channel_version}{incremental_from}} - if $config->{versions}{$channel_version}{incremental_from}; - foreach my $inc_from (@inc) { - my $url = "$base_url/$channel/$build_target/$inc_from/$lang"; - $dom = get_remote_xml($url); - next unless $dom; - my $version = check_get_version($dom); - log_step($url, 'version', $version eq $channel_version, - "expected: $channel_version received: $version"); - log_step($url, 'has_incremental', check_has_incremental($dom)); - } + next unless $dom; + my $version = check_get_version($dom); + log_step($url, 'version', $version eq $channel_version, + "expected: $channel_version received: $version"); + log_step($url, 'has_incremental', check_has_incremental($dom)); } } } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41372: Handle branding strings for tor-browser build.
by Pier Angelo Vendrame (@pierov) 18 Feb '25

18 Feb '25
Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 858ee2ee by Henry Wilkes at 2025-02-18T11:35:44+00:00 Bug 41372: Handle branding strings for tor-browser build. - - - - - 3 changed files: - projects/firefox/build - projects/firefox/config - + projects/firefox/rename-branding-strings.py Changes: ===================================== projects/firefox/build ===================================== @@ -136,15 +136,50 @@ branding_dir=browser/branding/[% c("var/branding_directory_prefix") %]-[% c("var [% IF c("var/tor-browser") -%] tar -C "$rootdir" -xf "$rootdir/[% c('input_files_by_name/translation-tor-browser') %]" + + # For the purpose of Weblate, all releases share a single brand.ftl and + # brand.properties file per locale in the translations repository. + # See tor-browser-build#41372. + # In brand.ftl, both `-brand-short-name` and `-brand-full-name` should + # differ between releases. As such, they have additional entries in the + # translations repository file (Weblate): + # -brand-short-name for the stable release. + # -brand-short-name_alpha for the alpha release. + # -brand-short-name_nightly for the nightly release. + # And similarly for -brand-full-name. + # For the final build, we only want to keep the string that matches the + # built release, and remove its suffix if it has one. So for the stable + # release we want to keep -brand-short-name. For the alpha release we want + # to keep -brand-short-name_alpha instead, and rename it to be + # -brand-short-name. + # + # As such, we parse the brand.ftl file to rename these strings to keep the + # version we want using rename-branding-strings.py. + # + # We do a similar thing with brandShortName and brandFullName in + # brand.properties. + + # Instructions for the script to perform the renames. + brand_ftl_renames='{ + "suffix": "[% c("var/branding_string_suffix") %]", + "ids": ["-brand-short-name", "-brand-full-name"] + }' + brand_properties_renames='{ + "suffix": "[% c("var/branding_string_suffix") %]", + "ids": ["brandShortName", "brandFullName"] + }' + pushd "$rootdir/translation-tor-browser" ln -s ja ja-JP-mac for lang in $supported_locales; do mv $lang/tor-browser.ftl "$l10ncentral/$lang/toolkit/toolkit/global/" - # Branding. Currently all releases use the same branding. + # Branding. l10n_branding_dir="$l10ncentral/$lang/$branding_dir/" mkdir -p "$l10n_branding_dir" - mv $lang/branding/brand.ftl "$l10n_branding_dir" - mv $lang/brand.properties "$l10n_branding_dir" + # Convert the translations repository branding files into files that work + # for this specific build. + python3 rename-branding-strings.py $lang/branding/brand.ftl "$brand_ftl_renames" > "$l10n_branding_dir/brand.ftl" + python3 rename-branding-strings.py $lang/brand.properties "$brand_properties_renames" > "$l10n_branding_dir/brand.properties" done popd ===================================== projects/firefox/config ===================================== @@ -54,6 +54,10 @@ var: rm -Rf "$rezip_tmpdir" l10n-changesets: '[% exec("git --no-pager show " _ c("git_hash") _ ":browser/locales/l10n-changesets.json", { exec_noco => 1 }) %]' + # The branding_string_suffix for the alpha and nightly should be + # '_alpha' and '_nightly', matching the "suffix" chosen in the + # tor-browser:update-translations.yml file. + branding_string_suffix: '_[% c("var/channel") %]' steps: src-tarballs: @@ -94,6 +98,12 @@ targets: var: nightly_updates_publish_dir_prefix: basebrowser- + release: + var: + # For the stable release, the suffix is empty. + # I.e. we want to select `-brand-short-name` directly. + branding_string_suffix: '' + nightly: git_hash: '[% c("var/project-name") %]-[% c("var/firefox_version") %]-[% c("var/browser_branch") %]' tag_gpg_id: 0 @@ -183,6 +193,8 @@ input_files: - project: binutils name: binutils enable: '[% c("var/linux") && ! c("var/linux-cross") %]' + - filename: rename-branding-strings.py + enable: '[% c("var/has_l10n") && c("var/tor-browser") %]' - filename: fix-info-plist.py enable: '[% c("var/macos") %]' - filename: nsis-uninstall.patch ===================================== projects/firefox/rename-branding-strings.py ===================================== @@ -0,0 +1,96 @@ +import argparse +import json +import re + +arg_parser = argparse.ArgumentParser( + description="Filter a branding file to only include the expected strings" +) +arg_parser.add_argument("file", metavar="<file>", help="branding file to process") +arg_parser.add_argument( + "details", metavar="<details>", help="JSON specification for renaming" +) + +args = arg_parser.parse_args() +details_dict = json.loads(args.details) +# The suffix we want to search for or remove. +# Can be empty if we want to select the IDs that have no suffix. +suffix = details_dict["suffix"] +# The string IDs we want to rename. +rename_ids = details_dict["ids"] + + +def parse_ids(string, pattern): + """ + Extract the IDs found in a string. + + :param string: The string to parse. + :param pattern: The pattern to capture IDs. + + :yields: A tuple containing a chunk of string and whether the chunk + is an ID. + """ + regex = re.compile(pattern, flags=re.MULTILINE + re.ASCII) + while True: + match = regex.search(string) + if not match: + yield string, False + return + + yield string[: match.start("id")], False + yield match.group("id"), True + string = string[match.end("id") :] + + +# We want to parse the file and rename the IDs we are interested in. +# If the ID starts with one of the `rename_ids` but the suffix does +# not match we append an "_UNUSED" suffix to the ID, to keep it in the output +# but functionally unused in the final build. +# Otherwise, if the ID starts with one of the `rename_ids` and the suffix +# matches we will remove the suffix from the ID, so that it is used in the +# final build. +# Everything else found in the file, like entry values, comments and blank +# lines, will be included in the output as it was. +# +# NOTE: This script is constructed to be *independent* of the order in which +# strings are present in the file. Weblate does not guarantee the order of +# translated files to use the same ordering as the original en-US file. +# +# NOTE: This script should work for all locales. In particular, for Fluent files +# it needs to be able to handle Fluent Terms that are multi-valued (conditional) +# and Terms with attributes. Therefore, whilst we could have written a script to +# *remove* unwanted strings, the parsing logic would have been far more complex +# to be able to handle all these cases. Hence why we only parse for the Fluent +# IDs and rename them, which is much simpler. +with open(args.file, "r") as file: + if file.name.endswith(".ftl"): + # A Fluent ID is the identifier for a Message or Term, which always + # starts on a newline, and will be followed by an "=" character. + id_pattern = r"^(?P<id>-?[a-zA-Z][a-zA-Z0-9_-]*) *=" + elif file.name.endswith(".properties"): + # A properties ID can be preceded by whitespace, and can be any + # character other than whitespace, ":" or "=". The first character also + # cannot be "!" or "#" since this starts a comment. Technically the + # Java ".properties" spec allows a ID to include one of these characters + # if it is escaped by a "\", but we don't expect or care about such IDs. + # The Java spec also has a limited set of whitespace, which excludes + # "\v", but we do not expect Weblate or any other serialiser to + # insert whitespace beyond "\n", "\r", "\t" or " ". + id_pattern = r"^\s*(?P<id>[^!#:=\s][^:=\s]*)" + else: + raise ValueError(f"Unknown file type {file.name}") + + for part, is_id in parse_ids(file.read(), id_pattern): + if is_id: + for string_id in rename_ids: + if part.startswith(string_id): + if part == string_id + suffix: + # This string matches the suffix, so we want to use its + # value. We adjust the ID to remove the suffix before + # printing. + part = string_id + else: + # Keep this entry in the output, but make it unused by + # appending to the ID. + part += "_UNUSED" + break + print(part, end="") View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/8… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/8… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] 3 commits: fixup! Add CI for Tor Browser
by Pier Angelo Vendrame (@pierov) 18 Feb '25

18 Feb '25
Pier Angelo Vendrame pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: d9fe34de by Henry Wilkes at 2025-02-18T10:08:15+00:00 fixup! Add CI for Tor Browser TB 43446: Include alpha and nightly branding in the translation CI. - - - - - 34838694 by Henry Wilkes at 2025-02-18T10:10:32+00:00 fixup! BB 42305: Add script to combine translation files across versions. TB 43446: Allow the combine translation script to select some branding strings from different files. - - - - - 6fa642ea by Henry Wilkes at 2025-02-18T10:10:33+00:00 fixup! TB 2176: Rebrand Firefox to TorBrowser TB 43446: Change the branding name for the alpha and nightly releases. - - - - - 13 changed files: - .gitlab/ci/jobs/update-translations.yml - browser/branding/tb-alpha/locales/en-US/brand.ftl - browser/branding/tb-alpha/locales/en-US/brand.properties - browser/branding/tb-nightly/locales/en-US/brand.ftl - browser/branding/tb-nightly/locales/en-US/brand.properties - browser/branding/tb-release/locales/en-US/brand.ftl - browser/branding/tb-release/locales/en-US/brand.properties - tools/base-browser/l10n/combine-translation-versions.py - tools/base-browser/l10n/combine/combine.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 Changes: ===================================== .gitlab/ci/jobs/update-translations.yml ===================================== @@ -17,12 +17,48 @@ { "name": "brand.ftl", "where": ["browser/branding/tb-release", "toolkit/torbutton"], + "branding": { + "versions": [ + { + "name": "Alpha", + "suffix": "_alpha", + "where": ["browser/branding/tb-alpha"] + }, + { + "name": "Nightly", + "suffix": "_nightly", + "where": ["browser/branding/tb-nightly"] + } + ], + "ids": [ + "-brand-short-name", + "-brand-full-name" + ] + }, "branch": "tor-browser", "directory": "branding" }, { "name": "brand.properties", "where": ["browser/branding/tb-release", "toolkit/torbutton"], + "branding": { + "versions": [ + { + "name": "Alpha", + "suffix": "_alpha", + "where": ["browser/branding/tb-alpha"] + }, + { + "name": "Nightly", + "suffix": "_nightly", + "where": ["browser/branding/tb-nightly"] + } + ], + "ids": [ + "brandShortName", + "brandFullName" + ] + }, "branch": "tor-browser" }, { "name": "tor-browser.ftl", "branch": "tor-browser" }, ===================================== browser/branding/tb-alpha/locales/en-US/brand.ftl ===================================== @@ -2,12 +2,16 @@ # that is used by Firefox) to avoid picking up the -brand-short-name values # that Mozilla includes in the Firefox language packs. +# The shortened application name for Tor Browser. Shared between versions. -brand-shorter-name = Tor Browser --brand-short-name = Tor Browser --brand-full-name = Tor Browser +# The default application name for the "alpha" release. +-brand-short-name = Tor Browser Alpha +# The full application name for the "alpha" release. +-brand-full-name = Tor Browser Alpha # This brand name can be used in messages where the product name needs to # remain unchanged across different versions (Nightly, Beta, etc.). -brand-product-name = Tor Browser +# The name of the Tor Project organisation. -vendor-short-name = Tor Project # "Tor" is a trademark names, so should not be translated (not including the quote marks, which can be localized). # "The Tor Project, Inc." is an organisation name. ===================================== browser/branding/tb-alpha/locales/en-US/brand.properties ===================================== @@ -3,6 +3,9 @@ # 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/. +# The shortened application name for Tor Browser. Shared between versions. brandShorterName=Tor Browser -brandShortName=Tor Browser -brandFullName=Tor Browser +# The default application name for the "alpha" release. +brandShortName=Tor Browser Alpha +# The full application name for the "alpha" release. +brandFullName=Tor Browser Alpha ===================================== browser/branding/tb-nightly/locales/en-US/brand.ftl ===================================== @@ -2,12 +2,16 @@ # that is used by Firefox) to avoid picking up the -brand-short-name values # that Mozilla includes in the Firefox language packs. +# The shortened application name for Tor Browser. Shared between versions. -brand-shorter-name = Tor Browser --brand-short-name = Tor Browser --brand-full-name = Tor Browser +# The default application name for the "nightly" release. +-brand-short-name = Tor Browser Nightly +# The full application name for the "nightly" release. +-brand-full-name = Tor Browser Nightly # This brand name can be used in messages where the product name needs to # remain unchanged across different versions (Nightly, Beta, etc.). -brand-product-name = Tor Browser +# The name of the Tor Project organisation. -vendor-short-name = Tor Project # "Tor" is a trademark names, so should not be translated (not including the quote marks, which can be localized). # "The Tor Project, Inc." is an organisation name. ===================================== browser/branding/tb-nightly/locales/en-US/brand.properties ===================================== @@ -3,6 +3,9 @@ # 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/. +# The shortened application name for Tor Browser. Shared between versions. brandShorterName=Tor Browser -brandShortName=Tor Browser -brandFullName=Tor Browser +# The default application name for the "nightly" release. +brandShortName=Tor Browser Nightly +# The full application name for the "nightly" release. +brandFullName=Tor Browser Nightly ===================================== browser/branding/tb-release/locales/en-US/brand.ftl ===================================== @@ -2,12 +2,16 @@ # that is used by Firefox) to avoid picking up the -brand-short-name values # that Mozilla includes in the Firefox language packs. +# The shortened application name for Tor Browser. Shared between versions. -brand-shorter-name = Tor Browser +# The default application name for the stable release. -brand-short-name = Tor Browser +# The full application name for the stable release. -brand-full-name = Tor Browser # This brand name can be used in messages where the product name needs to # remain unchanged across different versions (Nightly, Beta, etc.). -brand-product-name = Tor Browser +# The name of the Tor Project organisation. -vendor-short-name = Tor Project # "Tor" is a trademark names, so should not be translated (not including the quote marks, which can be localized). # "The Tor Project, Inc." is an organisation name. ===================================== browser/branding/tb-release/locales/en-US/brand.properties ===================================== @@ -3,6 +3,9 @@ # 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/. +# The shortened application name for Tor Browser. Shared between versions. brandShorterName=Tor Browser +# The default application name for the stable release. brandShortName=Tor Browser +# The full application name for the stable release. brandFullName=Tor Browser ===================================== tools/base-browser/l10n/combine-translation-versions.py ===================================== @@ -306,9 +306,34 @@ for file_dict in json.loads(args.files): f"{current_file.path} : {stable_file.path}" ) + content = None if current_file is None else current_file.content + + # If we have a branding file, we want to also include strings from the other + # branding directories that differ from the stable release. + # The strings that *differ* per release should be specified in + # file_dict["branding"]["ids"]. These strings will be copied from the other + # release's branding directory, with an addition suffix added to their ID, + # as specified in the version_dict["suffix"]. + branding = file_dict.get("branding", None) + if branding: + include_ids = branding["ids"] + for version_dict in branding["versions"]: + branding_dirs = version_dict.get("where", None) + branding_file = current_branch.get_file(name, branding_dirs) + if branding_file is None: + raise Exception(f"{name} does not exist in {branding_dirs}") + content = combine_files( + name, + content, + branding_file.content, + f'{version_dict["name"]} Release.', + include_ids, + version_dict["suffix"], + ) + content = combine_files( name, - None if current_file is None else current_file.content, + content, None if stable_file is None else stable_file.content, f"Will be unused in {current_branch.browser_version_name}!", ) ===================================== tools/base-browser/l10n/combine/combine.py ===================================== @@ -14,26 +14,32 @@ if TYPE_CHECKING: def combine_files( filename: str, - new_content: str | None, - old_content: str | None, + primary_content: str | None, + alternative_content: str | None, comment_prefix: str, + include_ids: list[str] | None = None, + alternative_suffix: str = "", ) -> str | None: """Combine two translation files into one to include all strings from both. - The new content is presented first, and any strings only found in the old - content are placed at the end with an additional comment. + The primary content is presented first, followed by the alternative content + at the end with an additional comment. :param filename: The filename for the file, determines the format. - :param new_content: The new content for the file, or None if it has been - deleted. - :param old_content: The old content for the file, or None if it did not - exist before. - :comment_prefix: A comment to include for any strings that are only found in - the old content. This will be placed before any other comments for the - string. + :param primary_content: The primary content for the file, or None if it does + not exist. + :param alternative_content: The alternative content for the file, or None if + it does not exist. + :param comment_prefix: A comment to include for any strings that are + appended to the content. This will be placed before any other comments for + the string. + :param include_ids: String IDs from `alternative_content` we want to + include. If this is `None` then we include all strings that do not already + have a matching ID in `primary_content`. + :param duplicate_suffix: The suffix to apply to the alternative IDs. :returns: The combined content, or None if both given contents are None. """ - if new_content is None and old_content is None: + if primary_content is None and alternative_content is None: return None # getParser from compare_locale returns the same instance for the same file @@ -41,7 +47,7 @@ def combine_files( parser = getParser(filename) is_android = filename.endswith(".xml") - if new_content is None: + if primary_content is None: if is_android: # File was deleted, add some document parts. content_start = ( @@ -54,7 +60,7 @@ def combine_files( content_end = "" existing_keys = [] else: - parser.readUnicode(new_content) + parser.readUnicode(primary_content) # Start with the same content as the current file. # For android strings, we want to keep the final "</resources>" until after. @@ -96,8 +102,8 @@ def combine_files( entry_iter: Iterable[Any] = () # If the file does not exist in the old branch, don't make any additions. - if old_content is not None: - parser.readUnicode(old_content) + if alternative_content is not None: + parser.readUnicode(alternative_content) entry_iter = parser.walk(only_localizable=False) for entry in entry_iter: if isinstance(entry, Junk): @@ -134,13 +140,19 @@ def combine_files( if not isinstance(entry, Entity): raise ValueError(f"Unexpected type: {entry.__class__.__name__}") - if entry.key in existing_keys: - # Already included this string in the new translation file. + if include_ids is None: + # We include the entry if it is not already included. + include_entry = entry.key not in existing_keys + else: + # We include the entry if it is in our list. + include_entry = entry.key in include_ids + if not include_entry: # Drop the gathered comments for this Entity. stacked_comments.clear() continue if isinstance(entry, FluentEntity): + id_regex = rf"^({re.escape(entry.key)})( *=)" if fluent_group_comment is not None: # We have a found GroupComment which has not been included yet. # All following Entity's will be under its scope, until the next @@ -149,12 +161,15 @@ def combine_files( # Added GroupComment, so don't need to add again. fluent_group_comment = None elif isinstance(entry, DTDEntity): + id_regex = rf"^(\s*<!ENTITY\s*{re.escape(entry.key)})(\s)" # Include our additional comment before we print the rest for this # Entity. additions.append(f"<!-- LOCALIZATION NOTE: {comment_prefix} -->") elif isinstance(entry, PropertiesEntity): + id_regex = rf"^({re.escape(entry.key)})( *=)" additions.append(f"# {comment_prefix}") elif isinstance(entry, AndroidEntity): + id_regex = rf'^(\s*<string\s[^>]*name="{re.escape(entry.key)})(")' additions.append(f"<!-- {comment_prefix} -->") else: raise ValueError(f"Unexpected Entity type: {entry.__class__.__name__}") @@ -162,7 +177,17 @@ def combine_files( # Add any other comment lines that came directly before this Entity. additions.extend(stacked_comments) stacked_comments.clear() - additions.append(entry.all) + entry_content = entry.all + if alternative_suffix: + # NOTE: compare_locales does not allow us to set the entry.key + # value. Instead we use a regular expression to append the suffix to + # the expected key. + entry_content, count = re.subn( + id_regex, rf"\1{alternative_suffix}\2", entry_content, flags=re.M + ) + if count != 1: + raise ValueError(f"Failed to substitute the ID for {entry.key}") + additions.append(entry_content) content_middle = "" ===================================== tools/base-browser/l10n/combine/tests/test_android.py ===================================== @@ -24,6 +24,20 @@ def assert_result(new_content, old_content, expect): ) +def assert_alternative(content, alternative_content, alternative_ids, expect): + content = wrap_in_xml(content) + alternative_content = wrap_in_xml(alternative_content) + expect = wrap_in_xml(expect) + assert expect == combine_files( + "test_strings.xml", + content, + alternative_content, + "ALTERNATIVE STRING", + alternative_ids, + "_alt", + ) + + def test_combine_empty(): assert_result(None, None, None) @@ -328,3 +342,74 @@ def test_removed_string_with_comment(): <string name="removed_4">Fourth removed</string> """, ) + + +def test_alternatives(): + assert_alternative( + """\ + <string name="string_1">First string</string> + """, + """\ + <string name="string_1">Alternative string</string> + """, + ["string_1"], + """\ + <string name="string_1">First string</string> + + <!-- ALTERNATIVE STRING --> + <string name="string_1_alt">Alternative string</string> + """, + ) + assert_alternative( + """\ + <!-- Comment 1 --> + <string name="string_1">First string</string> + <!-- Comment 2 --> + <string name="string_2">Second string</string> + <string name="string_3">Third string</string> + """, + """\ + <string name="string_1">First string</string> + <!-- Alt comment --> + <string name="string_2">Alternative string</string> + <string name="string_3">Third string different</string> + <string name="string_4">Other string</string> + """, + ["string_2"], + """\ + <!-- Comment 1 --> + <string name="string_1">First string</string> + <!-- Comment 2 --> + <string name="string_2">Second string</string> + <string name="string_3">Third string</string> + + <!-- ALTERNATIVE STRING --> + <!-- Alt comment --> + <string name="string_2_alt">Alternative string</string> + """, + ) + assert_alternative( + """\ + <string name="string_1">First string</string> + <string name="string_2">Second string</string> + <string name="string_3">Third string</string> + """, + """\ + <string name="string_1">Alternative string</string> + <string name="string_3">Third string</string> + <!-- comment --> + <string name="string_4">Other string</string> + """, + ["string_1", "string_4"], + """\ + <string name="string_1">First string</string> + <string name="string_2">Second string</string> + <string name="string_3">Third string</string> + + <!-- ALTERNATIVE STRING --> + <string name="string_1_alt">Alternative string</string> + <!-- ALTERNATIVE STRING --> + <!-- comment --> + <string name="string_4_alt">Other string</string> + """, + ) ===================================== tools/base-browser/l10n/combine/tests/test_dtd.py ===================================== @@ -16,6 +16,23 @@ def assert_result(new_content, old_content, expect): ) +def assert_alternative(content, alternative_content, alternative_ids, expect): + if content is not None: + content = textwrap.dedent(content) + if alternative_content is not None: + alternative_content = textwrap.dedent(alternative_content) + if expect is not None: + expect = textwrap.dedent(expect) + assert expect == combine_files( + "test.dtd", + content, + alternative_content, + "ALTERNATIVE STRING", + alternative_ids, + ".alt", + ) + + def test_combine_empty(): assert_result(None, None, None) @@ -323,3 +340,74 @@ def test_removed_string_with_comment(): <!ENTITY removed.4 "Fourth removed"> """, ) + + +def test_alternatives(): + assert_alternative( + """\ + <!ENTITY string.1 "First string"> + """, + """\ + <!ENTITY string.1 "Alternative string"> + """, + ["string.1"], + """\ + <!ENTITY string.1 "First string"> + + <!-- LOCALIZATION NOTE: ALTERNATIVE STRING --> + <!ENTITY string.1.alt "Alternative string"> + """, + ) + assert_alternative( + """\ + <!-- LOCALIZATION NOTE: Comment 1 --> + <!ENTITY string.1 "First string"> + <!-- LOCALIZATION NOTE: Comment 2 --> + <!ENTITY string.2 "Second string"> + <!ENTITY string.3 "Third string"> + """, + """\ + <!ENTITY string.1 "First string"> + <!-- LOCALIZATION NOTE: Alt comment --> + <!ENTITY string.2 "Alternative string"> + <!ENTITY string.3 "Third string different"> + <!ENTITY string.4 "Other string"> + """, + ["string.2"], + """\ + <!-- LOCALIZATION NOTE: Comment 1 --> + <!ENTITY string.1 "First string"> + <!-- LOCALIZATION NOTE: Comment 2 --> + <!ENTITY string.2 "Second string"> + <!ENTITY string.3 "Third string"> + + <!-- LOCALIZATION NOTE: ALTERNATIVE STRING --> + <!-- LOCALIZATION NOTE: Alt comment --> + <!ENTITY string.2.alt "Alternative string"> + """, + ) + assert_alternative( + """\ + <!ENTITY string.1 "First string"> + <!ENTITY string.2 "Second string"> + <!ENTITY string.3 "Third string"> + """, + """\ + <!ENTITY string.1 "Alternative string"> + <!ENTITY string.3 "Third string"> + <!-- LOCALIZATION NOTE: comment --> + <!ENTITY string.4 "Other string"> + """, + ["string.1", "string.4"], + """\ + <!ENTITY string.1 "First string"> + <!ENTITY string.2 "Second string"> + <!ENTITY string.3 "Third string"> + + <!-- LOCALIZATION NOTE: ALTERNATIVE STRING --> + <!ENTITY string.1.alt "Alternative string"> + <!-- LOCALIZATION NOTE: ALTERNATIVE STRING --> + <!-- LOCALIZATION NOTE: comment --> + <!ENTITY string.4.alt "Other string"> + """, + ) ===================================== tools/base-browser/l10n/combine/tests/test_fluent.py ===================================== @@ -16,6 +16,23 @@ def assert_result(new_content, old_content, expect): ) +def assert_alternative(content, alternative_content, alternative_ids, expect): + if content is not None: + content = textwrap.dedent(content) + if alternative_content is not None: + alternative_content = textwrap.dedent(alternative_content) + if expect is not None: + expect = textwrap.dedent(expect) + assert expect == combine_files( + "test.ftl", + content, + alternative_content, + "ALTERNATIVE STRING", + alternative_ids, + "-alt", + ) + + def test_combine_empty(): assert_result(None, None, None) @@ -342,3 +359,119 @@ def test_removed_string_with_comment(): removed-4 = Fourth removed """, ) + + +def test_alternatives(): + assert_alternative( + """\ + string-1 = First string + .title = hello + """, + """\ + string-1 = Alternative string + .title = different + """, + ["string-1"], + """\ + string-1 = First string + .title = hello + + + ## ALTERNATIVE STRING + + string-1-alt = Alternative string + .title = different + """, + ) + assert_alternative( + """\ + string-1 = First string + .title = hello + """, + """\ + string-1 = Alternative string + """, + ["string-1"], + """\ + string-1 = First string + .title = hello + + + ## ALTERNATIVE STRING + + string-1-alt = Alternative string + """, + ) + assert_alternative( + """\ + -term-1 = First string + """, + """\ + -term-1 = Alternative string + """, + ["-term-1"], + """\ + -term-1 = First string + + + ## ALTERNATIVE STRING + + -term-1-alt = Alternative string + """, + ) + assert_alternative( + """\ + # Comment 1 + string-1 = First string + # Comment 2 + string-2 = Second string + string-3 = Third string + """, + """\ + string-1 = First string + # Alt comment + string-2 = Alternative string + string-3 = Third string different + string-4 = Other string + """, + ["string-2"], + """\ + # Comment 1 + string-1 = First string + # Comment 2 + string-2 = Second string + string-3 = Third string + + + ## ALTERNATIVE STRING + + # Alt comment + string-2-alt = Alternative string + """, + ) + assert_alternative( + """\ + string-1 = First string + string-2 = Second string + string-3 = Third string + """, + """\ + string-1 = Alternative string + string-3 = Third string + # comment + -string-4 = Other string + """, + ["string-1", "-string-4"], + """\ + string-1 = First string + string-2 = Second string + string-3 = Third string + + + ## ALTERNATIVE STRING + + string-1-alt = Alternative string + # comment + -string-4-alt = Other string + """, + ) ===================================== tools/base-browser/l10n/combine/tests/test_properties.py ===================================== @@ -16,6 +16,23 @@ def assert_result(new_content, old_content, expect): ) +def assert_alternative(content, alternative_content, alternative_ids, expect): + if content is not None: + content = textwrap.dedent(content) + if alternative_content is not None: + alternative_content = textwrap.dedent(alternative_content) + if expect is not None: + expect = textwrap.dedent(expect) + assert expect == combine_files( + "test.properties", + content, + alternative_content, + "ALTERNATIVE STRING", + alternative_ids, + ".alt", + ) + + def test_combine_empty(): assert_result(None, None, None) @@ -320,3 +337,74 @@ def test_removed_string_with_comment(): removed.4 = Fourth removed """, ) + + +def test_alternatives(): + assert_alternative( + """\ + string.1 = First string + """, + """\ + string.1 = Alternative string + """, + ["string.1"], + """\ + string.1 = First string + + # ALTERNATIVE STRING + string.1.alt = Alternative string + """, + ) + assert_alternative( + """\ + # Comment 1 + string.1 = First string + # Comment 2 + string.2 = Second string + string.3 = Third string + """, + """\ + string.1 = First string + # Alt comment + string.2 = Alternative string + string.3 = Third string different + string.4 = Other string + """, + ["string.2"], + """\ + # Comment 1 + string.1 = First string + # Comment 2 + string.2 = Second string + string.3 = Third string + + # ALTERNATIVE STRING + # Alt comment + string.2.alt = Alternative string + """, + ) + assert_alternative( + """\ + string.1 = First string + string.2 = Second string + string.3 = Third string + """, + """\ + string.1 = Alternative string + string.3 = Third string + # comment + string.4 = Other string + """, + ["string.1", "string.4"], + """\ + string.1 = First string + string.2 = Second string + string.3 = Third string + + # ALTERNATIVE STRING + string.1.alt = Alternative string + # ALTERNATIVE STRING + # comment + string.4.alt = Other string + """, + ) View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/d94603… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/d94603… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-14.0] MB 394: Fix package dependency for Debian Trixie
by boklm (@boklm) 18 Feb '25

18 Feb '25
boklm pushed to branch maint-14.0 at The Tor Project / Applications / tor-browser-build Commits: 119ce448 by Nicolas Vigier at 2025-02-18T12:01:51+01:00 MB 394: Fix package dependency for Debian Trixie The libgdk-pixbuf2.0-0 package has been removed from Debian Trixie. We update the symbols file to depend on both libgdk-pixbuf2.0-0 and libgdk-pixbuf-2.0-0. https://bugzilla.mozilla.org/show_bug.cgi?id=1933835 - - - - - 1 changed file: - projects/linux-packages/config Changes: ===================================== projects/linux-packages/config ===================================== @@ -31,6 +31,11 @@ targets: # some :i386 packages fail to install when /var/lib/dpkg/available # does not exist, so create it as an empty file echo > /var/lib/dpkg/available + post_pkginst: | + # Alter the symbols file for libgdk-pixbuf to handle the transition to libgdk-pixbuf-2.0-0 + # This is only necessary until we upgrade to something newer than buster. + # See mullvad-browser#394 and https://bugzilla.mozilla.org/show_bug.cgi?id=1933835 + find /var/lib/dpkg/info/ -name libgdk-pixbuf2.0-0*symbols | xargs sed -i "/libgdk-pixbuf2.0-0/s/libgdk-pixbuf2.0-0/libgdk-pixbuf2.0-0 #MINVER# | libgdk-pixbuf-2.0-0/" arch_deps: # Packages needed to build the deb package - dpkg-dev View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/1… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/1… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] MB 394: Fix package dependency for Debian Trixie
by boklm (@boklm) 18 Feb '25

18 Feb '25
boklm pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 15aae5bd by Nicolas Vigier at 2025-02-17T12:47:15+01:00 MB 394: Fix package dependency for Debian Trixie The libgdk-pixbuf2.0-0 package has been removed from Debian Trixie. We update the symbols file to depend on both libgdk-pixbuf2.0-0 and libgdk-pixbuf-2.0-0. https://bugzilla.mozilla.org/show_bug.cgi?id=1933835 - - - - - 1 changed file: - projects/linux-packages/config Changes: ===================================== projects/linux-packages/config ===================================== @@ -32,6 +32,11 @@ targets: # some foreign-arch packages fail to install when /var/lib/dpkg/available # does not exist, so create it as an empty file echo > /var/lib/dpkg/available + post_pkginst: | + # Alter the symbols file for libgdk-pixbuf to handle the transition to libgdk-pixbuf-2.0-0 + # This is only necessary until we upgrade to something newer than buster. + # See mullvad-browser#394 and https://bugzilla.mozilla.org/show_bug.cgi?id=1933835 + find /var/lib/dpkg/info/ -name libgdk-pixbuf2.0-0*symbols | xargs sed -i "/libgdk-pixbuf2.0-0/s/libgdk-pixbuf2.0-0/libgdk-pixbuf2.0-0 #MINVER# | libgdk-pixbuf-2.0-0/" arch_deps: # Packages needed to build the deb package - dpkg-dev @@ -67,6 +72,11 @@ targets: # some foreign-arch packages fail to install when /var/lib/dpkg/available # does not exist, so create it as an empty file echo > /var/lib/dpkg/available + post_pkginst: | + # Alter the symbols file for libgdk-pixbuf to handle the transition to libgdk-pixbuf-2.0-0 + # This is only necessary until we upgrade to something newer than buster. + # See mullvad-browser#394 and https://bugzilla.mozilla.org/show_bug.cgi?id=1933835 + find /var/lib/dpkg/info/ -name libgdk-pixbuf2.0-0*symbols | xargs sed -i "/libgdk-pixbuf2.0-0/s/libgdk-pixbuf2.0-0/libgdk-pixbuf2.0-0 #MINVER# | libgdk-pixbuf-2.0-0/" arch_deps: # Packages needed to build the deb package - dpkg-dev View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/1… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/1… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] 2 commits: fixup! TB 42247: Android helpers for the TorProvider
by Pier Angelo Vendrame (@pierov) 17 Feb '25

17 Feb '25
Pier Angelo Vendrame pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: 14d735fe by Dan Ballard at 2025-02-13T11:58:47-08:00 fixup! TB 42247: Android helpers for the TorProvider Rename TorIntegrationAndroid.java to TorAndroidIntegration.java - - - - - d94603fa by Dan Ballard at 2025-02-13T12:00:18-08:00 fixup! [android] Implement Android-native Connection Assist UI rename TorIntegrationAndroid.java to TorAndroidIntegration.java - - - - - 4 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java → mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -156,7 +156,7 @@ import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.tor.TorConnectionAssistViewModel -import org.mozilla.geckoview.TorIntegrationAndroid +import org.mozilla.geckoview.TorAndroidIntegration /** * The main activity of the application. The application is primarily a single Activity (this one) @@ -165,7 +165,7 @@ import org.mozilla.geckoview.TorIntegrationAndroid * - browser screen */ @SuppressWarnings("TooManyFunctions", "LargeClass", "LongMethod") -open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorIntegrationAndroid.BootstrapStateChangeListener { +open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAndroidIntegration.BootstrapStateChangeListener { private lateinit var binding: ActivityHomeBinding lateinit var themeManager: ThemeManager lateinit var browsingModeManager: BrowsingModeManager ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt ===================================== @@ -8,9 +8,9 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.ext.components -import org.mozilla.geckoview.TorIntegrationAndroid -import org.mozilla.geckoview.TorIntegrationAndroid.BootstrapStateChangeListener -import org.mozilla.geckoview.TorIntegrationAndroid.TorLogListener +import org.mozilla.geckoview.TorAndroidIntegration +import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener +import org.mozilla.geckoview.TorAndroidIntegration.TorLogListener import org.mozilla.geckoview.TorSettings import org.mozilla.geckoview.TorSettings.BridgeBuiltinType import org.mozilla.geckoview.TorSettings.BridgeSource @@ -73,7 +73,7 @@ class TorControllerGV( override val isBootstrapped get() = isTorBootstrapped override val isConnected get() = (_lastKnownStatus.value.isStarted() && !isTorRestarting) - private fun getTorIntegration(): TorIntegrationAndroid { + private fun getTorIntegration(): TorAndroidIntegration { return (context.components.core.engine as GeckoEngine).getTorIntegrationController() } ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java ===================================== @@ -244,7 +244,7 @@ public final class GeckoRuntime implements Parcelable { private final ProfilerController mProfilerController; private final GeckoScreenChangeListener mScreenChangeListener; - private TorIntegrationAndroid mTorIntegration; + private TorAndroidIntegration mTorIntegration; private GeckoRuntime() { mWebExtensionController = new WebExtensionController(this); @@ -495,7 +495,7 @@ public final class GeckoRuntime implements Parcelable { mScreenChangeListener.enable(); } - mTorIntegration = new TorIntegrationAndroid(context); + mTorIntegration = new TorAndroidIntegration(context); mProfilerController.addMarker( "GeckoView Initialization START", mProfilerController.getProfilerTime()); @@ -1015,7 +1015,7 @@ public final class GeckoRuntime implements Parcelable { * Get the Tor integration controller for this runtime. */ @UiThread - public @NonNull TorIntegrationAndroid getTorIntegrationController() { + public @NonNull TorAndroidIntegration getTorIntegrationController() { return mTorIntegration; } ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java → mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java ===================================== @@ -29,8 +29,8 @@ import org.mozilla.gecko.util.EventCallback; import org.mozilla.gecko.util.GeckoBundle; import org.mozilla.geckoview.androidlegacysettings.TorLegacyAndroidSettings; -public class TorIntegrationAndroid implements BundleEventListener { - private static final String TAG = "TorIntegrationAndroid"; +public class TorAndroidIntegration implements BundleEventListener { + private static final String TAG = "TorAndroidIntegration"; // Events we listen to private static final String EVENT_TOR_START = "GeckoView:Tor:StartTor"; @@ -88,7 +88,7 @@ public class TorIntegrationAndroid implements BundleEventListener { */ private TorSettings mSettings = null; - /* package */ TorIntegrationAndroid(Context context) { + /* package */ TorAndroidIntegration(Context context) { mLibraryDir = context.getApplicationInfo().nativeLibraryDir; mCacheDir = context.getCacheDir().getAbsolutePath(); mIpcDirectory = mCacheDir + "/tor-private"; @@ -269,7 +269,7 @@ public class TorIntegrationAndroid implements BundleEventListener { public void run() { cleanIpcDirectory(); - final String ipcDir = TorIntegrationAndroid.this.mIpcDirectory; + final String ipcDir = TorAndroidIntegration.this.mIpcDirectory; final ArrayList<String> args = new ArrayList<>(); args.add(mLibraryDir + "/libTor.so"); args.add("DisableNetwork"); @@ -354,7 +354,7 @@ public class TorIntegrationAndroid implements BundleEventListener { } private void cleanIpcDirectory() { - File directory = new File(TorIntegrationAndroid.this.mIpcDirectory); + File directory = new File(TorAndroidIntegration.this.mIpcDirectory); if (!directory.isDirectory()) { if (!directory.mkdirs()) { Log.e(TAG, "Failed to create the IPC directory."); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/22ad3e… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/22ad3e… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] 2 commits: fixup! TB 42669: [android] Use custom no-op app-services
by Dan Ballard (@dan) 13 Feb '25

13 Feb '25
Dan Ballard pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: b374c1f2 by Dan Ballard at 2025-02-13T11:43:11-08:00 fixup! TB 42669: [android] Use custom no-op app-services Bug 42669: get latest application services by date and put in tools - - - - - 22ad3eca by Dan Ballard at 2025-02-13T11:43:11-08:00 fixup! [android] Modify build system Bug 42669: Inject gradle property for nimbus-fml path for application services - - - - - 3 changed files: - .gitignore - mobile/android/fenix/app/build.gradle - mobile/android/fenix/tools/tba-fetch-deps.sh Changes: ===================================== .gitignore ===================================== @@ -359,7 +359,7 @@ media/libvpx/config/**/config.log mobile/android/.experimenter.json # Tor libraries for local builds -mobile/android/fenix/app/nimbus-fml +mobile/android/fenix/tools/nimbus-fml mobile/android/fenix/app/tor-expert-bundle.aar mobile/android/fenix/app/src/main/assets/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi ===================================== mobile/android/fenix/app/build.gradle ===================================== @@ -315,6 +315,8 @@ android.applicationVariants.configureEach { variant -> if (project.hasProperty("disableTor")) { disableTor = project.getProperty("disableTor") } + System.setProperty("nimbusFml", rootProject.projectDir.toPath().resolve("tools").resolve("nimbus-fml").toAbsolutePath().toString()) + println("----------------------------------------------") println("Variant name: " + variant.name) @@ -323,6 +325,7 @@ android.applicationVariants.configureEach { variant -> println("Flavor: " + variant.flavorName) println("Telemetry enabled: " + !isDebugOrDCD) println("Tor is disabled: " + disableTor) + println("nimbusFml: " + System.getProperty("nimbusFml")) buildConfigField "boolean", "DISABLE_TOR", "$disableTor" ===================================== mobile/android/fenix/tools/tba-fetch-deps.sh ===================================== @@ -47,7 +47,7 @@ if [ "$os" = "unsupported" ] || [ "$arch" = "unsupported" ]; then exit 2 fi -app_services="$(find "$TOR_BROWSER_BUILD/out/application-services" -name 'application-services*.tar.zst' -print | sort | tail -1)" +app_services="$(ls -1t "$TOR_BROWSER_BUILD/out/application-services/"application-services*.tar.zst | head -1)" mkdir -p "$GRADLE_MAVEN_REPOSITORIES/org/mozilla" if [ -f "$app_services" ]; then tar -C /tmp -xf "$app_services" @@ -67,14 +67,14 @@ if [ -f "$app_services" ]; then unzip -d /tmp/nimbus-fml /tmp/nimbus-fml.zip nimbus_fml="$(find "/tmp/nimbus-fml/" -name 'nimbus-fml*' | grep "$arch-$os")" echo "Using nimbus-fml binary: $nimbus_fml" - cp $nimbus_fml app/ + cp $nimbus_fml tools/ rm -rf /tmp/nimbus-fml rm /tmp/nimbus-fml.zip else - cp /tmp/application-services/nimbus-fml app/ + cp /tmp/application-services/nimbus-fml tools/ fi - chmod +x app/nimbus-fml + chmod +x tools/nimbus-fml rm -rf /tmp/application-services else View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/e01fb0… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/e01fb0… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Update MR template and add Uplift issue template
by morgan (@morgan) 13 Feb '25

13 Feb '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: f48f1e95 by Morgan at 2025-02-13T16:56:36+00:00 Update MR template and add Uplift issue template - - - - - 2 changed files: - + .gitlab/issue_templates/Uplift.md - .gitlab/merge_request_templates/default.md Changes: ===================================== .gitlab/issue_templates/Uplift.md ===================================== @@ -0,0 +1,18 @@ +<!-- +Title: + Uplift tor-browser-build#12345: Title of Issue +--> + +# Uplift Patchset + +## Gitlab Issue(s) +- tor-browser-build#12345 + +## Upstream Project Issue(s): + + +## Notes + +<!-- whatever additional info, context, etc that would be helpful for uplifting --> + +/label ~"Apps::Type::Uplift" ===================================== .gitlab/merge_request_templates/default.md ===================================== @@ -42,6 +42,9 @@ ### Issue Tracking - [ ] Link resolved issues with appropriate [Release Prep issue](https://gitlab.torproject.org/groups/tpo/applications/-/issues/?sort… for changelog generation +### Uplifting +- [ ] Patchset is a candidate for uplift to upstream projects (e.g. mingw, clang, etc) + ### Review #### Request Reviewer View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.7.0esr-14.5-1] fixup! Adding issue and merge request templates
by morgan (@morgan) 13 Feb '25

13 Feb '25
morgan pushed to branch tor-browser-128.7.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: e01fb03c by Morgan at 2025-02-13T16:26:45+00:00 fixup! Adding issue and merge request templates add issue template for mozilla uplifts and tweak MR template to signal to merger an uplift issue should be created after merge - - - - - 2 changed files: - + .gitlab/issue_templates/Uplift.md - .gitlab/merge_request_templates/default.md Changes: ===================================== .gitlab/issue_templates/Uplift.md ===================================== @@ -0,0 +1,19 @@ +<!-- +Title: + Uplift tor-browser#12345: Title of Issue +--> + +# Uplift Patchset + +## Gitlab Issue(s) +- tor-browser#12345 +- mullvad-browser#12345 + +## Upstream Mozilla Issue(s): +- https://bugzilla.mozilla.org/show_bug.cgi?id=12345 + +## Notes + +<!-- whatever additional info, context, etc that would be helpful for uplifting --> + +/label ~"Apps::Type::Uplift" ===================================== .gitlab/merge_request_templates/default.md ===================================== @@ -48,6 +48,9 @@ - [ ] **Localization**: typos and other localization changes that should be also in the release branch - [ ] **Other**: please explain +### Uplifting +- [ ] Patchset is a candidate for uplift to Firefox + ### Issue Tracking - [ ] Link resolved issues with appropriate [Release Prep issue](https://gitlab.torproject.org/groups/tpo/applications/-/issues/?sort… for changelog generation View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e01fb03… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e01fb03… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 42669: Add ability for patched application services to take a gradle...
by Dan Ballard (@dan) 13 Feb '25

13 Feb '25
Dan Ballard pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 5616f8f6 by Dan Ballard at 2025-02-13T16:48:29+00:00 Bug 42669: Add ability for patched application services to take a gradle property to get path to nimbus-fml binary (for use in local dev builds) - - - - - 1 changed file: - projects/application-services/offline-nimbus-fml.diff Changes: ===================================== projects/application-services/offline-nimbus-fml.diff ===================================== @@ -14,7 +14,7 @@ index 67c9e66d0..6dd949c92 100644 import javax.inject.Inject import groovy.transform.Immutable -@@ -84,46 +89,13 @@ abstract class NimbusAssembleToolsTask extends DefaultTask { +@@ -84,46 +89,17 @@ abstract class NimbusAssembleToolsTask extends DefaultTask { @TaskAction void assembleTools() { @@ -48,8 +48,14 @@ index 67c9e66d0..6dd949c92 100644 - fmlBinary.get().asFile.setExecutable(true) - } - visitedFilePaths.add(details.relativePath) -- } -- } ++ String nimbusFmlPath = System.getenv("NIMBUS_FML") ++ Path source ++ if (nimbusFmlPath == null) { ++ nimbusFmlPath = System.getProperty("nimbusFml") ++ if (nimbusFmlPath == null) { ++ throw new GradleException("NIMBUS_FML and property nimbusFml are not defined.") + } + } - - if (visitedFilePaths.empty) { - throw new GradleException("Couldn't find any files in archive matching unzip spec: (${unzipSpec.includePatterns.get().collect { "`$it`" }.join(' | ')})") @@ -57,11 +63,8 @@ index 67c9e66d0..6dd949c92 100644 - - if (visitedFilePaths.size() > 1) { - throw new GradleException("Ambiguous unzip spec matched ${visitedFilePaths.size()} files in archive: ${visitedFilePaths.collect { "`$it`" }.join(', ')}") -+ String nimbusFmlPath = System.getenv("NIMBUS_FML"); -+ if (nimbusFmlPath == null) { -+ throw new GradleException("NIMBUS_FML is not defined.") - } -+ Path source = Paths.get(nimbusFmlPath) +- } ++ source = Paths.get(nimbusFmlPath) + Path dest = fmlBinary.get().asFile.toPath() + Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING) } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/5… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/5… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] bug 41337: always copy gcc/stdlibc++ into firefox and remove from tor-expert-bundle
by Dan Ballard (@dan) 13 Feb '25

13 Feb '25
Dan Ballard pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: aa8564bd by Dan Ballard at 2025-02-13T07:51:19-08:00 bug 41337: always copy gcc/stdlibc++ into firefox and remove from tor-expert-bundle - - - - - 4 changed files: - projects/browser/build - projects/firefox/build - projects/tor/README.md - projects/tor/build Changes: ===================================== projects/browser/build ===================================== @@ -120,12 +120,6 @@ mv [% c('input_files_by_name/noscript') %] "$TBDIR/$EXTSPATH/{73a6fe31-595d-460b # Move tor and dependencies to where TB expects them mv_tbdir tor/* "$TORBINPATH" - # on linux, libstdc++ lives in it's own directory - [% IF c("var/linux") %] - mkdir -p "$TBDIR/$TORBINPATH/libstdc++" - mv "$TBDIR/$TORBINPATH"/libstdc++.so.* "$TBDIR/$TORBINPATH/libstdc++" - [% END %] - # the expert bundle includes tor-gencert, which isn't needed for browser releases [% IF c("var/windows") %] rm "$TBDIR/$TORBINPATH/tor-gencert.exe" @@ -189,6 +183,13 @@ tar -C "${TB_STAGE_DIR}" -xf [% c('input_files_by_name/firefox') %]/browser.tar. done popd rm -rf $TMP_MANUAL_PATH + + # on linux, libstdc++ lives in it's own directory + [% IF c("var/linux") %] + # For legacy reasons, libstdc++ is with tor binaries in Tor Browser. + # We would have to test the updater to move it outside. + mv "$TBDIR/libstdc++" "$TBDIR/$TORBINPATH/libstdc++" + [% END %] [% END -%] [% IF c("var/namecoin") %] ===================================== projects/firefox/build ===================================== @@ -347,20 +347,24 @@ END; [% IF c("var/linux") -%] /var/tmp/dist/gcc/bin/"${CROSS_PREFIX}g++" $rootdir/abicheck.cc -o Browser/abicheck -std=c++17 - [% IF !c("var/tor-browser") -%] - libdest=Browser/libstdc++ - mkdir -p "$libdest" - libdir=[% c("var/libdir") %] - [% IF c("var/linux-cross") -%] - libdir="[% c("var/crosstarget") %]/$libdir" - [% END -%] - # FIXME: tor-browser-build#40749 - cp "/var/tmp/dist/gcc/$libdir/libstdc++.so."* "$libdest" - [% IF c("var/asan") -%] - cp "/var/tmp/dist/gcc/$libdir/libasan.so."* "$libdest" - cp "/var/tmp/dist/gcc/$libdir/libubsan.so."* "$libdest" - [% END -%] + libdest=Browser/libstdc++ + mkdir -p "$libdest" + libdir=[% c("var/libdir") %] + [% IF c("var/linux-cross") -%] + libdir="[% c("var/crosstarget") %]/$libdir" [% END -%] + # Not copying libstdc++.so.* as that dups with the full libstdc++.so.6.0.xx the .6 links to + # and libstdc++.so.6.0.28-gdb.py which is also not needed + cp "/var/tmp/dist/gcc/$libdir/libstdc++.so.6" "$libdest" + [% IF c("var/asan") -%] + cp "/var/tmp/dist/gcc/$libdir/libasan.so."* "$libdest" + cp "/var/tmp/dist/gcc/$libdir/libubsan.so."* "$libdest" + [% END -%] + # Strip and generate debuginfo for libs + for LIB in "$libdest"/*so* + do + "$STRIP" "$LIB" + done [% END -%] echo "Starting to package artifacts $(date)" ===================================== projects/tor/README.md ===================================== @@ -38,8 +38,5 @@ We plan to do it also on desktop platforms, see ## Other Linux libraries -For Linux we also include here libstdc++ (and the sanitizers, if enabled), even -though they aren't needed by tor. - -Also, on we provide debug symbols, but only for Linux, and only in +For Linux we provide debug symbols, but only for Linux, and only in `tor-expert-bundle`. ===================================== projects/tor/build ===================================== @@ -52,22 +52,7 @@ openssldir=/var/tmp/dist/openssl cp $openssldir/lib/libssl.so.3 "$TORBINDIR" cp $openssldir/lib/libcrypto.so.3 "$TORBINDIR" cp $libeventdir/lib/libevent-2.1.so.7 "$TORBINDIR" - # We need to copy the libstdc++.so.6 for Tor Browser on older Linux distros. - # Copying it into /Browser, which feels more natural, and amending - # LD_LIBRARY_PATH breaks updates from a Tor Browser with the old - # LD_LIBRARY_PATH value to the Tor Browser with the newer one. Thus, we copy - # the libstdc++ into the directory with the libs tor depends on, too. See bug - # 13359 for further details. - libdir=[% c("var/libdir") %] - [% IF c("var/linux-cross") -%] - libdir="[% c("var/crosstarget") %]/$libdir" - [% END -%] - cp "/var/tmp/dist/gcc/$libdir/libstdc++.so.6" "$TORBINDIR" - [% IF c("var/asan") -%] - cp "/var/tmp/dist/gcc/$libdir/libasan.so.6" "$TORBINDIR" - cp "/var/tmp/dist/gcc/$libdir/libubsan.so.1" "$TORBINDIR" - [% END -%] - chmod 700 "$TORBINDIR"/*.so* + # This is needed to make RPATH unavailable. See bug 9150. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TORBINDIR" [% END %] @@ -136,17 +121,9 @@ cd $distdir do LIB=`basename $i` - if [ $LIB == 'libstdc++.so.6' ]; then - # keeping this separate to maintain reproducibility; we can probably - # treat this the same as the rest (though it seems libstdc++ doesn't come with - # any useful debug symbols since we don't build it, so maybe we should figure - # out how to package them - "$STRIP" "$TORBINDIR/$LIB" - else - "$OBJCOPY" --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB" - "$STRIP" "$TORBINDIR/$LIB" - "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB" - fi + "$OBJCOPY" --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB" + "$STRIP" "$TORBINDIR/$LIB" + "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB" done [% END %] View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/a… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/a… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.20.0esr-13.5-1] fixup! Bug 43125: Extend the 13.5 EOL expiry date for tor-browser.
by morgan (@morgan) 12 Feb '25

12 Feb '25
morgan pushed to branch tor-browser-115.20.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 6339dfa6 by Henry Wilkes at 2025-02-12T15:58:14+00:00 fixup! Bug 43125: Extend the 13.5 EOL expiry date for tor-browser. TB 43168: Extend the 13.5 EOL to 16th September 2025. - - - - - 1 changed file: - browser/base/content/droppedSupportNotification.js Changes: ===================================== browser/base/content/droppedSupportNotification.js ===================================== @@ -3,8 +3,8 @@ // Show a prompt that a user's system will no longer be supported. window.addEventListener("load", () => { let labelId; - // Firefox moved ESR 115 EOL to 1st April 2025. - const isExpired = Date.now() > Date.UTC(2025, 3, 1); + // Firefox moved ESR 115 EOL to 16th September 2025. + const isExpired = Date.now() > Date.UTC(2025, 8, 16); if ( AppConstants.platform === "macosx" && View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/6339dfa… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/6339dfa… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser] Pushed new tag mullvad-browser-129.0a1-15.0-2-build1
by Pier Angelo Vendrame (@pierov) 12 Feb '25

12 Feb '25
Pier Angelo Vendrame pushed new tag mullvad-browser-129.0a1-15.0-2-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.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-129.0a1-15.0-2] 25 commits: MB 38: Mullvad Browser configuration
by Pier Angelo Vendrame (@pierov) 12 Feb '25

12 Feb '25
Pier Angelo Vendrame pushed to branch mullvad-browser-129.0a1-15.0-2 at The Tor Project / Applications / Mullvad Browser Commits: 922e6c7c by Pier Angelo Vendrame at 2025-02-12T10:34:32+01:00 MB 38: Mullvad Browser configuration - - - - - 48c1d10e by Pier Angelo Vendrame at 2025-02-12T10:51:08+01: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 - - - - - 1b30b272 by Pier Angelo Vendrame at 2025-02-12T10:51:09+01:00 fixup! MB 1: Mullvad Browser branding TB 43323: Add an asset for sanity tests. - - - - - 63677f38 by Henry Wilkes at 2025-02-12T10:51:09+01:00 Mullvad Browser strings This commit adds strings needed by the following Mullvad Browser patches. - - - - - d5aa41b3 by Pier Angelo Vendrame at 2025-02-12T10:51:09+01: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. - - - - - 03c15a61 by Pier Angelo Vendrame at 2025-02-12T10:51:09+01:00 MB 63: Customize some about pages for Mullvad Browser Also: mullvad-browser#57: Purge unneeded about: pages - - - - - a0278973 by Pier Angelo Vendrame at 2025-02-12T10:51:10+01:00 MB 37: Customization for the about dialog - - - - - 46ffae13 by Henry Wilkes at 2025-02-12T10:51:10+01:00 MB 39: Add home page about:mullvad-browser - - - - - f5fc0983 by hackademix at 2025-02-12T10:51:10+01:00 MB 97: Remove UI cues to install new extensions. - - - - - e6a472a3 by hackademix at 2025-02-12T10:51:10+01:00 MB 47: uBlock Origin customization - - - - - 8ec8943a by Pier Angelo Vendrame at 2025-02-12T10:54:44+01: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. - - - - - 6fa1ed3a by Pier Angelo Vendrame at 2025-02-12T10:54:47+01:00 MB 112: Updater customization for Mullvad Browser MB 71: Set the updater base URL to Mullvad domain - - - - - 6aa0126a by Nicolas Vigier at 2025-02-12T10:54:48+01:00 MB 79: Add Mullvad Browser MAR signing keys MB 256: Add mullvad-browser nightly mar signing key - - - - - 05013dd9 by Pier Angelo Vendrame at 2025-02-12T10:54:48+01:00 MB 34: Hide unsafe and unwanted preferences UI about:preferences allow to override some of our defaults, that could be fingeprintable or have some other unwanted consequences. - - - - - 7f26f3a9 by Pier Angelo Vendrame at 2025-02-12T10:54:48+01: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. - - - - - 0a9fc75e by hackademix at 2025-02-12T10:54:48+01:00 MB 163: prevent uBlock Origin from being uninstalled/disabled - - - - - c206ab70 by Richard Pospesel at 2025-02-12T10:54:49+01:00 MB 188: Customize Gitlab Issue and Merge templates - - - - - 9d1c9b18 by rui hildt at 2025-02-12T11:00:17+01:00 MB 213: Customize the search engines list MB 328: Refactor the search engine patch. Upstream switched to a completely different search engine configuration between ESR 115 and ESR 128. We moved our configuration to a couple of JSON files that do not follow upstream's schemas, as they are overcomplicated for our needs. Also, we keep the old search engine extensions for now, as upstream also kept them, and planned of removing them with Bug 1885953. - - - - - 55ea4493 by hackademix at 2025-02-12T11:00:18+01:00 MB 214: Enable cross-tab identity leak protection in "quiet" mode - - - - - 789d1538 by Pier Angelo Vendrame at 2025-02-12T11:00:18+01:00 MB 80: Enable Mullvad Browser as a default browser - - - - - 23129a84 by Pier Angelo Vendrame at 2025-02-12T11:00:18+01: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. - - - - - c229d0b8 by Henry Wilkes at 2025-02-12T11:00:19+01:00 MB 329: Customize toolbar for mullvad-browser. - - - - - 923b05aa by Henry Wilkes at 2025-02-12T11:00:19+01:00 Add CI for Mullvad Browser - - - - - b83b3924 by Henry Wilkes at 2025-02-12T11:00:19+01:00 fixup! Add CI for Mullvad Browser MB 324: Remove trailing comma from translation JSON. - - - - - 7240a0b4 by Beatriz Rizental at 2025-02-12T11:05:09+01:00 fixup! Add CI for Base Browser Extend CI to support listing changes from rapid-release branches - - - - - 256 changed files: - .gitlab/ci/jobs/lint/helpers.py - .gitlab/ci/jobs/update-translations.yml - .gitlab/issue_templates/Emergency Security Issue.md - + .gitlab/issue_templates/Rebase Browser - Alpha.md - + .gitlab/issue_templates/Rebase Browser - Stable.md - .gitlab/merge_request_templates/default.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-menubar.inc - browser/base/content/browser-places.js - browser/base/content/browser.js - browser/base/content/default-bookmarks.html - browser/base/content/nsContextMenu.sys.mjs - browser/base/content/overrides/app-license.html - browser/base/content/pageinfo/pageInfo.xhtml - browser/base/content/utilityOverlay.js - browser/branding/branding-common.mozbuild - + browser/branding/mb-alpha/VisualElements_150.png - + browser/branding/mb-alpha/VisualElements_70.png - + browser/branding/mb-alpha/configure.sh - + browser/branding/mb-alpha/content/about-logo.png - + browser/branding/mb-alpha/content/about-logo.svg - + browser/branding/mb-alpha/content/about-logo(a)2x.png - + browser/branding/mb-alpha/content/about-wordmark.svg - + browser/branding/mb-alpha/content/about.png - + browser/branding/mb-alpha/content/aboutDialog.css - + browser/branding/mb-alpha/content/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/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/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/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/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/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/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/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/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/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.js - + browser/components/mullvad-browser/content/aboutMullvadBrowser.xhtml - + browser/components/mullvad-browser/content/mullvadBrowserFont.css - + browser/components/mullvad-browser/jar.mn - + browser/components/mullvad-browser/moz.build - browser/components/newtab/AboutNewTabService.sys.mjs - browser/components/preferences/home.inc.xhtml - browser/components/preferences/main.js - browser/components/preferences/preferences.xhtml - browser/components/preferences/privacy.inc.xhtml - browser/components/preferences/privacy.js - browser/components/preferences/search.inc.xhtml - + browser/components/search/extensions/brave/favicon.svg - + browser/components/search/extensions/brave/manifest.json - + browser/components/search/extensions/ddg-html/favicon.ico - + browser/components/search/extensions/ddg-html/manifest.json - browser/components/search/extensions/ddg/manifest.json - + browser/components/search/extensions/metager/favicon.ico - + browser/components/search/extensions/metager/manifest.json - + browser/components/search/extensions/mojeek/favicon.ico - + browser/components/search/extensions/mojeek/manifest.json - + browser/components/search/extensions/mullvad-leta/favicon.svg - + browser/components/search/extensions/mullvad-leta/manifest.json - + browser/components/search/extensions/startpage/favicon.png - + browser/components/search/extensions/startpage/manifest.json - browser/components/shell/ShellService.sys.mjs - browser/components/shell/WindowsDefaultBrowser.cpp - browser/components/shell/nsWindowsShellService.cpp - browser/config/mozconfigs/base-browser - + browser/config/mozconfigs/mullvad-browser - browser/confvars.sh - browser/installer/package-manifest.in - browser/installer/windows/nsis/updater_append.ini - browser/modules/HomePage.sys.mjs - browser/moz.build - browser/moz.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/CityHash/Makefile - toolkit/components/extensions/child/ext-storage.js - toolkit/components/extensions/parent/ext-storage.js - toolkit/components/passwordmgr/LoginHelper.sys.mjs - toolkit/components/search/AppProvidedSearchEngine.sys.mjs - toolkit/components/search/SearchService.sys.mjs - + toolkit/components/search/content/brave.svg - + toolkit/components/search/content/duckduckgo.ico - + toolkit/components/search/content/metager.ico - + toolkit/components/search/content/mojeek.ico - + toolkit/components/search/content/mullvad-leta.svg - + toolkit/components/search/content/mullvadBrowserSearchEngineIcons.json - + toolkit/components/search/content/mullvadBrowserSearchEngines.json - + toolkit/components/search/content/startpage.png - + toolkit/components/search/jar.mn - toolkit/components/search/moz.build - toolkit/components/securitylevel/SecurityLevel.sys.mjs - + toolkit/content/aboutRightsMullvad.xhtml - + toolkit/content/aboutTelemetryMullvad.xhtml - toolkit/content/jar.mn - toolkit/content/license.html - toolkit/content/widgets/moz-support-link/moz-support-link.mjs - + 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/45… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/45… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • ...
  • 799
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.