[tbb-commits] [Git][tpo/applications/fenix][tor-browser-102.2.1-12.0-1] 2 commits: tor-browser#41159 Remove HTTPS Everywhere from Tor Browser Android
ma1 (@ma1)
git at gitlab.torproject.org
Thu Sep 22 19:36:23 UTC 2022
ma1 pushed to branch tor-browser-102.2.1-12.0-1 at The Tor Project / Applications / fenix
Commits:
a8b8273e by ma1 at 2022-09-22T19:36:20+00:00
tor-browser#41159 Remove HTTPS Everywhere from Tor Browser Android
- - - - -
81f03fff by ma1 at 2022-09-22T19:36:20+00:00
Merge branch 'bug_41159' into 'tor-browser-102.2.1-12.0-1'
tor-browser#41159 Remove HTTPS Everywhere from Tor Browser Android
See merge request tpo/applications/fenix!152
- - - - -
3 changed files:
- app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- app/src/main/res/values/preference_keys.xml
Changes:
=====================================
app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
=====================================
@@ -8,8 +8,14 @@ package org.mozilla.fenix.components
import android.os.StrictMode
import android.content.Context
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.concept.engine.webextension.WebExtensionRuntime
+import mozilla.components.support.webextensions.WebExtensionSupport
import mozilla.components.support.base.log.logger.Logger
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
@@ -66,47 +72,57 @@ object TorBrowserFeatures {
onError = { _, throwable -> onError(throwable) })
}
- private fun installHTTPSEverywhere(
+ @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage
+ private fun uninstallHTTPSEverywhere(
runtime: WebExtensionRuntime,
- onSuccess: ((WebExtension) -> Unit),
+ onSuccess: (() -> Unit),
onError: ((Throwable) -> Unit)
) {
- runtime.installWebExtension(
- id = "https-everywhere-eff at eff.org",
- url = "resource://android/assets/extensions/https-everywhere/",
- onSuccess = onSuccess,
- onError = { _, throwable -> onError(throwable) }
- )
+ // Wait for WebExtensionSupport on the I/O thread to avoid deadlocks.
+ GlobalScope.launch(Dispatchers.IO) {
+ WebExtensionSupport.awaitInitialization()
+ // Back to the main thread.
+ withContext(Dispatchers.Main) {
+ val extension =
+ WebExtensionSupport.installedExtensions["https-everywhere-eff at eff.org"]
+ ?: return at withContext onSuccess() // Fine, nothing to uninstall.
+ runtime.uninstallWebExtension(
+ extension,
+ onSuccess = onSuccess,
+ onError = { _, throwable -> onError(throwable) }
+ )
+ }
+ }
}
fun install(context: Context, runtime: WebExtensionRuntime) {
+ val settings = context.settings()
/**
- * Install HTTPS Everywhere as a builtin addon, with a resource://android/ URI.
- * No signatures will be checked/required and there will be no automatic
- * extension updates. It's ok to always try to install, since for builtin extensions it will
- * be checked internally whether it is necessary to install or not: it will only be done
- * if this is the first time or if it's a newer version.
+ * Remove HTTPS Everywhere if we didn't yet, unless HTTPS-Only is disabled, which might
+ * mean user opted out from the built-in mechanism and still relies on the extension.
*/
- installHTTPSEverywhere(
- runtime,
- onSuccess = {
- logger.debug("HTTPS Everywhere extension was installed successfully")
- },
- onError = { throwable ->
- logger.error("Could not install HTTPS Everywhere extension", throwable)
- }
- )
-
+ if (!settings.httpsEverywhereRemoved && settings.shouldUseHttpsOnly) {
+ uninstallHTTPSEverywhere(
+ runtime,
+ onSuccess = {
+ settings.httpsEverywhereRemoved = true
+ logger.debug("HTTPS Everywhere extension was uninstalled successfully")
+ },
+ onError = { throwable ->
+ logger.error("Could not uninstall HTTPS Everywhere extension", throwable)
+ }
+ )
+ }
/**
* Install NoScript as a user WebExtension if we have not already done so.
* AMO signature is checked, but automatic updates still need to be enabled.
*/
- if (!context.settings().noscriptInstalled) {
+ if (!settings.noscriptInstalled) {
installNoScript(
context,
runtime,
onSuccess = {
- context.settings().noscriptInstalled = true
+ settings.noscriptInstalled = true
logger.debug("NoScript extension was installed successfully")
},
onError = { throwable ->
@@ -123,7 +139,7 @@ object TorBrowserFeatures {
* causing automatic update checks failures (components.addonUpdater being a lazy prop).
* The extension, from then on, should behave as if the user had installed it manually.
*/
- if (context.settings().noscriptUpdated == 0) {
+ if (settings.noscriptUpdated == 0) {
context.components.torController.registerTorListener(object : TorEvents {
override fun onTorConnected() {
context.components.torController.unregisterTorListener(this)
@@ -131,7 +147,7 @@ object TorBrowserFeatures {
context.components.addonUpdater.registerForFutureUpdates(NOSCRIPT_ID)
// Force an immediate update check
context.components.addonUpdater.update(NOSCRIPT_ID)
- context.settings().noscriptUpdated = 1
+ settings.noscriptUpdated = 1
}
@SuppressWarnings("EmptyFunctionBlock")
=====================================
app/src/main/java/org/mozilla/fenix/utils/Settings.kt
=====================================
@@ -1384,4 +1384,9 @@ class Settings(private val appContext: Context) : PreferencesHolder {
appContext.getPreferenceKey(R.string.pref_key_noscript_updated),
default = 0
)
+
+ var httpsEverywhereRemoved by booleanPreference(
+ appContext.getPreferenceKey(R.string.pref_key_https_everywhere_removed),
+ default = false
+ )
}
=====================================
app/src/main/res/values/preference_keys.xml
=====================================
@@ -298,6 +298,7 @@
<string name="pref_key_noscript_installed" translatable="false">pref_key_noscript_installed</string>
<string name="pref_key_noscript_updated" translatable="false">pref_key_noscript_updated</string>
+ <string name="pref_key_https_everywhere_removed" translatable="false">pref_key_https_everywhere_removed</string>
<!-- Security Level Settings -->
<string name="pref_key_tor_security_level_settings" translatable="false">pref_key_tor_security_level_settings</string>
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/be7201c2e4100e9dc696fb41a5495b8d3f920bc3...81f03ffffb7ef123e5338c5d6579c62fe0cce791
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/be7201c2e4100e9dc696fb41a5495b8d3f920bc3...81f03ffffb7ef123e5338c5d6579c62fe0cce791
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20220922/e0925231/attachment-0001.htm>
More information about the tbb-commits
mailing list