Use hostname that's bound in order to support "any" via HttpMultiServer (#858)

* Use hostname that's bound in order to support "any" via HttpMultiServer
diff --git a/dwds/lib/dwds.dart b/dwds/lib/dwds.dart
index 8cc88ef..97701af 100644
--- a/dwds/lib/dwds.dart
+++ b/dwds/lib/dwds.dart
@@ -93,7 +93,7 @@
       extensionBackend = await ExtensionBackend.start(hostname);
       extensionUri = Uri(
               scheme: 'http',
-              host: hostname,
+              host: extensionBackend.hostname,
               port: extensionBackend.port,
               path: r'$debug')
           .toString();
diff --git a/dwds/test/debug_extension_test.dart b/dwds/test/debug_extension_test.dart
index 540e079..e1b7272 100644
--- a/dwds/test/debug_extension_test.dart
+++ b/dwds/test/debug_extension_test.dart
@@ -77,4 +77,34 @@
       expect(result.body.contains('http://some-encoded-url:8081/'), isTrue);
     });
   });
+
+  group('With "any" hostname', () {
+    final context = TestContext();
+    final uriPattern = RegExp(r'dartExtensionUri = "([^"]+)";');
+
+    setUp(() async {
+      await context.setUp(enableDebugExtension: true, hostname: 'any');
+    });
+
+    tearDown(() async {
+      await context.tearDown();
+    });
+
+    test('generates an extensionUri with a valid valid hostname', () async {
+      var result = await http.get(
+          'http://localhost:${context.port}/hello_world/main.dart$bootstrapJsExtension');
+      expect(result.body.contains('dartExtensionUri'), isTrue);
+      var extensionUri = Uri.parse(uriPattern.firstMatch(result.body).group(1));
+      expect(
+          extensionUri.host,
+          anyOf(
+            // The hostname should've been mapped from "any" to one of the local
+            // loopback addresses/IPs.
+            equals('localhost'),
+            equals('127.0.0.1'),
+            equals('::'),
+            equals('::1'),
+          ));
+    });
+  });
 }
diff --git a/dwds/test/fixtures/context.dart b/dwds/test/fixtures/context.dart
index fa2736e..dde0a6b 100644
--- a/dwds/test/fixtures/context.dart
+++ b/dwds/test/fixtures/context.dart
@@ -70,6 +70,7 @@
       bool enableDebugExtension,
       bool autoRun,
       bool enableDebugging,
+      String hostname,
       bool waitToDebug,
       UrlEncoder urlEncoder,
       bool restoreBreakpoints}) async {
@@ -135,6 +136,7 @@
 
     port = await findUnusedPort();
     testServer = await TestServer.start(
+        hostname,
         port,
         daemonPort(workingDirectory),
         pathToServe,
diff --git a/dwds/test/fixtures/server.dart b/dwds/test/fixtures/server.dart
index 957c182..f4b270f 100644
--- a/dwds/test/fixtures/server.dart
+++ b/dwds/test/fixtures/server.dart
@@ -42,6 +42,7 @@
   }
 
   static Future<TestServer> start(
+      String hostname,
       int port,
       int assetServerPort,
       String target,
@@ -69,6 +70,7 @@
       serveDevTools: serveDevTools,
       enableDebugExtension: enableDebugExtension,
       enableDebugging: enableDebugging,
+      hostname: hostname,
       verbose: true,
       urlEncoder: urlEncoder,
       // ignore: deprecated_member_use_from_same_package