Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(627)

Unified Diff: lib/src/runner/browser/content_shell.dart

Issue 1258363003: Expose the Observatory URL when debugging. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/runner/browser/browser_manager.dart ('k') | lib/src/runner/browser/dartium.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/runner/browser/content_shell.dart
diff --git a/lib/src/runner/browser/content_shell.dart b/lib/src/runner/browser/content_shell.dart
index 9c545d5f2145181bd40c798e417b5f6c9fa42cf0..03038d85a7fd7ccb4e3d171ed636243d5b787fbc 100644
--- a/lib/src/runner/browser/content_shell.dart
+++ b/lib/src/runner/browser/content_shell.dart
@@ -11,6 +11,8 @@ import '../../utils.dart';
import '../application_exception.dart';
import 'browser.dart';
+final _observatoryRegExp = new RegExp(r"^Observatory listening on ([^ ]+)");
+
/// A class for running an instance of the Dartium content shell.
///
/// Most of the communication with the browser is expected to happen via HTTP,
@@ -21,37 +23,45 @@ import 'browser.dart';
class ContentShell extends Browser {
final name = "Content Shell";
- ContentShell(url, {String executable})
- : super(() => _startBrowser(url, executable));
-
- /// Starts a new instance of content shell open to the given [url], which may
- /// be a [Uri] or a [String].
- ///
- /// If [executable] is passed, it's used as the content shell executable.
- /// Otherwise the default executable name for the current OS will be used.
- static Future<Process> _startBrowser(url, [String executable]) async {
- if (executable == null) executable = _defaultExecutable();
-
- var process = await Process.start(
- executable, ["--dump-render-tree", url.toString()],
- environment: {"DART_FLAGS": "--checked"});
-
- lineSplitter.bind(process.stderr).listen((line) {
- if (line != "[dartToStderr]: Dartium build has expired") return;
-
- // TODO(nweiz): link to dartlang.org once it has download links for
- // content shell
- // (https://github.com/dart-lang/www.dartlang.org/issues/1164).
- throw new ApplicationException(
- "You're using an expired content_shell. Upgrade to the latest "
- "version:\n"
- "http://gsdview.appspot.com/dart-archive/channels/stable/release/"
- "latest/dartium/");
- });
-
- return process;
+ final Future<Uri> observatoryUrl;
+
+ factory ContentShell(url, {String executable}) {
+ var completer = new Completer.sync();
+ return new ContentShell._(() async {
+ if (executable == null) executable = _defaultExecutable();
+
+ var process = await Process.start(
+ executable, ["--dump-render-tree", url.toString()],
+ environment: {"DART_FLAGS": "--checked"});
+
+ // The first observatory URL emitted is for the empty start page; the
+ // second is actually for the host page.
+ completer.complete(lineSplitter.bind(process.stdout).map((line) {
+ var match = _observatoryRegExp.firstMatch(line);
+ if (match == null) return null;
+ return Uri.parse(match[1]);
+ }).where((uri) => uri != null).first);
+
+ lineSplitter.bind(process.stderr).listen((line) {
+ if (line != "[dartToStderr]: Dartium build has expired") return;
+
+ // TODO(nweiz): link to dartlang.org once it has download links for
+ // content shell
+ // (https://github.com/dart-lang/www.dartlang.org/issues/1164).
+ throw new ApplicationException(
+ "You're using an expired content_shell. Upgrade to the latest "
+ "version:\n"
+ "http://gsdview.appspot.com/dart-archive/channels/stable/release/"
+ "latest/dartium/");
+ });
+
+ return process;
+ }, completer.future);
}
+ ContentShell._(Future<Process> startBrowser(), this.observatoryUrl)
+ : super(startBrowser);
+
/// Return the default executable for the current operating system.
static String _defaultExecutable() =>
Platform.isWindows ? "content_shell.exe" : "content_shell";
« no previous file with comments | « lib/src/runner/browser/browser_manager.dart ('k') | lib/src/runner/browser/dartium.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698