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

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

Issue 1264043002: Display a pause screen in a paused browser. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years, 5 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.dart ('k') | lib/src/runner/browser/static/host.css » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/runner/browser/browser_manager.dart
diff --git a/lib/src/runner/browser/browser_manager.dart b/lib/src/runner/browser/browser_manager.dart
index 46a48717556fd6304e223aaea6a88892fda6c9ff..f002f329cd3af47be4cf3dbacfba2180c5c5aad1 100644
--- a/lib/src/runner/browser/browser_manager.dart
+++ b/lib/src/runner/browser/browser_manager.dart
@@ -12,6 +12,7 @@ import 'package:pool/pool.dart';
import '../../backend/metadata.dart';
import '../../backend/test_platform.dart';
+import '../../util/cancelable_future.dart';
import '../../util/multi_channel.dart';
import '../../util/remote_exception.dart';
import '../../util/stack_trace_mapper.dart';
@@ -52,6 +53,12 @@ class BrowserManager {
/// Whether the channel to the browser has closed.
bool _closed = false;
+ /// The completer for [_BrowserEnvironment.displayPause].
+ ///
+ /// This will be `null` as long as the browser isn't displaying a pause
+ /// screen.
+ CancelableCompleter _pauseCompleter;
+
/// The environment to attach to each suite.
_BrowserEnvironment _environment;
@@ -62,7 +69,7 @@ class BrowserManager {
webSocket.map(JSON.decode),
mapSink(webSocket, JSON.encode)) {
_environment = new _BrowserEnvironment(this);
- _channel.stream.listen(null, onDone: () => _closed = true);
+ _channel.stream.listen(_onMessage, onDone: _onDone);
}
/// Tells the browser the load a test suite from the URL [url].
@@ -153,6 +160,35 @@ class BrowserManager {
}), platform: browser, metadata: metadata, path: path,
onClose: () => closeIframe());
}
+
+ /// An implementation of [Environment.displayPause].
+ CancelableFuture _displayPause() {
+ if (_pauseCompleter != null) return _pauseCompleter.future;
+
+ _pauseCompleter = new CancelableCompleter(() {
+ _channel.sink.add({"command": "resume"});
+ _pauseCompleter = null;
+ });
+
+ _channel.sink.add({"command": "displayPause"});
+ return _pauseCompleter.future.whenComplete(() {
+ _pauseCompleter = null;
+ });
+ }
+
+ /// The callback for handling messages received from the host page.
+ void _onMessage(Map message) {
+ assert(message["command"] == "resume");
+ if (_pauseCompleter == null) return;
+ _pauseCompleter.complete();
+ }
+
+ /// The callback called when the WebSocket is closed.
+ void _onDone() {
+ _closed = true;
+ if (_pauseCompleter != null) _pauseCompleter.complete();
+ _pauseCompleter = null;
+ }
}
/// An implementation of [Environment] for the browser.
@@ -162,4 +198,6 @@ class _BrowserEnvironment implements Environment {
final BrowserManager _manager;
_BrowserEnvironment(this._manager);
+
+ CancelableFuture displayPause() => _manager._displayPause();
}
« no previous file with comments | « lib/src/runner.dart ('k') | lib/src/runner/browser/static/host.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698