refactor setting providers; include content blocking settings;

This commit is contained in:
Fabian Freund
2025-08-23 06:30:25 +02:00
parent 7a89c622dc
commit ce657dd26a
53 changed files with 958 additions and 404 deletions
@@ -37,7 +37,7 @@ class EngineSettingsReplicationService
ref.listen(
fireImmediately: true,
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(settings) => settings.themeMode,
),
(previous, next) async {
@@ -62,61 +62,75 @@ class EngineSettingsReplicationService
fireImmediately: true,
engineSettingsRepositoryProvider,
(previous, next) async {
if (initialSettingsSent && previous != null) {
if (previous.javascriptEnabled != next.javascriptEnabled) {
await _service.javascriptEnabled(next.javascriptEnabled);
final settings = next.valueOrNull;
if (settings != null) {
if (initialSettingsSent && previous != null) {
if (previous.valueOrNull?.javascriptEnabled !=
settings.javascriptEnabled) {
await _service.javascriptEnabled(settings.javascriptEnabled);
}
if (previous.valueOrNull?.trackingProtectionPolicy !=
settings.trackingProtectionPolicy) {
await _service.trackingProtectionPolicy(
settings.trackingProtectionPolicy,
);
}
if (previous.valueOrNull?.httpsOnlyMode != settings.httpsOnlyMode) {
await _service.httpsOnlyMode(settings.httpsOnlyMode);
}
if (previous.valueOrNull?.globalPrivacyControlEnabled !=
settings.globalPrivacyControlEnabled) {
await _service.globalPrivacyControlEnabled(
settings.globalPrivacyControlEnabled,
);
}
if (previous.valueOrNull?.preferredColorScheme !=
settings.preferredColorScheme) {
await _service.preferredColorScheme(
settings.preferredColorScheme,
);
}
if (previous.valueOrNull?.cookieBannerHandlingMode !=
settings.cookieBannerHandlingMode) {
await _service.cookieBannerHandlingMode(
settings.cookieBannerHandlingMode,
);
}
if (previous.valueOrNull?.cookieBannerHandlingModePrivateBrowsing !=
settings.cookieBannerHandlingModePrivateBrowsing) {
await _service.cookieBannerHandlingModePrivateBrowsing(
settings.cookieBannerHandlingModePrivateBrowsing,
);
}
if (previous.valueOrNull?.cookieBannerHandlingGlobalRules !=
settings.cookieBannerHandlingGlobalRules) {
await _service.cookieBannerHandlingGlobalRules(
settings.cookieBannerHandlingGlobalRules,
);
}
if (previous
.valueOrNull
?.cookieBannerHandlingGlobalRulesSubFrames !=
settings.cookieBannerHandlingGlobalRulesSubFrames) {
await _service.cookieBannerHandlingGlobalRulesSubFrames(
settings.cookieBannerHandlingGlobalRulesSubFrames,
);
}
if (previous.valueOrNull?.webContentIsolationStrategy !=
settings.webContentIsolationStrategy) {
await _service.webContentIsolationStrategy(
settings.webContentIsolationStrategy,
);
}
if (previous.valueOrNull?.contentBlocking !=
settings.contentBlocking) {
await _service.contentBlocking(settings.contentBlocking);
}
} else {
await _service.setDefaultSettings(settings);
initialSettingsSent = true;
}
if (previous.trackingProtectionPolicy !=
next.trackingProtectionPolicy) {
await _service.trackingProtectionPolicy(
next.trackingProtectionPolicy,
);
}
if (previous.httpsOnlyMode != next.httpsOnlyMode) {
await _service.httpsOnlyMode(next.httpsOnlyMode);
}
if (previous.globalPrivacyControlEnabled !=
next.globalPrivacyControlEnabled) {
await _service.globalPrivacyControlEnabled(
next.globalPrivacyControlEnabled,
);
}
if (previous.preferredColorScheme != next.preferredColorScheme) {
await _service.preferredColorScheme(next.preferredColorScheme);
}
if (previous.cookieBannerHandlingMode !=
next.cookieBannerHandlingMode) {
await _service.cookieBannerHandlingMode(
next.cookieBannerHandlingMode,
);
}
if (previous.cookieBannerHandlingModePrivateBrowsing !=
next.cookieBannerHandlingModePrivateBrowsing) {
await _service.cookieBannerHandlingModePrivateBrowsing(
next.cookieBannerHandlingModePrivateBrowsing,
);
}
if (previous.cookieBannerHandlingGlobalRules !=
next.cookieBannerHandlingGlobalRules) {
await _service.cookieBannerHandlingGlobalRules(
next.cookieBannerHandlingGlobalRules,
);
}
if (previous.cookieBannerHandlingGlobalRulesSubFrames !=
next.cookieBannerHandlingGlobalRulesSubFrames) {
await _service.cookieBannerHandlingGlobalRulesSubFrames(
next.cookieBannerHandlingGlobalRulesSubFrames,
);
}
if (previous.webContentIsolationStrategy !=
next.webContentIsolationStrategy) {
await _service.webContentIsolationStrategy(
next.webContentIsolationStrategy,
);
}
} else {
await _service.setDefaultSettings(next);
initialSettingsSent = true;
}
},
onError: (error, stackTrace) {
@@ -7,7 +7,7 @@ part of 'engine_settings_replication.dart';
// **************************************************************************
String _$engineSettingsReplicationServiceHash() =>
r'31b5b79e429bfedb9c6b57050cd2d99407914228';
r'be3001c952dac6c7c6be3927f6834dae57280601';
/// See also [EngineSettingsReplicationService].
@ProviderFor(EngineSettingsReplicationService)
@@ -84,7 +84,7 @@ class ProxySettingsReplication extends _$ProxySettingsReplication {
ref.listen(
fireImmediately: true,
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.proxyPrivateTabsTor,
),
(previous, next) async {
@@ -7,7 +7,7 @@ part of 'proxy_settings_replication.dart';
// **************************************************************************
String _$proxySettingsReplicationHash() =>
r'4476bab659f09de0866d0b3ae10d54ccb996335d';
r'e9f3adc73349c6d33fc7009412984b1daa4cc8da';
/// See also [ProxySettingsReplication].
@ProviderFor(ProxySettingsReplication)
@@ -65,7 +65,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
);
final showExtensionShortcut = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.showExtensionShortcut,
),
);
@@ -209,7 +209,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
onPressed: () async {
final isPrivate =
ref
.read(generalSettingsRepositoryProvider)
.read(generalSettingsWithDefaultsProvider)
.defaultCreateTabType ==
TabType.private;
@@ -268,7 +268,7 @@ class BrowserBottomAppBar extends HookConsumerWidget {
onPressed: () async {
final isPrivate =
ref
.read(generalSettingsRepositoryProvider)
.read(generalSettingsWithDefaultsProvider)
.defaultCreateTabType ==
TabType.private;
@@ -85,13 +85,14 @@ class _BrowserViewState extends ConsumerState<BrowserView>
@override
Widget build(BuildContext context) {
useOnInitialization(() async {
await ref.read(generalSettingsRepositoryProvider.notifier).fetch().then((
settings,
) async {
await ref
.read(browserDataServiceProvider.notifier)
.deleteDataOnEngineStart(settings.deleteBrowsingDataOnQuit);
});
await ref
.read(generalSettingsRepositoryProvider.notifier)
.fetchSettings()
.then((settings) async {
await ref
.read(browserDataServiceProvider.notifier)
.deleteDataOnEngineStart(settings.deleteBrowsingDataOnQuit);
});
});
final hasTab = ref.watch(
@@ -313,7 +314,7 @@ class _BrowserViewState extends ConsumerState<BrowserView>
widget.suggestionTimeout) {
//Don't do anything if a child route is active
if (GoRouterState.of(context).topRoute?.name == BrowserRoute.name) {
final settings = ref.read(generalSettingsRepositoryProvider);
final settings = ref.read(generalSettingsWithDefaultsProvider);
unawaited(
showSuggestNewTabMessage(
@@ -129,7 +129,7 @@ class _TabSheetHeader extends HookConsumerWidget {
);
final enableAiFeatures = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(settings) => settings.enableLocalAiFeatures,
),
);
@@ -415,7 +415,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
tabSuggestionsControllerProvider,
);
final enableAiFeatures = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(settings) => settings.enableLocalAiFeatures,
),
);
@@ -605,7 +605,7 @@ class ViewTabsSheetWidget extends HookConsumerWidget {
),
child: FloatingActionButton.small(
onPressed: () async {
final settings = ref.read(generalSettingsRepositoryProvider);
final settings = ref.read(generalSettingsWithDefaultsProvider);
await SearchRoute(
tabType:
@@ -786,7 +786,7 @@ class ViewTabTreesSheetWidget extends HookConsumerWidget {
),
child: FloatingActionButton.small(
onPressed: () async {
final settings = ref.read(generalSettingsRepositoryProvider);
final settings = ref.read(generalSettingsWithDefaultsProvider);
await SearchRoute(
tabType:
@@ -39,7 +39,7 @@ class TabCreationMenu extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final createChildTabsOption = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.createChildTabsOption,
),
);
@@ -47,7 +47,9 @@ class OpenImageInNewTab extends HookConsumerWidget {
final currentTab = ref.read(selectedTabStateProvider);
final isPrivate =
currentTab?.isPrivate ??
ref.read(generalSettingsRepositoryProvider).defaultCreateTabType ==
ref
.read(generalSettingsWithDefaultsProvider)
.defaultCreateTabType ==
TabType.private;
final tabId = await ref
@@ -47,7 +47,9 @@ class OpenInNewTab extends HookConsumerWidget {
final currentTab = ref.read(selectedTabStateProvider);
final isPrivate =
currentTab?.isPrivate ??
ref.read(generalSettingsRepositoryProvider).defaultCreateTabType ==
ref
.read(generalSettingsWithDefaultsProvider)
.defaultCreateTabType ==
TabType.private;
final tabId = await ref
@@ -34,13 +34,13 @@ class ReaderButton extends HookConsumerWidget {
final readerChanging = ref.watch(readerableScreenControllerProvider);
final enableReadability = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.enableReadability,
),
);
final enforceReadability = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.enforceReadability,
),
);
@@ -33,7 +33,7 @@ part 'search_suggestions.g.dart';
@Riverpod(keepAlive: true)
ISearchSuggestionProvider defaultSearchSuggestions(Ref ref) {
final provider = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.defaultSearchSuggestionsProvider,
),
);
@@ -7,7 +7,7 @@ part of 'search_suggestions.dart';
// **************************************************************************
String _$defaultSearchSuggestionsHash() =>
r'eb96a5db465422558a26e22abb3f843a82c17452';
r'6d7a387c7daeb790a4c9a5cdc105d2a2bdbacd2b';
/// See also [defaultSearchSuggestions].
@ProviderFor(defaultSearchSuggestions)
@@ -52,7 +52,7 @@ class SearchScreen extends HookConsumerWidget {
final formKey = useMemoized(() => GlobalKey<FormState>());
final createChildTabsOption = ref.watch(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(value) => value.createChildTabsOption,
),
);
@@ -61,7 +61,7 @@ class GeckoInferenceRepository extends _$GeckoInferenceRepository {
Future<String?> predictDocumentTopic(Set<String> titles) async {
if (!ref.read(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(settings) => settings.enableLocalAiFeatures,
),
)) {
@@ -97,7 +97,7 @@ class GeckoInferenceRepository extends _$GeckoInferenceRepository {
required List<String> unassignedDocumentsInput,
}) async {
if (!ref.read(
generalSettingsRepositoryProvider.select(
generalSettingsWithDefaultsProvider.select(
(settings) => settings.enableLocalAiFeatures,
),
)) {
@@ -276,7 +276,7 @@ class _ContainerTabSuggestionsProviderElement
}
String _$geckoInferenceRepositoryHash() =>
r'170bd0b67e5f1edc43ed97d4535f41353fb8796e';
r'6099998a3f49fc4faf650878ab4afd6268c593e2';
/// See also [GeckoInferenceRepository].
@ProviderFor(GeckoInferenceRepository)