mainly refactoring & addons

This commit is contained in:
Fabian Freund
2024-10-29 10:03:24 +01:00
parent 91a4319b28
commit 0710116feb
127 changed files with 4234 additions and 1815 deletions
@@ -2,6 +2,7 @@
export 'src/data/models/load_url_flags.dart';
export 'src/data/models/source.dart';
export 'src/domain/entities/default_selection_actions.dart';
export 'src/domain/services/gecko_addon.dart';
export 'src/domain/services/gecko_cookie.dart';
export 'src/domain/services/gecko_engine_settings.dart';
export 'src/domain/services/gecko_event.dart';
@@ -21,4 +22,6 @@ export 'src/pigeons/gecko.g.dart'
Resource,
ResourceSize,
SecurityInfoState,
TabContentState;
TabContentState,
WebExtensionActionType,
WebExtensionData;
@@ -0,0 +1,128 @@
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_mozilla_components/src/extensions/subject.dart';
import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
import 'package:rxdart/rxdart.dart';
typedef ExtensionDataEvent = ({String extensionId, WebExtensionData? data});
typedef ExtensionIconEvent = ({String extensionId, Uint8List bytes});
final _apiInstance = GeckoAddonsApi();
class GeckoAddonService extends GeckoAddonEvents {
final GeckoAddonsApi _api;
final _browserExtensionSubject = ReplaySubject<ExtensionDataEvent>();
final _pageExtensionSubject = ReplaySubject<ExtensionDataEvent>();
final _browserIconSubject = ReplaySubject<ExtensionIconEvent>();
final _pageIconSubject = ReplaySubject<ExtensionIconEvent>();
Stream<ExtensionDataEvent> get browserExtensionStream =>
_browserExtensionSubject.stream;
Stream<ExtensionDataEvent> get pageExtensionStream =>
_pageExtensionSubject.stream;
Stream<ExtensionIconEvent> get browserIconStream =>
_browserIconSubject.stream;
Stream<ExtensionIconEvent> get pageIconStream => _pageIconSubject.stream;
Future<void> startAddonManagerActivity() {
return _api.startAddonManagerActivity();
}
Future<void> invokeAddonAction(
String extensionId,
WebExtensionActionType actionType,
) {
return _api.invokeAddonAction(extensionId, actionType);
}
@override
void onRemoveWebExtensionAction(
int timestamp,
String extensionId,
WebExtensionActionType actionType,
) {
switch (actionType) {
case WebExtensionActionType.browser:
_browserExtensionSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, data: null),
);
case WebExtensionActionType.page:
_pageExtensionSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, data: null),
);
}
}
@override
void onUpdateWebExtensionIcon(
int timestamp,
String extensionId,
WebExtensionActionType actionType,
Uint8List icon,
) {
switch (actionType) {
case WebExtensionActionType.browser:
_browserIconSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, bytes: icon),
);
case WebExtensionActionType.page:
_pageIconSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, bytes: icon),
);
}
}
@override
void onUpsertWebExtensionAction(
int timestamp,
String extensionId,
WebExtensionActionType actionType,
WebExtensionData extensionData,
) {
switch (actionType) {
case WebExtensionActionType.browser:
_browserExtensionSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, data: extensionData),
);
case WebExtensionActionType.page:
_pageExtensionSubject.addWhenMoreRecent(
timestamp,
extensionId,
(extensionId: extensionId, data: extensionData),
);
}
}
GeckoAddonService.setUp({
BinaryMessenger? binaryMessenger,
GeckoAddonsApi? api,
String messageChannelSuffix = '',
}) : _api = api ?? _apiInstance {
GeckoAddonEvents.setUp(
this,
binaryMessenger: binaryMessenger,
messageChannelSuffix: messageChannelSuffix,
);
}
void dispose() {
unawaited(_browserExtensionSubject.close());
unawaited(_pageExtensionSubject.close());
unawaited(_browserIconSubject.close());
unawaited(_pageIconSubject.close());
}
}
@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_mozilla_components/src/extensions/subject.dart';
import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
import 'package:rxdart/rxdart.dart';
@@ -12,8 +13,6 @@ typedef ThumbnailEvent = ({String tabId, Uint8List? bytes});
typedef FindResultsEvent = ({String tabId, List<FindResultState> results});
class GeckoEventService extends GeckoStateEvents {
final _lastEventTimes = <Subject, Map<dynamic, int>>{};
// Stream controllers
final _viewStateSubject = BehaviorSubject.seeded(false);
final _engineStateSubject = BehaviorSubject.seeded(false);
@@ -48,35 +47,20 @@ class GeckoEventService extends GeckoStateEvents {
Stream<String> get tabAddedStream => _tabAddedSubject.stream;
void _addWhenMoreRecent<T>(
Subject<T> subject,
int timestamp,
dynamic identifier,
T value,
) {
_lastEventTimes[subject] ??= {};
if ((_lastEventTimes[subject]?[identifier] ?? 0) < timestamp) {
_lastEventTimes[subject]![identifier] = timestamp;
subject.add(value);
}
}
@override
void onViewReadyStateChange(int timestamp, bool state) {
_addWhenMoreRecent(_viewStateSubject, timestamp, null, state);
_viewStateSubject.addWhenMoreRecent(timestamp, null, state);
}
@override
void onEngineReadyStateChange(int timestamp, bool state) {
_addWhenMoreRecent(_engineStateSubject, timestamp, null, state);
_engineStateSubject.addWhenMoreRecent(timestamp, null, state);
}
// Overridden methods
@override
void onTabListChange(int timestamp, List<String?> tabIds) {
_addWhenMoreRecent(
_tabListSubject,
_tabListSubject.addWhenMoreRecent(
timestamp,
null,
tabIds.nonNulls.toList(),
@@ -85,18 +69,17 @@ class GeckoEventService extends GeckoStateEvents {
@override
void onSelectedTabChange(int timestamp, String? id) {
_addWhenMoreRecent(_selectedTabSubject, timestamp, id, id);
_selectedTabSubject.addWhenMoreRecent(timestamp, id, id);
}
@override
void onTabContentStateChange(int timestamp, TabContentState state) {
_addWhenMoreRecent(_tabContentSubject, timestamp, state.id, state);
_tabContentSubject.addWhenMoreRecent(timestamp, state.id, state);
}
@override
void onHistoryStateChange(int timestamp, String id, HistoryState state) {
_addWhenMoreRecent(
_historySubject,
_historySubject.addWhenMoreRecent(
timestamp,
id,
(tabId: id, history: state),
@@ -109,8 +92,7 @@ class GeckoEventService extends GeckoStateEvents {
String id,
ReaderableState state,
) {
_addWhenMoreRecent(
_readerableSubject,
_readerableSubject.addWhenMoreRecent(
timestamp,
id,
(tabId: id, readerable: state),
@@ -123,8 +105,7 @@ class GeckoEventService extends GeckoStateEvents {
String id,
SecurityInfoState state,
) {
_addWhenMoreRecent(
_securityInfoSubject,
_securityInfoSubject.addWhenMoreRecent(
timestamp,
id,
(tabId: id, securityInfo: state),
@@ -133,13 +114,12 @@ class GeckoEventService extends GeckoStateEvents {
@override
void onIconChange(int timestamp, String id, Uint8List? bytes) {
_addWhenMoreRecent(_iconSubject, timestamp, id, (tabId: id, bytes: bytes));
_iconSubject.addWhenMoreRecent(timestamp, id, (tabId: id, bytes: bytes));
}
@override
void onThumbnailChange(int timestamp, String id, Uint8List? bytes) {
_addWhenMoreRecent(
_thumbnailSubject,
_thumbnailSubject.addWhenMoreRecent(
timestamp,
id,
(tabId: id, bytes: bytes),
@@ -148,8 +128,7 @@ class GeckoEventService extends GeckoStateEvents {
@override
void onFindResults(int timestamp, String id, List<FindResultState?> results) {
_addWhenMoreRecent(
_findResultsSubject,
_findResultsSubject.addWhenMoreRecent(
timestamp,
id,
(tabId: id, results: results.nonNulls.toList()),
@@ -158,8 +137,7 @@ class GeckoEventService extends GeckoStateEvents {
@override
void onTabAdded(int timestamp, String tabId) {
_addWhenMoreRecent(
_tabAddedSubject,
_tabAddedSubject.addWhenMoreRecent(
timestamp,
null,
tabId,
@@ -120,12 +120,12 @@ class GeckoSessionService {
return _api.purgeHistory();
}
Future<Uint8List?> requestScreenshot() {
Future<Uint8List?> requestScreenshot(bool sendBack) {
if (tabId != null) {
throw Exception('Screenshot only allowed for selected (visible) tab.');
}
return _api.requestScreenshot();
return _api.requestScreenshot(sendBack);
}
Future<void> updateLastAccess({
@@ -0,0 +1,33 @@
import 'package:rxdart/rxdart.dart';
final _lastEventTimes = <Subject, Map<dynamic, int>>{};
extension SubjectAddRecent<T> on Subject<T> {
void addWhenMoreRecent(
int timestamp,
dynamic identifier,
T value,
) {
_lastEventTimes[this] ??= {};
if ((_lastEventTimes[this]?[identifier] ?? 0) < timestamp) {
_lastEventTimes[this]![identifier] = timestamp;
add(value);
}
}
void updateWhenMoreRecent(
int timestamp,
dynamic identifier,
T Function(T? currentValue) update,
) {
assert(this is BehaviorSubject, 'This only works with BehaviourSubject');
_lastEventTimes[this] ??= {};
if ((_lastEventTimes[this]?[identifier] ?? 0) < timestamp) {
_lastEventTimes[this]![identifier] = timestamp;
add(update((this as BehaviorSubject<T>).valueOrNull));
}
}
}
@@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v22.5.0), do not edit directly.
// Autogenerated from Pigeon (v22.6.0), do not edit directly.
// See also: https://pub.dev/packages/pigeon
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers
@@ -83,6 +83,11 @@ enum SelectionPattern {
email,
}
enum WebExtensionActionType {
browser,
page,
}
/// Translation options that map to the Gecko Translations Options.
///
/// @property downloadModel If the necessary models should be downloaded on request. If false, then
@@ -1022,6 +1027,52 @@ class CustomSelectionAction {
}
}
class WebExtensionData {
WebExtensionData({
required this.extensionId,
this.title,
this.enabled,
this.badgeText,
this.badgeTextColor,
this.badgeBackgroundColor,
});
String extensionId;
String? title;
bool? enabled;
String? badgeText;
int? badgeTextColor;
int? badgeBackgroundColor;
Object encode() {
return <Object?>[
extensionId,
title,
enabled,
badgeText,
badgeTextColor,
badgeBackgroundColor,
];
}
static WebExtensionData decode(Object result) {
result as List<Object?>;
return WebExtensionData(
extensionId: result[0]! as String,
title: result[1] as String?,
enabled: result[2] as bool?,
badgeText: result[3] as String?,
badgeTextColor: result[4] as int?,
badgeBackgroundColor: result[5] as int?,
);
}
}
class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec();
@@ -1048,78 +1099,84 @@ class _PigeonCodec extends StandardMessageCodec {
} else if (value is SelectionPattern) {
buffer.putUint8(134);
writeValue(buffer, value.index);
} else if (value is TranslationOptions) {
} else if (value is WebExtensionActionType) {
buffer.putUint8(135);
writeValue(buffer, value.encode());
} else if (value is ReaderState) {
writeValue(buffer, value.index);
} else if (value is TranslationOptions) {
buffer.putUint8(136);
writeValue(buffer, value.encode());
} else if (value is LastMediaAccessState) {
} else if (value is ReaderState) {
buffer.putUint8(137);
writeValue(buffer, value.encode());
} else if (value is HistoryMetadataKey) {
} else if (value is LastMediaAccessState) {
buffer.putUint8(138);
writeValue(buffer, value.encode());
} else if (value is PackageCategoryValue) {
} else if (value is HistoryMetadataKey) {
buffer.putUint8(139);
writeValue(buffer, value.encode());
} else if (value is ExternalPackage) {
} else if (value is PackageCategoryValue) {
buffer.putUint8(140);
writeValue(buffer, value.encode());
} else if (value is LoadUrlFlagsValue) {
} else if (value is ExternalPackage) {
buffer.putUint8(141);
writeValue(buffer, value.encode());
} else if (value is SourceValue) {
} else if (value is LoadUrlFlagsValue) {
buffer.putUint8(142);
writeValue(buffer, value.encode());
} else if (value is TabState) {
} else if (value is SourceValue) {
buffer.putUint8(143);
writeValue(buffer, value.encode());
} else if (value is RecoverableTab) {
} else if (value is TabState) {
buffer.putUint8(144);
writeValue(buffer, value.encode());
} else if (value is RecoverableBrowserState) {
} else if (value is RecoverableTab) {
buffer.putUint8(145);
writeValue(buffer, value.encode());
} else if (value is IconRequest) {
} else if (value is RecoverableBrowserState) {
buffer.putUint8(146);
writeValue(buffer, value.encode());
} else if (value is ResourceSize) {
} else if (value is IconRequest) {
buffer.putUint8(147);
writeValue(buffer, value.encode());
} else if (value is Resource) {
} else if (value is ResourceSize) {
buffer.putUint8(148);
writeValue(buffer, value.encode());
} else if (value is IconResult) {
} else if (value is Resource) {
buffer.putUint8(149);
writeValue(buffer, value.encode());
} else if (value is CookiePartitionKey) {
} else if (value is IconResult) {
buffer.putUint8(150);
writeValue(buffer, value.encode());
} else if (value is Cookie) {
} else if (value is CookiePartitionKey) {
buffer.putUint8(151);
writeValue(buffer, value.encode());
} else if (value is HistoryItem) {
} else if (value is Cookie) {
buffer.putUint8(152);
writeValue(buffer, value.encode());
} else if (value is HistoryState) {
} else if (value is HistoryItem) {
buffer.putUint8(153);
writeValue(buffer, value.encode());
} else if (value is ReaderableState) {
} else if (value is HistoryState) {
buffer.putUint8(154);
writeValue(buffer, value.encode());
} else if (value is SecurityInfoState) {
} else if (value is ReaderableState) {
buffer.putUint8(155);
writeValue(buffer, value.encode());
} else if (value is TabContentState) {
} else if (value is SecurityInfoState) {
buffer.putUint8(156);
writeValue(buffer, value.encode());
} else if (value is FindResultState) {
} else if (value is TabContentState) {
buffer.putUint8(157);
writeValue(buffer, value.encode());
} else if (value is CustomSelectionAction) {
} else if (value is FindResultState) {
buffer.putUint8(158);
writeValue(buffer, value.encode());
} else if (value is CustomSelectionAction) {
buffer.putUint8(159);
writeValue(buffer, value.encode());
} else if (value is WebExtensionData) {
buffer.putUint8(160);
writeValue(buffer, value.encode());
} else {
super.writeValue(buffer, value);
}
@@ -1147,53 +1204,58 @@ class _PigeonCodec extends StandardMessageCodec {
final int? value = readValue(buffer) as int?;
return value == null ? null : SelectionPattern.values[value];
case 135:
return TranslationOptions.decode(readValue(buffer)!);
final int? value = readValue(buffer) as int?;
return value == null ? null : WebExtensionActionType.values[value];
case 136:
return ReaderState.decode(readValue(buffer)!);
return TranslationOptions.decode(readValue(buffer)!);
case 137:
return LastMediaAccessState.decode(readValue(buffer)!);
return ReaderState.decode(readValue(buffer)!);
case 138:
return HistoryMetadataKey.decode(readValue(buffer)!);
return LastMediaAccessState.decode(readValue(buffer)!);
case 139:
return PackageCategoryValue.decode(readValue(buffer)!);
return HistoryMetadataKey.decode(readValue(buffer)!);
case 140:
return ExternalPackage.decode(readValue(buffer)!);
return PackageCategoryValue.decode(readValue(buffer)!);
case 141:
return LoadUrlFlagsValue.decode(readValue(buffer)!);
return ExternalPackage.decode(readValue(buffer)!);
case 142:
return SourceValue.decode(readValue(buffer)!);
return LoadUrlFlagsValue.decode(readValue(buffer)!);
case 143:
return TabState.decode(readValue(buffer)!);
return SourceValue.decode(readValue(buffer)!);
case 144:
return RecoverableTab.decode(readValue(buffer)!);
return TabState.decode(readValue(buffer)!);
case 145:
return RecoverableBrowserState.decode(readValue(buffer)!);
return RecoverableTab.decode(readValue(buffer)!);
case 146:
return IconRequest.decode(readValue(buffer)!);
return RecoverableBrowserState.decode(readValue(buffer)!);
case 147:
return ResourceSize.decode(readValue(buffer)!);
return IconRequest.decode(readValue(buffer)!);
case 148:
return Resource.decode(readValue(buffer)!);
return ResourceSize.decode(readValue(buffer)!);
case 149:
return IconResult.decode(readValue(buffer)!);
return Resource.decode(readValue(buffer)!);
case 150:
return CookiePartitionKey.decode(readValue(buffer)!);
return IconResult.decode(readValue(buffer)!);
case 151:
return Cookie.decode(readValue(buffer)!);
return CookiePartitionKey.decode(readValue(buffer)!);
case 152:
return HistoryItem.decode(readValue(buffer)!);
return Cookie.decode(readValue(buffer)!);
case 153:
return HistoryState.decode(readValue(buffer)!);
return HistoryItem.decode(readValue(buffer)!);
case 154:
return ReaderableState.decode(readValue(buffer)!);
return HistoryState.decode(readValue(buffer)!);
case 155:
return SecurityInfoState.decode(readValue(buffer)!);
return ReaderableState.decode(readValue(buffer)!);
case 156:
return TabContentState.decode(readValue(buffer)!);
return SecurityInfoState.decode(readValue(buffer)!);
case 157:
return FindResultState.decode(readValue(buffer)!);
return TabContentState.decode(readValue(buffer)!);
case 158:
return FindResultState.decode(readValue(buffer)!);
case 159:
return CustomSelectionAction.decode(readValue(buffer)!);
case 160:
return WebExtensionData.decode(readValue(buffer)!);
default:
return super.readValueOfType(type, buffer);
}
@@ -1659,7 +1721,7 @@ class GeckoSessionApi {
}
}
Future<Uint8List?> requestScreenshot() async {
Future<Uint8List?> requestScreenshot(bool sendBack) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoSessionApi.requestScreenshot$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
@@ -1667,7 +1729,7 @@ class GeckoSessionApi {
binaryMessenger: pigeonVar_binaryMessenger,
);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_channel.send(null) as List<Object?>?;
await pigeonVar_channel.send(<Object?>[sendBack]) as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
@@ -2855,3 +2917,174 @@ abstract class GeckoSelectionActionEvents {
}
}
}
class GeckoAddonsApi {
/// Constructor for [GeckoAddonsApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform.
GeckoAddonsApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
: pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
final String pigeonVar_messageChannelSuffix;
Future<void> startAddonManagerActivity() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonsApi.startAddonManagerActivity$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_channel.send(null) as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
throw PlatformException(
code: pigeonVar_replyList[0]! as String,
message: pigeonVar_replyList[1] as String?,
details: pigeonVar_replyList[2],
);
} else {
return;
}
}
Future<void> invokeAddonAction(String extensionId, WebExtensionActionType actionType) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonsApi.invokeAddonAction$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_channel.send(<Object?>[extensionId, actionType]) as List<Object?>?;
if (pigeonVar_replyList == null) {
throw _createConnectionError(pigeonVar_channelName);
} else if (pigeonVar_replyList.length > 1) {
throw PlatformException(
code: pigeonVar_replyList[0]! as String,
message: pigeonVar_replyList[1] as String?,
details: pigeonVar_replyList[2],
);
} else {
return;
}
}
}
abstract class GeckoAddonEvents {
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
void onUpsertWebExtensionAction(int timestamp, String extensionId, WebExtensionActionType actionType, WebExtensionData extensionData);
void onRemoveWebExtensionAction(int timestamp, String extensionId, WebExtensionActionType actionType);
void onUpdateWebExtensionIcon(int timestamp, String extensionId, WebExtensionActionType actionType, Uint8List icon);
static void setUp(GeckoAddonEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
{
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction$messageChannelSuffix', pigeonChannelCodec,
binaryMessenger: binaryMessenger);
if (api == null) {
pigeonVar_channel.setMessageHandler(null);
} else {
pigeonVar_channel.setMessageHandler((Object? message) async {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction was null.');
final List<Object?> args = (message as List<Object?>?)!;
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction was null, expected non-null int.');
final String? arg_extensionId = (args[1] as String?);
assert(arg_extensionId != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction was null, expected non-null String.');
final WebExtensionActionType? arg_actionType = (args[2] as WebExtensionActionType?);
assert(arg_actionType != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction was null, expected non-null WebExtensionActionType.');
final WebExtensionData? arg_extensionData = (args[3] as WebExtensionData?);
assert(arg_extensionData != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpsertWebExtensionAction was null, expected non-null WebExtensionData.');
try {
api.onUpsertWebExtensionAction(arg_timestamp!, arg_extensionId!, arg_actionType!, arg_extensionData!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
{
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onRemoveWebExtensionAction$messageChannelSuffix', pigeonChannelCodec,
binaryMessenger: binaryMessenger);
if (api == null) {
pigeonVar_channel.setMessageHandler(null);
} else {
pigeonVar_channel.setMessageHandler((Object? message) async {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onRemoveWebExtensionAction was null.');
final List<Object?> args = (message as List<Object?>?)!;
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onRemoveWebExtensionAction was null, expected non-null int.');
final String? arg_extensionId = (args[1] as String?);
assert(arg_extensionId != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onRemoveWebExtensionAction was null, expected non-null String.');
final WebExtensionActionType? arg_actionType = (args[2] as WebExtensionActionType?);
assert(arg_actionType != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onRemoveWebExtensionAction was null, expected non-null WebExtensionActionType.');
try {
api.onRemoveWebExtensionAction(arg_timestamp!, arg_extensionId!, arg_actionType!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
{
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon$messageChannelSuffix', pigeonChannelCodec,
binaryMessenger: binaryMessenger);
if (api == null) {
pigeonVar_channel.setMessageHandler(null);
} else {
pigeonVar_channel.setMessageHandler((Object? message) async {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon was null.');
final List<Object?> args = (message as List<Object?>?)!;
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon was null, expected non-null int.');
final String? arg_extensionId = (args[1] as String?);
assert(arg_extensionId != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon was null, expected non-null String.');
final WebExtensionActionType? arg_actionType = (args[2] as WebExtensionActionType?);
assert(arg_actionType != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon was null, expected non-null WebExtensionActionType.');
final Uint8List? arg_icon = (args[3] as Uint8List?);
assert(arg_icon != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoAddonEvents.onUpdateWebExtensionIcon was null, expected non-null Uint8List.');
try {
api.onUpdateWebExtensionIcon(arg_timestamp!, arg_extensionId!, arg_actionType!, arg_icon!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
}
}