new setting: Zoom on All Websites

This commit is contained in:
Fabian Freund
2026-07-30 14:59:14 +02:00
parent da6a4e751e
commit 74c9d9c81b
12 changed files with 120 additions and 21 deletions
@@ -375,6 +375,12 @@ class EngineSettingsReplicationService
settings.inputAutoZoomEnabled,
);
}
if (previous.value?.forceUserScalableContent !=
settings.forceUserScalableContent) {
await _service.forceUserScalableContent(
settings.forceUserScalableContent,
);
}
// LNA Settings
if (previous.value?.lnaBlocking != settings.lnaBlocking) {
await _service.lnaBlocking(settings.lnaBlocking);
@@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider
}
String _$engineSettingsReplicationServiceHash() =>
r'41c07a48bbc90a90dd6f5a0bd48d55a3e02a1b64';
r'cceb6359fd11a1e570208615fde0e9cb5e5f7ba3';
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
void build();
@@ -62,6 +62,14 @@ const List<SettingsSectionDefinition> webContentSettingsSections = [
keywords: ['forms'],
child: _InputAutoZoomEnabledTile(),
),
SettingsEntryDefinition(
title: 'Zoom on All Websites',
subtitle:
'Allow pinch and zoom, even on websites that prevent this '
'gesture',
keywords: ['pinch', 'accessibility'],
child: _ForceUserScalableContentTile(),
),
],
),
SettingsSectionDefinition(
@@ -308,6 +316,36 @@ class _InputAutoZoomEnabledTile extends HookConsumerWidget {
}
}
class _ForceUserScalableContentTile extends HookConsumerWidget {
const _ForceUserScalableContentTile();
@override
Widget build(BuildContext context, WidgetRef ref) {
final forceUserScalableContent = ref.watch(
engineSettingsWithDefaultsProvider.select(
(s) => s.forceUserScalableContent,
),
);
return SwitchListTile.adaptive(
title: const Text('Zoom on All Websites'),
subtitle: const Text(
'Allow pinch and zoom, even on websites that prevent this gesture',
),
secondary: const Icon(MdiIcons.gesturePinch),
value: forceUserScalableContent,
onChanged: (value) async {
await ref
.read(saveEngineSettingsControllerProvider.notifier)
.save(
(currentSettings) =>
currentSettings.copyWith.forceUserScalableContent(value),
);
},
);
}
}
class _PdfViewerTile extends HookConsumerWidget {
const _PdfViewerTile();
@@ -122,6 +122,8 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool get fontInflationEnabled => super.fontInflationEnabled!;
@override
bool get inputAutoZoomEnabled => super.inputAutoZoomEnabled!;
@override
bool get forceUserScalableContent => super.forceUserScalableContent!;
// Process Isolation Settings (require app restart)
@override
@@ -223,6 +225,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
required super.screenWidthOverride,
required super.screenHeightOverride,
required super.inputAutoZoomEnabled,
required super.forceUserScalableContent,
required super.fissionEnabled,
required super.isolatedProcessEnabled,
required super.appZygoteProcessEnabled,
@@ -279,6 +282,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
super.screenWidthOverride,
super.screenHeightOverride,
bool? inputAutoZoomEnabled,
bool? forceUserScalableContent,
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
@@ -349,6 +353,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
fontSizeFactor: fontSizeFactor ?? 1.0,
fontInflationEnabled: fontInflationEnabled ?? false,
inputAutoZoomEnabled: inputAutoZoomEnabled ?? true,
forceUserScalableContent: forceUserScalableContent ?? false,
fissionEnabled: fissionEnabled ?? true,
isolatedProcessEnabled: isolatedProcessEnabled ?? false,
appZygoteProcessEnabled: appZygoteProcessEnabled ?? false,
@@ -432,6 +437,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
screenWidthOverride,
screenHeightOverride,
inputAutoZoomEnabled,
forceUserScalableContent,
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
@@ -125,6 +125,8 @@ abstract class _$EngineSettingsCWProxy {
EngineSettings inputAutoZoomEnabled(bool? inputAutoZoomEnabled);
EngineSettings forceUserScalableContent(bool? forceUserScalableContent);
EngineSettings fissionEnabled(bool? fissionEnabled);
EngineSettings isolatedProcessEnabled(bool? isolatedProcessEnabled);
@@ -193,6 +195,7 @@ abstract class _$EngineSettingsCWProxy {
int? screenWidthOverride,
int? screenHeightOverride,
bool? inputAutoZoomEnabled,
bool? forceUserScalableContent,
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
@@ -416,6 +419,10 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
EngineSettings inputAutoZoomEnabled(bool? inputAutoZoomEnabled) =>
call(inputAutoZoomEnabled: inputAutoZoomEnabled);
@override
EngineSettings forceUserScalableContent(bool? forceUserScalableContent) =>
call(forceUserScalableContent: forceUserScalableContent);
@override
EngineSettings fissionEnabled(bool? fissionEnabled) =>
call(fissionEnabled: fissionEnabled);
@@ -500,6 +507,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
Object? screenWidthOverride = const $CopyWithPlaceholder(),
Object? screenHeightOverride = const $CopyWithPlaceholder(),
Object? inputAutoZoomEnabled = const $CopyWithPlaceholder(),
Object? forceUserScalableContent = const $CopyWithPlaceholder(),
Object? fissionEnabled = const $CopyWithPlaceholder(),
Object? isolatedProcessEnabled = const $CopyWithPlaceholder(),
Object? appZygoteProcessEnabled = const $CopyWithPlaceholder(),
@@ -731,6 +739,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
? _value.inputAutoZoomEnabled
// ignore: cast_nullable_to_non_nullable
: inputAutoZoomEnabled as bool?,
forceUserScalableContent:
forceUserScalableContent == const $CopyWithPlaceholder()
? _value.forceUserScalableContent
// ignore: cast_nullable_to_non_nullable
: forceUserScalableContent as bool?,
fissionEnabled: fissionEnabled == const $CopyWithPlaceholder()
? _value.fissionEnabled
// ignore: cast_nullable_to_non_nullable
@@ -874,6 +887,7 @@ EngineSettings _$EngineSettingsFromJson(
screenWidthOverride: (json['screenWidthOverride'] as num?)?.toInt(),
screenHeightOverride: (json['screenHeightOverride'] as num?)?.toInt(),
inputAutoZoomEnabled: json['inputAutoZoomEnabled'] as bool?,
forceUserScalableContent: json['forceUserScalableContent'] as bool?,
fissionEnabled: json['fissionEnabled'] as bool?,
isolatedProcessEnabled: json['isolatedProcessEnabled'] as bool?,
appZygoteProcessEnabled: json['appZygoteProcessEnabled'] as bool?,
@@ -935,6 +949,7 @@ Map<String, dynamic> _$EngineSettingsToJson(
'fontSizeFactor': instance.fontSizeFactor,
'fontInflationEnabled': instance.fontInflationEnabled,
'inputAutoZoomEnabled': instance.inputAutoZoomEnabled,
'forceUserScalableContent': instance.forceUserScalableContent,
'fissionEnabled': instance.fissionEnabled,
'isolatedProcessEnabled': instance.isolatedProcessEnabled,
'appZygoteProcessEnabled': instance.appZygoteProcessEnabled,
@@ -214,6 +214,8 @@ class EngineSettingsRepository extends _$EngineSettingsRepository {
DriftSqlType.bool,
db.typeMapping,
),
'forceUserScalableContent': settings['forceUserScalableContent']
?.readAs(DriftSqlType.bool, db.typeMapping),
// Process Isolation Settings
'fissionEnabled': settings['fissionEnabled']?.readAs(
DriftSqlType.bool,
@@ -34,7 +34,7 @@ final class EngineSettingsRepositoryProvider
}
String _$engineSettingsRepositoryHash() =>
r'db077d5aa6a7aec5cdb019308cc942079567bab9';
r'1442aa09d8f77bacaed9265e59c16dc555c74b16';
abstract class _$EngineSettingsRepository
extends $StreamNotifier<EngineSettings> {
@@ -300,6 +300,9 @@ class GeckoEngineSettingsApiImpl(
if(settings.inputAutoZoomEnabled != null) {
components.core.runtime.settings.inputAutoZoomEnabled = settings.inputAutoZoomEnabled
}
if(settings.forceUserScalableContent != null) {
components.core.engineSettings.forceUserScalableContent = settings.forceUserScalableContent
}
// LNA Settings
if(settings.lnaBlocking != null) {
@@ -405,6 +408,9 @@ class GeckoEngineSettingsApiImpl(
components.core.engine.settings.fontInflationEnabled = components.core.engineSettings.fontInflationEnabled
reloadSession = true
}
if(settings.forceUserScalableContent != null) {
components.core.engine.settings.forceUserScalableContent = components.core.engineSettings.forceUserScalableContent
}
// LNA settings
if(settings.lnaEnabled != null) {
components.core.engine.settings.lnaFeatureEnabled = components.core.engineSettings.lnaFeatureEnabled
@@ -3634,6 +3634,11 @@ data class GeckoEngineSettings (
val screenWidthOverride: Long? = null,
val screenHeightOverride: Long? = null,
val inputAutoZoomEnabled: Boolean? = null,
/**
* Forces pinch-to-zoom to work even on websites that set
* `user-scalable=no` (or a restrictive `maximum-scale`) on the viewport.
*/
val forceUserScalableContent: Boolean? = null,
val fissionEnabled: Boolean? = null,
val isolatedProcessEnabled: Boolean? = null,
val appZygoteProcessEnabled: Boolean? = null,
@@ -3682,14 +3687,15 @@ data class GeckoEngineSettings (
val screenWidthOverride = pigeonVar_list[34] as Long?
val screenHeightOverride = pigeonVar_list[35] as Long?
val inputAutoZoomEnabled = pigeonVar_list[36] as Boolean?
val fissionEnabled = pigeonVar_list[37] as Boolean?
val isolatedProcessEnabled = pigeonVar_list[38] as Boolean?
val appZygoteProcessEnabled = pigeonVar_list[39] as Boolean?
val extensionsWebAPIEnabled = pigeonVar_list[40] as Boolean?
val lnaBlocking = pigeonVar_list[41] as Boolean?
val lnaBlockTrackers = pigeonVar_list[42] as Boolean?
val lnaEnabled = pigeonVar_list[43] as Boolean?
return GeckoEngineSettings(javascriptEnabled, trackingProtectionPolicy, httpsOnlyMode, globalPrivacyControlEnabled, preferredColorScheme, cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy, userAgent, contentBlocking, enterpriseRootsEnabled, dohSettings, fingerprintingProtectionOverrides, locales, useContentBlockingDatabase, blockCookies, customCookiePolicy, blockTrackingContent, trackingContentScope, blockCryptominers, blockFingerprinters, blockRedirectTrackers, blockSuspectedFingerprinters, suspectedFingerprintersScope, allowListBaseline, allowListConvenience, blockAdsAnalyticsSocialTrackers, webFontsEnabled, automaticFontSizeAdjustment, fontSizeFactor, fontInflationEnabled, displayDensityOverride, screenWidthOverride, screenHeightOverride, inputAutoZoomEnabled, fissionEnabled, isolatedProcessEnabled, appZygoteProcessEnabled, extensionsWebAPIEnabled, lnaBlocking, lnaBlockTrackers, lnaEnabled)
val forceUserScalableContent = pigeonVar_list[37] as Boolean?
val fissionEnabled = pigeonVar_list[38] as Boolean?
val isolatedProcessEnabled = pigeonVar_list[39] as Boolean?
val appZygoteProcessEnabled = pigeonVar_list[40] as Boolean?
val extensionsWebAPIEnabled = pigeonVar_list[41] as Boolean?
val lnaBlocking = pigeonVar_list[42] as Boolean?
val lnaBlockTrackers = pigeonVar_list[43] as Boolean?
val lnaEnabled = pigeonVar_list[44] as Boolean?
return GeckoEngineSettings(javascriptEnabled, trackingProtectionPolicy, httpsOnlyMode, globalPrivacyControlEnabled, preferredColorScheme, cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy, userAgent, contentBlocking, enterpriseRootsEnabled, dohSettings, fingerprintingProtectionOverrides, locales, useContentBlockingDatabase, blockCookies, customCookiePolicy, blockTrackingContent, trackingContentScope, blockCryptominers, blockFingerprinters, blockRedirectTrackers, blockSuspectedFingerprinters, suspectedFingerprintersScope, allowListBaseline, allowListConvenience, blockAdsAnalyticsSocialTrackers, webFontsEnabled, automaticFontSizeAdjustment, fontSizeFactor, fontInflationEnabled, displayDensityOverride, screenWidthOverride, screenHeightOverride, inputAutoZoomEnabled, forceUserScalableContent, fissionEnabled, isolatedProcessEnabled, appZygoteProcessEnabled, extensionsWebAPIEnabled, lnaBlocking, lnaBlockTrackers, lnaEnabled)
}
}
fun toList(): List<Any?> {
@@ -3731,6 +3737,7 @@ data class GeckoEngineSettings (
screenWidthOverride,
screenHeightOverride,
inputAutoZoomEnabled,
forceUserScalableContent,
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
@@ -3748,7 +3755,7 @@ data class GeckoEngineSettings (
return true
}
val other = other as GeckoEngineSettings
return GeckoPigeonUtils.deepEquals(this.javascriptEnabled, other.javascriptEnabled) && GeckoPigeonUtils.deepEquals(this.trackingProtectionPolicy, other.trackingProtectionPolicy) && GeckoPigeonUtils.deepEquals(this.httpsOnlyMode, other.httpsOnlyMode) && GeckoPigeonUtils.deepEquals(this.globalPrivacyControlEnabled, other.globalPrivacyControlEnabled) && GeckoPigeonUtils.deepEquals(this.preferredColorScheme, other.preferredColorScheme) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingMode, other.cookieBannerHandlingMode) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingModePrivateBrowsing, other.cookieBannerHandlingModePrivateBrowsing) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingGlobalRules, other.cookieBannerHandlingGlobalRules) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingGlobalRulesSubFrames, other.cookieBannerHandlingGlobalRulesSubFrames) && GeckoPigeonUtils.deepEquals(this.webContentIsolationStrategy, other.webContentIsolationStrategy) && GeckoPigeonUtils.deepEquals(this.userAgent, other.userAgent) && GeckoPigeonUtils.deepEquals(this.contentBlocking, other.contentBlocking) && GeckoPigeonUtils.deepEquals(this.enterpriseRootsEnabled, other.enterpriseRootsEnabled) && GeckoPigeonUtils.deepEquals(this.dohSettings, other.dohSettings) && GeckoPigeonUtils.deepEquals(this.fingerprintingProtectionOverrides, other.fingerprintingProtectionOverrides) && GeckoPigeonUtils.deepEquals(this.locales, other.locales) && GeckoPigeonUtils.deepEquals(this.useContentBlockingDatabase, other.useContentBlockingDatabase) && GeckoPigeonUtils.deepEquals(this.blockCookies, other.blockCookies) && GeckoPigeonUtils.deepEquals(this.customCookiePolicy, other.customCookiePolicy) && GeckoPigeonUtils.deepEquals(this.blockTrackingContent, other.blockTrackingContent) && GeckoPigeonUtils.deepEquals(this.trackingContentScope, other.trackingContentScope) && GeckoPigeonUtils.deepEquals(this.blockCryptominers, other.blockCryptominers) && GeckoPigeonUtils.deepEquals(this.blockFingerprinters, other.blockFingerprinters) && GeckoPigeonUtils.deepEquals(this.blockRedirectTrackers, other.blockRedirectTrackers) && GeckoPigeonUtils.deepEquals(this.blockSuspectedFingerprinters, other.blockSuspectedFingerprinters) && GeckoPigeonUtils.deepEquals(this.suspectedFingerprintersScope, other.suspectedFingerprintersScope) && GeckoPigeonUtils.deepEquals(this.allowListBaseline, other.allowListBaseline) && GeckoPigeonUtils.deepEquals(this.allowListConvenience, other.allowListConvenience) && GeckoPigeonUtils.deepEquals(this.blockAdsAnalyticsSocialTrackers, other.blockAdsAnalyticsSocialTrackers) && GeckoPigeonUtils.deepEquals(this.webFontsEnabled, other.webFontsEnabled) && GeckoPigeonUtils.deepEquals(this.automaticFontSizeAdjustment, other.automaticFontSizeAdjustment) && GeckoPigeonUtils.deepEquals(this.fontSizeFactor, other.fontSizeFactor) && GeckoPigeonUtils.deepEquals(this.fontInflationEnabled, other.fontInflationEnabled) && GeckoPigeonUtils.deepEquals(this.displayDensityOverride, other.displayDensityOverride) && GeckoPigeonUtils.deepEquals(this.screenWidthOverride, other.screenWidthOverride) && GeckoPigeonUtils.deepEquals(this.screenHeightOverride, other.screenHeightOverride) && GeckoPigeonUtils.deepEquals(this.inputAutoZoomEnabled, other.inputAutoZoomEnabled) && GeckoPigeonUtils.deepEquals(this.fissionEnabled, other.fissionEnabled) && GeckoPigeonUtils.deepEquals(this.isolatedProcessEnabled, other.isolatedProcessEnabled) && GeckoPigeonUtils.deepEquals(this.appZygoteProcessEnabled, other.appZygoteProcessEnabled) && GeckoPigeonUtils.deepEquals(this.extensionsWebAPIEnabled, other.extensionsWebAPIEnabled) && GeckoPigeonUtils.deepEquals(this.lnaBlocking, other.lnaBlocking) && GeckoPigeonUtils.deepEquals(this.lnaBlockTrackers, other.lnaBlockTrackers) && GeckoPigeonUtils.deepEquals(this.lnaEnabled, other.lnaEnabled)
return GeckoPigeonUtils.deepEquals(this.javascriptEnabled, other.javascriptEnabled) && GeckoPigeonUtils.deepEquals(this.trackingProtectionPolicy, other.trackingProtectionPolicy) && GeckoPigeonUtils.deepEquals(this.httpsOnlyMode, other.httpsOnlyMode) && GeckoPigeonUtils.deepEquals(this.globalPrivacyControlEnabled, other.globalPrivacyControlEnabled) && GeckoPigeonUtils.deepEquals(this.preferredColorScheme, other.preferredColorScheme) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingMode, other.cookieBannerHandlingMode) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingModePrivateBrowsing, other.cookieBannerHandlingModePrivateBrowsing) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingGlobalRules, other.cookieBannerHandlingGlobalRules) && GeckoPigeonUtils.deepEquals(this.cookieBannerHandlingGlobalRulesSubFrames, other.cookieBannerHandlingGlobalRulesSubFrames) && GeckoPigeonUtils.deepEquals(this.webContentIsolationStrategy, other.webContentIsolationStrategy) && GeckoPigeonUtils.deepEquals(this.userAgent, other.userAgent) && GeckoPigeonUtils.deepEquals(this.contentBlocking, other.contentBlocking) && GeckoPigeonUtils.deepEquals(this.enterpriseRootsEnabled, other.enterpriseRootsEnabled) && GeckoPigeonUtils.deepEquals(this.dohSettings, other.dohSettings) && GeckoPigeonUtils.deepEquals(this.fingerprintingProtectionOverrides, other.fingerprintingProtectionOverrides) && GeckoPigeonUtils.deepEquals(this.locales, other.locales) && GeckoPigeonUtils.deepEquals(this.useContentBlockingDatabase, other.useContentBlockingDatabase) && GeckoPigeonUtils.deepEquals(this.blockCookies, other.blockCookies) && GeckoPigeonUtils.deepEquals(this.customCookiePolicy, other.customCookiePolicy) && GeckoPigeonUtils.deepEquals(this.blockTrackingContent, other.blockTrackingContent) && GeckoPigeonUtils.deepEquals(this.trackingContentScope, other.trackingContentScope) && GeckoPigeonUtils.deepEquals(this.blockCryptominers, other.blockCryptominers) && GeckoPigeonUtils.deepEquals(this.blockFingerprinters, other.blockFingerprinters) && GeckoPigeonUtils.deepEquals(this.blockRedirectTrackers, other.blockRedirectTrackers) && GeckoPigeonUtils.deepEquals(this.blockSuspectedFingerprinters, other.blockSuspectedFingerprinters) && GeckoPigeonUtils.deepEquals(this.suspectedFingerprintersScope, other.suspectedFingerprintersScope) && GeckoPigeonUtils.deepEquals(this.allowListBaseline, other.allowListBaseline) && GeckoPigeonUtils.deepEquals(this.allowListConvenience, other.allowListConvenience) && GeckoPigeonUtils.deepEquals(this.blockAdsAnalyticsSocialTrackers, other.blockAdsAnalyticsSocialTrackers) && GeckoPigeonUtils.deepEquals(this.webFontsEnabled, other.webFontsEnabled) && GeckoPigeonUtils.deepEquals(this.automaticFontSizeAdjustment, other.automaticFontSizeAdjustment) && GeckoPigeonUtils.deepEquals(this.fontSizeFactor, other.fontSizeFactor) && GeckoPigeonUtils.deepEquals(this.fontInflationEnabled, other.fontInflationEnabled) && GeckoPigeonUtils.deepEquals(this.displayDensityOverride, other.displayDensityOverride) && GeckoPigeonUtils.deepEquals(this.screenWidthOverride, other.screenWidthOverride) && GeckoPigeonUtils.deepEquals(this.screenHeightOverride, other.screenHeightOverride) && GeckoPigeonUtils.deepEquals(this.inputAutoZoomEnabled, other.inputAutoZoomEnabled) && GeckoPigeonUtils.deepEquals(this.forceUserScalableContent, other.forceUserScalableContent) && GeckoPigeonUtils.deepEquals(this.fissionEnabled, other.fissionEnabled) && GeckoPigeonUtils.deepEquals(this.isolatedProcessEnabled, other.isolatedProcessEnabled) && GeckoPigeonUtils.deepEquals(this.appZygoteProcessEnabled, other.appZygoteProcessEnabled) && GeckoPigeonUtils.deepEquals(this.extensionsWebAPIEnabled, other.extensionsWebAPIEnabled) && GeckoPigeonUtils.deepEquals(this.lnaBlocking, other.lnaBlocking) && GeckoPigeonUtils.deepEquals(this.lnaBlockTrackers, other.lnaBlockTrackers) && GeckoPigeonUtils.deepEquals(this.lnaEnabled, other.lnaEnabled)
}
override fun hashCode(): Int {
@@ -3790,6 +3797,7 @@ data class GeckoEngineSettings (
result = 31 * result + GeckoPigeonUtils.deepHash(this.screenWidthOverride)
result = 31 * result + GeckoPigeonUtils.deepHash(this.screenHeightOverride)
result = 31 * result + GeckoPigeonUtils.deepHash(this.inputAutoZoomEnabled)
result = 31 * result + GeckoPigeonUtils.deepHash(this.forceUserScalableContent)
result = 31 * result + GeckoPigeonUtils.deepHash(this.fissionEnabled)
result = 31 * result + GeckoPigeonUtils.deepHash(this.isolatedProcessEnabled)
result = 31 * result + GeckoPigeonUtils.deepHash(this.appZygoteProcessEnabled)
@@ -3800,7 +3808,7 @@ data class GeckoEngineSettings (
return result
}
override fun toString(): String {
return "GeckoEngineSettings(javascriptEnabled=$javascriptEnabled, trackingProtectionPolicy=$trackingProtectionPolicy, httpsOnlyMode=$httpsOnlyMode, globalPrivacyControlEnabled=$globalPrivacyControlEnabled, preferredColorScheme=$preferredColorScheme, cookieBannerHandlingMode=$cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing=$cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules=$cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames=$cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy=$webContentIsolationStrategy, userAgent=$userAgent, contentBlocking=$contentBlocking, enterpriseRootsEnabled=$enterpriseRootsEnabled, dohSettings=$dohSettings, fingerprintingProtectionOverrides=$fingerprintingProtectionOverrides, locales=$locales, useContentBlockingDatabase=$useContentBlockingDatabase, blockCookies=$blockCookies, customCookiePolicy=$customCookiePolicy, blockTrackingContent=$blockTrackingContent, trackingContentScope=$trackingContentScope, blockCryptominers=$blockCryptominers, blockFingerprinters=$blockFingerprinters, blockRedirectTrackers=$blockRedirectTrackers, blockSuspectedFingerprinters=$blockSuspectedFingerprinters, suspectedFingerprintersScope=$suspectedFingerprintersScope, allowListBaseline=$allowListBaseline, allowListConvenience=$allowListConvenience, blockAdsAnalyticsSocialTrackers=$blockAdsAnalyticsSocialTrackers, webFontsEnabled=$webFontsEnabled, automaticFontSizeAdjustment=$automaticFontSizeAdjustment, fontSizeFactor=$fontSizeFactor, fontInflationEnabled=$fontInflationEnabled, displayDensityOverride=$displayDensityOverride, screenWidthOverride=$screenWidthOverride, screenHeightOverride=$screenHeightOverride, inputAutoZoomEnabled=$inputAutoZoomEnabled, fissionEnabled=$fissionEnabled, isolatedProcessEnabled=$isolatedProcessEnabled, appZygoteProcessEnabled=$appZygoteProcessEnabled, extensionsWebAPIEnabled=$extensionsWebAPIEnabled, lnaBlocking=$lnaBlocking, lnaBlockTrackers=$lnaBlockTrackers, lnaEnabled=$lnaEnabled)"
return "GeckoEngineSettings(javascriptEnabled=$javascriptEnabled, trackingProtectionPolicy=$trackingProtectionPolicy, httpsOnlyMode=$httpsOnlyMode, globalPrivacyControlEnabled=$globalPrivacyControlEnabled, preferredColorScheme=$preferredColorScheme, cookieBannerHandlingMode=$cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing=$cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules=$cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames=$cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy=$webContentIsolationStrategy, userAgent=$userAgent, contentBlocking=$contentBlocking, enterpriseRootsEnabled=$enterpriseRootsEnabled, dohSettings=$dohSettings, fingerprintingProtectionOverrides=$fingerprintingProtectionOverrides, locales=$locales, useContentBlockingDatabase=$useContentBlockingDatabase, blockCookies=$blockCookies, customCookiePolicy=$customCookiePolicy, blockTrackingContent=$blockTrackingContent, trackingContentScope=$trackingContentScope, blockCryptominers=$blockCryptominers, blockFingerprinters=$blockFingerprinters, blockRedirectTrackers=$blockRedirectTrackers, blockSuspectedFingerprinters=$blockSuspectedFingerprinters, suspectedFingerprintersScope=$suspectedFingerprintersScope, allowListBaseline=$allowListBaseline, allowListConvenience=$allowListConvenience, blockAdsAnalyticsSocialTrackers=$blockAdsAnalyticsSocialTrackers, webFontsEnabled=$webFontsEnabled, automaticFontSizeAdjustment=$automaticFontSizeAdjustment, fontSizeFactor=$fontSizeFactor, fontInflationEnabled=$fontInflationEnabled, displayDensityOverride=$displayDensityOverride, screenWidthOverride=$screenWidthOverride, screenHeightOverride=$screenHeightOverride, inputAutoZoomEnabled=$inputAutoZoomEnabled, forceUserScalableContent=$forceUserScalableContent, fissionEnabled=$fissionEnabled, isolatedProcessEnabled=$isolatedProcessEnabled, appZygoteProcessEnabled=$appZygoteProcessEnabled, extensionsWebAPIEnabled=$extensionsWebAPIEnabled, lnaBlocking=$lnaBlocking, lnaBlockTrackers=$lnaBlockTrackers, lnaEnabled=$lnaEnabled)"
}
}
@@ -176,6 +176,12 @@ class GeckoEngineSettingsService {
);
}
Future<void> forceUserScalableContent(bool state) {
return _api.updateRuntimeSettings(
GeckoEngineSettings(forceUserScalableContent: state),
);
}
// LNA Settings
Future<void> lnaBlocking(bool? state) {
return _api.updateRuntimeSettings(GeckoEngineSettings(lnaBlocking: state));
@@ -3739,6 +3739,7 @@ class GeckoEngineSettings {
this.screenWidthOverride,
this.screenHeightOverride,
this.inputAutoZoomEnabled,
this.forceUserScalableContent,
this.fissionEnabled,
this.isolatedProcessEnabled,
this.appZygoteProcessEnabled,
@@ -3837,6 +3838,10 @@ class GeckoEngineSettings {
bool? inputAutoZoomEnabled;
/// Forces pinch-to-zoom to work even on websites that set
/// `user-scalable=no` (or a restrictive `maximum-scale`) on the viewport.
bool? forceUserScalableContent;
bool? fissionEnabled;
bool? isolatedProcessEnabled;
@@ -3890,6 +3895,7 @@ class GeckoEngineSettings {
screenWidthOverride,
screenHeightOverride,
inputAutoZoomEnabled,
forceUserScalableContent,
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
@@ -3943,13 +3949,14 @@ class GeckoEngineSettings {
screenWidthOverride: result[34] as int?,
screenHeightOverride: result[35] as int?,
inputAutoZoomEnabled: result[36] as bool?,
fissionEnabled: result[37] as bool?,
isolatedProcessEnabled: result[38] as bool?,
appZygoteProcessEnabled: result[39] as bool?,
extensionsWebAPIEnabled: result[40] as bool?,
lnaBlocking: result[41] as bool?,
lnaBlockTrackers: result[42] as bool?,
lnaEnabled: result[43] as bool?,
forceUserScalableContent: result[37] as bool?,
fissionEnabled: result[38] as bool?,
isolatedProcessEnabled: result[39] as bool?,
appZygoteProcessEnabled: result[40] as bool?,
extensionsWebAPIEnabled: result[41] as bool?,
lnaBlocking: result[42] as bool?,
lnaBlockTrackers: result[43] as bool?,
lnaEnabled: result[44] as bool?,
);
}
@@ -3962,7 +3969,7 @@ class GeckoEngineSettings {
if (identical(this, other)) {
return true;
}
return _deepEquals(javascriptEnabled, other.javascriptEnabled) && _deepEquals(trackingProtectionPolicy, other.trackingProtectionPolicy) && _deepEquals(httpsOnlyMode, other.httpsOnlyMode) && _deepEquals(globalPrivacyControlEnabled, other.globalPrivacyControlEnabled) && _deepEquals(preferredColorScheme, other.preferredColorScheme) && _deepEquals(cookieBannerHandlingMode, other.cookieBannerHandlingMode) && _deepEquals(cookieBannerHandlingModePrivateBrowsing, other.cookieBannerHandlingModePrivateBrowsing) && _deepEquals(cookieBannerHandlingGlobalRules, other.cookieBannerHandlingGlobalRules) && _deepEquals(cookieBannerHandlingGlobalRulesSubFrames, other.cookieBannerHandlingGlobalRulesSubFrames) && _deepEquals(webContentIsolationStrategy, other.webContentIsolationStrategy) && _deepEquals(userAgent, other.userAgent) && _deepEquals(contentBlocking, other.contentBlocking) && _deepEquals(enterpriseRootsEnabled, other.enterpriseRootsEnabled) && _deepEquals(dohSettings, other.dohSettings) && _deepEquals(fingerprintingProtectionOverrides, other.fingerprintingProtectionOverrides) && _deepEquals(locales, other.locales) && _deepEquals(useContentBlockingDatabase, other.useContentBlockingDatabase) && _deepEquals(blockCookies, other.blockCookies) && _deepEquals(customCookiePolicy, other.customCookiePolicy) && _deepEquals(blockTrackingContent, other.blockTrackingContent) && _deepEquals(trackingContentScope, other.trackingContentScope) && _deepEquals(blockCryptominers, other.blockCryptominers) && _deepEquals(blockFingerprinters, other.blockFingerprinters) && _deepEquals(blockRedirectTrackers, other.blockRedirectTrackers) && _deepEquals(blockSuspectedFingerprinters, other.blockSuspectedFingerprinters) && _deepEquals(suspectedFingerprintersScope, other.suspectedFingerprintersScope) && _deepEquals(allowListBaseline, other.allowListBaseline) && _deepEquals(allowListConvenience, other.allowListConvenience) && _deepEquals(blockAdsAnalyticsSocialTrackers, other.blockAdsAnalyticsSocialTrackers) && _deepEquals(webFontsEnabled, other.webFontsEnabled) && _deepEquals(automaticFontSizeAdjustment, other.automaticFontSizeAdjustment) && _deepEquals(fontSizeFactor, other.fontSizeFactor) && _deepEquals(fontInflationEnabled, other.fontInflationEnabled) && _deepEquals(displayDensityOverride, other.displayDensityOverride) && _deepEquals(screenWidthOverride, other.screenWidthOverride) && _deepEquals(screenHeightOverride, other.screenHeightOverride) && _deepEquals(inputAutoZoomEnabled, other.inputAutoZoomEnabled) && _deepEquals(fissionEnabled, other.fissionEnabled) && _deepEquals(isolatedProcessEnabled, other.isolatedProcessEnabled) && _deepEquals(appZygoteProcessEnabled, other.appZygoteProcessEnabled) && _deepEquals(extensionsWebAPIEnabled, other.extensionsWebAPIEnabled) && _deepEquals(lnaBlocking, other.lnaBlocking) && _deepEquals(lnaBlockTrackers, other.lnaBlockTrackers) && _deepEquals(lnaEnabled, other.lnaEnabled);
return _deepEquals(javascriptEnabled, other.javascriptEnabled) && _deepEquals(trackingProtectionPolicy, other.trackingProtectionPolicy) && _deepEquals(httpsOnlyMode, other.httpsOnlyMode) && _deepEquals(globalPrivacyControlEnabled, other.globalPrivacyControlEnabled) && _deepEquals(preferredColorScheme, other.preferredColorScheme) && _deepEquals(cookieBannerHandlingMode, other.cookieBannerHandlingMode) && _deepEquals(cookieBannerHandlingModePrivateBrowsing, other.cookieBannerHandlingModePrivateBrowsing) && _deepEquals(cookieBannerHandlingGlobalRules, other.cookieBannerHandlingGlobalRules) && _deepEquals(cookieBannerHandlingGlobalRulesSubFrames, other.cookieBannerHandlingGlobalRulesSubFrames) && _deepEquals(webContentIsolationStrategy, other.webContentIsolationStrategy) && _deepEquals(userAgent, other.userAgent) && _deepEquals(contentBlocking, other.contentBlocking) && _deepEquals(enterpriseRootsEnabled, other.enterpriseRootsEnabled) && _deepEquals(dohSettings, other.dohSettings) && _deepEquals(fingerprintingProtectionOverrides, other.fingerprintingProtectionOverrides) && _deepEquals(locales, other.locales) && _deepEquals(useContentBlockingDatabase, other.useContentBlockingDatabase) && _deepEquals(blockCookies, other.blockCookies) && _deepEquals(customCookiePolicy, other.customCookiePolicy) && _deepEquals(blockTrackingContent, other.blockTrackingContent) && _deepEquals(trackingContentScope, other.trackingContentScope) && _deepEquals(blockCryptominers, other.blockCryptominers) && _deepEquals(blockFingerprinters, other.blockFingerprinters) && _deepEquals(blockRedirectTrackers, other.blockRedirectTrackers) && _deepEquals(blockSuspectedFingerprinters, other.blockSuspectedFingerprinters) && _deepEquals(suspectedFingerprintersScope, other.suspectedFingerprintersScope) && _deepEquals(allowListBaseline, other.allowListBaseline) && _deepEquals(allowListConvenience, other.allowListConvenience) && _deepEquals(blockAdsAnalyticsSocialTrackers, other.blockAdsAnalyticsSocialTrackers) && _deepEquals(webFontsEnabled, other.webFontsEnabled) && _deepEquals(automaticFontSizeAdjustment, other.automaticFontSizeAdjustment) && _deepEquals(fontSizeFactor, other.fontSizeFactor) && _deepEquals(fontInflationEnabled, other.fontInflationEnabled) && _deepEquals(displayDensityOverride, other.displayDensityOverride) && _deepEquals(screenWidthOverride, other.screenWidthOverride) && _deepEquals(screenHeightOverride, other.screenHeightOverride) && _deepEquals(inputAutoZoomEnabled, other.inputAutoZoomEnabled) && _deepEquals(forceUserScalableContent, other.forceUserScalableContent) && _deepEquals(fissionEnabled, other.fissionEnabled) && _deepEquals(isolatedProcessEnabled, other.isolatedProcessEnabled) && _deepEquals(appZygoteProcessEnabled, other.appZygoteProcessEnabled) && _deepEquals(extensionsWebAPIEnabled, other.extensionsWebAPIEnabled) && _deepEquals(lnaBlocking, other.lnaBlocking) && _deepEquals(lnaBlockTrackers, other.lnaBlockTrackers) && _deepEquals(lnaEnabled, other.lnaEnabled);
}
@override
@@ -3971,7 +3978,7 @@ class GeckoEngineSettings {
@override
String toString() {
return 'GeckoEngineSettings(javascriptEnabled: $javascriptEnabled, trackingProtectionPolicy: $trackingProtectionPolicy, httpsOnlyMode: $httpsOnlyMode, globalPrivacyControlEnabled: $globalPrivacyControlEnabled, preferredColorScheme: $preferredColorScheme, cookieBannerHandlingMode: $cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing: $cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules: $cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames: $cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy: $webContentIsolationStrategy, userAgent: $userAgent, contentBlocking: $contentBlocking, enterpriseRootsEnabled: $enterpriseRootsEnabled, dohSettings: $dohSettings, fingerprintingProtectionOverrides: $fingerprintingProtectionOverrides, locales: $locales, useContentBlockingDatabase: $useContentBlockingDatabase, blockCookies: $blockCookies, customCookiePolicy: $customCookiePolicy, blockTrackingContent: $blockTrackingContent, trackingContentScope: $trackingContentScope, blockCryptominers: $blockCryptominers, blockFingerprinters: $blockFingerprinters, blockRedirectTrackers: $blockRedirectTrackers, blockSuspectedFingerprinters: $blockSuspectedFingerprinters, suspectedFingerprintersScope: $suspectedFingerprintersScope, allowListBaseline: $allowListBaseline, allowListConvenience: $allowListConvenience, blockAdsAnalyticsSocialTrackers: $blockAdsAnalyticsSocialTrackers, webFontsEnabled: $webFontsEnabled, automaticFontSizeAdjustment: $automaticFontSizeAdjustment, fontSizeFactor: $fontSizeFactor, fontInflationEnabled: $fontInflationEnabled, displayDensityOverride: $displayDensityOverride, screenWidthOverride: $screenWidthOverride, screenHeightOverride: $screenHeightOverride, inputAutoZoomEnabled: $inputAutoZoomEnabled, fissionEnabled: $fissionEnabled, isolatedProcessEnabled: $isolatedProcessEnabled, appZygoteProcessEnabled: $appZygoteProcessEnabled, extensionsWebAPIEnabled: $extensionsWebAPIEnabled, lnaBlocking: $lnaBlocking, lnaBlockTrackers: $lnaBlockTrackers, lnaEnabled: $lnaEnabled)';
return 'GeckoEngineSettings(javascriptEnabled: $javascriptEnabled, trackingProtectionPolicy: $trackingProtectionPolicy, httpsOnlyMode: $httpsOnlyMode, globalPrivacyControlEnabled: $globalPrivacyControlEnabled, preferredColorScheme: $preferredColorScheme, cookieBannerHandlingMode: $cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing: $cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules: $cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames: $cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy: $webContentIsolationStrategy, userAgent: $userAgent, contentBlocking: $contentBlocking, enterpriseRootsEnabled: $enterpriseRootsEnabled, dohSettings: $dohSettings, fingerprintingProtectionOverrides: $fingerprintingProtectionOverrides, locales: $locales, useContentBlockingDatabase: $useContentBlockingDatabase, blockCookies: $blockCookies, customCookiePolicy: $customCookiePolicy, blockTrackingContent: $blockTrackingContent, trackingContentScope: $trackingContentScope, blockCryptominers: $blockCryptominers, blockFingerprinters: $blockFingerprinters, blockRedirectTrackers: $blockRedirectTrackers, blockSuspectedFingerprinters: $blockSuspectedFingerprinters, suspectedFingerprintersScope: $suspectedFingerprintersScope, allowListBaseline: $allowListBaseline, allowListConvenience: $allowListConvenience, blockAdsAnalyticsSocialTrackers: $blockAdsAnalyticsSocialTrackers, webFontsEnabled: $webFontsEnabled, automaticFontSizeAdjustment: $automaticFontSizeAdjustment, fontSizeFactor: $fontSizeFactor, fontInflationEnabled: $fontInflationEnabled, displayDensityOverride: $displayDensityOverride, screenWidthOverride: $screenWidthOverride, screenHeightOverride: $screenHeightOverride, inputAutoZoomEnabled: $inputAutoZoomEnabled, forceUserScalableContent: $forceUserScalableContent, fissionEnabled: $fissionEnabled, isolatedProcessEnabled: $isolatedProcessEnabled, appZygoteProcessEnabled: $appZygoteProcessEnabled, extensionsWebAPIEnabled: $extensionsWebAPIEnabled, lnaBlocking: $lnaBlocking, lnaBlockTrackers: $lnaBlockTrackers, lnaEnabled: $lnaEnabled)';
}
}
@@ -1143,6 +1143,10 @@ class GeckoEngineSettings {
final int? screenHeightOverride;
final bool? inputAutoZoomEnabled;
/// Forces pinch-to-zoom to work even on websites that set
/// `user-scalable=no` (or a restrictive `maximum-scale`) on the viewport.
final bool? forceUserScalableContent;
// Process Isolation Settings (require app restart)
final bool? fissionEnabled;
final bool? isolatedProcessEnabled;
@@ -1192,6 +1196,7 @@ class GeckoEngineSettings {
this.screenWidthOverride,
this.screenHeightOverride,
this.inputAutoZoomEnabled,
this.forceUserScalableContent,
this.fissionEnabled,
this.isolatedProcessEnabled,
this.appZygoteProcessEnabled,