mainly refactoring & addons
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user