implemented container site assignements & improved routing

This commit is contained in:
Fabian Freund
2025-11-09 07:25:54 +01:00
parent da232bf8aa
commit 107b2a9aa6
45 changed files with 1104 additions and 264 deletions
@@ -23,6 +23,10 @@ class GeckoContainerProxyService {
return _apiInstance.removeContainerProxy(contextId);
}
Future<void> setSiteAssignments(Map<String, String> assignments) {
return _apiInstance.setSiteAssignments(assignments);
}
Future<bool> healthcheck() async {
try {
return await _apiInstance.healthcheck().timeout(
@@ -40,6 +40,7 @@ class GeckoEventService extends GeckoStateEvents {
final _longPressSubject = PublishSubject<LongPressEvent>();
final _scrollEventSubject = PublishSubject<ScrollEvent>();
final _prefUpdateSubject = PublishSubject<GeckoPref>();
final _siteAssignementSubject = PublishSubject<ContainerSiteAssignment>();
final _tabAddedSubject = PublishSubject<String>();
@@ -61,6 +62,8 @@ class GeckoEventService extends GeckoStateEvents {
Stream<LongPressEvent> get longPressEvent => _longPressSubject.stream;
Stream<ScrollEvent> get scrollEvent => _scrollEventSubject.stream;
Stream<GeckoPref> get prefUpdateEvent => _prefUpdateSubject.stream;
Stream<ContainerSiteAssignment> get siteAssignementEvent =>
_siteAssignementSubject.stream;
Stream<String> get tabAddedStream => _tabAddedSubject.stream;
@@ -184,6 +187,18 @@ class GeckoEventService extends GeckoStateEvents {
_prefUpdateSubject.addWhenMoreRecent(timestamp, value.name, value);
}
@override
void onContainerSiteAssignment(
int timestamp,
ContainerSiteAssignment details,
) {
_siteAssignementSubject.addWhenMoreRecent(
timestamp,
details.requestId,
details,
);
}
GeckoEventService.setUp({
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
@@ -212,5 +227,6 @@ class GeckoEventService extends GeckoStateEvents {
unawaited(_scrollEventSubject.close());
unawaited(_tabAddedSubject.close());
unawaited(_prefUpdateSubject.close());
unawaited(_siteAssignementSubject.close());
}
}
@@ -2875,6 +2875,67 @@ class GeckoPref {
;
}
class ContainerSiteAssignment {
ContainerSiteAssignment({
required this.requestId,
this.tabId,
this.originUrl,
required this.url,
required this.blocked,
});
String requestId;
String? tabId;
String? originUrl;
String url;
bool blocked;
List<Object?> _toList() {
return <Object?>[
requestId,
tabId,
originUrl,
url,
blocked,
];
}
Object encode() {
return _toList(); }
static ContainerSiteAssignment decode(Object result) {
result as List<Object?>;
return ContainerSiteAssignment(
requestId: result[0]! as String,
tabId: result[1] as String?,
originUrl: result[2] as String?,
url: result[3]! as String,
blocked: result[4]! as bool,
);
}
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
bool operator ==(Object other) {
if (other is! ContainerSiteAssignment || other.runtimeType != runtimeType) {
return false;
}
if (identical(this, other)) {
return true;
}
return _deepEquals(encode(), other.encode());
}
@override
// ignore: avoid_equals_and_hash_code_on_mutable_classes
int get hashCode => Object.hashAll(_toList())
;
}
class GeckoHeader {
GeckoHeader({
required this.key,
@@ -3284,15 +3345,18 @@ class _PigeonCodec extends StandardMessageCodec {
} else if (value is GeckoPref) {
buffer.putUint8(194);
writeValue(buffer, value.encode());
} else if (value is GeckoHeader) {
} else if (value is ContainerSiteAssignment) {
buffer.putUint8(195);
writeValue(buffer, value.encode());
} else if (value is GeckoFetchRequest) {
} else if (value is GeckoHeader) {
buffer.putUint8(196);
writeValue(buffer, value.encode());
} else if (value is GeckoFetchResponse) {
} else if (value is GeckoFetchRequest) {
buffer.putUint8(197);
writeValue(buffer, value.encode());
} else if (value is GeckoFetchResponse) {
buffer.putUint8(198);
writeValue(buffer, value.encode());
} else {
super.writeValue(buffer, value);
}
@@ -3456,10 +3520,12 @@ class _PigeonCodec extends StandardMessageCodec {
case 194:
return GeckoPref.decode(readValue(buffer)!);
case 195:
return GeckoHeader.decode(readValue(buffer)!);
return ContainerSiteAssignment.decode(readValue(buffer)!);
case 196:
return GeckoFetchRequest.decode(readValue(buffer)!);
return GeckoHeader.decode(readValue(buffer)!);
case 197:
return GeckoFetchRequest.decode(readValue(buffer)!);
case 198:
return GeckoFetchResponse.decode(readValue(buffer)!);
default:
return super.readValueOfType(type, buffer);
@@ -4990,6 +5056,29 @@ class GeckoContainerProxyApi {
}
}
Future<void> setSiteAssignments(Map<String, String> assignments) async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoContainerProxyApi.setSiteAssignments$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[assignments]);
final List<Object?>? pigeonVar_replyList =
await pigeonVar_sendFuture 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<bool> healthcheck() async {
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoContainerProxyApi.healthcheck$pigeonVar_messageChannelSuffix';
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
@@ -5170,6 +5259,8 @@ abstract class GeckoStateEvents {
void onPreferenceChange(int timestamp, GeckoPref value);
void onContainerSiteAssignment(int timestamp, ContainerSiteAssignment details);
static void setUp(GeckoStateEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
{
@@ -5641,6 +5732,34 @@ abstract class GeckoStateEvents {
});
}
}
{
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onContainerSiteAssignment$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.onContainerSiteAssignment 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.onContainerSiteAssignment was null, expected non-null int.');
final ContainerSiteAssignment? arg_details = (args[1] as ContainerSiteAssignment?);
assert(arg_details != null,
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onContainerSiteAssignment was null, expected non-null ContainerSiteAssignment.');
try {
api.onContainerSiteAssignment(arg_timestamp!, arg_details!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
}
}