diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index 24ad55485..f32447dfb 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -13,6 +13,7 @@ or not. - Pre-warm expression compiler cache to speed up Flutter Inspector loading. - Remove `ChromeProxyService.setExceptionPauseMode()`. +- Display full error on failure to start DDS. ## 16.0.1 diff --git a/dwds/debug_extension_mv3/pubspec.yaml b/dwds/debug_extension_mv3/pubspec.yaml index f256afbaa..86a1212ef 100644 --- a/dwds/debug_extension_mv3/pubspec.yaml +++ b/dwds/debug_extension_mv3/pubspec.yaml @@ -20,12 +20,9 @@ dev_dependencies: built_value_generator: ^8.3.0 build_web_compilers: ^3.0.0 dwds: ^16.0.0 - sse: ^4.1.0 + sse: ^4.1.2 web_socket_channel: ^2.2.0 dependency_overrides: dwds: path: .. - # TODO(elliette): Remove override once package:sse is published. - sse: - path: /Users/elliottbrooks/dev/sse diff --git a/dwds/lib/src/dwds_vm_client.dart b/dwds/lib/src/dwds_vm_client.dart index cb7c5b780..103dd52ab 100644 --- a/dwds/lib/src/dwds_vm_client.dart +++ b/dwds/lib/src/dwds_vm_client.dart @@ -131,7 +131,7 @@ class DwdsVmClient { 'error': { 'code': kFeatureDisabled, 'message': kFeatureDisabledMessage, - 'details': + 'data': 'Existing VM service clients prevent DDS from taking control.', }, }; diff --git a/dwds/lib/src/services/chrome_proxy_service.dart b/dwds/lib/src/services/chrome_proxy_service.dart index aa21b3540..e9d5595e7 100644 --- a/dwds/lib/src/services/chrome_proxy_service.dart +++ b/dwds/lib/src/services/chrome_proxy_service.dart @@ -336,6 +336,7 @@ class ChromeProxyService implements VmServiceInterface { void destroyIsolate() { _logger.fine('Destroying isolate'); if (!_isIsolateRunning) return; + final isolate = inspector.isolate; final isolateRef = inspector.isolateRef; diff --git a/dwds/test/debug_service_test.dart b/dwds/test/debug_service_test.dart index 6ae1cd0b5..c7b31bb48 100644 --- a/dwds/test/debug_service_test.dart +++ b/dwds/test/debug_service_test.dart @@ -73,4 +73,42 @@ void main() { .then((ws) => ws.close()), completes); }); + + test('Refuses to yield to dwds if existing clients found', () async { + final ddsWs = await WebSocket.connect( + '${context.debugConnection.uri}/ws', + ); + + // Connect to vm service. + final ws = await WebSocket.connect('${context.debugConnection.uri}/ws'); + + final completer = Completer>(); + ddsWs.listen((event) { + completer.complete(json.decode(event as String)); + }); + + const yieldControlToDDS = { + 'jsonrpc': '2.0', + 'id': '0', + 'method': '_yieldControlToDDS', + 'params': { + 'uri': 'http://localhost:123', + }, + }; + + // DDS should fail to start with existing vm clients. + ddsWs.add(json.encode(yieldControlToDDS)); + + final response = await completer.future; + expect(response['id'], '0'); + expect(response.containsKey('error'), isTrue); + + final result = response['error'] as Map; + expect(result['message'], 'Feature is disabled.'); + expect(result['data'], + 'Existing VM service clients prevent DDS from taking control.'); + + await ddsWs.close(); + await ws.close(); + }); }