From e6f7ccc71c3bed8b245d4037039e139928f9d2c4 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Tue, 30 Jun 2026 07:51:11 +0200 Subject: [PATCH] fine grained blocking settings --- .../services/engine_settings_replication.dart | 6 +- .../engine_settings_replication.g.dart | 2 +- .../screens/custom_tracking_protection.dart | 21 ++++-- .../screens/privacy_security_settings.dart | 43 +++++++++++- .../user/data/models/engine_settings.dart | 15 ++++ .../user/data/models/engine_settings.g.dart | 34 +++++++++ .../domain/repositories/engine_settings.dart | 7 ++ .../api/GeckoEngineSettingsApiImpl.kt | 17 +++-- .../components/Core.kt | 3 +- .../pigeons/Gecko.g.kt | 69 +++++++++++-------- .../services/gecko_engine_settings.dart | 2 + .../lib/src/pigeons/gecko.g.dart | 67 ++++++++++-------- .../pigeons/gecko.dart | 9 +++ 13 files changed, 221 insertions(+), 74 deletions(-) diff --git a/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart b/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart index d8a47a26..ac0445df 100644 --- a/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart +++ b/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.dart @@ -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 syncUBlockFilterLists( @@ -248,6 +250,8 @@ class EngineSettingsReplicationService settings.suspectedFingerprintersScope, allowListBaseline: settings.allowListBaseline, allowListConvenience: settings.allowListConvenience, + blockAdsAnalyticsSocialTrackers: + settings.blockAdsAnalyticsSocialTrackers, ); } else { await _service.trackingProtectionPolicy( diff --git a/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart b/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart index 5950da74..09ccf097 100644 --- a/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart +++ b/apps/weblibre/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart @@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider } String _$engineSettingsReplicationServiceHash() => - r'a3d7628b7662ca8b828586e3fcf4e8925adbe062'; + r'41c07a48bbc90a90dd6f5a0bd48d55a3e02a1b64'; abstract class _$EngineSettingsReplicationService extends $Notifier { void build(); diff --git a/apps/weblibre/lib/features/settings/presentation/screens/custom_tracking_protection.dart b/apps/weblibre/lib/features/settings/presentation/screens/custom_tracking_protection.dart index 428aa52c..62f122f2 100644 --- a/apps/weblibre/lib/features/settings/presentation/screens/custom_tracking_protection.dart +++ b/apps/weblibre/lib/features/settings/presentation/screens/custom_tracking_protection.dart @@ -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'), diff --git a/apps/weblibre/lib/features/settings/presentation/screens/privacy_security_settings.dart b/apps/weblibre/lib/features/settings/presentation/screens/privacy_security_settings.dart index 5cce5157..8c7bfacf 100644 --- a/apps/weblibre/lib/features/settings/presentation/screens/privacy_security_settings.dart +++ b/apps/weblibre/lib/features/settings/presentation/screens/privacy_security_settings.dart @@ -47,6 +47,12 @@ const List 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.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.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(); diff --git a/apps/weblibre/lib/features/user/data/models/engine_settings.dart b/apps/weblibre/lib/features/user/data/models/engine_settings.dart index f2501a72..0a181ee3 100644 --- a/apps/weblibre/lib/features/user/data/models/engine_settings.dart +++ b/apps/weblibre/lib/features/user/data/models/engine_settings.dart @@ -80,6 +80,9 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { @override List 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? 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, diff --git a/apps/weblibre/lib/features/user/data/models/engine_settings.g.dart b/apps/weblibre/lib/features/user/data/models/engine_settings.g.dart index cbd3980f..6c148c40 100644 --- a/apps/weblibre/lib/features/user/data/models/engine_settings.g.dart +++ b/apps/weblibre/lib/features/user/data/models/engine_settings.g.dart @@ -77,6 +77,8 @@ abstract class _$EngineSettingsCWProxy { EngineSettings locales(List? 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? 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? 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?, + 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?) ?.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 _$EngineSettingsToJson( .webContentIsolationStrategy]!, 'enterpriseRootsEnabled': instance.enterpriseRootsEnabled, 'locales': instance.locales, + 'useContentBlockingDatabase': instance.useContentBlockingDatabase, 'blockCookies': instance.blockCookies, 'customCookiePolicy': _$CustomCookiePolicyEnumMap[instance.customCookiePolicy]!, @@ -896,6 +929,7 @@ Map _$EngineSettingsToJson( _$TrackingScopeEnumMap[instance.suspectedFingerprintersScope]!, 'allowListBaseline': instance.allowListBaseline, 'allowListConvenience': instance.allowListConvenience, + 'blockAdsAnalyticsSocialTrackers': instance.blockAdsAnalyticsSocialTrackers, 'webFontsEnabled': instance.webFontsEnabled, 'automaticFontSizeAdjustment': instance.automaticFontSizeAdjustment, 'fontSizeFactor': instance.fontSizeFactor, diff --git a/apps/weblibre/lib/features/user/domain/repositories/engine_settings.dart b/apps/weblibre/lib/features/user/domain/repositories/engine_settings.dart index 0ea09ee3..9ab6dcb1 100644 --- a/apps/weblibre/lib/features/user/domain/repositories/engine_settings.dart +++ b/apps/weblibre/lib/features/user/domain/repositories/engine_settings.dart @@ -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, diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/api/GeckoEngineSettingsApiImpl.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/api/GeckoEngineSettingsApiImpl.kt index ad948cb2..8136546f 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/api/GeckoEngineSettingsApiImpl.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/api/GeckoEngineSettingsApiImpl.kt @@ -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() + + 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) { diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/components/Core.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/components/Core.kt index 200cf206..d713bb1f 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/components/Core.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/components/Core.kt @@ -139,7 +139,8 @@ class Core( ).path }, ), - useContentBlockingDatabase = true + useContentBlockingDatabase = + GlobalComponents.startupSettings?.useContentBlockingDatabase ?: true ) } diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/pigeons/Gecko.g.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/pigeons/Gecko.g.kt index c3e4c34b..d36db067 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/pigeons/Gecko.g.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/weblibre/flutter_mozilla_components/pigeons/Gecko.g.kt @@ -3397,6 +3397,11 @@ data class GeckoEngineSettings ( val dohSettings: DohSettings? = null, val fingerprintingProtectionOverrides: String? = null, val locales: List? = 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? - 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 { @@ -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) diff --git a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_engine_settings.dart b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_engine_settings.dart index a34af167..3ecd4407 100644 --- a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_engine_settings.dart +++ b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_engine_settings.dart @@ -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, ), ); } diff --git a/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart b/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart index b1f36097..96ce6ced 100644 --- a/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart +++ b/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart @@ -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? 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?)?.cast(), - 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 diff --git a/packages/flutter_mozilla_components/pigeons/gecko.dart b/packages/flutter_mozilla_components/pigeons/gecko.dart index 0fbbae61..2425c0c8 100644 --- a/packages/flutter_mozilla_components/pigeons/gecko.dart +++ b/packages/flutter_mozilla_components/pigeons/gecko.dart @@ -1091,6 +1091,10 @@ class GeckoEngineSettings { final String? fingerprintingProtectionOverrides; final List? 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,