| Index: tools/testing/dart/http_server.dart
|
| diff --git a/tools/testing/dart/http_server.dart b/tools/testing/dart/http_server.dart
|
| index 1cfdb651bbf5175a3d429b3f8639ffe3f9b7eff3..429ddeac8ff1fae9f9d108317f2ffc533459fce6 100644
|
| --- a/tools/testing/dart/http_server.dart
|
| +++ b/tools/testing/dart/http_server.dart
|
| @@ -7,11 +7,10 @@ library http_server;
|
| import 'dart:async';
|
| import 'dart:io';
|
|
|
| -import 'dart:convert' show
|
| - HtmlEscape;
|
| +import 'dart:convert' show HtmlEscape;
|
|
|
| import 'path.dart';
|
| -import 'test_suite.dart'; // For TestUtils.
|
| +import 'test_suite.dart'; // For TestUtils.
|
| // TODO(efortuna): Rewrite to not use the args library and simply take an
|
| // expected number of arguments, so test.dart doesn't rely on the args library?
|
| // See discussion on https://codereview.chromium.org/11931025/.
|
| @@ -23,9 +22,8 @@ class DispatchingServer {
|
| Map<String, Function> _handlers = new Map<String, Function>();
|
| Function _notFound;
|
|
|
| - DispatchingServer(this.server,
|
| - void onError(e),
|
| - void this._notFound(HttpRequest request)) {
|
| + DispatchingServer(
|
| + this.server, void onError(e), void this._notFound(HttpRequest request)) {
|
| server.listen(_dispatchRequest, onError: onError);
|
| }
|
|
|
| @@ -46,8 +44,6 @@ class DispatchingServer {
|
| }
|
| }
|
|
|
| -
|
| -
|
| /// Interface of the HTTP server:
|
| ///
|
| /// /echo: This will stream the data received in the request stream back
|
| @@ -77,37 +73,37 @@ main(List<String> arguments) {
|
| TestUtils.setDartDirUri(Platform.script.resolve('../../..'));
|
| /** Convenience method for local testing. */
|
| var parser = new ArgParser();
|
| - parser.addOption('port', abbr: 'p',
|
| + parser.addOption('port',
|
| + abbr: 'p',
|
| help: 'The main server port we wish to respond to requests.',
|
| defaultsTo: '0');
|
| - parser.addOption('crossOriginPort', abbr: 'c',
|
| + parser.addOption('crossOriginPort',
|
| + abbr: 'c',
|
| help: 'A different port that accepts request from the main server port.',
|
| defaultsTo: '0');
|
| - parser.addFlag('help', abbr: 'h', negatable: false,
|
| - help: 'Print this usage information.');
|
| + parser.addFlag('help',
|
| + abbr: 'h', negatable: false, help: 'Print this usage information.');
|
| parser.addOption('build-directory', help: 'The build directory to use.');
|
| parser.addOption('package-root', help: 'The package root to use.');
|
| - parser.addOption('network', help: 'The network interface to use.',
|
| - defaultsTo: '0.0.0.0');
|
| - parser.addFlag('csp', help: 'Use Content Security Policy restrictions.',
|
| - defaultsTo: false);
|
| - parser.addOption('runtime', help: 'The runtime we are using (for csp flags).',
|
| - defaultsTo: 'none');
|
| + parser.addOption('network',
|
| + help: 'The network interface to use.', defaultsTo: '0.0.0.0');
|
| + parser.addFlag('csp',
|
| + help: 'Use Content Security Policy restrictions.', defaultsTo: false);
|
| + parser.addOption('runtime',
|
| + help: 'The runtime we are using (for csp flags).', defaultsTo: 'none');
|
|
|
| var args = parser.parse(arguments);
|
| if (args['help']) {
|
| print(parser.getUsage());
|
| } else {
|
| var servers = new TestingServers(new Path(args['build-directory']),
|
| - args['csp'],
|
| - args['runtime'],
|
| - null,
|
| - args['package-root']);
|
| + args['csp'], args['runtime'], null, args['package-root']);
|
| var port = int.parse(args['port']);
|
| var crossOriginPort = int.parse(args['crossOriginPort']);
|
| - servers.startServers(args['network'],
|
| - port: port,
|
| - crossOriginPort: crossOriginPort).then((_) {
|
| + servers
|
| + .startServers(args['network'],
|
| + port: port, crossOriginPort: crossOriginPort)
|
| + .then((_) {
|
| DebugLogger.info('Server listening on port ${servers.port}');
|
| DebugLogger.info('Server listening on port ${servers.crossOriginPort}');
|
| });
|
| @@ -138,16 +134,16 @@ class TestingServers {
|
| final String runtime;
|
| DispatchingServer _server;
|
|
|
| - TestingServers(Path buildDirectory,
|
| - this.useContentSecurityPolicy,
|
| - [String this.runtime = 'none', String dartDirectory,
|
| - String packageRoot]) {
|
| + TestingServers(Path buildDirectory, this.useContentSecurityPolicy,
|
| + [String this.runtime = 'none',
|
| + String dartDirectory,
|
| + String packageRoot]) {
|
| _buildDirectory = TestUtils.absolutePath(buildDirectory);
|
| - _dartDirectory = dartDirectory == null ? TestUtils.dartDir
|
| - : new Path(dartDirectory);
|
| - _packageRoot = packageRoot == null ?
|
| - _buildDirectory.append('packages') :
|
| - new Path(packageRoot);
|
| + _dartDirectory =
|
| + dartDirectory == null ? TestUtils.dartDir : new Path(dartDirectory);
|
| + _packageRoot = packageRoot == null
|
| + ? _buildDirectory.append('packages')
|
| + : new Path(packageRoot);
|
| }
|
|
|
| int get port => _serverList[0].port;
|
| @@ -166,8 +162,7 @@ class TestingServers {
|
| return _startHttpServer(host, port: port).then((server) {
|
| _server = server;
|
| return _startHttpServer(host,
|
| - port: crossOriginPort,
|
| - allowedPort:_serverList[0].port);
|
| + port: crossOriginPort, allowedPort: _serverList[0].port);
|
| });
|
| }
|
|
|
| @@ -178,8 +173,8 @@ class TestingServers {
|
| var buildDirectory = _buildDirectory.toNativePath();
|
| var csp = useContentSecurityPolicy ? '--csp ' : '';
|
| return '$dart $script -p $port -c $crossOriginPort $csp'
|
| - '--build-directory=$buildDirectory --runtime=$runtime '
|
| - '--package-root=$_packageRoot';
|
| + '--build-directory=$buildDirectory --runtime=$runtime '
|
| + '--package-root=$_packageRoot';
|
| }
|
|
|
| void stopServers() {
|
| @@ -208,12 +203,11 @@ class TestingServers {
|
| });
|
| }
|
|
|
| - void _handleFileOrDirectoryRequest(HttpRequest request,
|
| - int allowedPort) {
|
| + void _handleFileOrDirectoryRequest(HttpRequest request, int allowedPort) {
|
| // Enable browsers to cache file/directory responses.
|
| var response = request.response;
|
| - response.headers.set("Cache-Control",
|
| - "max-age=$_CACHE_EXPIRATION_IN_SECONDS");
|
| + response.headers
|
| + .set("Cache-Control", "max-age=$_CACHE_EXPIRATION_IN_SECONDS");
|
| var path = _getFilePathFromRequestPath(request.uri.path);
|
| if (path != null) {
|
| var file = new File(path.toNativePath());
|
| @@ -235,9 +229,11 @@ class TestingServers {
|
| });
|
| } else {
|
| if (request.uri.path == '/') {
|
| - var entries = [new _Entry('root_dart', 'root_dart/'),
|
| - new _Entry('root_build', 'root_build/'),
|
| - new _Entry('echo', 'echo')];
|
| + var entries = [
|
| + new _Entry('root_dart', 'root_dart/'),
|
| + new _Entry('root_build', 'root_build/'),
|
| + new _Entry('echo', 'echo')
|
| + ];
|
| _sendDirectoryListing(entries, request, response);
|
| } else {
|
| _sendNotFound(request);
|
| @@ -285,12 +281,10 @@ class TestingServers {
|
| var relativePath;
|
| if (pathSegments[0] == PREFIX_BUILDDIR) {
|
| basePath = _buildDirectory;
|
| - relativePath = new Path(
|
| - pathSegments.skip(1).join('/'));
|
| + relativePath = new Path(pathSegments.skip(1).join('/'));
|
| } else if (pathSegments[0] == PREFIX_DARTDIR) {
|
| basePath = _dartDirectory;
|
| - relativePath = new Path(
|
| - pathSegments.skip(1).join('/'));
|
| + relativePath = new Path(pathSegments.skip(1).join('/'));
|
| }
|
| var packagesIndex = pathSegments.indexOf('packages');
|
| if (packagesIndex != -1) {
|
| @@ -309,24 +303,21 @@ class TestingServers {
|
| var completer = new Completer();
|
| var entries = [];
|
|
|
| - directory.list().listen(
|
| - (FileSystemEntity fse) {
|
| - var filename = new Path(fse.path).filename;
|
| - if (fse is File) {
|
| - entries.add(new _Entry(filename, filename));
|
| - } else if (fse is Directory) {
|
| - entries.add(new _Entry(filename, '$filename/'));
|
| - }
|
| - },
|
| - onDone: () {
|
| - completer.complete(entries);
|
| - });
|
| + directory.list().listen((FileSystemEntity fse) {
|
| + var filename = new Path(fse.path).filename;
|
| + if (fse is File) {
|
| + entries.add(new _Entry(filename, filename));
|
| + } else if (fse is Directory) {
|
| + entries.add(new _Entry(filename, '$filename/'));
|
| + }
|
| + }, onDone: () {
|
| + completer.complete(entries);
|
| + });
|
| return completer.future;
|
| }
|
|
|
| - void _sendDirectoryListing(List<_Entry> entries,
|
| - HttpRequest request,
|
| - HttpResponse response) {
|
| + void _sendDirectoryListing(
|
| + List<_Entry> entries, HttpRequest request, HttpResponse response) {
|
| response.headers.set('Content-Type', 'text/html');
|
| var header = '''<!DOCTYPE html>
|
| <html>
|
| @@ -344,7 +335,6 @@ class TestingServers {
|
| </body>
|
| </html>''';
|
|
|
| -
|
| entries.sort();
|
| response.write(header);
|
| for (var entry in entries) {
|
| @@ -360,26 +350,21 @@ class TestingServers {
|
| });
|
| }
|
|
|
| - void _sendFileContent(HttpRequest request,
|
| - HttpResponse response,
|
| - int allowedPort,
|
| - Path path,
|
| - File file) {
|
| + void _sendFileContent(HttpRequest request, HttpResponse response,
|
| + int allowedPort, Path path, File file) {
|
| if (allowedPort != -1) {
|
| var headerOrigin = request.headers.value('Origin');
|
| var allowedOrigin;
|
| if (headerOrigin != null) {
|
| var origin = Uri.parse(headerOrigin);
|
| // Allow loading from http://*:$allowedPort in browsers.
|
| - allowedOrigin =
|
| - '${origin.scheme}://${origin.host}:${allowedPort}';
|
| + allowedOrigin = '${origin.scheme}://${origin.host}:${allowedPort}';
|
| } else {
|
| // IE10 appears to be bugged and is not sending the Origin header
|
| // when making CORS requests to the same domain but different port.
|
| allowedOrigin = '*';
|
| }
|
|
|
| -
|
| response.headers.set("Access-Control-Allow-Origin", allowedOrigin);
|
| response.headers.set('Access-Control-Allow-Credentials', 'true');
|
| } else {
|
| @@ -392,8 +377,10 @@ class TestingServers {
|
| // whereas Firefox and IE10 use X-Content-Security-Policy. Safari
|
| // still uses the WebKit- prefixed version.
|
| var content_header_value = "script-src 'self'; object-src 'self'";
|
| - for (var header in ["Content-Security-Policy",
|
| - "X-Content-Security-Policy"]) {
|
| + for (var header in [
|
| + "Content-Security-Policy",
|
| + "X-Content-Security-Policy"
|
| + ]) {
|
| response.headers.set(header, content_header_value);
|
| }
|
| if (const ["safari"].contains(runtime)) {
|
| @@ -426,7 +413,7 @@ class TestingServers {
|
| }
|
| if (!isHarmlessPath(request.uri.path)) {
|
| DebugLogger.warning('HttpServer: could not find file for request path: '
|
| - '"${request.uri.path}"');
|
| + '"${request.uri.path}"');
|
| }
|
| var response = request.response;
|
| response.statusCode = HttpStatus.NOT_FOUND;
|
|
|