| Index: tests/standalone/io/http_proxy_test.dart
 | 
| diff --git a/tests/standalone/io/http_proxy_test.dart b/tests/standalone/io/http_proxy_test.dart
 | 
| index 2d2fdcb1e4433ff9f7f6ebff8d9d0e27d943a261..bef1412cc23e964cd7b80675ec641ee3be60977d 100644
 | 
| --- a/tests/standalone/io/http_proxy_test.dart
 | 
| +++ b/tests/standalone/io/http_proxy_test.dart
 | 
| @@ -18,7 +18,7 @@ String localFile(path) => Platform.script.resolve(path).toFilePath();
 | 
|  SecurityContext serverContext = new SecurityContext()
 | 
|    ..useCertificateChain(localFile('certificates/server_chain.pem'))
 | 
|    ..usePrivateKey(localFile('certificates/server_key.pem'),
 | 
| -                  password: 'dartdart');
 | 
| +      password: 'dartdart');
 | 
|  
 | 
|  SecurityContext clientContext = new SecurityContext()
 | 
|    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
 | 
| @@ -33,10 +33,9 @@ class Server {
 | 
|    Server(this.proxyHops, this.directRequestPaths, this.secure);
 | 
|  
 | 
|    Future<Server> start() {
 | 
| -    return (secure ?
 | 
| -        HttpServer.bindSecure("localhost", 0, serverContext) :
 | 
| -        HttpServer.bind("localhost", 0))
 | 
| -    .then((s) {
 | 
| +    return (secure
 | 
| +        ? HttpServer.bindSecure("localhost", 0, serverContext)
 | 
| +        : HttpServer.bind("localhost", 0)).then((s) {
 | 
|        server = s;
 | 
|        server.listen(requestHandler);
 | 
|        return this;
 | 
| @@ -48,14 +47,12 @@ class Server {
 | 
|      requestCount++;
 | 
|      // Check whether a proxy or direct connection is expected.
 | 
|      bool direct = directRequestPaths.fold(
 | 
| -        false,
 | 
| -        (prev, path) => prev ? prev : path == request.uri.path);
 | 
| +        false, (prev, path) => prev ? prev : path == request.uri.path);
 | 
|      if (!secure && !direct && proxyHops > 0) {
 | 
|        Expect.isNotNull(request.headers[HttpHeaders.VIA]);
 | 
|        Expect.equals(1, request.headers[HttpHeaders.VIA].length);
 | 
|        Expect.equals(
 | 
| -          proxyHops,
 | 
| -          request.headers[HttpHeaders.VIA][0].split(",").length);
 | 
| +          proxyHops, request.headers[HttpHeaders.VIA][0].split(",").length);
 | 
|      } else {
 | 
|        Expect.isNull(request.headers[HttpHeaders.VIA]);
 | 
|      }
 | 
| @@ -69,6 +66,7 @@ class Server {
 | 
|        response.write(request.uri.path);
 | 
|        response.close();
 | 
|      }
 | 
| +
 | 
|      request.listen((data) {
 | 
|        body.write(new String.fromCharCodes(data));
 | 
|      }, onDone: onRequestComplete);
 | 
| @@ -82,8 +80,7 @@ class Server {
 | 
|  }
 | 
|  
 | 
|  Future<Server> setupServer(int proxyHops,
 | 
| -                   {List<String> directRequestPaths: const <String>[],
 | 
| -                    secure: false}) {
 | 
| +    {List<String> directRequestPaths: const <String>[], secure: false}) {
 | 
|    Server server = new Server(proxyHops, directRequestPaths, secure);
 | 
|    return server.start();
 | 
|  }
 | 
| @@ -103,7 +100,7 @@ class ProxyServer {
 | 
|    String serverQop = "auth";
 | 
|    Set ncs = new Set();
 | 
|  
 | 
| -  var nonce = "12345678";  // No need for random nonce in test.
 | 
| +  var nonce = "12345678"; // No need for random nonce in test.
 | 
|  
 | 
|    ProxyServer({this.ipV6: false}) : client = new HttpClient();
 | 
|  
 | 
| @@ -116,8 +113,8 @@ class ProxyServer {
 | 
|    basicAuthenticationRequired(request) {
 | 
|      request.fold(null, (x, y) {}).then((_) {
 | 
|        var response = request.response;
 | 
| -      response.headers.set(HttpHeaders.PROXY_AUTHENTICATE,
 | 
| -                           "Basic, realm=$realm");
 | 
| +      response.headers
 | 
| +          .set(HttpHeaders.PROXY_AUTHENTICATE, "Basic, realm=$realm");
 | 
|        response.statusCode = HttpStatus.PROXY_AUTHENTICATION_REQUIRED;
 | 
|        response.close();
 | 
|      });
 | 
| @@ -161,20 +158,18 @@ class ProxyServer {
 | 
|              Expect.equals(
 | 
|                  1, request.headers[HttpHeaders.PROXY_AUTHORIZATION].length);
 | 
|              String authorization =
 | 
| -              request.headers[HttpHeaders.PROXY_AUTHORIZATION][0];
 | 
| +                request.headers[HttpHeaders.PROXY_AUTHORIZATION][0];
 | 
|              if (authScheme == "Basic") {
 | 
|                List<String> tokens = authorization.split(" ");
 | 
|                Expect.equals("Basic", tokens[0]);
 | 
| -              String auth =
 | 
| -                  BASE64.encode(UTF8.encode("$username:$password"));
 | 
| +              String auth = BASE64.encode(UTF8.encode("$username:$password"));
 | 
|                if (auth != tokens[1]) {
 | 
|                  basicAuthenticationRequired(request);
 | 
|                  return;
 | 
|                }
 | 
|              } else {
 | 
|                HeaderValue header =
 | 
| -                  HeaderValue.parse(
 | 
| -                      authorization, parameterSeparator: ",");
 | 
| +                  HeaderValue.parse(authorization, parameterSeparator: ",");
 | 
|                Expect.equals("Digest", header.value);
 | 
|                var uri = header.parameters["uri"];
 | 
|                var qop = header.parameters["qop"];
 | 
| @@ -208,14 +203,14 @@ class ProxyServer {
 | 
|                  digest = md5.convert(
 | 
|                      "$ha1:${nonce}:${nc}:${cnonce}:${qop}:$ha2".codeUnits);
 | 
|                }
 | 
| -              Expect.equals(hex.encode(digest.bytes),
 | 
| -                  header.parameters["response"]);
 | 
| +              Expect.equals(
 | 
| +                  hex.encode(digest.bytes), header.parameters["response"]);
 | 
|  
 | 
|                // Add a bogus Proxy-Authentication-Info for testing.
 | 
|                var info = 'rspauth="77180d1ab3d6c9de084766977790f482", '
 | 
| -                         'cnonce="8f971178", '
 | 
| -                         'nc=000002c74, '
 | 
| -                         'qop=auth';
 | 
| +                  'cnonce="8f971178", '
 | 
| +                  'nc=000002c74, '
 | 
| +                  'qop=auth';
 | 
|                request.response.headers.set("Proxy-Authentication-Info", info);
 | 
|              }
 | 
|            }
 | 
| @@ -223,38 +218,36 @@ class ProxyServer {
 | 
|          // Open the connection from the proxy.
 | 
|          if (request.method == "CONNECT") {
 | 
|            var tmp = request.uri.toString().split(":");
 | 
| -          Socket.connect(tmp[0], int.parse(tmp[1]))
 | 
| -              .then((socket) {
 | 
| -                request.response.reasonPhrase = "Connection established";
 | 
| -                request.response.detachSocket()
 | 
| -                    .then((detached) {
 | 
| -                      socket.pipe(detached);
 | 
| -                      detached.pipe(socket);
 | 
| -                    });
 | 
| -              });
 | 
| +          Socket.connect(tmp[0], int.parse(tmp[1])).then((socket) {
 | 
| +            request.response.reasonPhrase = "Connection established";
 | 
| +            request.response.detachSocket().then((detached) {
 | 
| +              socket.pipe(detached);
 | 
| +              detached.pipe(socket);
 | 
| +            });
 | 
| +          });
 | 
|          } else {
 | 
| -          client.openUrl(request.method, request.uri)
 | 
| -            .then((HttpClientRequest clientRequest) {
 | 
| -              // Forward all headers.
 | 
| -              request.headers.forEach((String name, List<String> values) {
 | 
| -                values.forEach((String value) {
 | 
| -                  if (name != "content-length" && name != "via") {
 | 
| -                    clientRequest.headers.add(name, value);
 | 
| -                  }
 | 
| -                });
 | 
| +          client
 | 
| +              .openUrl(request.method, request.uri)
 | 
| +              .then((HttpClientRequest clientRequest) {
 | 
| +            // Forward all headers.
 | 
| +            request.headers.forEach((String name, List<String> values) {
 | 
| +              values.forEach((String value) {
 | 
| +                if (name != "content-length" && name != "via") {
 | 
| +                  clientRequest.headers.add(name, value);
 | 
| +                }
 | 
|                });
 | 
| -              // Special handling of Content-Length and Via.
 | 
| -              clientRequest.contentLength = request.contentLength;
 | 
| -              List<String> via = request.headers[HttpHeaders.VIA];
 | 
| -              String viaPrefix = via == null ? "" : "${via[0]}, ";
 | 
| -              clientRequest.headers.add(
 | 
| -                  HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port");
 | 
| -              // Copy all content.
 | 
| -              return request.pipe(clientRequest);
 | 
| -            })
 | 
| -            .then((HttpClientResponse clientResponse) {
 | 
| -              clientResponse.pipe(request.response);
 | 
|              });
 | 
| +            // Special handling of Content-Length and Via.
 | 
| +            clientRequest.contentLength = request.contentLength;
 | 
| +            List<String> via = request.headers[HttpHeaders.VIA];
 | 
| +            String viaPrefix = via == null ? "" : "${via[0]}, ";
 | 
| +            clientRequest.headers
 | 
| +                .add(HttpHeaders.VIA, "${viaPrefix}1.1 localhost:$port");
 | 
| +            // Copy all content.
 | 
| +            return request.pipe(clientRequest);
 | 
| +          }).then((HttpClientResponse clientResponse) {
 | 
| +            clientResponse.pipe(request.response);
 | 
| +          });
 | 
|          }
 | 
|        });
 | 
|      });
 | 
| @@ -278,29 +271,39 @@ testInvalidProxy() {
 | 
|    HttpClient client = new HttpClient(context: clientContext);
 | 
|  
 | 
|    client.findProxy = (Uri uri) => "";
 | 
| -  client.getUrl(Uri.parse("http://www.google.com/test"))
 | 
| -    .catchError((error) {}, test: (e) => e is HttpException);
 | 
| +  client
 | 
| +      .getUrl(Uri.parse("http://www.google.com/test"))
 | 
| +      .catchError((error) {}, test: (e) => e is HttpException);
 | 
|  
 | 
|    client.findProxy = (Uri uri) => "XXX";
 | 
| -  client.getUrl(Uri.parse("http://www.google.com/test"))
 | 
| -    .catchError((error) {}, test: (e) => e is HttpException);
 | 
| +  client
 | 
| +      .getUrl(Uri.parse("http://www.google.com/test"))
 | 
| +      .catchError((error) {}, test: (e) => e is HttpException);
 | 
|  
 | 
|    client.findProxy = (Uri uri) => "PROXY www.google.com";
 | 
| -  client.getUrl(Uri.parse("http://www.google.com/test"))
 | 
| -    .catchError((error) {}, test: (e) => e is HttpException);
 | 
| +  client
 | 
| +      .getUrl(Uri.parse("http://www.google.com/test"))
 | 
| +      .catchError((error) {}, test: (e) => e is HttpException);
 | 
|  
 | 
|    client.findProxy = (Uri uri) => "PROXY www.google.com:http";
 | 
| -  client.getUrl(Uri.parse("http://www.google.com/test"))
 | 
| -    .catchError((error) {}, test: (e) => e is HttpException);
 | 
| +  client
 | 
| +      .getUrl(Uri.parse("http://www.google.com/test"))
 | 
| +      .catchError((error) {}, test: (e) => e is HttpException);
 | 
|  }
 | 
|  
 | 
|  int testDirectDoneCount = 0;
 | 
|  void testDirectProxy() {
 | 
|    setupServer(0).then((server) {
 | 
|      HttpClient client = new HttpClient(context: clientContext);
 | 
| -    List<String> proxy =
 | 
| -        ["DIRECT", " DIRECT ", "DIRECT ;", " DIRECT ; ",
 | 
| -         ";DIRECT", " ; DIRECT ", ";;DIRECT;;"];
 | 
| +    List<String> proxy = [
 | 
| +      "DIRECT",
 | 
| +      " DIRECT ",
 | 
| +      "DIRECT ;",
 | 
| +      " DIRECT ; ",
 | 
| +      ";DIRECT",
 | 
| +      " ; DIRECT ",
 | 
| +      ";;DIRECT;;"
 | 
| +    ];
 | 
|  
 | 
|      client.findProxy = (Uri uri) {
 | 
|        int index = int.parse(uri.path.substring(1));
 | 
| @@ -308,23 +311,23 @@ void testDirectProxy() {
 | 
|      };
 | 
|  
 | 
|      for (int i = 0; i < proxy.length; i++) {
 | 
| -      client.getUrl(Uri.parse("http://localhost:${server.port}/$i"))
 | 
| -        .then((HttpClientRequest clientRequest) {
 | 
| -          String content = "$i$i$i";
 | 
| -          clientRequest.contentLength = content.length;
 | 
| -          clientRequest.write(content);
 | 
| -          return clientRequest.close();
 | 
| -        })
 | 
| -       .then((HttpClientResponse response) {
 | 
| -          response.listen((_) {}, onDone: () {
 | 
| -            testDirectDoneCount++;
 | 
| -            if (testDirectDoneCount == proxy.length) {
 | 
| -              Expect.equals(proxy.length, server.requestCount);
 | 
| -              server.shutdown();
 | 
| -              client.close();
 | 
| -            }
 | 
| -          });
 | 
| +      client
 | 
| +          .getUrl(Uri.parse("http://localhost:${server.port}/$i"))
 | 
| +          .then((HttpClientRequest clientRequest) {
 | 
| +        String content = "$i$i$i";
 | 
| +        clientRequest.contentLength = content.length;
 | 
| +        clientRequest.write(content);
 | 
| +        return clientRequest.close();
 | 
| +      }).then((HttpClientResponse response) {
 | 
| +        response.listen((_) {}, onDone: () {
 | 
| +          testDirectDoneCount++;
 | 
| +          if (testDirectDoneCount == proxy.length) {
 | 
| +            Expect.equals(proxy.length, server.requestCount);
 | 
| +            server.shutdown();
 | 
| +            client.close();
 | 
| +          }
 | 
|          });
 | 
| +      });
 | 
|      }
 | 
|    });
 | 
|  }
 | 
| @@ -332,131 +335,136 @@ void testDirectProxy() {
 | 
|  int testProxyDoneCount = 0;
 | 
|  void testProxy() {
 | 
|    setupProxyServer().then((proxyServer) {
 | 
| -  setupServer(1, directRequestPaths: ["/4"]).then((server) {
 | 
| -  setupServer(1, directRequestPaths: ["/4"], secure: true).then((secureServer) {
 | 
| -    HttpClient client = new HttpClient(context: clientContext);
 | 
| +    setupServer(1, directRequestPaths: ["/4"]).then((server) {
 | 
| +      setupServer(1, directRequestPaths: ["/4"], secure: true)
 | 
| +          .then((secureServer) {
 | 
| +        HttpClient client = new HttpClient(context: clientContext);
 | 
| +
 | 
| +        List<String> proxy;
 | 
| +        if (Platform.operatingSystem == "windows") {
 | 
| +          proxy = [
 | 
| +            "PROXY localhost:${proxyServer.port}",
 | 
| +            "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080",
 | 
| +            "PROXY localhost:${proxyServer.port}",
 | 
| +            ""
 | 
| +                " PROXY localhost:${proxyServer.port}",
 | 
| +            "DIRECT",
 | 
| +            "PROXY localhost:${proxyServer.port}; DIRECT"
 | 
| +          ];
 | 
| +        } else {
 | 
| +          proxy = [
 | 
| +            "PROXY localhost:${proxyServer.port}",
 | 
| +            "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer.port}",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181;"
 | 
| +                " PROXY localhost:${proxyServer.port}",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
 | 
| +            "PROXY localhost:${proxyServer.port}; DIRECT"
 | 
| +          ];
 | 
| +        }
 | 
| +        client.findProxy = (Uri uri) {
 | 
| +          // Pick the proxy configuration based on the request path.
 | 
| +          int index = int.parse(uri.path.substring(1));
 | 
| +          return proxy[index];
 | 
| +        };
 | 
| +
 | 
| +        for (int i = 0; i < proxy.length; i++) {
 | 
| +          test(bool secure) {
 | 
| +            String url = secure
 | 
| +                ? "https://localhost:${secureServer.port}/$i"
 | 
| +                : "http://localhost:${server.port}/$i";
 | 
| +
 | 
| +            client
 | 
| +                .postUrl(Uri.parse(url))
 | 
| +                .then((HttpClientRequest clientRequest) {
 | 
| +              String content = "$i$i$i";
 | 
| +              clientRequest.write(content);
 | 
| +              return clientRequest.close();
 | 
| +            }).then((HttpClientResponse response) {
 | 
| +              response.listen((_) {}, onDone: () {
 | 
| +                testProxyDoneCount++;
 | 
| +                if (testProxyDoneCount == proxy.length * 2) {
 | 
| +                  Expect.equals(proxy.length, server.requestCount);
 | 
| +                  Expect.equals(proxy.length, secureServer.requestCount);
 | 
| +                  proxyServer.shutdown();
 | 
| +                  server.shutdown();
 | 
| +                  secureServer.shutdown();
 | 
| +                  client.close();
 | 
| +                }
 | 
| +              });
 | 
| +            });
 | 
| +          }
 | 
|  
 | 
| -    List<String> proxy;
 | 
| -    if (Platform.operatingSystem == "windows") {
 | 
| -      proxy =
 | 
| -          ["PROXY localhost:${proxyServer.port}",
 | 
| -           "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080",
 | 
| -           "PROXY localhost:${proxyServer.port}",
 | 
| -           ""
 | 
| -               " PROXY localhost:${proxyServer.port}",
 | 
| -           "DIRECT",
 | 
| -           "PROXY localhost:${proxyServer.port}; DIRECT"];
 | 
| -    } else {
 | 
| -      proxy =
 | 
| -          ["PROXY localhost:${proxyServer.port}",
 | 
| -           "PROXY localhost:${proxyServer.port}; PROXY hede.hule.hest:8080",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer.port}",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181;"
 | 
| -               " PROXY localhost:${proxyServer.port}",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
 | 
| -           "PROXY localhost:${proxyServer.port}; DIRECT"];
 | 
| -    }
 | 
| -    client.findProxy = (Uri uri) {
 | 
| -      // Pick the proxy configuration based on the request path.
 | 
| -      int index = int.parse(uri.path.substring(1));
 | 
| -      return proxy[index];
 | 
| -    };
 | 
| +          test(false);
 | 
| +          test(true);
 | 
| +        }
 | 
| +      });
 | 
| +    });
 | 
| +  });
 | 
| +}
 | 
|  
 | 
| -    for (int i = 0; i < proxy.length; i++) {
 | 
| -      test(bool secure) {
 | 
| -        String url = secure
 | 
| -            ? "https://localhost:${secureServer.port}/$i"
 | 
| -            : "http://localhost:${server.port}/$i";
 | 
| +int testProxyChainDoneCount = 0;
 | 
| +void testProxyChain() {
 | 
| +  // Setup two proxy servers having the first using the second as its proxy.
 | 
| +  setupProxyServer().then((proxyServer1) {
 | 
| +    setupProxyServer().then((proxyServer2) {
 | 
| +      proxyServer1.client.findProxy =
 | 
| +          (_) => "PROXY localhost:${proxyServer2.port}";
 | 
| +
 | 
| +      setupServer(2, directRequestPaths: ["/4"]).then((server) {
 | 
| +        HttpClient client = new HttpClient(context: clientContext);
 | 
| +
 | 
| +        List<String> proxy;
 | 
| +        if (Platform.operatingSystem == "windows") {
 | 
| +          proxy = [
 | 
| +            "PROXY localhost:${proxyServer1.port}",
 | 
| +            "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080",
 | 
| +            "PROXY localhost:${proxyServer1.port}",
 | 
| +            "PROXY localhost:${proxyServer1.port}",
 | 
| +            "DIRECT",
 | 
| +            "PROXY localhost:${proxyServer1.port}; DIRECT"
 | 
| +          ];
 | 
| +        } else {
 | 
| +          proxy = [
 | 
| +            "PROXY localhost:${proxyServer1.port}",
 | 
| +            "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer1.port}",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181;"
 | 
| +                " PROXY localhost:${proxyServer1.port}",
 | 
| +            "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
 | 
| +            "PROXY localhost:${proxyServer1.port}; DIRECT"
 | 
| +          ];
 | 
| +        }
 | 
|  
 | 
| -        client.postUrl(Uri.parse(url))
 | 
| -          .then((HttpClientRequest clientRequest) {
 | 
| +        client.findProxy = (Uri uri) {
 | 
| +          // Pick the proxy configuration based on the request path.
 | 
| +          int index = int.parse(uri.path.substring(1));
 | 
| +          return proxy[index];
 | 
| +        };
 | 
| +
 | 
| +        for (int i = 0; i < proxy.length; i++) {
 | 
| +          client
 | 
| +              .getUrl(Uri.parse("http://localhost:${server.port}/$i"))
 | 
| +              .then((HttpClientRequest clientRequest) {
 | 
|              String content = "$i$i$i";
 | 
| +            clientRequest.contentLength = content.length;
 | 
|              clientRequest.write(content);
 | 
|              return clientRequest.close();
 | 
| -          })
 | 
| -          .then((HttpClientResponse response) {
 | 
| +          }).then((HttpClientResponse response) {
 | 
|              response.listen((_) {}, onDone: () {
 | 
| -              testProxyDoneCount++;
 | 
| -              if (testProxyDoneCount == proxy.length * 2) {
 | 
| +              testProxyChainDoneCount++;
 | 
| +              if (testProxyChainDoneCount == proxy.length) {
 | 
|                  Expect.equals(proxy.length, server.requestCount);
 | 
| -                Expect.equals(proxy.length, secureServer.requestCount);
 | 
| -                proxyServer.shutdown();
 | 
| +                proxyServer1.shutdown();
 | 
| +                proxyServer2.shutdown();
 | 
|                  server.shutdown();
 | 
| -                secureServer.shutdown();
 | 
|                  client.close();
 | 
|                }
 | 
|              });
 | 
|            });
 | 
| -      }
 | 
| -
 | 
| -      test(false);
 | 
| -      test(true);
 | 
| -    }
 | 
| -  });
 | 
| -  });
 | 
| -  });
 | 
| -}
 | 
| -
 | 
| -
 | 
| -int testProxyChainDoneCount = 0;
 | 
| -void testProxyChain() {
 | 
| -  // Setup two proxy servers having the first using the second as its proxy.
 | 
| -  setupProxyServer().then((proxyServer1) {
 | 
| -  setupProxyServer().then((proxyServer2) {
 | 
| -  proxyServer1.client.findProxy = (_) => "PROXY localhost:${proxyServer2.port}";
 | 
| -
 | 
| -  setupServer(2, directRequestPaths: ["/4"]).then((server) {
 | 
| -    HttpClient client = new HttpClient(context: clientContext);
 | 
| -
 | 
| -    List<String> proxy;
 | 
| -    if (Platform.operatingSystem == "windows") {
 | 
| -      proxy =
 | 
| -          ["PROXY localhost:${proxyServer1.port}",
 | 
| -           "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080",
 | 
| -           "PROXY localhost:${proxyServer1.port}",
 | 
| -           "PROXY localhost:${proxyServer1.port}",
 | 
| -           "DIRECT",
 | 
| -           "PROXY localhost:${proxyServer1.port}; DIRECT"];
 | 
| -    } else {
 | 
| -      proxy =
 | 
| -          ["PROXY localhost:${proxyServer1.port}",
 | 
| -           "PROXY localhost:${proxyServer1.port}; PROXY hede.hule.hest:8080",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY localhost:${proxyServer1.port}",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181;"
 | 
| -               " PROXY localhost:${proxyServer1.port}",
 | 
| -           "PROXY hede.hule.hest:8080; PROXY hede.hule.hest:8181; DIRECT",
 | 
| -           "PROXY localhost:${proxyServer1.port}; DIRECT"];
 | 
| -    }
 | 
| -
 | 
| -    client.findProxy = (Uri uri) {
 | 
| -      // Pick the proxy configuration based on the request path.
 | 
| -      int index = int.parse(uri.path.substring(1));
 | 
| -      return proxy[index];
 | 
| -    };
 | 
| -
 | 
| -    for (int i = 0; i < proxy.length; i++) {
 | 
| -      client.getUrl(Uri.parse("http://localhost:${server.port}/$i"))
 | 
| -        .then((HttpClientRequest clientRequest) {
 | 
| -          String content = "$i$i$i";
 | 
| -          clientRequest.contentLength = content.length;
 | 
| -          clientRequest.write(content);
 | 
| -          return clientRequest.close();
 | 
| -        })
 | 
| -        .then((HttpClientResponse response) {
 | 
| -          response.listen((_) {}, onDone: () {
 | 
| -            testProxyChainDoneCount++;
 | 
| -            if (testProxyChainDoneCount == proxy.length) {
 | 
| -              Expect.equals(proxy.length, server.requestCount);
 | 
| -              proxyServer1.shutdown();
 | 
| -              proxyServer2.shutdown();
 | 
| -              server.shutdown();
 | 
| -              client.close();
 | 
| -            }
 | 
| -          });
 | 
| -        });
 | 
| -    }
 | 
| -  });
 | 
| -  });
 | 
| +        }
 | 
| +      });
 | 
| +    });
 | 
|    });
 | 
|  }
 | 
|  
 | 
| 
 |