@@ -28,6 +28,7 @@ typedef VmResponse = Map<String, Object?>;
28
28
29
29
enum _NamespacedServiceExtension {
30
30
extDwdsEmitEvent (method: 'ext.dwds.emitEvent' ),
31
+ extDwdsReload (method: 'ext.dwds.reload' ),
31
32
extDwdsRestart (method: 'ext.dwds.restart' ),
32
33
extDwdsScreenshot (method: 'ext.dwds.screenshot' ),
33
34
extDwdsSendEvent (method: 'ext.dwds.sendEvent' ),
@@ -77,6 +78,8 @@ class DwdsVmClient {
77
78
final requestSink = requestController.sink;
78
79
final requestStream = requestController.stream;
79
80
81
+ final clientCompleter = Completer <VmService >();
82
+
80
83
_setUpVmServerConnection (
81
84
chromeProxyService: chromeProxyService,
82
85
debugService: debugService,
@@ -85,6 +88,7 @@ class DwdsVmClient {
85
88
requestStream: requestStream,
86
89
requestSink: requestSink,
87
90
dwdsStats: dwdsStats,
91
+ clientFuture: clientCompleter.future,
88
92
);
89
93
90
94
final client = ddsUri == null
@@ -97,6 +101,10 @@ class DwdsVmClient {
97
101
ddsUri: ddsUri,
98
102
);
99
103
104
+ if (! clientCompleter.isCompleted) {
105
+ clientCompleter.complete (client);
106
+ }
107
+
100
108
final dwdsVmClient =
101
109
DwdsVmClient (client, requestController, responseController);
102
110
@@ -158,12 +166,14 @@ class DwdsVmClient {
158
166
required StreamSink <VmResponse > responseSink,
159
167
required Stream <VmRequest > requestStream,
160
168
required StreamSink <VmRequest > requestSink,
169
+ required Future <VmService > clientFuture,
161
170
}) {
162
171
responseStream.listen ((request) async {
163
172
final response = await _maybeHandleServiceExtensionRequest (
164
173
request,
165
174
chromeProxyService: chromeProxyService,
166
175
dwdsStats: dwdsStats,
176
+ clientFuture: clientFuture,
167
177
);
168
178
if (response != null ) {
169
179
requestSink.add (response);
@@ -187,15 +197,19 @@ class DwdsVmClient {
187
197
VmResponse request, {
188
198
required ChromeProxyService chromeProxyService,
189
199
required DwdsStats dwdsStats,
200
+ required Future <VmService > clientFuture,
190
201
}) async {
191
202
VmRequest ? response;
192
203
final method = request['method' ];
193
204
if (method == _NamespacedServiceExtension .flutterListViews.method) {
194
205
response = await _flutterListViewsHandler (chromeProxyService);
195
206
} else if (method == _NamespacedServiceExtension .extDwdsEmitEvent.method) {
196
207
response = _extDwdsEmitEventHandler (request);
208
+ } else if (method == _NamespacedServiceExtension .extDwdsReload.method) {
209
+ response = await _extDwdsReloadHandler (chromeProxyService);
197
210
} else if (method == _NamespacedServiceExtension .extDwdsRestart.method) {
198
- response = await _extDwdsRestartHandler (chromeProxyService);
211
+ final client = await clientFuture;
212
+ response = await _extDwdsRestartHandler (chromeProxyService, client);
199
213
} else if (method == _NamespacedServiceExtension .extDwdsSendEvent.method) {
200
214
response = await _extDwdsSendEventHandler (request, dwdsStats);
201
215
} else if (method == _NamespacedServiceExtension .extDwdsScreenshot.method) {
@@ -265,13 +279,21 @@ class DwdsVmClient {
265
279
return {'result' : Success ().toJson ()};
266
280
}
267
281
268
- static Future <Map <String , Object >> _extDwdsRestartHandler (
282
+ static Future <Map <String , Object >> _extDwdsReloadHandler (
269
283
ChromeProxyService chromeProxyService,
270
284
) async {
271
285
await _fullReload (chromeProxyService);
272
286
return {'result' : Success ().toJson ()};
273
287
}
274
288
289
+ static Future <Map <String , Object >> _extDwdsRestartHandler (
290
+ ChromeProxyService chromeProxyService,
291
+ VmService client,
292
+ ) async {
293
+ await _hotRestart (chromeProxyService, client);
294
+ return {'result' : Success ().toJson ()};
295
+ }
296
+
275
297
static Future <void > _registerServiceExtensions ({
276
298
required VmService client,
277
299
required ChromeProxyService chromeProxyService,
0 commit comments