diff --git a/app/lib/features/settings/presentation/screens/web_engine_settings.dart b/app/lib/features/settings/presentation/screens/web_engine_settings.dart index ce64009b..ed10f401 100644 --- a/app/lib/features/settings/presentation/screens/web_engine_settings.dart +++ b/app/lib/features/settings/presentation/screens/web_engine_settings.dart @@ -463,6 +463,22 @@ class WebEngineSettingsScreen extends HookConsumerWidget { ], ), ), + SwitchListTile.adaptive( + title: const Text('Built-in PDF Viewer'), + subtitle: const Text( + 'Open PDF files directly in the browser without downloading', + ), + secondary: const Icon(MdiIcons.filePdfBox), + value: engineSettings.enablePdfJs, + onChanged: (value) async { + await ref + .read(saveEngineSettingsControllerProvider.notifier) + .save( + (currentSettings) => + currentSettings.copyWith.enablePdfJs(value), + ); + }, + ), ListTile( title: const Text('Web Engine Hardening'), contentPadding: const EdgeInsets.symmetric( diff --git a/app/lib/features/user/data/models/engine_settings.dart b/app/lib/features/user/data/models/engine_settings.dart index 66d4f295..22f12c73 100644 --- a/app/lib/features/user/data/models/engine_settings.dart +++ b/app/lib/features/user/data/models/engine_settings.dart @@ -106,6 +106,8 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { bounceTrackingProtectionMode: bounceTrackingProtectionMode, ); + final bool enablePdfJs; + EngineSettings({ required super.javascriptEnabled, required super.trackingProtectionPolicy, @@ -127,6 +129,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { required this.dohDefaultProviderUrl, required this.dohExceptionsList, required super.fingerprintingProtectionOverrides, + required this.enablePdfJs, }); EngineSettings.withDefaults({ @@ -150,6 +153,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { String? dohDefaultProviderUrl, List? dohExceptionsList, String? fingerprintingProtectionOverrides, + bool? enablePdfJs, }) : queryParameterStripping = queryParameterStripping ?? QueryParameterStripping.disabled, bounceTrackingProtectionMode = @@ -160,6 +164,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { dohDefaultProviderUrl = dohDefaultProviderUrl ?? BuiltInDohProviders.quad9.url, dohExceptionsList = dohExceptionsList ?? [], + enablePdfJs = enablePdfJs ?? true, super( javascriptEnabled: javascriptEnabled ?? true, trackingProtectionPolicy: @@ -220,5 +225,6 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable { dohDefaultProviderUrl, dohExceptionsList, fingerprintingProtectionOverrides, + enablePdfJs, ]; } diff --git a/app/lib/features/user/data/models/engine_settings.g.dart b/app/lib/features/user/data/models/engine_settings.g.dart index d4832b33..c7be94e6 100644 --- a/app/lib/features/user/data/models/engine_settings.g.dart +++ b/app/lib/features/user/data/models/engine_settings.g.dart @@ -65,6 +65,8 @@ abstract class _$EngineSettingsCWProxy { String? fingerprintingProtectionOverrides, ); + EngineSettings enablePdfJs(bool enablePdfJs); + /// Creates a new instance with the provided field values. /// Passing `null` to a nullable field nullifies it, while `null` for a non-nullable field is ignored. To update a single field use `EngineSettings(...).copyWith.fieldName(value)`. /// @@ -93,6 +95,7 @@ abstract class _$EngineSettingsCWProxy { String dohDefaultProviderUrl, List dohExceptionsList, String? fingerprintingProtectionOverrides, + bool enablePdfJs, }); } @@ -200,6 +203,10 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { fingerprintingProtectionOverrides: fingerprintingProtectionOverrides, ); + @override + EngineSettings enablePdfJs(bool enablePdfJs) => + call(enablePdfJs: enablePdfJs); + @override /// Creates a new instance with the provided field values. /// Passing `null` to a nullable field nullifies it, while `null` for a non-nullable field is ignored. To update a single field use `EngineSettings(...).copyWith.fieldName(value)`. @@ -231,6 +238,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { Object? dohDefaultProviderUrl = const $CopyWithPlaceholder(), Object? dohExceptionsList = const $CopyWithPlaceholder(), Object? fingerprintingProtectionOverrides = const $CopyWithPlaceholder(), + Object? enablePdfJs = const $CopyWithPlaceholder(), }) { return EngineSettings( javascriptEnabled: javascriptEnabled == const $CopyWithPlaceholder() @@ -337,6 +345,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { ? _value.fingerprintingProtectionOverrides // ignore: cast_nullable_to_non_nullable : fingerprintingProtectionOverrides as String?, + enablePdfJs: + enablePdfJs == const $CopyWithPlaceholder() || enablePdfJs == null + ? _value.enablePdfJs + // ignore: cast_nullable_to_non_nullable + : enablePdfJs as bool, ); } } @@ -408,6 +421,7 @@ EngineSettings _$EngineSettingsFromJson(Map json) => .toList(), fingerprintingProtectionOverrides: json['fingerprintingProtectionOverrides'] as String?, + enablePdfJs: json['enablePdfJs'] as bool?, ); Map _$EngineSettingsToJson( @@ -446,6 +460,7 @@ Map _$EngineSettingsToJson( 'dohProviderUrl': instance.dohProviderUrl, 'dohDefaultProviderUrl': instance.dohDefaultProviderUrl, 'dohExceptionsList': instance.dohExceptionsList, + 'enablePdfJs': instance.enablePdfJs, }; const _$TrackingProtectionPolicyEnumMap = { diff --git a/app/lib/features/user/domain/repositories/engine_settings.dart b/app/lib/features/user/domain/repositories/engine_settings.dart index 041b7029..11422211 100644 --- a/app/lib/features/user/domain/repositories/engine_settings.dart +++ b/app/lib/features/user/domain/repositories/engine_settings.dart @@ -120,6 +120,10 @@ class EngineSettingsRepository extends _$EngineSettingsRepository { DriftSqlType.string, db.typeMapping, ), + 'enablePdfJs': settings['enablePdfJs']?.readAs( + DriftSqlType.bool, + db.typeMapping, + ), }); } diff --git a/app/lib/features/user/domain/repositories/engine_settings.g.dart b/app/lib/features/user/domain/repositories/engine_settings.g.dart index 862db30e..ffeb433e 100644 --- a/app/lib/features/user/domain/repositories/engine_settings.g.dart +++ b/app/lib/features/user/domain/repositories/engine_settings.g.dart @@ -34,7 +34,7 @@ final class EngineSettingsRepositoryProvider } String _$engineSettingsRepositoryHash() => - r'17a4e505320e92a90ed8b62db263c283c5eaa839'; + r'cd087c5631faaddf1fced31569b0fd577d6030a7'; abstract class _$EngineSettingsRepository extends $StreamNotifier {