everything build but untested & migration not finished

This commit is contained in:
Fabian Freund
2024-10-09 13:27:42 +02:00
parent 37d2c84d7f
commit 2c71eeb670
132 changed files with 3790 additions and 2817 deletions
@@ -0,0 +1,14 @@
import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
final _apiInstance = GeckoEngineSettingsApi();
class GeckoEngineSettingsService {
final GeckoEngineSettingsApi _api;
GeckoEngineSettingsService({GeckoEngineSettingsApi? api})
: _api = api ?? _apiInstance;
Future<void> javaScriptEnabled(bool state) {
return _api.javaScriptEnabled(state);
}
}
@@ -8,6 +8,7 @@ typedef ReaderableEvent = ({String tabId, ReaderableState readerable});
typedef SecurityInfoEvent = ({String tabId, SecurityInfoState securityInfo});
typedef IconEvent = ({String tabId, Uint8List? bytes});
typedef ThumbnailEvent = ({String tabId, Uint8List? bytes});
typedef FindResultsEvent = ({String tabId, List<FindResultState> results});
class GeckoEventService extends GeckoStateEvents {
// Stream controllers
@@ -20,6 +21,7 @@ class GeckoEventService extends GeckoStateEvents {
StreamController<SecurityInfoEvent>.broadcast();
final _iconController = StreamController<IconEvent>.broadcast();
final _thumbnailController = StreamController<ThumbnailEvent>.broadcast();
final _findResultsController = StreamController<FindResultsEvent>.broadcast();
// Event streams
Stream<List<String>> get tabListEvents => _tabListController.stream;
@@ -31,6 +33,8 @@ class GeckoEventService extends GeckoStateEvents {
_securityInfoController.stream;
Stream<IconEvent> get iconEvents => _iconController.stream;
Stream<ThumbnailEvent> get thumbnailEvents => _thumbnailController.stream;
Stream<FindResultsEvent> get findResultsEvent =>
_findResultsController.stream;
// Overridden methods
@override
@@ -73,21 +77,31 @@ class GeckoEventService extends GeckoStateEvents {
_thumbnailController.add((tabId: id, bytes: bytes));
}
@override
void onFindResults(String id, List<FindResultState?> results) {
_findResultsController.add((tabId: id, results: results.nonNulls.toList()));
}
GeckoEventService.setUp({
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
}) {
GeckoStateEvents.setUp(this);
GeckoStateEvents.setUp(
this,
binaryMessenger: binaryMessenger,
messageChannelSuffix: messageChannelSuffix,
);
}
void dispose() {
_tabListController.close();
_selectedTabController.close();
_tabContentController.close();
_historyController.close();
_readerableController.close();
_securityInfoController.close();
_iconController.close();
_thumbnailController.close();
unawaited(_tabListController.close());
unawaited(_selectedTabController.close());
unawaited(_tabContentController.close());
unawaited(_historyController.close());
unawaited(_readerableController.close());
unawaited(_securityInfoController.close());
unawaited(_iconController.close());
unawaited(_thumbnailController.close());
unawaited(_findResultsController.close());
}
}
@@ -0,0 +1,27 @@
import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
final _apiInstance = GeckoFindApi();
class GeckoFindInPageService {
final GeckoFindApi _api;
final String? tabId;
GeckoFindInPageService({required this.tabId, GeckoFindApi? api})
: _api = api ?? _apiInstance;
GeckoFindInPageService.forActiveTab({GeckoFindApi? api})
: _api = api ?? _apiInstance,
tabId = null;
Future<void> findAll(String text) {
return _api.findAll(tabId, text);
}
Future<void> findNext(bool forward) {
return _api.findNext(tabId, forward);
}
Future<void> clearMatches() {
return _api.clearMatches(tabId);
}
}
@@ -7,14 +7,18 @@ class GeckoIconService {
GeckoIconService({GeckoIconsApi? api}) : _api = api ?? _apiInstance;
Future<IconResult> loadIcon(
{required Uri url, List<Resource> resources = const []}) async {
return _api.loadIcon(IconRequest(
url: url.toString(),
size: IconSize.defaultSize,
resources: resources,
isPrivate: false,
waitOnNetworkLoad: true,
));
Future<IconResult> loadIcon({
required Uri url,
List<Resource> resources = const [],
}) async {
return _api.loadIcon(
IconRequest(
url: url.toString(),
size: IconSize.defaultSize,
resources: resources,
isPrivate: false,
waitOnNetworkLoad: true,
),
);
}
}
@@ -0,0 +1,53 @@
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart';
class GeckoReaderableService extends ReaderViewController {
final ReaderViewEvents _events;
final _appearanceVisibility = StreamController<bool>.broadcast();
final _readerVisibility = StreamController<bool>.broadcast();
Stream<bool> get appearanceVisibility => _appearanceVisibility.stream;
Stream<bool> get readerVisibility => _readerVisibility.stream;
Future<void> toggleReaderView(bool enable) {
return _events.onToggleReaderView(enable);
}
Future<void> onAppearanceButtonTap() {
return _events.onAppearanceButtonTap();
}
@override
void appearanceButtonVisibility(bool visible) {
_appearanceVisibility.add(visible);
}
@override
void readerViewButtonVisibility(bool visible) {
_readerVisibility.add(visible);
}
GeckoReaderableService.setUp({
ReaderViewEvents? readerEvents,
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
}) : _events = readerEvents ??
ReaderViewEvents(
binaryMessenger: binaryMessenger,
messageChannelSuffix: messageChannelSuffix,
) {
ReaderViewController.setUp(
this,
binaryMessenger: binaryMessenger,
messageChannelSuffix: messageChannelSuffix,
);
}
void dispose() {
unawaited(_appearanceVisibility.close());
unawaited(_readerVisibility.close());
}
}
@@ -7,13 +7,13 @@ class GeckoSessionService {
final String? tabId;
final GeckoSessionApi _api;
GeckoSessionService({required String this.tabId, GeckoSessionApi? api})
: _api = api ?? _apiInstance;
GeckoSessionService.forActiveTab({GeckoSessionApi? api})
: _api = api ?? _apiInstance,
tabId = null;
GeckoSessionService({required String this.tabId, GeckoSessionApi? api})
: _api = api ?? _apiInstance;
Future<void> loadUrl({
required Uri url,
LoadUrlFlags flags = LoadUrlFlags.NONE,
@@ -71,7 +71,10 @@ class GeckoTabService {
RestoreLocation restoreLocation = RestoreLocation.end,
}) {
return _api.restoreTabsByList(
tabs: tabs, selectTabId: selectTabId, restoreLocation: restoreLocation);
tabs: tabs,
selectTabId: selectTabId,
restoreLocation: restoreLocation,
);
}
Future<void> restoreTabsByBrowserState({
@@ -79,7 +82,9 @@ class GeckoTabService {
RestoreLocation restoreLocation = RestoreLocation.end,
}) {
return _api.restoreTabsByBrowserState(
state: state, restoreLocation: restoreLocation);
state: state,
restoreLocation: restoreLocation,
);
}
//The calls with engin storage for restore are not supported at the moment
@@ -91,7 +96,9 @@ class GeckoTabService {
required HistoryMetadataKey historyMetadata,
}) {
return _api.selectOrAddTabByHistory(
url: url.toString(), historyMetadata: historyMetadata);
url: url.toString(),
historyMetadata: historyMetadata,
);
}
/// Selects an already existing tab displaying [url] or otherwise creates a new tab.
@@ -116,7 +123,9 @@ class GeckoTabService {
bool selectNewTab = true,
}) {
return _api.duplicateTab(
selectTabId: selectTabId, selectNewTab: selectNewTab);
selectTabId: selectTabId,
selectNewTab: selectNewTab,
);
}
Future<void> moveTabs({
@@ -125,7 +134,10 @@ class GeckoTabService {
required bool placeAfter,
}) {
return _api.moveTabs(
tabIds: tabIds, targetTabId: targetTabId, placeAfter: placeAfter);
tabIds: tabIds,
targetTabId: targetTabId,
placeAfter: placeAfter,
);
}
Future<String> migratePrivateTabUseCase({
@@ -133,6 +145,8 @@ class GeckoTabService {
Uri? alternativeUrl,
}) {
return _api.migratePrivateTabUseCase(
tabId: tabId, alternativeUrl: alternativeUrl?.toString());
tabId: tabId,
alternativeUrl: alternativeUrl?.toString(),
);
}
}