one step closer

This commit is contained in:
Fabian Freund
2024-10-22 07:27:37 +02:00
parent c4d93e8fe7
commit 8d351e55c0
92 changed files with 3829 additions and 2694 deletions
@@ -10,4 +10,8 @@ class GeckoBrowserService {
Future<void> showNativeFragment() {
return _api.showNativeFragment();
}
Future<void> onTrimMemory(int level) {
return _api.onTrimMemory(level);
}
}
@@ -12,22 +12,31 @@ 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 _fragmentStateSubject = BehaviorSubject.seeded(false);
final _viewStateSubject = BehaviorSubject.seeded(false);
final _engineStateSubject = BehaviorSubject.seeded(false);
final _tabListSubject = BehaviorSubject<List<String>>();
final _selectedTabSubject = BehaviorSubject<String?>();
final _tabContentSubject = BehaviorSubject<TabContentState>();
final _historySubject = BehaviorSubject<HistoryEvent>();
final _readerableSubject = BehaviorSubject<ReaderableEvent>();
final _securityInfoSubject = BehaviorSubject<SecurityInfoEvent>();
final _iconSubject = BehaviorSubject<IconEvent>();
final _thumbnailSubject = BehaviorSubject<ThumbnailEvent>();
final _findResultsSubject = BehaviorSubject<FindResultsEvent>();
final _tabContentSubject = ReplaySubject<TabContentState>();
final _historySubject = ReplaySubject<HistoryEvent>();
final _securityInfoSubject = ReplaySubject<SecurityInfoEvent>();
final _readerableSubject = ReplaySubject<ReaderableEvent>();
final _iconSubject = PublishSubject<IconEvent>();
final _thumbnailSubject = PublishSubject<ThumbnailEvent>();
final _findResultsSubject = PublishSubject<FindResultsEvent>();
final _tabAddedSubject = PublishSubject<String>();
// Event streams
Stream<bool> get fragmentReadyStateEvents => _fragmentStateSubject.stream;
Stream<List<String>> get tabListEvents => _tabListSubject.stream;
Stream<String?> get selectedTabEvents => _selectedTabSubject.stream;
ValueStream<bool> get viewReadyStateEvents => _viewStateSubject.stream;
ValueStream<bool> get engineReadyStateEvents => _engineStateSubject.stream;
ValueStream<List<String>> get tabListEvents => _tabListSubject.stream;
ValueStream<String?> get selectedTabEvents => _selectedTabSubject.stream;
Stream<TabContentState> get tabContentEvents => _tabContentSubject.stream;
Stream<HistoryEvent> get historyEvents => _historySubject.stream;
Stream<ReaderableEvent> get readerableEvents => _readerableSubject.stream;
@@ -37,55 +46,124 @@ class GeckoEventService extends GeckoStateEvents {
Stream<ThumbnailEvent> get thumbnailEvents => _thumbnailSubject.stream;
Stream<FindResultsEvent> get findResultsEvent => _findResultsSubject.stream;
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 onFragmentReadyStateChange(bool state) {
_fragmentStateSubject.add(state);
void onViewReadyStateChange(int timestamp, bool state) {
_addWhenMoreRecent(_viewStateSubject, timestamp, null, state);
}
@override
void onEngineReadyStateChange(int timestamp, bool state) {
_addWhenMoreRecent(_engineStateSubject, timestamp, null, state);
}
// Overridden methods
@override
void onTabListChange(List<String?> tabIds) {
_tabListSubject.add(tabIds.nonNulls.toList());
void onTabListChange(int timestamp, List<String?> tabIds) {
_addWhenMoreRecent(
_tabListSubject,
timestamp,
null,
tabIds.nonNulls.toList(),
);
}
@override
void onSelectedTabChange(String? id) {
_selectedTabSubject.add(id);
void onSelectedTabChange(int timestamp, String? id) {
_addWhenMoreRecent(_selectedTabSubject, timestamp, id, id);
}
@override
void onTabContentStateChange(TabContentState state) {
_tabContentSubject.add(state);
void onTabContentStateChange(int timestamp, TabContentState state) {
_addWhenMoreRecent(_tabContentSubject, timestamp, state.id, state);
}
@override
void onHistoryStateChange(String id, HistoryState state) {
_historySubject.add((tabId: id, history: state));
void onHistoryStateChange(int timestamp, String id, HistoryState state) {
_addWhenMoreRecent(
_historySubject,
timestamp,
id,
(tabId: id, history: state),
);
}
@override
void onReaderableStateChange(String id, ReaderableState state) {
_readerableSubject.add((tabId: id, readerable: state));
void onReaderableStateChange(
int timestamp,
String id,
ReaderableState state,
) {
_addWhenMoreRecent(
_readerableSubject,
timestamp,
id,
(tabId: id, readerable: state),
);
}
@override
void onSecurityInfoStateChange(String id, SecurityInfoState state) {
_securityInfoSubject.add((tabId: id, securityInfo: state));
void onSecurityInfoStateChange(
int timestamp,
String id,
SecurityInfoState state,
) {
_addWhenMoreRecent(
_securityInfoSubject,
timestamp,
id,
(tabId: id, securityInfo: state),
);
}
@override
void onIconChange(String id, Uint8List? bytes) {
_iconSubject.add((tabId: id, bytes: bytes));
void onIconChange(int timestamp, String id, Uint8List? bytes) {
_addWhenMoreRecent(_iconSubject, timestamp, id, (tabId: id, bytes: bytes));
}
@override
void onThumbnailChange(String id, Uint8List? bytes) {
_thumbnailSubject.add((tabId: id, bytes: bytes));
void onThumbnailChange(int timestamp, String id, Uint8List? bytes) {
_addWhenMoreRecent(
_thumbnailSubject,
timestamp,
id,
(tabId: id, bytes: bytes),
);
}
@override
void onFindResults(String id, List<FindResultState?> results) {
_findResultsSubject.add((tabId: id, results: results.nonNulls.toList()));
void onFindResults(int timestamp, String id, List<FindResultState?> results) {
_addWhenMoreRecent(
_findResultsSubject,
timestamp,
id,
(tabId: id, results: results.nonNulls.toList()),
);
}
@override
void onTabAdded(int timestamp, String tabId) {
_addWhenMoreRecent(
_tabAddedSubject,
timestamp,
null,
tabId,
);
}
GeckoEventService.setUp({
@@ -109,5 +187,6 @@ class GeckoEventService extends GeckoStateEvents {
unawaited(_iconSubject.close());
unawaited(_thumbnailSubject.close());
unawaited(_findResultsSubject.close());
unawaited(_tabAddedSubject.close());
}
}
@@ -11,14 +11,14 @@ class GeckoTabService {
GeckoTabService({GeckoTabsApi? api}) : _api = api ?? _apiInstance;
Future<void> syncEvents({
bool onSelectedTabChange = true,
bool onTabListChange = true,
bool onTabContentStateChange = true,
bool onIconChange = true,
bool onSecurityInfoStateChange = true,
bool onHistoryStateChange = true,
bool onFindResults = true,
bool onThumbnailChange = true,
bool onSelectedTabChange = false,
bool onTabListChange = false,
bool onTabContentStateChange = false,
bool onIconChange = false,
bool onSecurityInfoStateChange = false,
bool onHistoryStateChange = false,
bool onFindResults = false,
bool onThumbnailChange = false,
}) {
return _api.syncEvents(
onSelectedTabChange: onSelectedTabChange,
@@ -8,11 +8,35 @@ import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
import 'package:flutter_mozilla_components/src/domain/services/gecko_browser.dart';
class GeckoView extends StatelessWidget {
class GeckoView extends StatefulWidget {
final FutureOr<void> Function()? preInitializationStep;
const GeckoView({super.key, this.preInitializationStep});
@override
State<GeckoView> createState() => _GeckoViewState();
}
class _GeckoViewState extends State<GeckoView> {
static const platform =
MethodChannel('me.movenext.flutter_mozilla_components/trim_memory');
final browserService = GeckoBrowserService();
@override
void initState() {
super.initState();
_setupMethodCallHandler();
}
void _setupMethodCallHandler() {
platform.setMethodCallHandler((MethodCall call) async {
if (call.method == 'onTrimMemory') {
await browserService.onTrimMemory(call.arguments as int);
}
});
}
@override
Widget build(BuildContext context) {
return PlatformViewLink(
@@ -39,8 +63,14 @@ class GeckoView extends StatelessWidget {
params.onPlatformViewCreated(value);
SchedulerBinding.instance.addPostFrameCallback((_) async {
await preInitializationStep?.call();
await GeckoBrowserService().showNativeFragment();
await widget.preInitializationStep?.call();
await Future.delayed(
//Wait for two more frames just to be sure view has been initialized
Duration(milliseconds: ((1000 / 60) * 2).toInt()),
).whenComplete(() async {
await browserService.showNativeFragment();
});
});
})
// ignore: discarded_futures
@@ -1187,6 +1187,28 @@ class GeckoBrowserApi {
return;
}
}
Future<void> onTrimMemory(int level) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoBrowserApi.onTrimMemory$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?>[level]) 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;
}
}
}
class GeckoEngineSettingsApi {
@@ -2243,44 +2265,107 @@ class GeckoCookieApi {
abstract class GeckoStateEvents {
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
void onFragmentReadyStateChange(bool state);
void onViewReadyStateChange(int timestamp, bool state);
void onTabListChange(List<String> tabIds);
void onEngineReadyStateChange(int timestamp, bool state);
void onSelectedTabChange(String? id);
void onTabAdded(int timestamp, String tabId);
void onTabContentStateChange(TabContentState state);
void onTabListChange(int timestamp, List<String> tabIds);
void onHistoryStateChange(String id, HistoryState state);
void onSelectedTabChange(int timestamp, String? id);
void onReaderableStateChange(String id, ReaderableState state);
void onTabContentStateChange(int timestamp, TabContentState state);
void onSecurityInfoStateChange(String id, SecurityInfoState state);
void onHistoryStateChange(int timestamp, String id, HistoryState state);
void onIconChange(String id, Uint8List? bytes);
void onReaderableStateChange(int timestamp, String id, ReaderableState state);
void onThumbnailChange(String id, Uint8List? bytes);
void onSecurityInfoStateChange(int timestamp, String id, SecurityInfoState state);
void onFindResults(String id, List<FindResultState> results);
void onIconChange(int timestamp, String id, Uint8List? bytes);
void onThumbnailChange(int timestamp, String id, Uint8List? bytes);
void onFindResults(int timestamp, String id, List<FindResultState> results);
static void setUp(GeckoStateEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
{
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFragmentReadyStateChange$messageChannelSuffix', pigeonChannelCodec,
'dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onViewReadyStateChange$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.GeckoStateEvents.onFragmentReadyStateChange was null.');
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onViewReadyStateChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final bool? arg_state = (args[0] as bool?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onViewReadyStateChange was null, expected non-null int.');
final bool? arg_state = (args[1] as bool?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFragmentReadyStateChange was null, expected non-null bool.');
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onViewReadyStateChange was null, expected non-null bool.');
try {
api.onFragmentReadyStateChange(arg_state!);
api.onViewReadyStateChange(arg_timestamp!, arg_state!);
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.GeckoStateEvents.onEngineReadyStateChange$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.GeckoStateEvents.onEngineReadyStateChange 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.GeckoStateEvents.onEngineReadyStateChange was null, expected non-null int.');
final bool? arg_state = (args[1] as bool?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onEngineReadyStateChange was null, expected non-null bool.');
try {
api.onEngineReadyStateChange(arg_timestamp!, arg_state!);
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.GeckoStateEvents.onTabAdded$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.GeckoStateEvents.onTabAdded 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.GeckoStateEvents.onTabAdded was null, expected non-null int.');
final String? arg_tabId = (args[1] as String?);
assert(arg_tabId != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabAdded was null, expected non-null String.');
try {
api.onTabAdded(arg_timestamp!, arg_tabId!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2301,11 +2386,14 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabListChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final List<String>? arg_tabIds = (args[0] as List<Object?>?)?.cast<String>();
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabListChange was null, expected non-null int.');
final List<String>? arg_tabIds = (args[1] as List<Object?>?)?.cast<String>();
assert(arg_tabIds != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabListChange was null, expected non-null List<String>.');
try {
api.onTabListChange(arg_tabIds!);
api.onTabListChange(arg_timestamp!, arg_tabIds!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2326,9 +2414,12 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSelectedTabChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSelectedTabChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
try {
api.onSelectedTabChange(arg_id);
api.onSelectedTabChange(arg_timestamp!, arg_id);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2349,11 +2440,14 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabContentStateChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final TabContentState? arg_state = (args[0] as TabContentState?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabContentStateChange was null, expected non-null int.');
final TabContentState? arg_state = (args[1] as TabContentState?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onTabContentStateChange was null, expected non-null TabContentState.');
try {
api.onTabContentStateChange(arg_state!);
api.onTabContentStateChange(arg_timestamp!, arg_state!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2374,14 +2468,17 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onHistoryStateChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onHistoryStateChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onHistoryStateChange was null, expected non-null String.');
final HistoryState? arg_state = (args[1] as HistoryState?);
final HistoryState? arg_state = (args[2] as HistoryState?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onHistoryStateChange was null, expected non-null HistoryState.');
try {
api.onHistoryStateChange(arg_id!, arg_state!);
api.onHistoryStateChange(arg_timestamp!, arg_id!, arg_state!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2402,14 +2499,17 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onReaderableStateChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onReaderableStateChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onReaderableStateChange was null, expected non-null String.');
final ReaderableState? arg_state = (args[1] as ReaderableState?);
final ReaderableState? arg_state = (args[2] as ReaderableState?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onReaderableStateChange was null, expected non-null ReaderableState.');
try {
api.onReaderableStateChange(arg_id!, arg_state!);
api.onReaderableStateChange(arg_timestamp!, arg_id!, arg_state!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2430,14 +2530,17 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSecurityInfoStateChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSecurityInfoStateChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSecurityInfoStateChange was null, expected non-null String.');
final SecurityInfoState? arg_state = (args[1] as SecurityInfoState?);
final SecurityInfoState? arg_state = (args[2] as SecurityInfoState?);
assert(arg_state != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onSecurityInfoStateChange was null, expected non-null SecurityInfoState.');
try {
api.onSecurityInfoStateChange(arg_id!, arg_state!);
api.onSecurityInfoStateChange(arg_timestamp!, arg_id!, arg_state!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2458,12 +2561,15 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onIconChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onIconChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onIconChange was null, expected non-null String.');
final Uint8List? arg_bytes = (args[1] as Uint8List?);
final Uint8List? arg_bytes = (args[2] as Uint8List?);
try {
api.onIconChange(arg_id!, arg_bytes);
api.onIconChange(arg_timestamp!, arg_id!, arg_bytes);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2484,12 +2590,15 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onThumbnailChange was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onThumbnailChange was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onThumbnailChange was null, expected non-null String.');
final Uint8List? arg_bytes = (args[1] as Uint8List?);
final Uint8List? arg_bytes = (args[2] as Uint8List?);
try {
api.onThumbnailChange(arg_id!, arg_bytes);
api.onThumbnailChange(arg_timestamp!, arg_id!, arg_bytes);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
@@ -2510,14 +2619,17 @@ abstract class GeckoStateEvents {
assert(message != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFindResults was null.');
final List<Object?> args = (message as List<Object?>?)!;
final String? arg_id = (args[0] as String?);
final int? arg_timestamp = (args[0] as int?);
assert(arg_timestamp != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFindResults was null, expected non-null int.');
final String? arg_id = (args[1] as String?);
assert(arg_id != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFindResults was null, expected non-null String.');
final List<FindResultState>? arg_results = (args[1] as List<Object?>?)?.cast<FindResultState>();
final List<FindResultState>? arg_results = (args[2] as List<Object?>?)?.cast<FindResultState>();
assert(arg_results != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onFindResults was null, expected non-null List<FindResultState>.');
try {
api.onFindResults(arg_id!, arg_results!);
api.onFindResults(arg_timestamp!, arg_id!, arg_results!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);