diff --git a/patches/fenix-overlay/app/src/main/res/values/ironfox_preference_keys.xml b/patches/fenix-overlay/app/src/main/res/values/ironfox_preference_keys.xml
index 08365037..36f21fde 100644
--- a/patches/fenix-overlay/app/src/main/res/values/ironfox_preference_keys.xml
+++ b/patches/fenix-overlay/app/src/main/res/values/ironfox_preference_keys.xml
@@ -4,6 +4,8 @@
pref_key_accessibility_enabled
+ pref_key_cache_enabled
+ pref_key_cache_ssl_enabled
pref_key_javascript_enabled
pref_key_jit_enabled
pref_key_wasm_enabled
diff --git a/patches/fenix-overlay/app/src/main/res/values/ironfox_strings.xml b/patches/fenix-overlay/app/src/main/res/values/ironfox_strings.xml
index d5bfc6d3..b701de02 100644
--- a/patches/fenix-overlay/app/src/main/res/values/ironfox_strings.xml
+++ b/patches/fenix-overlay/app/src/main/res/values/ironfox_strings.xml
@@ -10,6 +10,10 @@
Enable accessibility services
Enable to allow communication with accessibility services on your device.
+
+ Enable disk cache
+ Enable disk cache for secure webpages (HTTPS)
+
Enable Encrypted Media Extensions (EME)
Enable Widevine CDM
diff --git a/patches/ironfox-content-settings.patch b/patches/ironfox-content-settings.patch
index 1b9f1f02..5d115684 100644
--- a/patches/ironfox-content-settings.patch
+++ b/patches/ironfox-content-settings.patch
@@ -1,5 +1,5 @@
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt
-index 3885a06691..3a73cef122 100644
+index 3885a06691..63c041d16f 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt
@@ -23,6 +23,11 @@ import org.mozilla.fenix.ext.settings
@@ -14,11 +14,39 @@ index 3885a06691..3a73cef122 100644
/**
* Screen for managing settings related to site permissions and content defaults.
-@@ -40,6 +45,69 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
+@@ -40,6 +45,97 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
override fun onResume() {
super.onResume()
showToolbar(getString(R.string.preferences_site_settings))
+
++ val cacheEnabledPreference = requirePreference(
++ R.string.pref_key_cache_enabled,
++ )
++
++ cacheEnabledPreference.setOnPreferenceChangeListener { preference, cacheEnabled ->
++ val settings = preference.context.settings()
++ val components = preference.context.components
++
++ settings.cacheEnabled = cacheEnabled as Boolean
++ components.core.engine.settings.cacheEnabled = cacheEnabled
++
++ true
++ }
++
++ val cacheSslEnabledPreference = requirePreference(
++ R.string.pref_key_cache_ssl_enabled,
++ )
++
++ cacheSslEnabledPreference.setOnPreferenceChangeListener { preference, cacheSslEnabled ->
++ val settings = preference.context.settings()
++ val components = preference.context.components
++
++ settings.cacheSslEnabled = cacheSslEnabled as Boolean
++ components.core.engine.settings.cacheSslEnabled = cacheSslEnabled
++
++ true
++ }
++
+ val javascriptEnabledPreference = requirePreference(
+ R.string.pref_key_javascript_enabled,
+ )
@@ -84,7 +112,7 @@ index 3885a06691..3a73cef122 100644
setupPreferences()
}
-@@ -91,6 +159,12 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
+@@ -91,6 +187,12 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
navigateToPhoneFeature(phoneFeature)
true
}
@@ -97,7 +125,7 @@ index 3885a06691..3a73cef122 100644
}
private fun navigateToPhoneFeature(phoneFeature: PhoneFeature) {
-@@ -109,4 +183,8 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
+@@ -109,4 +211,8 @@ class SiteSettingsFragment : PreferenceFragmentCompat() {
)
}
}
@@ -107,13 +135,28 @@ index 3885a06691..3a73cef122 100644
+ }
}
diff --git a/mobile/android/fenix/app/src/main/res/xml/site_permissions_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/site_permissions_preferences.xml
-index ef1dcb4e6e..c727946701 100644
+index ef1dcb4e6e..bc15c8d611 100644
--- a/mobile/android/fenix/app/src/main/res/xml/site_permissions_preferences.xml
+++ b/mobile/android/fenix/app/src/main/res/xml/site_permissions_preferences.xml
-@@ -25,6 +25,30 @@
+@@ -25,6 +25,45 @@
android:title="@string/preference_feature_desktop_mode_default"
app:iconSpaceReserved="false" />
++
++
++
++
+ (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 9197b274db..1b9bf0c9fc 100644
+index 9197b274db..182a90ec05 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
-@@ -2463,6 +2463,66 @@ class Settings(private val appContext: Context) : PreferencesHolder {
+@@ -2463,6 +2463,76 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = false,
)
@@ -215,6 +217,16 @@ index 9197b274db..1b9bf0c9fc 100644
+ default = false,
+ )
+
++ var cacheEnabled by booleanPreference(
++ appContext.getPreferenceKey(R.string.pref_key_cache_enabled),
++ default = false,
++ )
++
++ var cacheSslEnabled by booleanPreference(
++ appContext.getPreferenceKey(R.string.pref_key_cache_ssl_enabled),
++ default = false,
++ )
++
+ var emeEnabled by booleanPreference(
+ appContext.getPreferenceKey(R.string.pref_key_eme_enabled),
+ default = false,
diff --git a/patches/ironfox-settings-gecko.patch b/patches/ironfox-settings-gecko.patch
index 7a89beac..36d67d35 100644
--- a/patches/ironfox-settings-gecko.patch
+++ b/patches/ironfox-settings-gecko.patch
@@ -1,8 +1,8 @@
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 1612c570be..491499153d 100644
+index 1612c570be..73d1ad302c 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
-@@ -1483,6 +1483,63 @@ class GeckoEngine(
+@@ -1483,6 +1483,71 @@ class GeckoEngine(
override var bannedPorts: String
get() = runtime.settings.bannedPorts
set(value) { runtime.settings.setBannedPorts(value) }
@@ -11,6 +11,14 @@ index 1612c570be..491499153d 100644
+ get() = runtime.settings.accessibilityEnabled
+ set(value) { runtime.settings.accessibilityEnabled = value }
+
++ override var cacheEnabled: Boolean
++ get() = runtime.settings.cacheEnabled
++ set(value) { runtime.settings.cacheEnabled = value }
++
++ override var cacheSslEnabled: Boolean
++ get() = runtime.settings.cacheSslEnabled
++ set(value) { runtime.settings.cacheSslEnabled = value }
++
+ override var emeEnabled: Boolean
+ get() = runtime.settings.emeEnabled
+ set(value) { runtime.settings.emeEnabled = value }
@@ -66,11 +74,13 @@ index 1612c570be..491499153d 100644
}.apply {
defaultSettings?.let {
this.javascriptEnabled = it.javascriptEnabled
-@@ -1527,6 +1584,19 @@ class GeckoEngine(
+@@ -1527,6 +1592,21 @@ class GeckoEngine(
this.postQuantumKeyExchangeEnabled = it.postQuantumKeyExchangeEnabled
this.dohAutoselectEnabled = it.dohAutoselectEnabled
this.bannedPorts = it.bannedPorts
+ this.accessibilityEnabled = it.accessibilityEnabled
++ this.cacheEnabled = it.cacheEnabled
++ this.cacheSslEnabled = it.cacheSslEnabled
+ this.emeEnabled = it.emeEnabled
+ this.javascriptJitBaselineEnabled = it.javascriptJitBaselineEnabled
+ this.javascriptJitBaselineWasmEnabled = it.javascriptJitBaselineWasmEnabled
@@ -87,15 +97,17 @@ index 1612c570be..491499153d 100644
}
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 24e8f76532..82a4ed2366 100644
+index 24e8f76532..31d5944166 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
-@@ -350,6 +350,20 @@ abstract class Settings {
+@@ -350,6 +350,22 @@ abstract class Settings {
* Comma-separated list of destination ports that the application should block connections to.
*/
open var bannedPorts: String by UnsupportedSetting()
+
+ open var accessibilityEnabled: Boolean by UnsupportedSetting()
++ open var cacheEnabled: Boolean by UnsupportedSetting()
++ open var cacheSslEnabled: Boolean by UnsupportedSetting()
+ open var emeEnabled: Boolean by UnsupportedSetting()
+ open var javascriptJitBaselineEnabled: Boolean by UnsupportedSetting()
+ open var javascriptJitBaselineWasmEnabled: Boolean by UnsupportedSetting()
@@ -111,11 +123,13 @@ index 24e8f76532..82a4ed2366 100644
}
/**
-@@ -420,6 +434,19 @@ data class DefaultSettings(
+@@ -420,6 +436,21 @@ data class DefaultSettings(
override var postQuantumKeyExchangeEnabled: Boolean? = null,
override var dohAutoselectEnabled: Boolean = false,
override var bannedPorts: String = "",
+ override var accessibilityEnabled: Boolean = false,
++ override var cacheEnabled: Boolean = false,
++ override var cacheSslEnabled: Boolean = false,
+ override var emeEnabled: Boolean = false,
+ override var javascriptJitBaselineEnabled: Boolean = false,
+ override var javascriptJitBaselineWasmEnabled: Boolean = false,
@@ -132,14 +146,16 @@ index 24e8f76532..82a4ed2366 100644
override val desktopModeEnabled: Boolean
get() = getDesktopMode()
diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt
-index a410550e60..5d43260bf0 100644
+index a410550e60..9ef46e6e81 100644
--- a/mobile/android/geckoview/api.txt
+++ b/mobile/android/geckoview/api.txt
-@@ -984,6 +984,19 @@ package org.mozilla.geckoview {
+@@ -984,6 +984,21 @@ package org.mozilla.geckoview {
method @Nullable public Integer getWebContentIsolationStrategy();
method public boolean getWebFontsEnabled();
method public boolean getWebManifestEnabled();
+ method public boolean getAccessibilityEnabled();
++ method public boolean getCacheEnabled();
++ method public boolean getCacheSslEnabled();
+ method public boolean getEmeEnabled();
+ method public boolean getJavaScriptJitBaselineEnabled();
+ method public boolean getJavaScriptJitBaselineWasmEnabled();
@@ -155,11 +171,13 @@ index a410550e60..5d43260bf0 100644
method @NonNull public GeckoRuntimeSettings setAboutConfigEnabled(boolean);
method @NonNull public GeckoRuntimeSettings setAllowInsecureConnections(int);
method @NonNull public GeckoRuntimeSettings setAutomaticFontSizeAdjustment(boolean);
-@@ -1030,6 +1043,19 @@ package org.mozilla.geckoview {
+@@ -1030,6 +1045,21 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings setWebContentIsolationStrategy(@NonNull Integer);
method @NonNull public GeckoRuntimeSettings setWebFontsEnabled(boolean);
method @NonNull public GeckoRuntimeSettings setWebManifestEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setAccessibilityEnabled(boolean);
++ method @NonNull public GeckoRuntimeSettings setCacheEnabled(boolean);
++ method @NonNull public GeckoRuntimeSettings setCacheSslEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setEmeEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setJavaScriptJitBaselineEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setJavaScriptJitBaselineWasmEnabled(boolean);
@@ -175,11 +193,13 @@ index a410550e60..5d43260bf0 100644
field public static final int ALLOW_ALL = 0;
field public static final int COLOR_SCHEME_DARK = 1;
field public static final int COLOR_SCHEME_LIGHT = 0;
-@@ -1093,6 +1119,19 @@ package org.mozilla.geckoview {
+@@ -1093,6 +1123,21 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings.Builder useMaxScreenDepth(boolean);
method @NonNull public GeckoRuntimeSettings.Builder webFontsEnabled(boolean);
method @NonNull public GeckoRuntimeSettings.Builder webManifest(boolean);
+ method @NonNull public GeckoRuntimeSettings.Builder accessibilityEnabled(boolean);
++ method @NonNull public GeckoRuntimeSettings.Builder cacheEnabled(boolean);
++ method @NonNull public GeckoRuntimeSettings.Builder cacheSslEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings.Builder emeEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings.Builder javaScriptJitBaselineEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings.Builder javaScriptJitBaselineWasmEnabled(boolean);
@@ -196,10 +216,10 @@ index a410550e60..5d43260bf0 100644
}
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 25ea09c3f6..8a9c4f27d0 100644
+index 25ea09c3f6..db79ee287e 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
-@@ -640,6 +640,71 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
+@@ -640,6 +640,81 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
getSettings().setSameDocumentNavigationOverridesLoadTypeForceDisable(uri);
return this;
}
@@ -209,6 +229,16 @@ index 25ea09c3f6..8a9c4f27d0 100644
+ return this;
+ }
+
++ public @NonNull Builder cacheEnabled(final boolean flag) {
++ getSettings().mCacheEnabled.set(flag);
++ return this;
++ }
++
++ public @NonNull Builder cacheSslEnabled(final boolean flag) {
++ getSettings().mCacheSslEnabled.set(flag);
++ return this;
++ }
++
+ public @NonNull Builder emeEnabled(final boolean flag) {
+ getSettings().mEmeEnabled.set(flag);
+ return this;
@@ -271,11 +301,13 @@ index 25ea09c3f6..8a9c4f27d0 100644
}
private GeckoRuntime mRuntime;
-@@ -766,6 +831,20 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
+@@ -766,6 +841,22 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
/* package */ String[] mRequestedLocales;
/* package */ ExperimentDelegate mExperimentDelegate;
+ /* package */ final Pref mAccessibilityEnabled = new Pref("accessibility.force_disabled", 1);
++ /* package */ final Pref mCacheEnabled = new Pref("browser.cache.disk.enable", false);
++ /* package */ final Pref mCacheSslEnabled = new Pref("browser.cache.disk_cache_ssl", false);
+ /* package */ final Pref mEmeEnabled = new Pref("media.eme.enabled", false);
+ /* package */ final Pref mJavaScriptJitBaselineEnabled = new Pref("javascript.options.baselinejit", false);
+ /* package */ final Pref mJavaScriptJitBaselineWasmEnabled = new Pref("javascript.options.wasm_baselinejit", false);
@@ -292,7 +324,7 @@ index 25ea09c3f6..8a9c4f27d0 100644
/**
* Attach and commit the settings to the given runtime.
*
-@@ -2206,6 +2285,123 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
+@@ -2206,6 +2297,141 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
return mSameDocumentNavigationOverridesLoadTypeForceDisable.get();
}
@@ -305,6 +337,24 @@ index 25ea09c3f6..8a9c4f27d0 100644
+ return this;
+ }
+
++ public boolean getCacheEnabled() {
++ return mCacheEnabled.get();
++ }
++
++ public @NonNull GeckoRuntimeSettings setCacheEnabled(final boolean flag) {
++ mCacheEnabled.commit(flag);
++ return this;
++ }
++
++ public boolean getCacheSslEnabled() {
++ return mCacheSslEnabled.get();
++ }
++
++ public @NonNull GeckoRuntimeSettings setCacheSslEnabled(final boolean flag) {
++ mCacheSslEnabled.commit(flag);
++ return this;
++ }
++
+ public boolean getEmeEnabled() {
+ return mEmeEnabled.get();
+ }