Skip to content

Commit bdea526

Browse files
authored
[ Tool ] Ensure --dds-port=<port> is respected when targeting web devices (flutter#174278)
Fixes flutter#159157
1 parent 73e39e9 commit bdea526

File tree

7 files changed

+48
-10
lines changed

7 files changed

+48
-10
lines changed

packages/flutter_tools/lib/src/isolated/devfs_web.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class WebDevFS implements DevFS {
6868
required this.buildInfo,
6969
required this.enableDwds,
7070
required this.enableDds,
71+
this.ddsPort,
7172
required this.entrypoint,
7273
required this.expressionCompiler,
7374
required this.chromiumLauncher,
@@ -101,6 +102,7 @@ class WebDevFS implements DevFS {
101102
final BuildInfo buildInfo;
102103
final bool enableDwds;
103104
final bool enableDds;
105+
final int? ddsPort;
104106
final bool testMode;
105107
final bool ddcModuleSystem;
106108
final bool canaryFeatures;
@@ -207,6 +209,7 @@ class WebDevFS implements DevFS {
207209
buildInfo,
208210
enableDwds,
209211
enableDds,
212+
ddsPort,
210213
entrypoint,
211214
expressionCompiler,
212215
webRenderer: webRenderer,

packages/flutter_tools/lib/src/isolated/resident_web_runner.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ class ResidentWebRunner extends ResidentRunner {
297297
buildInfo: debuggingOptions.buildInfo,
298298
enableDwds: supportsServiceProtocol,
299299
enableDds: debuggingOptions.enableDds,
300+
ddsPort: debuggingOptions.ddsPort,
300301
entrypoint: _fileSystem.file(target).uri,
301302
expressionCompiler: expressionCompiler,
302303
chromiumLauncher: _chromiumLauncher,

packages/flutter_tools/lib/src/isolated/web_asset_server.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ class WebAssetServer implements AssetReader {
178178
BuildInfo buildInfo,
179179
bool enableDwds,
180180
bool enableDds,
181+
int? ddsPort,
181182
Uri entrypoint,
182183
ExpressionCompiler? expressionCompiler, {
183184
required WebDevServerConfig webDevServerConfig,
@@ -362,6 +363,7 @@ class WebAssetServer implements AssetReader {
362363
useSseForInjectedClient: useSseForInjectedClient,
363364
expressionCompiler: expressionCompiler,
364365
spawnDds: enableDds,
366+
ddsPort: ddsPort,
365367
),
366368
appMetadata: AppMetadata(hostname: hostname),
367369
),

packages/flutter_tools/test/general.shard/web/devfs_web_ddc_modules_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,7 @@ void main() {
11221122
),
11231123
false,
11241124
false,
1125+
null,
11251126
Uri.base,
11261127
null,
11271128
webRenderer: WebRendererMode.canvaskit,
@@ -1161,6 +1162,7 @@ void main() {
11611162
),
11621163
false,
11631164
false,
1165+
null,
11641166
Uri.base,
11651167
null,
11661168
webRenderer: WebRendererMode.canvaskit,

packages/flutter_tools/test/general.shard/web/devfs_web_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,6 +1366,7 @@ void main() {
13661366
),
13671367
false,
13681368
false,
1369+
null,
13691370
Uri.base,
13701371
null,
13711372
webRenderer: WebRendererMode.canvaskit,
@@ -1405,6 +1406,7 @@ void main() {
14051406
),
14061407
false,
14071408
false,
1409+
null,
14081410
Uri.base,
14091411
null,
14101412
webRenderer: WebRendererMode.canvaskit,

packages/flutter_tools/test/integration.shard/test_driver.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ final class FlutterRunTestDriver extends FlutterTestDriver {
537537
bool structuredErrors = false,
538538
bool noDevtools = false,
539539
bool verbose = false,
540+
int? ddsPort,
540541
String? script,
541542
List<String>? additionalCommandArgs,
542543
}) async {
@@ -559,6 +560,7 @@ final class FlutterRunTestDriver extends FlutterTestDriver {
559560
if (device != GoogleChromeDevice.kChromeDeviceId) '--disable-service-auth-codes',
560561
'--machine',
561562
if (!spawnDdsInstance) '--no-dds',
563+
if (ddsPort != null) '--dds-port=$ddsPort',
562564
if (noDevtools) '--no-devtools',
563565
...getLocalEngineArguments(),
564566
'-d',

packages/flutter_tools/test/web.shard/vm_service_web_test.dart

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'dart:async';
99

1010
import 'package:file/file.dart';
1111
import 'package:flutter_tools/src/base/file_system.dart';
12+
import 'package:flutter_tools/src/base/io.dart';
1213
import 'package:flutter_tools/src/vmservice.dart';
1314
import 'package:flutter_tools/src/web/web_device.dart';
1415
import 'package:vm_service/vm_service.dart';
@@ -24,18 +25,43 @@ void main() {
2425
final project = BasicProjectWithUnaryMain();
2526
late FlutterRunTestDriver flutter;
2627

27-
group('Clients of flutter run on web with DDS enabled', () {
28-
setUp(() async {
29-
tempDir = createResolvedTempDirectorySync('run_test.');
30-
await project.setUpIn(tempDir);
31-
flutter = FlutterRunTestDriver(tempDir);
32-
});
28+
setUp(() async {
29+
tempDir = createResolvedTempDirectorySync('run_test.');
30+
await project.setUpIn(tempDir);
31+
flutter = FlutterRunTestDriver(tempDir);
32+
});
3333

34-
tearDown(() async {
35-
await flutter.stop();
36-
tryToDelete(tempDir);
37-
});
34+
tearDown(() async {
35+
await flutter.stop();
36+
tryToDelete(tempDir);
37+
});
3838

39+
testWithoutContext('flutter run on web respects --dds-port', () async {
40+
// Regression test for https://github.com/flutter/flutter/issues/159157
41+
Future<int> getFreePort() async {
42+
final ServerSocket serverSocket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
43+
try {
44+
return serverSocket.port;
45+
} finally {
46+
await serverSocket.close();
47+
}
48+
}
49+
50+
final int ddsPort = await getFreePort();
51+
await flutter.run(
52+
withDebugger: true,
53+
// Unfortunately, we can't easily test the web-server device as we'd need to attach to the
54+
// server with a Chromedriver instance to initialize DWDS and start DDS. However, the DDS
55+
// port is provided via the same code path to DWDS regardless of which device we use, so
56+
// only testing against the Chrome device should be sufficient.
57+
device: GoogleChromeDevice.kChromeDeviceId,
58+
ddsPort: ddsPort,
59+
additionalCommandArgs: <String>['--verbose', '--no-web-resources-cdn'],
60+
);
61+
expect(flutter.vmServicePort, ddsPort);
62+
});
63+
64+
group('Clients of flutter run on web with DDS enabled', () {
3965
testWithoutContext('can validate flutter version', () async {
4066
await flutter.run(
4167
withDebugger: true,

0 commit comments

Comments
 (0)