fine grained blocking settings
This commit is contained in:
+5
-1
@@ -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(
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider
|
||||
}
|
||||
|
||||
String _$engineSettingsReplicationServiceHash() =>
|
||||
r'a3d7628b7662ca8b828586e3fcf4e8925adbe062';
|
||||
r'41c07a48bbc90a90dd6f5a0bd48d55a3e02a1b64';
|
||||
|
||||
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
|
||||
void build();
|
||||
|
||||
+16
-5
@@ -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'),
|
||||
|
||||
+41
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user