Skip to content

Commit b0aea8b

Browse files
kevmooIvoneDjaja
authored andcommitted
[tool] Fix IP parsing by using Uri constructor (flutter#178083)
Also DRY'd up use of `"any"` constant is several places. Fixes flutter#178082
1 parent 8ff9cb9 commit b0aea8b

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ class WebAssetServer implements AssetReader {
207207
if (ddcModuleSystem) {
208208
assert(canaryFeatures);
209209
}
210-
InternetAddress address;
211-
if (hostname == 'any') {
210+
final InternetAddress address;
211+
if (hostname == webDevAnyHostDefault) {
212212
address = InternetAddress.anyIPv4;
213213
} else {
214214
address = (await InternetAddress.lookup(hostname)).first;
@@ -258,14 +258,15 @@ class WebAssetServer implements AssetReader {
258258
fileSystem: fileSystem,
259259
);
260260
final int selectedPort = server.selectedPort;
261-
var url = '$hostname:$selectedPort';
262-
if (hostname == 'any') {
263-
url = 'localhost:$selectedPort';
264-
}
265-
server._baseUri = Uri.http(url, server.basePath);
266-
if (tlsCertPath != null && tlsCertKeyPath != null) {
267-
server._baseUri = Uri.https(url, server.basePath);
268-
}
261+
262+
final cleanHost = hostname == webDevAnyHostDefault ? 'localhost' : hostname;
263+
final scheme = tlsCertPath != null && tlsCertKeyPath != null ? 'https' : 'http';
264+
server._baseUri = Uri(
265+
scheme: scheme,
266+
host: cleanHost,
267+
port: selectedPort,
268+
path: server.basePath,
269+
);
269270
if (testMode) {
270271
return server;
271272
}

packages/flutter_tools/lib/src/web/devfs_config.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ import '../base/os.dart';
1414
import 'devfs_proxy.dart';
1515

1616
const webDevServerConfigFilePath = 'web_dev_config.yaml';
17+
18+
/// Represents the default value for the web dev server.
19+
///
20+
/// Maps to `localhost` and/or `127.0.0.1`.
21+
const webDevAnyHostDefault = 'any';
1722
const _kLogEntryPrefix = '[WebDevServer]';
1823
const _kServer = 'server';
1924
const _kName = 'name';
@@ -41,7 +46,7 @@ T? _validateType<T>({required Object? value, required String fieldName}) {
4146
class WebDevServerConfig {
4247
const WebDevServerConfig({
4348
this.headers = const <String, String>{},
44-
this.host = 'any',
49+
this.host = webDevAnyHostDefault,
4550
this.port = 0,
4651
this.https,
4752
this.proxy = const <ProxyRule>[],
@@ -97,7 +102,7 @@ class WebDevServerConfig {
97102

98103
return WebDevServerConfig(
99104
headers: headers,
100-
host: host ?? 'any',
105+
host: host ?? webDevAnyHostDefault,
101106
port: port ?? 0,
102107
https: https == null ? null : HttpsConfig.fromYaml(https),
103108
proxy: proxyRules,

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,6 +1308,7 @@ void main() {
13081308
final String dummyCertPath = globals.fs.path.join(dataPath, 'tls_cert', 'dummy-cert.pem');
13091309
final String dummyCertKeyPath = globals.fs.path.join(dataPath, 'tls_cert', 'dummy-key.pem');
13101310
final webDevServerConfig = WebDevServerConfig(
1311+
host: '::1',
13111312
https: HttpsConfig(certPath: dummyCertPath, certKeyPath: dummyCertKeyPath),
13121313
);
13131314
final webDevFS = WebDevFS(
@@ -1341,6 +1342,8 @@ void main() {
13411342

13421343
// Ensure the connection established is secure
13431344
expect(uri.scheme, 'https');
1345+
// Ensure that the host correctly support IPv6
1346+
expect(uri.host, '::1');
13441347

13451348
await webDevFS.destroy();
13461349
}, overrides: <Type, Generator>{Artifacts: () => Artifacts.test()}),

0 commit comments

Comments
 (0)