@@ -6,6 +6,8 @@ import 'dart:async';
66import 'dart:convert' ;
77import 'dart:io' ;
88
9+ import 'package:collection/collection.dart' ;
10+ import 'package:dds/dds_launcher.dart' ;
911import 'package:dwds/data/build_result.dart' ;
1012import 'package:dwds/data/connect_request.dart' ;
1113import 'package:dwds/data/debug_event.dart' ;
@@ -70,8 +72,7 @@ class DevHandler {
7072 final UrlEncoder ? _urlEncoder;
7173 final bool _useSseForDebugProxy;
7274 final bool _useSseForInjectedClient;
73- final bool _spawnDds;
74- final int ? _ddsPort;
75+ final DartDevelopmentServiceConfiguration _ddsConfig;
7576 final bool _launchDevToolsInNewWindow;
7677 final ExpressionCompiler ? _expressionCompiler;
7778 final DwdsInjector _injected;
@@ -97,8 +98,8 @@ class DevHandler {
9798 this ._useSseForInjectedClient,
9899 this ._expressionCompiler,
99100 this ._injected,
100- this ._spawnDds,
101- this ._ddsPort ,
101+
102+ this ._ddsConfig ,
102103 this ._launchDevToolsInNewWindow, {
103104 this .useWebSocketConnection = false ,
104105 }) {
@@ -251,8 +252,7 @@ class DevHandler {
251252 // This will provide a websocket based service.
252253 useSse: false ,
253254 expressionCompiler: _expressionCompiler,
254- spawnDds: _spawnDds,
255- ddsPort: _ddsPort,
255+ ddsConfig: _ddsConfig,
256256 );
257257 }
258258
@@ -451,7 +451,7 @@ class DevHandler {
451451 AppConnection appConnection,
452452 SocketConnection sseConnection,
453453 ) async {
454- if (_devTools == null ) {
454+ if (_devTools == null && ! _ddsConfig.serveDevTools ) {
455455 sseConnection.sink.add (
456456 jsonEncode (
457457 serializers.serialize (
@@ -548,6 +548,7 @@ class DevHandler {
548548 await _launchDevTools (
549549 chromeProxy.remoteDebugger,
550550 _constructDevToolsUri (
551+ appServices,
551552 appServices.debugService.uri,
552553 ideQueryParam: 'Dwds' ,
553554 ),
@@ -853,21 +854,21 @@ class DevHandler {
853854 ChromeDebugService debugService,
854855 ) async {
855856 final dwdsStats = DwdsStats ();
856- Uri ? ddsUri;
857- if (_spawnDds) {
858- final dds = await debugService.startDartDevelopmentService ();
859- ddsUri = dds.wsUri;
857+ DartDevelopmentServiceLauncher ? dds;
858+ if (_ddsConfig.enable) {
859+ dds = await debugService.startDartDevelopmentService ();
860860 }
861861 final vmClient = await ChromeDwdsVmClient .create (
862862 debugService,
863863 dwdsStats,
864- ddsUri ,
864+ dds ? .wsUri ,
865865 );
866866 final appDebugService = ChromeAppDebugServices (
867867 debugService,
868868 vmClient,
869869 dwdsStats,
870- ddsUri,
870+ dds? .wsUri,
871+ dds? .devToolsUri,
871872 );
872873 final encodedUri = await debugService.encodedUri;
873874 _logger.info ('Debug service listening on $encodedUri \n ' );
@@ -985,8 +986,7 @@ class DevHandler {
985986 },
986987 useSse: _useSseForDebugProxy,
987988 expressionCompiler: _expressionCompiler,
988- spawnDds: _spawnDds,
989- ddsPort: _ddsPort,
989+ ddsConfig: _ddsConfig,
990990 );
991991 appServices = await _createAppDebugServices (debugService);
992992 extensionDebugger.sendEvent ('dwds.debugUri' , debugService.uri);
@@ -1026,27 +1026,17 @@ class DevHandler {
10261026 emitEvent (DwdsEvent .devtoolsLaunch ());
10271027 // Send the DevTools URI to the Dart Debug Extension so that it can open it:
10281028 final devToolsUri = _constructDevToolsUri (
1029+ appServices,
10291030 encodedUri,
10301031 ideQueryParam: 'ChromeDevTools' ,
10311032 );
10321033 return extensionDebugger.sendEvent ('dwds.devtoolsUri' , devToolsUri);
10331034 }
10341035
1035- DevTools _ensureDevTools () {
1036- final devTools = _devTools;
1037- if (devTools == null ) {
1038- throw StateError ('DevHandler: DevTools is not available' );
1039- }
1040- return devTools;
1041- }
1042-
10431036 Future <void > _launchDevTools (
10441037 RemoteDebugger remoteDebugger,
10451038 String devToolsUri,
10461039 ) async {
1047- // TODO(annagrin): move checking whether devtools should be started
1048- // and the creation of the uri logic here so it is easier to follow.
1049- _ensureDevTools ();
10501040 // TODO(grouma) - We may want to log the debugServiceUri if we don't launch
10511041 // DevTools so that users can manually connect.
10521042 emitEvent (DwdsEvent .devtoolsLaunch ());
@@ -1057,20 +1047,28 @@ class DevHandler {
10571047 }
10581048
10591049 String _constructDevToolsUri (
1060- String debugServiceUri, {
1050+ AppDebugServices appDebugServices,
1051+ String serviceUri, {
10611052 String ideQueryParam = '' ,
10621053 }) {
1063- final devTools = _ensureDevTools ();
1064- return Uri (
1065- scheme: 'http' ,
1066- host: devTools.hostname,
1067- port: devTools.port,
1068- path: 'debugger' ,
1069- queryParameters: {
1070- 'uri' : debugServiceUri,
1071- if (ideQueryParam.isNotEmpty) 'ide' : ideQueryParam,
1072- },
1073- ).toString ();
1054+ final devToolsUri = _devTools? .uri ?? appDebugServices.devToolsUri;
1055+ if (devToolsUri == null ) {
1056+ throw StateError ('DevHandler: DevTools is not available' );
1057+ }
1058+ return devToolsUri
1059+ .replace (
1060+ pathSegments: [
1061+ // Strips any trailing slashes from the original path
1062+ ...devToolsUri.pathSegments.whereNot ((e) => e.isEmpty),
1063+ 'debugger' ,
1064+ ],
1065+ queryParameters: {
1066+ ...devToolsUri.queryParameters,
1067+ 'uri' : serviceUri,
1068+ if (ideQueryParam.isNotEmpty) 'ide' : ideQueryParam,
1069+ },
1070+ )
1071+ .toString ();
10741072 }
10751073
10761074 static void _maybeEmitDwdsAttachEvent (DevToolsRequest request) {
0 commit comments