Skip to content

Commit 2f5175d

Browse files
authored
Register Service Extension for Events (#1330)
1 parent babe098 commit 2f5175d

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

dwds/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
- Add global functions to the injected client for `dart.developer.postEvent`
44
and `dart.developer.registerExtension`.
5+
- Register new service extension `ext.dwds.emitEvent` so clients can emit
6+
events. This is intended to be used for analytics.
57

68
## 11.0.2
79

dwds/lib/src/dwds_vm_client.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:logging/logging.dart';
1111
import 'package:vm_service/vm_service.dart';
1212
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
1313

14+
import 'events.dart';
1415
import 'services/chrome_proxy_service.dart' show ChromeProxyService;
1516
import 'services/debug_service.dart';
1617

@@ -153,6 +154,13 @@ class DwdsVmClient {
153154
});
154155
await client.registerService('ext.dwds.screenshot', 'DWDS');
155156

157+
client.registerServiceCallback('ext.dwds.emitEvent', (event) async {
158+
emitEvent(DwdsEvent(
159+
event['type'] as String, event['payload'] as Map<String, dynamic>));
160+
return {'result': Success().toJson()};
161+
});
162+
await client.registerService('ext.dwds.emitEvent', 'DWDS');
163+
156164
client.registerServiceCallback('_yieldControlToDDS', (request) async {
157165
final ddsUri = request['uri'] as String;
158166
if (ddsUri == null) {

dwds/test/events_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@ void main() {
6363
bootstrap = isolate.rootLib;
6464
});
6565

66+
test('can emit event through service extension', () async {
67+
expect(
68+
context.testServer.dwds.events,
69+
emits(predicate((DwdsEvent event) =>
70+
event.type == 'foo-event' && event.payload['data'] == 1234)));
71+
72+
var response = await context.debugConnection.vmService
73+
.callServiceExtension('ext.dwds.emitEvent', args: {
74+
'type': 'foo-event',
75+
'payload': {'data': 1234},
76+
});
77+
expect(response.type, 'Success');
78+
});
79+
6680
test('emits EVALUATE events on evaluation success', () async {
6781
var expression = "helloString('world')";
6882
expect(

0 commit comments

Comments
 (0)