@@ -28,6 +28,7 @@ typedef VmResponse = Map<String, Object?>;
2828
2929enum _NamespacedServiceExtension {
3030 extDwdsEmitEvent (method: 'ext.dwds.emitEvent' ),
31+ extDwdsReload (method: 'ext.dwds.reload' ),
3132 extDwdsRestart (method: 'ext.dwds.restart' ),
3233 extDwdsScreenshot (method: 'ext.dwds.screenshot' ),
3334 extDwdsSendEvent (method: 'ext.dwds.sendEvent' ),
@@ -77,6 +78,8 @@ class DwdsVmClient {
7778 final requestSink = requestController.sink;
7879 final requestStream = requestController.stream;
7980
81+ final clientCompleter = Completer <VmService >();
82+
8083 _setUpVmServerConnection (
8184 chromeProxyService: chromeProxyService,
8285 debugService: debugService,
@@ -85,6 +88,7 @@ class DwdsVmClient {
8588 requestStream: requestStream,
8689 requestSink: requestSink,
8790 dwdsStats: dwdsStats,
91+ clientFuture: clientCompleter.future,
8892 );
8993
9094 final client = ddsUri == null
@@ -97,6 +101,10 @@ class DwdsVmClient {
97101 ddsUri: ddsUri,
98102 );
99103
104+ if (! clientCompleter.isCompleted) {
105+ clientCompleter.complete (client);
106+ }
107+
100108 final dwdsVmClient =
101109 DwdsVmClient (client, requestController, responseController);
102110
@@ -158,12 +166,14 @@ class DwdsVmClient {
158166 required StreamSink <VmResponse > responseSink,
159167 required Stream <VmRequest > requestStream,
160168 required StreamSink <VmRequest > requestSink,
169+ required Future <VmService > clientFuture,
161170 }) {
162171 responseStream.listen ((request) async {
163172 final response = await _maybeHandleServiceExtensionRequest (
164173 request,
165174 chromeProxyService: chromeProxyService,
166175 dwdsStats: dwdsStats,
176+ clientFuture: clientFuture,
167177 );
168178 if (response != null ) {
169179 requestSink.add (response);
@@ -187,15 +197,19 @@ class DwdsVmClient {
187197 VmResponse request, {
188198 required ChromeProxyService chromeProxyService,
189199 required DwdsStats dwdsStats,
200+ required Future <VmService > clientFuture,
190201 }) async {
191202 VmRequest ? response;
192203 final method = request['method' ];
193204 if (method == _NamespacedServiceExtension .flutterListViews.method) {
194205 response = await _flutterListViewsHandler (chromeProxyService);
195206 } else if (method == _NamespacedServiceExtension .extDwdsEmitEvent.method) {
196207 response = _extDwdsEmitEventHandler (request);
208+ } else if (method == _NamespacedServiceExtension .extDwdsReload.method) {
209+ response = await _extDwdsReloadHandler (chromeProxyService);
197210 } else if (method == _NamespacedServiceExtension .extDwdsRestart.method) {
198- response = await _extDwdsRestartHandler (chromeProxyService);
211+ final client = await clientFuture;
212+ response = await _extDwdsRestartHandler (chromeProxyService, client);
199213 } else if (method == _NamespacedServiceExtension .extDwdsSendEvent.method) {
200214 response = await _extDwdsSendEventHandler (request, dwdsStats);
201215 } else if (method == _NamespacedServiceExtension .extDwdsScreenshot.method) {
@@ -265,13 +279,21 @@ class DwdsVmClient {
265279 return {'result' : Success ().toJson ()};
266280 }
267281
268- static Future <Map <String , Object >> _extDwdsRestartHandler (
282+ static Future <Map <String , Object >> _extDwdsReloadHandler (
269283 ChromeProxyService chromeProxyService,
270284 ) async {
271285 await _fullReload (chromeProxyService);
272286 return {'result' : Success ().toJson ()};
273287 }
274288
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+
275297 static Future <void > _registerServiceExtensions ({
276298 required VmService client,
277299 required ChromeProxyService chromeProxyService,
0 commit comments