diff --git a/dwds/lib/src/dwds_vm_client.dart b/dwds/lib/src/dwds_vm_client.dart index e4ef99032..cb7c5b780 100644 --- a/dwds/lib/src/dwds_vm_client.dart +++ b/dwds/lib/src/dwds_vm_client.dart @@ -22,7 +22,7 @@ final _logger = Logger('DwdsVmClient'); class DwdsVmClient { final VmService client; final StreamController> _requestController; - final StreamController> _responseController; + final StreamController> _responseController; static const int kFeatureDisabled = 100; static const String kFeatureDisabledMessage = 'Feature is disabled.'; @@ -44,7 +44,7 @@ class DwdsVmClient { DebugService debugService, DwdsStats dwdsStats) async { // Set up hot restart as an extension. final requestController = StreamController>(); - final responseController = StreamController>(); + final responseController = StreamController>(); VmServerConnection(requestController.stream, responseController.sink, debugService.serviceExtensionRegistry, debugService.chromeProxyService); final client = @@ -55,7 +55,7 @@ class DwdsVmClient { '$request'); return; } - requestController.sink.add(jsonDecode(request) as Map); + requestController.sink.add(Map.from(jsonDecode(request))); }); final chromeProxyService = debugService.chromeProxyService as ChromeProxyService; diff --git a/dwds/lib/src/services/debug_service.dart b/dwds/lib/src/services/debug_service.dart index e28f14847..deb368652 100644 --- a/dwds/lib/src/services/debug_service.dart +++ b/dwds/lib/src/services/debug_service.dart @@ -33,14 +33,14 @@ int _clientsConnected = 0; Logger _logger = Logger('DebugService'); -void Function(WebSocketChannel, String) _createNewConnectionHandler( +void Function(WebSocketChannel) _createNewConnectionHandler( ChromeProxyService chromeProxyService, ServiceExtensionRegistry serviceExtensionRegistry, { - void Function(Map)? onRequest, - void Function(Map)? onResponse, + void Function(Map)? onRequest, + void Function(Map)? onResponse, }) { - return (webSocket, protocol) { - final responseController = StreamController>(); + return (webSocket) { + final responseController = StreamController>(); webSocket.sink.addStream(responseController.stream.map((response) { if (onResponse != null) onResponse(response); return jsonEncode(response); @@ -53,7 +53,7 @@ void Function(WebSocketChannel, String) _createNewConnectionHandler( 'Got value with unexpected type ${value.runtimeType} from web ' 'socket, expected a List or String.'); } - final request = jsonDecode(value as String) as Map; + final request = Map.from(jsonDecode(value)); if (onRequest != null) onRequest(request); return request; }); @@ -76,12 +76,12 @@ Future _handleSseConnections( SseHandler handler, ChromeProxyService chromeProxyService, ServiceExtensionRegistry serviceExtensionRegistry, { - void Function(Map)? onRequest, - void Function(Map)? onResponse, + void Function(Map)? onRequest, + void Function(Map)? onResponse, }) async { while (await handler.connections.hasNext) { final connection = await handler.connections.next; - final responseController = StreamController>(); + final responseController = StreamController>(); final sub = responseController.stream.map((response) { if (onResponse != null) onResponse(response); return jsonEncode(response); @@ -214,8 +214,8 @@ class DebugService { LoadStrategy loadStrategy, AppConnection appConnection, UrlEncoder? urlEncoder, { - void Function(Map)? onRequest, - void Function(Map)? onResponse, + void Function(Map)? onRequest, + void Function(Map)? onResponse, bool spawnDds = true, bool useSse = false, ExpressionCompiler? expressionCompiler, diff --git a/dwds/test/fixtures/context.dart b/dwds/test/fixtures/context.dart index 09cfa2ec0..ebd938e32 100644 --- a/dwds/test/fixtures/context.dart +++ b/dwds/test/fixtures/context.dart @@ -78,6 +78,9 @@ class TestContext { WebkitDebugger get webkitDebugger => _webkitDebugger!; late WebkitDebugger? _webkitDebugger; + Handler get assetHandler => _assetHandler!; + late Handler? _assetHandler; + Client get client => _client!; late Client? _client; @@ -203,7 +206,6 @@ class TestContext { ExpressionCompiler? expressionCompiler; AssetReader assetReader; - Handler assetHandler; Stream buildResults; RequireStrategy requireStrategy; String basePath = ''; @@ -237,7 +239,7 @@ class TestContext { .timeout(const Duration(seconds: 60)); final assetServerPort = daemonPort(workingDirectory); - assetHandler = proxyHandler( + _assetHandler = proxyHandler( 'http://localhost:$assetServerPort/$pathToServe/', client: client); assetReader = @@ -291,7 +293,7 @@ class TestContext { basePath = webRunner.devFS.assetServer.basePath; assetReader = webRunner.devFS.assetServer; - assetHandler = webRunner.devFS.assetServer.handleRequest; + _assetHandler = webRunner.devFS.assetServer.handleRequest; requireStrategy = FrontendServerRequireStrategyProvider( reloadConfiguration, assetReader, () async => {}, basePath) @@ -353,11 +355,14 @@ class TestContext { : 'http://localhost:$port/$basePath/$path'; await _webDriver?.get(appUrl); - final tab = await (connection.getTab((t) => t.url == appUrl) - as FutureOr); - _tabConnection = await tab.connect(); - await tabConnection.runtime.enable(); - await tabConnection.debugger.enable(); + final tab = await connection.getTab((t) => t.url == appUrl); + if (tab != null) { + _tabConnection = await tab.connect(); + await tabConnection.runtime.enable(); + await tabConnection.debugger.enable(); + } else { + throw StateError('Unable to connect to tab.'); + } if (enableDebugExtension) { final extensionTab = await _fetchDartDebugExtensionTab(connection); diff --git a/dwds/test/handlers/asset_handler_test.dart b/dwds/test/handlers/asset_handler_test.dart index d6744f7d3..ee48fbf30 100644 --- a/dwds/test/handlers/asset_handler_test.dart +++ b/dwds/test/handlers/asset_handler_test.dart @@ -2,25 +2,15 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// @dart = 2.9 - -import 'dart:io'; - -import 'package:http/http.dart' as http; -import 'package:http/io_client.dart'; import 'package:shelf/shelf.dart'; -import 'package:shelf_proxy/shelf_proxy.dart'; import 'package:test/test.dart'; import '../fixtures/context.dart'; import '../fixtures/logging.dart'; -import '../fixtures/utilities.dart'; void main() { group('Asset handler', () { final context = TestContext(); - Handler assetHandler; - http.Client client; setUpAll(() async { setCurrentLogWriter(); @@ -28,22 +18,9 @@ void main() { enableExpressionEvaluation: true, verboseCompiler: false, ); - - client = IOClient(HttpClient() - ..maxConnectionsPerHost = 200 - ..idleTimeout = const Duration(seconds: 30) - ..connectionTimeout = const Duration(seconds: 30)); - - final assetServerPort = daemonPort(context.workingDirectory); - final pathToServe = context.pathToServe; - - assetHandler = proxyHandler( - 'http://localhost:$assetServerPort/$pathToServe/', - client: client); }); tearDownAll(() async { - client.close(); await context.tearDown(); }); @@ -51,7 +28,7 @@ void main() { Future readAsString(String path) async { final request = Request('GET', Uri.parse('http://foo:0000/$path')); - final response = await assetHandler(request); + final response = await context.assetHandler(request); final result = await response.readAsString(); expect(result, isNotNull, reason: 'Failed to read $path: ${response.statusCode}'); @@ -59,7 +36,7 @@ void main() { Future readAsBytes(String path) async { final request = Request('GET', Uri.parse('http://foo:0000/$path')); - final response = await assetHandler(request); + final response = await context.assetHandler(request); final result = await response.read().toList(); expect(result, isNotNull, reason: 'Failed to read $path: ${response.statusCode}');