Files
IronFox/patches/safe-browsing.patch
2025-05-04 00:06:52 -04:00

319 lines
16 KiB
Diff

From c2c709b74fd3cc4d038a02cee6e5d9f164d3df01 Mon Sep 17 00:00:00 2001
From: Akash Yadav <itsaky01@gmail.com>
Date: Mon, 28 Apr 2025 11:38:38 +0530
Subject: [PATCH] fix(patches): update 'safe-browsing.patch' for
'FIREFOX_138_0_BUILD1'
Signed-off-by: Akash Yadav <itsaky01@gmail.com>
---
.../browser/engine/gecko/GeckoEngine.kt | 18 ++++++
.../components/concept/engine/Settings.kt | 12 ++++
.../java/org/mozilla/fenix/components/Core.kt | 2 +
.../fenix/settings/SettingsFragment.kt | 21 ++++++
.../java/org/mozilla/fenix/utils/Settings.kt | 7 ++
.../src/main/res/values/preference_keys.xml | 3 +
.../app/src/main/res/xml/preferences.xml | 6 ++
mobile/android/geckoview/api.txt | 6 ++
.../geckoview/GeckoRuntimeSettings.java | 64 +++++++++++++++++++
9 files changed, 139 insertions(+)
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
index d3bfbfa762..0c04eb91ee 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
@@ -1114,6 +1114,22 @@ class GeckoEngine(
runtime.settings.contentBlocking.setSafeBrowsing(policy)
field = value
}
+
+ override var safeBrowsingEnabled: Boolean
+ get() = runtime.settings.safeBrowsingEnabled
+ set(value) {
+ value.let {
+ runtime.settings.safeBrowsingEnabled = it
+ }
+ }
+
+ override var safeBrowsingPhishingEnabled: Boolean
+ get() = runtime.settings.safeBrowsingPhishingEnabled
+ set(value) {
+ value.let {
+ runtime.settings.safeBrowsingPhishingEnabled = it
+ }
+ }
override var trackingProtectionPolicy: TrackingProtectionPolicy? = null
set(value) {
@@ -1481,6 +1497,8 @@ class GeckoEngine(
this.automaticLanguageAdjustment = it.automaticLanguageAdjustment
this.trackingProtectionPolicy = it.trackingProtectionPolicy
this.safeBrowsingPolicy = arrayOf(SafeBrowsingPolicy.RECOMMENDED)
+ this.safeBrowsingEnabled = it.safeBrowsingEnabled
+ this.safeBrowsingPhishingEnabled = it.safeBrowsingPhishingEnabled
this.remoteDebuggingEnabled = it.remoteDebuggingEnabled
this.testingModeEnabled = it.testingModeEnabled
this.userAgentString = it.userAgentString
diff --git a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
index db66cbe503..8eb6fdec9d 100644
--- a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
+++ b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
@@ -66,6 +66,16 @@ abstract class Settings {
*/
open var safeBrowsingPolicy: Array<SafeBrowsingPolicy> by UnsupportedSetting()
+ /**
+ * Setting to control Safe Browsing (for malware).
+ */
+ open var safeBrowsingEnabled: Boolean by UnsupportedSetting()
+
+ /**
+ * Setting to control Safe Browsing (for phishing).
+ */
+ open var safeBrowsingPhishingEnabled: Boolean by UnsupportedSetting()
+
/**
* Setting to control the cookie banner handling feature detect only mode.
*/
@@ -390,6 +400,8 @@ data class DefaultSettings(
override var cookieBannerHandlingMode: CookieBannerHandlingMode = CookieBannerHandlingMode.DISABLED,
override var cookieBannerHandlingModePrivateBrowsing: CookieBannerHandlingMode =
CookieBannerHandlingMode.DISABLED,
+ override var safeBrowsingEnabled: Boolean = true,
+ override var safeBrowsingPhishingEnabled: Boolean = true,
override var cookieBannerHandlingDetectOnlyMode: Boolean = false,
override var cookieBannerHandlingGlobalRules: Boolean = false,
override var cookieBannerHandlingGlobalRulesSubFrames: Boolean = false,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
index 9a9487a930..ba7b61e96b 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
@@ -169,6 +169,8 @@ class Core(
fdlibmMathEnabled = FxNimbus.features.fingerprintingProtection.value().fdlibmMath,
cookieBannerHandlingMode = context.settings().getCookieBannerHandling(),
cookieBannerHandlingModePrivateBrowsing = context.settings().getCookieBannerHandlingPrivateMode(),
+ safeBrowsingEnabled = context.settings().safeBrowsingEnabled,
+ safeBrowsingPhishingEnabled = context.settings().safeBrowsingEnabled,
cookieBannerHandlingDetectOnlyMode = context.settings().shouldEnableCookieBannerDetectOnly,
cookieBannerHandlingGlobalRules = context.settings().shouldEnableCookieBannerGlobalRules,
cookieBannerHandlingGlobalRulesSubFrames = context.settings().shouldEnableCookieBannerGlobalRulesSubFrame,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
index ad6678f234..425ec85218 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
@@ -563,6 +563,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
(requireContext().components.core.engine.profiler?.isProfilerActive() != null)
}
setupCookieBannerPreference()
+ setupSafeBrowsingPreference()
setupInstallAddonFromFilePreference(requireContext().settings())
setLinkSharingPreference()
setupAmoCollectionOverridePreference(requireContext().settings())
@@ -789,6 +790,36 @@ class SettingsFragment : PreferenceFragmentCompat() {
}
}
+ @VisibleForTesting
+ internal fun setupSafeBrowsingPreference() {
+ val safeBrowsingEnabledPreference = requirePreference<SwitchPreference>(
+ R.string.pref_key_safe_browsing_enabled,
+ )
+
+ safeBrowsingEnabledPreference.setOnPreferenceChangeListener<Boolean> { preference, safeBrowsingEnabled ->
+ val settings = preference.context.settings()
+ val components = preference.context.components
+
+ settings.safeBrowsingEnabled = safeBrowsingEnabled
+
+ components.core.engine.settings.safeBrowsingEnabled = safeBrowsingEnabled
+ components.core.engine.settings.safeBrowsingPhishingEnabled = safeBrowsingEnabled
+
+ Toast.makeText(
+ context,
+ getString(R.string.quit_application),
+ Toast.LENGTH_LONG,
+ ).show()
+ Handler(Looper.getMainLooper()).postDelayed(
+ {
+ exitProcess(0)
+ },
+ FXA_SYNC_OVERRIDE_EXIT_DELAY,
+ )
+ true
+ }
+ }
+
@VisibleForTesting
internal fun setupInstallAddonFromFilePreference(settings: Settings) {
with(requirePreference<Preference>(R.string.pref_key_install_local_addon)) {
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
index 8e271198b0..86fc40d5fd 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
@@ -786,6 +786,11 @@ class Settings(private val appContext: Context) : PreferencesHolder {
val queryParameterStrippingStripList: String
get() = queryParameterStrippingSection[QUERY_PARAMETER_STRIPPING_STRIP_LIST].orEmpty()
+
+ var safeBrowsingEnabled by booleanPreference(
+ appContext.getPreferenceKey(R.string.pref_key_safe_browsing_enabled),
+ default = true,
+ )
/**
* Declared as a function for performance purposes. This could be declared as a variable using
diff --git a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml
index dbb7ece65c..e334b7586c 100644
--- a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml
+++ b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml
@@ -224,6 +224,9 @@
<string name="pref_key_tracking_protection_suspected_fingerprinters" translatable="false">pref_key_tracking_protection_suspected_fingerprinters</string>
<string name="pref_key_tracking_protection_suspected_fingerprinters_select" translatable="false">pref_key_tracking_protection_suspected_fingerprinters_select</string>
+ <!-- Safe Browsing -->
+ <string name="pref_key_safe_browsing_enabled" translatable="false">pref_key_safe_browsing_enabled</string>
+
<!-- Logins Settings -->
<string name="pref_key_save_logins_settings" translatable="false">pref_key_save_logins_settings</string>
<string name="pref_key_save_logins" translatable="false">pref_key_save_logins</string>
diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml
index 3b85a2a548..04fff133df 100644
--- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml
+++ b/mobile/android/fenix/app/src/main/res/xml/preferences.xml
@@ -120,6 +120,13 @@
app:iconSpaceReserved="false"
app:isPreferenceVisible="false"
android:title="@string/preferences_cookie_banner_reduction_private_mode" />
+
+ <androidx.preference.SwitchPreference
+ android:defaultValue="true"
+ android:key="@string/pref_key_safe_browsing_enabled"
+ android:summary="@string/restart_required_summary"
+ app:iconSpaceReserved="false"
+ android:title="@string/preference_safe_browsing_enabled" />
<androidx.preference.Preference
android:key="@string/pref_key_tracking_protection_settings"
diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt
index d1af0917aa..8bf4d82d04 100644
--- a/mobile/android/geckoview/api.txt
+++ b/mobile/android/geckoview/api.txt
@@ -865,6 +865,8 @@ package org.mozilla.geckoview {
method @Nullable public String getConfigFilePath();
method public boolean getConsoleOutputEnabled();
method @NonNull public ContentBlocking.Settings getContentBlocking();
+ method public boolean getSafeBrowsingEnabled();
+ method public boolean getSafeBrowsingPhishingEnabled();
method public boolean getCookieBehaviorOptInPartitioning();
method public boolean getCookieBehaviorOptInPartitioningPBM();
method @Nullable public Class<? extends android.app.Service> getCrashHandler();
@@ -919,6 +921,8 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings setAutomaticFontSizeAdjustment(boolean);
method @NonNull public GeckoRuntimeSettings setCertificateTransparencyMode(int);
method @NonNull public GeckoRuntimeSettings setConsoleOutputEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setSafeBrowsingEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setSafeBrowsingPhishingEnabled(boolean);
method @NonNull public GeckoRuntimeSettings setCookieBehaviorOptInPartitioning(boolean);
method @NonNull public GeckoRuntimeSettings setCookieBehaviorOptInPartitioningPBM(boolean);
method @NonNull public GeckoRuntimeSettings setDefaultRecursiveResolverUri(@NonNull String);
@@ -981,6 +985,8 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings.Builder configFilePath(@Nullable String);
method @NonNull public GeckoRuntimeSettings.Builder consoleOutput(boolean);
method @NonNull public GeckoRuntimeSettings.Builder contentBlocking(@NonNull ContentBlocking.Settings);
+ method @NonNull public GeckoRuntimeSettings.Builder safeBrowsingEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings.Builder safeBrowsingPhishingEnabled(boolean);
method @NonNull public GeckoRuntimeSettings.Builder crashHandler(@Nullable Class<? extends android.app.Service>);
method @NonNull public GeckoRuntimeSettings.Builder debugLogging(boolean);
method @NonNull public GeckoRuntimeSettings.Builder defaultRecursiveResolverUri(@NonNull String);
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
index 30a300d9eb..343d03f7d5 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
@@ -436,6 +436,28 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
return this;
}
+ /**
+ * Sets whether we should enable Safe Browsing (for malware).
+ *
+ * @param flag True if we should enable Safe Browsing (for malware), false otherwise.
+ * @return This Builder instance.
+ */
+ public @NonNull Builder safeBrowsingEnabled(final boolean flag) {
+ getSettings().mSafeBrowsingEnabled.set(flag);
+ return this;
+ }
+
+ /**
+ * Sets whether we should enable Safe Browsing (for phishing).
+ *
+ * @param flag True if we should enable Safe Browsing (for phishing), false otherwise.
+ * @return This Builder instance.
+ */
+ public @NonNull Builder safeBrowsingPhishingEnabled(final boolean flag) {
+ getSettings().mSafeBrowsingPhishingEnabled.set(flag);
+ return this;
+ }
+
/**
* Sets the preferred color scheme override for web content.
*
@@ -694,6 +716,8 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
new Pref<Boolean>("network.fetchpriority.enabled", false);
/* package */ final Pref<Boolean> mParallelMarkingEnabled =
new Pref<Boolean>("javascript.options.mem.gc_parallel_marking", false);
+ /* package */ final Pref<Boolean> mSafeBrowsingEnabled = new Pref<>("browser.safebrowsing.malware.enabled", true);
+ /* package */ final Pref<Boolean> mSafeBrowsingPhishingEnabled = new Pref<>("browser.safebrowsing.phishing.enabled", true);
/* package */ final Pref<Boolean> mCookieBehaviorOptInPartitioning =
new Pref<Boolean>("network.cookie.cookieBehavior.optInPartitioning", false);
/* package */ final Pref<Boolean> mCookieBehaviorOptInPartitioningPBM =
@@ -927,6 +951,46 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
return mFdlibmMathEnabled.get();
}
+ /**
+ * Get whether we should enable Safe Browsing (for malware).
+ *
+ * @return Whether we should enable Safe Browsing (for malware).
+ */
+ public boolean getSafeBrowsingEnabled() {
+ return mSafeBrowsingEnabled.get();
+ }
+
+ /**
+ * Set whether we should enable Safe Browsing (for malware).
+ *
+ * @param flag A flag determining whether we should enable Safe Browsing (for malware).
+ * @return This GeckoRuntimeSettings instance.
+ */
+ public @NonNull GeckoRuntimeSettings setSafeBrowsingEnabled(final boolean flag) {
+ mSafeBrowsingEnabled.commit(flag);
+ return this;
+ }
+
+ /**
+ * Get whether we should enable Safe Browsing (for phishing).
+ *
+ * @return Whether we should enable Safe Browsing (for phishing).
+ */
+ public boolean getSafeBrowsingPhishingEnabled() {
+ return mSafeBrowsingPhishingEnabled.get();
+ }
+
+ /**
+ * Set whether we should enable Safe Browsing (for phishing).
+ *
+ * @param flag A flag determining whether we should enable Safe Browsing (for phishing).
+ * @return This GeckoRuntimeSettings instance.
+ */
+ public @NonNull GeckoRuntimeSettings setSafeBrowsingPhishingEnabled(final boolean flag) {
+ mSafeBrowsingPhishingEnabled.commit(flag);
+ return this;
+ }
+
/**
* Set the pref to control the cookie behavior opt-in partitioning.
*
--
2.49.0