add setting to control mozAddonManager API

This commit is contained in:
Fabian Freund
2026-03-11 13:06:23 +01:00
parent 05e68c1dab
commit c189987339
10 changed files with 79 additions and 14 deletions
-5
View File
@@ -1106,11 +1106,6 @@
"title": "Disable add-on metadata cache updates",
"description": "Reduces background refreshes of extension metadata"
},
"privacy.resistFingerprinting.block_mozAddonManager": {
"value": true,
"title": "Block mozAddonManager exposure",
"description": "Prevents websites from querying installed add-ons through this legacy API"
},
"extensions.postDownloadThirdPartyPrompt": {
"value": false,
"title": "Never bypass extension install prompts",
@@ -206,6 +206,7 @@ class _AdvancedSection extends StatelessWidget {
_FissionEnabledTile(),
_IsolatedProcessEnabledTile(),
_AppZygoteProcessEnabledTile(),
_ExtensionsWebAPIEnabledTile(),
],
);
}
@@ -839,6 +840,39 @@ class _AppZygoteProcessEnabledTile extends HookConsumerWidget {
}
}
class _ExtensionsWebAPIEnabledTile extends HookConsumerWidget {
const _ExtensionsWebAPIEnabledTile();
@override
Widget build(BuildContext context, WidgetRef ref) {
final extensionsWebAPIEnabled = ref.watch(
engineSettingsWithDefaultsProvider.select(
(s) => s.extensionsWebAPIEnabled,
),
);
return SwitchListTile.adaptive(
title: const Text('Extensions Web API'),
subtitle: const Text(
'Enable mozAddonManager API exposure for web content and extension pages. Requires app restart.',
),
secondary: const Icon(Icons.extension),
value: extensionsWebAPIEnabled,
onChanged: (value) async {
await ref
.read(saveEngineSettingsControllerProvider.notifier)
.save(
(currentSettings) =>
currentSettings.copyWith.extensionsWebAPIEnabled(value),
);
if (context.mounted) {
await _showRestartDialog(context, ref);
}
},
);
}
}
Future<void> _showRestartDialog(BuildContext context, WidgetRef ref) async {
final result = await showQuitBrowserDialog(context);
if (result == true && context.mounted) {
@@ -123,6 +123,8 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool get isolatedProcessEnabled => super.isolatedProcessEnabled!;
@override
bool get appZygoteProcessEnabled => super.appZygoteProcessEnabled!;
@override
bool get extensionsWebAPIEnabled => super.extensionsWebAPIEnabled!;
final QueryParameterStripping queryParameterStripping;
@@ -202,6 +204,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
required super.fissionEnabled,
required super.isolatedProcessEnabled,
required super.appZygoteProcessEnabled,
required super.extensionsWebAPIEnabled,
required super.lnaBlocking,
required super.lnaBlockTrackers,
required super.lnaEnabled,
@@ -252,6 +255,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
bool? extensionsWebAPIEnabled,
bool? lnaBlocking,
bool? lnaBlockTrackers,
bool? lnaEnabled,
@@ -317,6 +321,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
fissionEnabled: fissionEnabled ?? true,
isolatedProcessEnabled: isolatedProcessEnabled ?? false,
appZygoteProcessEnabled: appZygoteProcessEnabled ?? false,
extensionsWebAPIEnabled: extensionsWebAPIEnabled ?? true,
lnaBlocking: lnaBlocking,
lnaBlockTrackers: lnaBlockTrackers,
lnaEnabled: lnaEnabled,
@@ -381,6 +386,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
extensionsWebAPIEnabled,
lnaBlocking,
lnaBlockTrackers,
lnaEnabled,
@@ -117,6 +117,8 @@ abstract class _$EngineSettingsCWProxy {
EngineSettings appZygoteProcessEnabled(bool? appZygoteProcessEnabled);
EngineSettings extensionsWebAPIEnabled(bool? extensionsWebAPIEnabled);
EngineSettings lnaBlocking(bool? lnaBlocking);
EngineSettings lnaBlockTrackers(bool? lnaBlockTrackers);
@@ -175,6 +177,7 @@ abstract class _$EngineSettingsCWProxy {
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
bool? extensionsWebAPIEnabled,
bool? lnaBlocking,
bool? lnaBlockTrackers,
bool? lnaEnabled,
@@ -383,6 +386,10 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
EngineSettings appZygoteProcessEnabled(bool? appZygoteProcessEnabled) =>
call(appZygoteProcessEnabled: appZygoteProcessEnabled);
@override
EngineSettings extensionsWebAPIEnabled(bool? extensionsWebAPIEnabled) =>
call(extensionsWebAPIEnabled: extensionsWebAPIEnabled);
@override
EngineSettings lnaBlocking(bool? lnaBlocking) =>
call(lnaBlocking: lnaBlocking);
@@ -449,6 +456,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
Object? fissionEnabled = const $CopyWithPlaceholder(),
Object? isolatedProcessEnabled = const $CopyWithPlaceholder(),
Object? appZygoteProcessEnabled = const $CopyWithPlaceholder(),
Object? extensionsWebAPIEnabled = const $CopyWithPlaceholder(),
Object? lnaBlocking = const $CopyWithPlaceholder(),
Object? lnaBlockTrackers = const $CopyWithPlaceholder(),
Object? lnaEnabled = const $CopyWithPlaceholder(),
@@ -662,6 +670,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
? _value.appZygoteProcessEnabled
// ignore: cast_nullable_to_non_nullable
: appZygoteProcessEnabled as bool?,
extensionsWebAPIEnabled:
extensionsWebAPIEnabled == const $CopyWithPlaceholder()
? _value.extensionsWebAPIEnabled
// ignore: cast_nullable_to_non_nullable
: extensionsWebAPIEnabled as bool?,
lnaBlocking: lnaBlocking == const $CopyWithPlaceholder()
? _value.lnaBlocking
// ignore: cast_nullable_to_non_nullable
@@ -781,6 +794,7 @@ EngineSettings _$EngineSettingsFromJson(
fissionEnabled: json['fissionEnabled'] as bool?,
isolatedProcessEnabled: json['isolatedProcessEnabled'] as bool?,
appZygoteProcessEnabled: json['appZygoteProcessEnabled'] as bool?,
extensionsWebAPIEnabled: json['extensionsWebAPIEnabled'] as bool?,
lnaBlocking: json['lnaBlocking'] as bool?,
lnaBlockTrackers: json['lnaBlockTrackers'] as bool?,
lnaEnabled: json['lnaEnabled'] as bool?,
@@ -839,6 +853,7 @@ Map<String, dynamic> _$EngineSettingsToJson(
'fissionEnabled': instance.fissionEnabled,
'isolatedProcessEnabled': instance.isolatedProcessEnabled,
'appZygoteProcessEnabled': instance.appZygoteProcessEnabled,
'extensionsWebAPIEnabled': instance.extensionsWebAPIEnabled,
'queryParameterStripping':
_$QueryParameterStrippingEnumMap[instance.queryParameterStripping]!,
'bounceTrackingProtectionMode':
@@ -212,6 +212,10 @@ class EngineSettingsRepository extends _$EngineSettingsRepository {
DriftSqlType.bool,
db.typeMapping,
),
'extensionsWebAPIEnabled': settings['extensionsWebAPIEnabled']?.readAs(
DriftSqlType.bool,
db.typeMapping,
),
// LNA Settings
'lnaBlocking': settings['lnaBlocking']?.readAs(
DriftSqlType.bool,
@@ -34,7 +34,7 @@ final class EngineSettingsRepositoryProvider
}
String _$engineSettingsRepositoryHash() =>
r'3d062d316bfcb86f3216846ed2cf5edd148460eb';
r'4abe41cfeba8e39484683033f11c54be644fa2b2';
abstract class _$EngineSettingsRepository
extends $StreamNotifier<EngineSettings> {
@@ -85,7 +85,7 @@ object EngineProvider {
// About config it's no longer enabled by default
builder.aboutConfigEnabled(true)
builder.extensionsProcessEnabled(true)
builder.extensionsWebAPIEnabled(false)
builder.extensionsWebAPIEnabled(true)
//builder.debugLogging(components.logLevel == Log.Priority.DEBUG)
builder.consoleOutput(components.logLevel == Log.Priority.DEBUG)
builder.contentBlocking(contentBlocking.build())
@@ -96,6 +96,7 @@ object EngineProvider {
settings.fissionEnabled?.let { builder.fissionEnabled(it) }
settings.isolatedProcessEnabled?.let { builder.isolatedProcessEnabled(it) }
settings.appZygoteProcessEnabled?.let { builder.appZygoteProcessEnabled(it) }
settings.extensionsWebAPIEnabled?.let { builder.extensionsWebAPIEnabled(it) }
settings.displayDensityOverride?.let { builder.displayDensityOverride(it.toFloat()) }
val screenWidth = settings.screenWidthOverride
val screenHeight = settings.screenHeightOverride
@@ -2303,6 +2303,7 @@ data class GeckoEngineSettings (
val fissionEnabled: Boolean? = null,
val isolatedProcessEnabled: Boolean? = null,
val appZygoteProcessEnabled: Boolean? = null,
val extensionsWebAPIEnabled: Boolean? = null,
val lnaBlocking: Boolean? = null,
val lnaBlockTrackers: Boolean? = null,
val lnaEnabled: Boolean? = null
@@ -2348,10 +2349,11 @@ data class GeckoEngineSettings (
val fissionEnabled = pigeonVar_list[35] as Boolean?
val isolatedProcessEnabled = pigeonVar_list[36] as Boolean?
val appZygoteProcessEnabled = pigeonVar_list[37] as Boolean?
val lnaBlocking = pigeonVar_list[38] as Boolean?
val lnaBlockTrackers = pigeonVar_list[39] as Boolean?
val lnaEnabled = pigeonVar_list[40] 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, lnaBlocking, lnaBlockTrackers, lnaEnabled)
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)
}
}
fun toList(): List<Any?> {
@@ -2394,6 +2396,7 @@ data class GeckoEngineSettings (
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
extensionsWebAPIEnabled,
lnaBlocking,
lnaBlockTrackers,
lnaEnabled,
@@ -2721,6 +2721,7 @@ class GeckoEngineSettings {
this.fissionEnabled,
this.isolatedProcessEnabled,
this.appZygoteProcessEnabled,
this.extensionsWebAPIEnabled,
this.lnaBlocking,
this.lnaBlockTrackers,
this.lnaEnabled,
@@ -2814,6 +2815,8 @@ class GeckoEngineSettings {
bool? appZygoteProcessEnabled;
bool? extensionsWebAPIEnabled;
bool? lnaBlocking;
bool? lnaBlockTrackers;
@@ -2860,6 +2863,7 @@ class GeckoEngineSettings {
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
extensionsWebAPIEnabled,
lnaBlocking,
lnaBlockTrackers,
lnaEnabled,
@@ -2910,9 +2914,10 @@ class GeckoEngineSettings {
fissionEnabled: result[35] as bool?,
isolatedProcessEnabled: result[36] as bool?,
appZygoteProcessEnabled: result[37] as bool?,
lnaBlocking: result[38] as bool?,
lnaBlockTrackers: result[39] as bool?,
lnaEnabled: result[40] as bool?,
extensionsWebAPIEnabled: result[38] as bool?,
lnaBlocking: result[39] as bool?,
lnaBlockTrackers: result[40] as bool?,
lnaEnabled: result[41] as bool?,
);
}
@@ -892,6 +892,7 @@ class GeckoEngineSettings {
final bool? fissionEnabled;
final bool? isolatedProcessEnabled;
final bool? appZygoteProcessEnabled;
final bool? extensionsWebAPIEnabled;
// Local Network Access (LNA) Settings
final bool? lnaBlocking;
@@ -937,6 +938,7 @@ class GeckoEngineSettings {
this.fissionEnabled,
this.isolatedProcessEnabled,
this.appZygoteProcessEnabled,
this.extensionsWebAPIEnabled,
this.lnaBlocking,
this.lnaBlockTrackers,
this.lnaEnabled,