fine grained blocking settings

This commit is contained in:
Fabian Freund
2026-06-30 07:51:11 +02:00
parent 9c2c8d4ba6
commit e6f7ccc71c
13 changed files with 221 additions and 74 deletions
@@ -57,7 +57,9 @@ bool _customEtpSettingsChanged(
previous.suspectedFingerprintersScope !=
current.suspectedFingerprintersScope ||
previous.allowListBaseline != current.allowListBaseline ||
previous.allowListConvenience != current.allowListConvenience;
previous.allowListConvenience != current.allowListConvenience ||
previous.blockAdsAnalyticsSocialTrackers !=
current.blockAdsAnalyticsSocialTrackers;
}
Future<void> syncUBlockFilterLists(
@@ -248,6 +250,8 @@ class EngineSettingsReplicationService
settings.suspectedFingerprintersScope,
allowListBaseline: settings.allowListBaseline,
allowListConvenience: settings.allowListConvenience,
blockAdsAnalyticsSocialTrackers:
settings.blockAdsAnalyticsSocialTrackers,
);
} else {
await _service.trackingProtectionPolicy(
@@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider
}
String _$engineSettingsReplicationServiceHash() =>
r'a3d7628b7662ca8b828586e3fcf4e8925adbe062';
r'41c07a48bbc90a90dd6f5a0bd48d55a3e02a1b64';
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
void build();
@@ -301,15 +301,26 @@ class _TrackersSection extends HookConsumerWidget {
final blockRedirectTrackers = ref.watch(
engineSettingsWithDefaultsProvider.select((s) => s.blockRedirectTrackers),
);
final blockAdsAnalyticsSocialTrackers = ref.watch(
engineSettingsWithDefaultsProvider.select(
(s) => s.blockAdsAnalyticsSocialTrackers,
),
);
return Column(
children: [
const ListTile(
title: Text('Always Blocked'),
subtitle: Text(
'Ads, analytics, social trackers, and Mozilla social trackers are always blocked in Custom mode.',
SwitchListTile.adaptive(
title: const Text('Ads, Analytics, and Social Trackers'),
subtitle: const Text(
'Block advertising, analytics, social, and Mozilla social tracker categories',
),
leading: Icon(MdiIcons.shieldLock),
secondary: const Icon(Icons.block),
value: blockAdsAnalyticsSocialTrackers,
onChanged: (value) async {
await ref
.read(saveEngineSettingsControllerProvider.notifier)
.save((s) => s.copyWith.blockAdsAnalyticsSocialTrackers(value));
},
),
SwitchListTile.adaptive(
title: const Text('Cryptominers'),
@@ -47,6 +47,12 @@ const List<SettingsSectionDefinition> privacySecuritySettingsSections = [
keywords: ['etp', 'standard', 'strict', 'custom'],
child: _EnhancedTrackingProtectionSection(),
),
SettingsEntryDefinition(
title: 'Content Blocking Database',
subtitle: 'Use GeckoView blocker lists for ETP categories',
keywords: ['ads', 'trackers', 'content blocking'],
child: _ContentBlockingDatabaseTile(),
),
SettingsEntryDefinition(
title: 'Bounce Tracking Protection',
subtitle: 'Remove tracking state left by redirect-based trackers',
@@ -680,14 +686,14 @@ class _EnhancedTrackingProtectionSection extends HookConsumerWidget {
value: TrackingProtectionPolicy.recommended,
title: Text('Standard'),
subtitle: Text(
'Pages will load normally, but block fewer trackers.',
'Balances protection and compatibility by blocking fewer tracker categories.',
),
),
RadioListTile<TrackingProtectionPolicy>.adaptive(
value: TrackingProtectionPolicy.strict,
title: Text('Strict'),
subtitle: Text(
'Stronger tracking protection and faster performance, but some sites may not work properly.',
'Blocks more tracker categories, including tracking content, but may break some sites.',
),
),
RadioListTile<TrackingProtectionPolicy>.adaptive(
@@ -706,6 +712,39 @@ class _EnhancedTrackingProtectionSection extends HookConsumerWidget {
}
}
class _ContentBlockingDatabaseTile extends HookConsumerWidget {
const _ContentBlockingDatabaseTile();
@override
Widget build(BuildContext context, WidgetRef ref) {
final useContentBlockingDatabase = ref.watch(
engineSettingsWithDefaultsProvider.select(
(s) => s.useContentBlockingDatabase,
),
);
return SwitchListTile.adaptive(
title: const Text('Content Blocking Database'),
subtitle: const Text(
'Use GeckoView blocker lists for ETP categories such as ads, analytics, and social trackers. Requires app restart.',
),
secondary: const Icon(Icons.storage),
value: useContentBlockingDatabase,
onChanged: (value) async {
await ref
.read(saveEngineSettingsControllerProvider.notifier)
.save(
(currentSettings) =>
currentSettings.copyWith.useContentBlockingDatabase(value),
);
if (context.mounted) {
await _showRestartDialog(context, ref);
}
},
);
}
}
class _BounceTrackingProtectionTile extends HookConsumerWidget {
const _BounceTrackingProtectionTile();
@@ -80,6 +80,9 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
@override
List<String> get locales => super.locales!;
@override
bool get useContentBlockingDatabase => super.useContentBlockingDatabase!;
// Custom Tracking Protection overrides
@override
bool get blockCookies => super.blockCookies!;
@@ -104,6 +107,9 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool get allowListBaseline => super.allowListBaseline!;
@override
bool get allowListConvenience => super.allowListConvenience!;
@override
bool get blockAdsAnalyticsSocialTrackers =>
super.blockAdsAnalyticsSocialTrackers!;
// Web Content Settings
@override
@@ -196,6 +202,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
required this.safeBrowsingMalwareEnabled,
required this.safeBrowsingPhishingEnabled,
required super.locales,
required super.useContentBlockingDatabase,
required super.blockCookies,
required super.customCookiePolicy,
required super.blockTrackingContent,
@@ -207,6 +214,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
required super.suspectedFingerprintersScope,
required super.allowListBaseline,
required super.allowListConvenience,
required super.blockAdsAnalyticsSocialTrackers,
required super.webFontsEnabled,
required super.automaticFontSizeAdjustment,
required super.fontSizeFactor,
@@ -250,6 +258,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool? safeBrowsingMalwareEnabled,
bool? safeBrowsingPhishingEnabled,
List<String>? locales,
bool? useContentBlockingDatabase,
bool? blockCookies,
CustomCookiePolicy? customCookiePolicy,
bool? blockTrackingContent,
@@ -261,6 +270,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
TrackingScope? suspectedFingerprintersScope,
bool? allowListBaseline,
bool? allowListConvenience,
bool? blockAdsAnalyticsSocialTrackers,
bool? webFontsEnabled,
bool? automaticFontSizeAdjustment,
double? fontSizeFactor,
@@ -318,6 +328,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
WidgetsBinding.instance.platformDispatcher.locales
.map((x) => x.toLanguageTag())
.toList(),
useContentBlockingDatabase: useContentBlockingDatabase ?? true,
blockCookies: blockCookies ?? true,
customCookiePolicy:
customCookiePolicy ?? CustomCookiePolicy.totalProtection,
@@ -331,6 +342,8 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
suspectedFingerprintersScope ?? TrackingScope.all,
allowListBaseline: allowListBaseline ?? true,
allowListConvenience: allowListConvenience ?? false,
blockAdsAnalyticsSocialTrackers:
blockAdsAnalyticsSocialTrackers ?? true,
webFontsEnabled: webFontsEnabled ?? true,
automaticFontSizeAdjustment: automaticFontSizeAdjustment ?? true,
fontSizeFactor: fontSizeFactor ?? 1.0,
@@ -398,6 +411,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
safeBrowsingMalwareEnabled,
safeBrowsingPhishingEnabled,
locales,
useContentBlockingDatabase,
blockCookies,
customCookiePolicy,
blockTrackingContent,
@@ -409,6 +423,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
suspectedFingerprintersScope,
allowListBaseline,
allowListConvenience,
blockAdsAnalyticsSocialTrackers,
webFontsEnabled,
automaticFontSizeAdjustment,
fontSizeFactor,
@@ -77,6 +77,8 @@ abstract class _$EngineSettingsCWProxy {
EngineSettings locales(List<String>? locales);
EngineSettings useContentBlockingDatabase(bool? useContentBlockingDatabase);
EngineSettings blockCookies(bool? blockCookies);
EngineSettings customCookiePolicy(CustomCookiePolicy? customCookiePolicy);
@@ -103,6 +105,10 @@ abstract class _$EngineSettingsCWProxy {
EngineSettings allowListConvenience(bool? allowListConvenience);
EngineSettings blockAdsAnalyticsSocialTrackers(
bool? blockAdsAnalyticsSocialTrackers,
);
EngineSettings webFontsEnabled(bool? webFontsEnabled);
EngineSettings automaticFontSizeAdjustment(bool? automaticFontSizeAdjustment);
@@ -166,6 +172,7 @@ abstract class _$EngineSettingsCWProxy {
bool safeBrowsingMalwareEnabled,
bool safeBrowsingPhishingEnabled,
List<String>? locales,
bool? useContentBlockingDatabase,
bool? blockCookies,
CustomCookiePolicy? customCookiePolicy,
bool? blockTrackingContent,
@@ -177,6 +184,7 @@ abstract class _$EngineSettingsCWProxy {
TrackingScope? suspectedFingerprintersScope,
bool? allowListBaseline,
bool? allowListConvenience,
bool? blockAdsAnalyticsSocialTrackers,
bool? webFontsEnabled,
bool? automaticFontSizeAdjustment,
double? fontSizeFactor,
@@ -320,6 +328,10 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
@override
EngineSettings locales(List<String>? locales) => call(locales: locales);
@override
EngineSettings useContentBlockingDatabase(bool? useContentBlockingDatabase) =>
call(useContentBlockingDatabase: useContentBlockingDatabase);
@override
EngineSettings blockCookies(bool? blockCookies) =>
call(blockCookies: blockCookies);
@@ -366,6 +378,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
EngineSettings allowListConvenience(bool? allowListConvenience) =>
call(allowListConvenience: allowListConvenience);
@override
EngineSettings blockAdsAnalyticsSocialTrackers(
bool? blockAdsAnalyticsSocialTrackers,
) => call(blockAdsAnalyticsSocialTrackers: blockAdsAnalyticsSocialTrackers);
@override
EngineSettings webFontsEnabled(bool? webFontsEnabled) =>
call(webFontsEnabled: webFontsEnabled);
@@ -462,6 +479,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
Object? safeBrowsingMalwareEnabled = const $CopyWithPlaceholder(),
Object? safeBrowsingPhishingEnabled = const $CopyWithPlaceholder(),
Object? locales = const $CopyWithPlaceholder(),
Object? useContentBlockingDatabase = const $CopyWithPlaceholder(),
Object? blockCookies = const $CopyWithPlaceholder(),
Object? customCookiePolicy = const $CopyWithPlaceholder(),
Object? blockTrackingContent = const $CopyWithPlaceholder(),
@@ -473,6 +491,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
Object? suspectedFingerprintersScope = const $CopyWithPlaceholder(),
Object? allowListBaseline = const $CopyWithPlaceholder(),
Object? allowListConvenience = const $CopyWithPlaceholder(),
Object? blockAdsAnalyticsSocialTrackers = const $CopyWithPlaceholder(),
Object? webFontsEnabled = const $CopyWithPlaceholder(),
Object? automaticFontSizeAdjustment = const $CopyWithPlaceholder(),
Object? fontSizeFactor = const $CopyWithPlaceholder(),
@@ -621,6 +640,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
? _value.locales
// ignore: cast_nullable_to_non_nullable
: locales as List<String>?,
useContentBlockingDatabase:
useContentBlockingDatabase == const $CopyWithPlaceholder()
? _value.useContentBlockingDatabase
// ignore: cast_nullable_to_non_nullable
: useContentBlockingDatabase as bool?,
blockCookies: blockCookies == const $CopyWithPlaceholder()
? _value.blockCookies
// ignore: cast_nullable_to_non_nullable
@@ -668,6 +692,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
? _value.allowListConvenience
// ignore: cast_nullable_to_non_nullable
: allowListConvenience as bool?,
blockAdsAnalyticsSocialTrackers:
blockAdsAnalyticsSocialTrackers == const $CopyWithPlaceholder()
? _value.blockAdsAnalyticsSocialTrackers
// ignore: cast_nullable_to_non_nullable
: blockAdsAnalyticsSocialTrackers as bool?,
webFontsEnabled: webFontsEnabled == const $CopyWithPlaceholder()
? _value.webFontsEnabled
// ignore: cast_nullable_to_non_nullable
@@ -814,6 +843,7 @@ EngineSettings _$EngineSettingsFromJson(
locales: (json['locales'] as List<dynamic>?)
?.map((e) => e as String)
.toList(),
useContentBlockingDatabase: json['useContentBlockingDatabase'] as bool?,
blockCookies: json['blockCookies'] as bool?,
customCookiePolicy: $enumDecodeNullable(
_$CustomCookiePolicyEnumMap,
@@ -834,6 +864,8 @@ EngineSettings _$EngineSettingsFromJson(
),
allowListBaseline: json['allowListBaseline'] as bool?,
allowListConvenience: json['allowListConvenience'] as bool?,
blockAdsAnalyticsSocialTrackers:
json['blockAdsAnalyticsSocialTrackers'] as bool?,
webFontsEnabled: json['webFontsEnabled'] as bool?,
automaticFontSizeAdjustment: json['automaticFontSizeAdjustment'] as bool?,
fontSizeFactor: (json['fontSizeFactor'] as num?)?.toDouble(),
@@ -882,6 +914,7 @@ Map<String, dynamic> _$EngineSettingsToJson(
.webContentIsolationStrategy]!,
'enterpriseRootsEnabled': instance.enterpriseRootsEnabled,
'locales': instance.locales,
'useContentBlockingDatabase': instance.useContentBlockingDatabase,
'blockCookies': instance.blockCookies,
'customCookiePolicy':
_$CustomCookiePolicyEnumMap[instance.customCookiePolicy]!,
@@ -896,6 +929,7 @@ Map<String, dynamic> _$EngineSettingsToJson(
_$TrackingScopeEnumMap[instance.suspectedFingerprintersScope]!,
'allowListBaseline': instance.allowListBaseline,
'allowListConvenience': instance.allowListConvenience,
'blockAdsAnalyticsSocialTrackers': instance.blockAdsAnalyticsSocialTrackers,
'webFontsEnabled': instance.webFontsEnabled,
'automaticFontSizeAdjustment': instance.automaticFontSizeAdjustment,
'fontSizeFactor': instance.fontSizeFactor,
@@ -135,6 +135,8 @@ class EngineSettingsRepository extends _$EngineSettingsRepository {
'locales': settings['locales']
?.readAs(DriftSqlType.string, db.typeMapping)
.mapNotNull(jsonDecode),
'useContentBlockingDatabase': settings['useContentBlockingDatabase']
?.readAs(DriftSqlType.bool, db.typeMapping),
// Custom Tracking Protection
'blockCookies': settings['blockCookies']?.readAs(
DriftSqlType.bool,
@@ -176,6 +178,11 @@ class EngineSettingsRepository extends _$EngineSettingsRepository {
DriftSqlType.bool,
db.typeMapping,
),
'blockAdsAnalyticsSocialTrackers':
settings['blockAdsAnalyticsSocialTrackers']?.readAs(
DriftSqlType.bool,
db.typeMapping,
),
// Web Content Settings
'webFontsEnabled': settings['webFontsEnabled']?.readAs(
DriftSqlType.bool,
@@ -127,17 +127,16 @@ class GeckoEngineSettingsApiImpl : GeckoEngineSettingsApi {
/**
* Creates a custom tracking protection policy based on user settings.
* Matches Fenix's implementation where AD, ANALYTICS, SOCIAL, and MOZILLA_SOCIAL
* are always blocked, while other categories are configurable.
*/
private fun createCustomTrackingProtectionPolicy(settings: GeckoEngineSettings): TrackingProtectionPolicy {
// Always include these categories (not user-configurable, matches Fenix)
val categories = mutableListOf(
TrackingCategory.AD,
TrackingCategory.ANALYTICS,
TrackingCategory.SOCIAL,
TrackingCategory.MOZILLA_SOCIAL,
)
val categories = mutableListOf<TrackingCategory>()
if (settings.blockAdsAnalyticsSocialTrackers != false) {
categories.add(TrackingCategory.AD)
categories.add(TrackingCategory.ANALYTICS)
categories.add(TrackingCategory.SOCIAL)
categories.add(TrackingCategory.MOZILLA_SOCIAL)
}
// Add configurable categories
if (settings.blockTrackingContent == true) {
@@ -139,7 +139,8 @@ class Core(
).path
},
),
useContentBlockingDatabase = true
useContentBlockingDatabase =
GlobalComponents.startupSettings?.useContentBlockingDatabase ?: true
)
}
@@ -3397,6 +3397,11 @@ data class GeckoEngineSettings (
val dohSettings: DohSettings? = null,
val fingerprintingProtectionOverrides: String? = null,
val locales: List<String>? = null,
/**
* Use GeckoView's content-blocking database for tracking protection.
* This is applied when the engine is created and requires app restart.
*/
val useContentBlockingDatabase: Boolean? = null,
/** Master toggle for cookie blocking in Custom mode */
val blockCookies: Boolean? = null,
/** Cookie policy selection (only applies when blockCookies is true) */
@@ -3422,6 +3427,8 @@ data class GeckoEngineSettings (
val allowListBaseline: Boolean? = null,
/** Allow convenience tracking protection exceptions (fixes minor issues) */
val allowListConvenience: Boolean? = null,
/** Block advertising, analytics, social, and Mozilla social trackers */
val blockAdsAnalyticsSocialTrackers: Boolean? = null,
val webFontsEnabled: Boolean? = null,
val automaticFontSizeAdjustment: Boolean? = null,
val fontSizeFactor: Double? = null,
@@ -3457,33 +3464,35 @@ data class GeckoEngineSettings (
val dohSettings = pigeonVar_list[13] as DohSettings?
val fingerprintingProtectionOverrides = pigeonVar_list[14] as String?
val locales = pigeonVar_list[15] as List<String>?
val blockCookies = pigeonVar_list[16] as Boolean?
val customCookiePolicy = pigeonVar_list[17] as CustomCookiePolicy?
val blockTrackingContent = pigeonVar_list[18] as Boolean?
val trackingContentScope = pigeonVar_list[19] as TrackingScope?
val blockCryptominers = pigeonVar_list[20] as Boolean?
val blockFingerprinters = pigeonVar_list[21] as Boolean?
val blockRedirectTrackers = pigeonVar_list[22] as Boolean?
val blockSuspectedFingerprinters = pigeonVar_list[23] as Boolean?
val suspectedFingerprintersScope = pigeonVar_list[24] as TrackingScope?
val allowListBaseline = pigeonVar_list[25] as Boolean?
val allowListConvenience = pigeonVar_list[26] as Boolean?
val webFontsEnabled = pigeonVar_list[27] as Boolean?
val automaticFontSizeAdjustment = pigeonVar_list[28] as Boolean?
val fontSizeFactor = pigeonVar_list[29] as Double?
val fontInflationEnabled = pigeonVar_list[30] as Boolean?
val displayDensityOverride = pigeonVar_list[31] as Double?
val screenWidthOverride = pigeonVar_list[32] as Long?
val screenHeightOverride = pigeonVar_list[33] as Long?
val inputAutoZoomEnabled = pigeonVar_list[34] as Boolean?
val fissionEnabled = pigeonVar_list[35] as Boolean?
val isolatedProcessEnabled = pigeonVar_list[36] as Boolean?
val appZygoteProcessEnabled = pigeonVar_list[37] as Boolean?
val extensionsWebAPIEnabled = pigeonVar_list[38] as Boolean?
val lnaBlocking = pigeonVar_list[39] as Boolean?
val lnaBlockTrackers = pigeonVar_list[40] as Boolean?
val lnaEnabled = pigeonVar_list[41] as Boolean?
return GeckoEngineSettings(javascriptEnabled, trackingProtectionPolicy, httpsOnlyMode, globalPrivacyControlEnabled, preferredColorScheme, cookieBannerHandlingMode, cookieBannerHandlingModePrivateBrowsing, cookieBannerHandlingGlobalRules, cookieBannerHandlingGlobalRulesSubFrames, webContentIsolationStrategy, userAgent, contentBlocking, enterpriseRootsEnabled, dohSettings, fingerprintingProtectionOverrides, locales, blockCookies, customCookiePolicy, blockTrackingContent, trackingContentScope, blockCryptominers, blockFingerprinters, blockRedirectTrackers, blockSuspectedFingerprinters, suspectedFingerprintersScope, allowListBaseline, allowListConvenience, webFontsEnabled, automaticFontSizeAdjustment, fontSizeFactor, fontInflationEnabled, displayDensityOverride, screenWidthOverride, screenHeightOverride, inputAutoZoomEnabled, fissionEnabled, isolatedProcessEnabled, appZygoteProcessEnabled, extensionsWebAPIEnabled, lnaBlocking, lnaBlockTrackers, lnaEnabled)
val useContentBlockingDatabase = pigeonVar_list[16] as Boolean?
val blockCookies = pigeonVar_list[17] as Boolean?
val customCookiePolicy = pigeonVar_list[18] as CustomCookiePolicy?
val blockTrackingContent = pigeonVar_list[19] as Boolean?
val trackingContentScope = pigeonVar_list[20] as TrackingScope?
val blockCryptominers = pigeonVar_list[21] as Boolean?
val blockFingerprinters = pigeonVar_list[22] as Boolean?
val blockRedirectTrackers = pigeonVar_list[23] as Boolean?
val blockSuspectedFingerprinters = pigeonVar_list[24] as Boolean?
val suspectedFingerprintersScope = pigeonVar_list[25] as TrackingScope?
val allowListBaseline = pigeonVar_list[26] as Boolean?
val allowListConvenience = pigeonVar_list[27] as Boolean?
val blockAdsAnalyticsSocialTrackers = pigeonVar_list[28] as Boolean?
val webFontsEnabled = pigeonVar_list[29] as Boolean?
val automaticFontSizeAdjustment = pigeonVar_list[30] as Boolean?
val fontSizeFactor = pigeonVar_list[31] as Double?
val fontInflationEnabled = pigeonVar_list[32] as Boolean?
val displayDensityOverride = pigeonVar_list[33] as Double?
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)
}
}
fun toList(): List<Any?> {
@@ -3504,6 +3513,7 @@ data class GeckoEngineSettings (
dohSettings,
fingerprintingProtectionOverrides,
locales,
useContentBlockingDatabase,
blockCookies,
customCookiePolicy,
blockTrackingContent,
@@ -3515,6 +3525,7 @@ data class GeckoEngineSettings (
suspectedFingerprintersScope,
allowListBaseline,
allowListConvenience,
blockAdsAnalyticsSocialTrackers,
webFontsEnabled,
automaticFontSizeAdjustment,
fontSizeFactor,
@@ -3540,7 +3551,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.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.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.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 {
@@ -3561,6 +3572,7 @@ data class GeckoEngineSettings (
result = 31 * result + GeckoPigeonUtils.deepHash(this.dohSettings)
result = 31 * result + GeckoPigeonUtils.deepHash(this.fingerprintingProtectionOverrides)
result = 31 * result + GeckoPigeonUtils.deepHash(this.locales)
result = 31 * result + GeckoPigeonUtils.deepHash(this.useContentBlockingDatabase)
result = 31 * result + GeckoPigeonUtils.deepHash(this.blockCookies)
result = 31 * result + GeckoPigeonUtils.deepHash(this.customCookiePolicy)
result = 31 * result + GeckoPigeonUtils.deepHash(this.blockTrackingContent)
@@ -3572,6 +3584,7 @@ data class GeckoEngineSettings (
result = 31 * result + GeckoPigeonUtils.deepHash(this.suspectedFingerprintersScope)
result = 31 * result + GeckoPigeonUtils.deepHash(this.allowListBaseline)
result = 31 * result + GeckoPigeonUtils.deepHash(this.allowListConvenience)
result = 31 * result + GeckoPigeonUtils.deepHash(this.blockAdsAnalyticsSocialTrackers)
result = 31 * result + GeckoPigeonUtils.deepHash(this.webFontsEnabled)
result = 31 * result + GeckoPigeonUtils.deepHash(this.automaticFontSizeAdjustment)
result = 31 * result + GeckoPigeonUtils.deepHash(this.fontSizeFactor)
@@ -57,6 +57,7 @@ class GeckoEngineSettingsService {
TrackingScope? suspectedFingerprintersScope,
bool? allowListBaseline,
bool? allowListConvenience,
bool? blockAdsAnalyticsSocialTrackers,
}) {
return _api.updateRuntimeSettings(
GeckoEngineSettings(
@@ -73,6 +74,7 @@ class GeckoEngineSettingsService {
suspectedFingerprintersScope: suspectedFingerprintersScope,
allowListBaseline: allowListBaseline,
allowListConvenience: allowListConvenience,
blockAdsAnalyticsSocialTrackers: blockAdsAnalyticsSocialTrackers,
),
);
}
@@ -3455,6 +3455,7 @@ class GeckoEngineSettings {
this.dohSettings,
this.fingerprintingProtectionOverrides,
this.locales,
this.useContentBlockingDatabase,
this.blockCookies,
this.customCookiePolicy,
this.blockTrackingContent,
@@ -3466,6 +3467,7 @@ class GeckoEngineSettings {
this.suspectedFingerprintersScope,
this.allowListBaseline,
this.allowListConvenience,
this.blockAdsAnalyticsSocialTrackers,
this.webFontsEnabled,
this.automaticFontSizeAdjustment,
this.fontSizeFactor,
@@ -3515,6 +3517,10 @@ class GeckoEngineSettings {
List<String>? locales;
/// Use GeckoView's content-blocking database for tracking protection.
/// This is applied when the engine is created and requires app restart.
bool? useContentBlockingDatabase;
/// Master toggle for cookie blocking in Custom mode
bool? blockCookies;
@@ -3549,6 +3555,9 @@ class GeckoEngineSettings {
/// Allow convenience tracking protection exceptions (fixes minor issues)
bool? allowListConvenience;
/// Block advertising, analytics, social, and Mozilla social trackers
bool? blockAdsAnalyticsSocialTrackers;
bool? webFontsEnabled;
bool? automaticFontSizeAdjustment;
@@ -3597,6 +3606,7 @@ class GeckoEngineSettings {
dohSettings,
fingerprintingProtectionOverrides,
locales,
useContentBlockingDatabase,
blockCookies,
customCookiePolicy,
blockTrackingContent,
@@ -3608,6 +3618,7 @@ class GeckoEngineSettings {
suspectedFingerprintersScope,
allowListBaseline,
allowListConvenience,
blockAdsAnalyticsSocialTrackers,
webFontsEnabled,
automaticFontSizeAdjustment,
fontSizeFactor,
@@ -3648,32 +3659,34 @@ class GeckoEngineSettings {
dohSettings: result[13] as DohSettings?,
fingerprintingProtectionOverrides: result[14] as String?,
locales: (result[15] as List<Object?>?)?.cast<String>(),
blockCookies: result[16] as bool?,
customCookiePolicy: result[17] as CustomCookiePolicy?,
blockTrackingContent: result[18] as bool?,
trackingContentScope: result[19] as TrackingScope?,
blockCryptominers: result[20] as bool?,
blockFingerprinters: result[21] as bool?,
blockRedirectTrackers: result[22] as bool?,
blockSuspectedFingerprinters: result[23] as bool?,
suspectedFingerprintersScope: result[24] as TrackingScope?,
allowListBaseline: result[25] as bool?,
allowListConvenience: result[26] as bool?,
webFontsEnabled: result[27] as bool?,
automaticFontSizeAdjustment: result[28] as bool?,
fontSizeFactor: result[29] as double?,
fontInflationEnabled: result[30] as bool?,
displayDensityOverride: result[31] as double?,
screenWidthOverride: result[32] as int?,
screenHeightOverride: result[33] as int?,
inputAutoZoomEnabled: result[34] as bool?,
fissionEnabled: result[35] as bool?,
isolatedProcessEnabled: result[36] as bool?,
appZygoteProcessEnabled: result[37] as bool?,
extensionsWebAPIEnabled: result[38] as bool?,
lnaBlocking: result[39] as bool?,
lnaBlockTrackers: result[40] as bool?,
lnaEnabled: result[41] as bool?,
useContentBlockingDatabase: result[16] as bool?,
blockCookies: result[17] as bool?,
customCookiePolicy: result[18] as CustomCookiePolicy?,
blockTrackingContent: result[19] as bool?,
trackingContentScope: result[20] as TrackingScope?,
blockCryptominers: result[21] as bool?,
blockFingerprinters: result[22] as bool?,
blockRedirectTrackers: result[23] as bool?,
blockSuspectedFingerprinters: result[24] as bool?,
suspectedFingerprintersScope: result[25] as TrackingScope?,
allowListBaseline: result[26] as bool?,
allowListConvenience: result[27] as bool?,
blockAdsAnalyticsSocialTrackers: result[28] as bool?,
webFontsEnabled: result[29] as bool?,
automaticFontSizeAdjustment: result[30] as bool?,
fontSizeFactor: result[31] as double?,
fontInflationEnabled: result[32] as bool?,
displayDensityOverride: result[33] as double?,
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?,
);
}
@@ -3686,7 +3699,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(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(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(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
@@ -1091,6 +1091,10 @@ class GeckoEngineSettings {
final String? fingerprintingProtectionOverrides;
final List<String>? locales;
/// Use GeckoView's content-blocking database for tracking protection.
/// This is applied when the engine is created and requires app restart.
final bool? useContentBlockingDatabase;
// Custom Tracking Protection Settings
/// Master toggle for cookie blocking in Custom mode
final bool? blockCookies;
@@ -1126,6 +1130,9 @@ class GeckoEngineSettings {
/// Allow convenience tracking protection exceptions (fixes minor issues)
final bool? allowListConvenience;
/// Block advertising, analytics, social, and Mozilla social trackers
final bool? blockAdsAnalyticsSocialTrackers;
// Web Content Settings
final bool? webFontsEnabled;
final bool? automaticFontSizeAdjustment;
@@ -1164,6 +1171,7 @@ class GeckoEngineSettings {
this.dohSettings,
this.fingerprintingProtectionOverrides,
this.locales,
this.useContentBlockingDatabase,
this.blockCookies,
this.customCookiePolicy,
this.blockTrackingContent,
@@ -1175,6 +1183,7 @@ class GeckoEngineSettings {
this.suspectedFingerprintersScope,
this.allowListBaseline,
this.allowListConvenience,
this.blockAdsAnalyticsSocialTrackers,
this.webFontsEnabled,
this.automaticFontSizeAdjustment,
this.fontSizeFactor,