From c2c709b74fd3cc4d038a02cee6e5d9f164d3df01 Mon Sep 17 00:00:00 2001 From: Akash Yadav 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 --- .../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 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( + R.string.pref_key_safe_browsing_enabled, + ) + + safeBrowsingEnabledPreference.setOnPreferenceChangeListener { 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(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 @@ pref_key_tracking_protection_suspected_fingerprinters pref_key_tracking_protection_suspected_fingerprinters_select + + pref_key_safe_browsing_enabled + pref_key_save_logins_settings pref_key_save_logins 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" /> + + 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); 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("network.fetchpriority.enabled", false); /* package */ final Pref mParallelMarkingEnabled = new Pref("javascript.options.mem.gc_parallel_marking", false); + /* package */ final Pref mSafeBrowsingEnabled = new Pref<>("browser.safebrowsing.malware.enabled", true); + /* package */ final Pref mSafeBrowsingPhishingEnabled = new Pref<>("browser.safebrowsing.phishing.enabled", true); /* package */ final Pref mCookieBehaviorOptInPartitioning = new Pref("network.cookie.cookieBehavior.optInPartitioning", false); /* package */ final Pref 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