| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.runner.browser.content_shell; | 5 library test.runner.browser.content_shell; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 | 10 |
| 11 import 'package:stack_trace/stack_trace.dart'; |
| 12 |
| 13 import '../../utils.dart'; |
| 11 import '../application_exception.dart'; | 14 import '../application_exception.dart'; |
| 12 import 'browser.dart'; | 15 import 'browser.dart'; |
| 13 | 16 |
| 14 /// A converter that transforms a byte stream into a stream of lines. | 17 /// A converter that transforms a byte stream into a stream of lines. |
| 15 final _lines = UTF8.decoder.fuse(const LineSplitter()); | 18 final _lines = UTF8.decoder.fuse(const LineSplitter()); |
| 16 | 19 |
| 17 /// A class for running an instance of the Dartium content shell. | 20 /// A class for running an instance of the Dartium content shell. |
| 18 /// | 21 /// |
| 19 /// Most of the communication with the browser is expected to happen via HTTP, | 22 /// Most of the communication with the browser is expected to happen via HTTP, |
| 20 /// so this exposes a bare-bones API. The browser starts as soon as the class is | 23 /// so this exposes a bare-bones API. The browser starts as soon as the class is |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 // TODO(nweiz): link to dartlang.org once it has download links for | 67 // TODO(nweiz): link to dartlang.org once it has download links for |
| 65 // content shell | 68 // content shell |
| 66 // (https://github.com/dart-lang/www.dartlang.org/issues/1164). | 69 // (https://github.com/dart-lang/www.dartlang.org/issues/1164). |
| 67 throw new ApplicationException( | 70 throw new ApplicationException( |
| 68 "You're using an expired content_shell. Upgrade to the latest " | 71 "You're using an expired content_shell. Upgrade to the latest " |
| 69 "version:\n" | 72 "version:\n" |
| 70 "http://gsdview.appspot.com/dart-archive/channels/stable/release/" | 73 "http://gsdview.appspot.com/dart-archive/channels/stable/release/" |
| 71 "latest/dartium/"); | 74 "latest/dartium/"); |
| 72 } | 75 } |
| 73 | 76 |
| 74 if (exitCode != 0) throw "Content shell failed with exit code $exitCode."; | 77 if (exitCode == 0) return null; |
| 75 }).then(_onExitCompleter.complete) | 78 |
| 76 .catchError(_onExitCompleter.completeError); | 79 |
| 80 return UTF8.decodeStream(_process.stderr).then((error) { |
| 81 throw new ApplicationException( |
| 82 "Content shell failed with exit code $exitCode:\n$error"); |
| 83 }); |
| 84 }).then(_onExitCompleter.complete).catchError((error, stackTrace) { |
| 85 if (stackTrace == null) stackTrace = new Trace.current(); |
| 86 _onExitCompleter.completeError( |
| 87 new ApplicationException( |
| 88 "Failed to start content shell: ${getErrorMessage(error)}."), |
| 89 stackTrace); |
| 90 }); |
| 77 } | 91 } |
| 78 | 92 |
| 79 Future close() { | 93 Future close() { |
| 80 _onProcessStarted.then((_) => _process.kill()); | 94 _onProcessStarted.then((_) => _process.kill()); |
| 81 | 95 |
| 82 // Swallow exceptions. The user should explicitly use [onExit] for these. | 96 // Swallow exceptions. The user should explicitly use [onExit] for these. |
| 83 return onExit.catchError((_) {}); | 97 return onExit.catchError((_) {}); |
| 84 } | 98 } |
| 85 | 99 |
| 86 /// Return the default executable for the current operating system. | 100 /// Return the default executable for the current operating system. |
| 87 String _defaultExecutable() => | 101 String _defaultExecutable() => |
| 88 Platform.isWindows ? "content_shell.exe" : "content_shell"; | 102 Platform.isWindows ? "content_shell.exe" : "content_shell"; |
| 89 } | 103 } |
| OLD | NEW |