Matthew Finkel pushed to branch tor-browser-85.0.0b7-10.5-1 at The Tor Project / Applications / fenix
Commits: 29c9e1ce by Matthew Finkel at 2021-01-16T21:05:32+00:00 Revert "Bug 40098: Add EOY home screen"
This reverts commit 15e91be432d7d3f10013b990f6d84c9fd33c135f.
Bug 40137: Remove EOY 2020 Campaign
- - - - -
11 changed files:
- LICENSE - app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt - app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt - − app/src/main/res/drawable/ic_illo.png - − app/src/main/res/drawable/ic_tape.png - − app/src/main/res/font/cousine.ttf - − app/src/main/res/font/terminal_grotesque.otf - − app/src/main/res/font/white_on_black.ttf - app/src/main/res/layout/fragment_home.xml - app/src/main/res/values/styles.xml - app/src/main/res/values/torbrowser_strings.xml
Changes:
===================================== LICENSE ===================================== @@ -371,328 +371,3 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice
This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. - -=============================================================================== - -"White On Black" font embedded in chrome/skin/aboutTorFonts.css is licensed under: - -Non Exclusive License Agreement - -Object: Imagex font called « White on Black » -Owner: Daniel Hochard - -1. Allowed uses -The user may use this font on any surface such as logo, paper, web sites, -textile, Online medias, except TV, cinéma and advertising campaign. -2. Number of users : 5 -All users must belong to the same company or household purchasing the font. -3. Modifications -The user can modify this font itself without written consent of the owner. -4. This font belongs to Daniel Hochard. The user may not sell it as a font (in a -font bank or a commercial fonts web site, for example). -The fee for this font was paid on paypal the 29 september 2020 - -=============================================================================== - -"Terminal Grotesque Open" font embedded in chrome/skin/aboutTorFonts.css is licensed -under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - -=============================================================================== - -SIL OPEN FONT LICENSE - -Version 1.1 - 26 February 2007 - -PREAMBLE - -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. -DEFINITIONS - -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting — in part or in whole — any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. -PERMISSION & CONDITIONS - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. -TERMINATION - -This license becomes null and void if any of the above conditions are -not met. -DISCLAIMER - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -=============================================================================== - -The Cousine font is licensed under the Apache License, Version 2.0. -https://fonts.google.com/specimen/Cousine - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.
===================================== app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt ===================================== @@ -49,14 +49,10 @@ import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_home.* import kotlinx.android.synthetic.main.fragment_home.view.bottomBarShadow import kotlinx.android.synthetic.main.fragment_home.view.bottom_bar -import kotlinx.android.synthetic.main.fragment_home.view.donate_now_button -import kotlinx.android.synthetic.main.fragment_home.view.donationmatch import kotlinx.android.synthetic.main.fragment_home.view.exploreprivately import kotlinx.android.synthetic.main.fragment_home.view.homeAppBar -import kotlinx.android.synthetic.main.fragment_home.view.illo_image import kotlinx.android.synthetic.main.fragment_home.view.menuButton import kotlinx.android.synthetic.main.fragment_home.view.onion_pattern_image -import kotlinx.android.synthetic.main.fragment_home.view.resistsurveillance import kotlinx.android.synthetic.main.fragment_home.view.sessionControlRecyclerView import kotlinx.android.synthetic.main.fragment_home.view.tab_button import kotlinx.android.synthetic.main.fragment_home.view.toolbar @@ -90,7 +86,6 @@ import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.ktx.android.content.res.resolveAttribute import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged -import mozilla.components.support.locale.LocaleManager import mozilla.components.ui.tabcounter.TabCounterMenu import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BuildConfig @@ -119,7 +114,6 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder import org.mozilla.fenix.home.sessioncontrol.viewholders.topsites.DefaultTopSitesView import org.mozilla.fenix.onboarding.FenixOnboarding import org.mozilla.fenix.settings.SupportUtils -import org.mozilla.fenix.settings.advanced.getSelectedLocale import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit import org.mozilla.fenix.tor.bootstrap.TorQuickStart import org.mozilla.fenix.theme.ThemeManager @@ -284,28 +278,6 @@ class HomeFragment : Fragment() { adjustHomeFragmentView(currentMode.getCurrentMode(), view) showSessionControlView(view)
- view.donationmatch.setOnClickListener { - activity.openToBrowserAndLoad( - searchTermOrURL = "https://blog.torproject.org/friends-of-tor-match-2020", - newTab = true, - from = BrowserDirection.FromHome - ) - } - - view.donate_now_button.setOnClickListener { - val country = LocaleManager.getSelectedLocale(requireContext()).country - var locale = LocaleManager.getSelectedLocale(requireContext()).language - if (country != "") { - locale = "$locale-$country" - } - val localeUrl = "https://www.torproject.org/donate/donate-usetor-mobile-$locale" - activity.openToBrowserAndLoad( - searchTermOrURL = localeUrl, - newTab = true, - from = BrowserDirection.FromHome - ) - } - return view }
@@ -437,14 +409,6 @@ class HomeFragment : Fragment() { toolbarLayoutHeight - SESSION_CONTROL_VIEW_PADDING ) } - view.donate_now_button?.apply { - (layoutParams as ViewGroup.MarginLayoutParams).setMargins( - 0, - 0, - 0, - toolbarLayoutHeight - SESSION_CONTROL_VIEW_PADDING - ) - } } } else { view.sessionControlRecyclerView?.apply { @@ -455,38 +419,6 @@ class HomeFragment : Fragment() { height - SESSION_CONTROL_VIEW_PADDING ) } - view.donate_now_button?.apply { - (layoutParams as ViewGroup.MarginLayoutParams).setMargins( - 0, - 0, - 0, - height - SESSION_CONTROL_VIEW_PADDING - ) - } - } - } - - // Hide the EOY image during Onboarding, too. - view?.illo_image?.apply { - visibility = if (onboarding.userHasBeenOnboarded()) { - View.VISIBLE - } else { - View.GONE - } - } - // Hide the EOY donate button during Onboarding, too. - view?.donate_now_button?.apply { - visibility = if (onboarding.userHasBeenOnboarded()) { - View.VISIBLE - } else { - View.GONE - } - } - view?.resistsurveillance?.apply { - visibility = if (onboarding.userHasBeenOnboarded()) { - View.VISIBLE - } else { - View.GONE } } // Hide the onion pattern during Onboarding, too.
===================================== app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt ===================================== @@ -32,7 +32,7 @@ abstract class ThemeManager { @get:StyleRes val currentThemeResource get() = when (currentTheme) { BrowsingMode.Normal -> R.style.NormalTheme - BrowsingMode.Private -> R.style.PrivateEOYTheme + BrowsingMode.Private -> R.style.PrivateTheme }
/**
===================================== app/src/main/res/drawable/ic_illo.png deleted ===================================== Binary files a/app/src/main/res/drawable/ic_illo.png and /dev/null differ
===================================== app/src/main/res/drawable/ic_tape.png deleted ===================================== Binary files a/app/src/main/res/drawable/ic_tape.png and /dev/null differ
===================================== app/src/main/res/font/cousine.ttf deleted ===================================== Binary files a/app/src/main/res/font/cousine.ttf and /dev/null differ
===================================== app/src/main/res/font/terminal_grotesque.otf deleted ===================================== Binary files a/app/src/main/res/font/terminal_grotesque.otf and /dev/null differ
===================================== app/src/main/res/font/white_on_black.ttf deleted ===================================== Binary files a/app/src/main/res/font/white_on_black.ttf and /dev/null differ
===================================== app/src/main/res/layout/fragment_home.xml ===================================== @@ -53,7 +53,6 @@ android:clickable="false" android:contentDescription="@string/app_name" android:focusable="false" - android:visibility="gone" android:importantForAccessibility="no" app:srcCompat="@mipmap/ic_launcher" app:layout_collapseMode="parallax" @@ -70,7 +69,6 @@ android:height="60dp" android:clickable="false" android:focusable="false" - android:visibility="gone" android:importantForAccessibility="no" android:lines="2" android:text="@string/app_name" @@ -85,99 +83,19 @@ android:id="@+id/exploreprivately" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:layout_marginStart="30dp" - android:layout_marginEnd="30dp" + android:layout_gravity="center|center_vertical" + android:gravity="center_horizontal" android:clickable="false" android:ellipsize="end" android:focusable="false" android:importantForAccessibility="no" - android:text="@string/tor_useamask_usetor" - android:fontFamily="@font/white_on_black" - android:textColor="#FFFFFFFF" + android:text="@string/tor_explore_privately" + android:fontFamily="Roboto-Medium" + android:textColor="#DEFFFFFF" android:textSize="40sp" - android:paddingTop="20dp" android:lineSpacingMultiplier="1.1" app:layout_scrollFlags="scroll" />
- <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" - android:orientation="vertical"> - - <TextView - android:id="@+id/resistsurveillance" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="40dp" - android:layout_gravity="center_vertical" - android:clickable="false" - android:focusable="false" - android:gravity="start" - android:fontFamily="@font/terminal_grotesque" - android:importantForAccessibility="no" - android:lineSpacingMultiplier="1.1" - android:text="@string/tor_resistsurveillance" - android:textColor="#FFFFFFFF" - android:textSize="27sp" - android:visibility="visible" - app:layout_scrollFlags="scroll" /> - - <TextView - android:id="@+id/donationmatch" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="40dp" - android:layout_gravity="center_vertical" - android:paddingTop="20dp" - android:paddingBottom="20dp" - android:clickable="false" - android:focusable="false" - android:gravity="start" - android:fontFamily="@font/cousine" - android:importantForAccessibility="no" - android:lineSpacingMultiplier="1.1" - android:text="@string/tor_donationmatch" - android:textColor="#9D4AE8" - android:textSize="14sp" - android:visibility="visible" - app:layout_scrollFlags="scroll" /> - - <Button - android:id="@+id/donate_now_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="30dp" - android:background="@drawable/ic_tape" - android:gravity="center|start" - android:fontFamily="@font/terminal_grotesque" - android:paddingStart="15dp" - android:paddingEnd="20dp" - android:text="@string/tor_onboarding_donate_button" - android:textColor="#FF000000" - android:textSize="25sp" - android:textAllCaps="false" - android:textStyle="bold" - android:visibility="visible" - tools:ignore="ButtonStyleXmlDetector" /> - </LinearLayout> - - <ImageView - android:id="@+id/illo_image" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1" - app:srcCompat="@drawable/ic_illo" - tools:ignore="ContentDescription" - app:layout_scrollFlags="scroll" /> - - </LinearLayout> - </com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
===================================== app/src/main/res/values/styles.xml ===================================== @@ -269,10 +269,6 @@
<style name="PrivateTheme" parent="PrivateThemeBase" />
- <style name="PrivateEOYTheme" parent="PrivateThemeBase" > - <item name="homeBackground">@android:color/black</item> - </style> - <!-- Fade animation for theme switching --> <style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@anim/fade_in</item>
===================================== app/src/main/res/values/torbrowser_strings.xml ===================================== @@ -72,8 +72,4 @@
<!-- Spoof locale to English --> <string name="tor_spoof_english">Request English versions of web pages for enhanced privacy</string> - - <string name="tor_useamask_usetor">Use a mask, use Tor.</string> - <string name="tor_resistsurveillance">Resist the surveillance pandemic.</string> - <string name="tor_donationmatch">Your donation will be matched by Friends of Tor.</string> </resources>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/29c9e1cefa2ede...
tbb-commits@lists.torproject.org