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

Side by Side Diff: lib/src/runner/browser/static/host.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, 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 unified diff | Download patch
« no previous file with comments | « lib/src/runner/browser/static/host.css ('k') | lib/src/runner/browser/static/host.dart.js.map » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.host; 5 library test.runner.browser.host;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:html'; 9 import 'dart:html';
10 import 'dart:js' as js; 10 import 'dart:js' as js;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 var testRunner = js.context['testRunner']; 74 var testRunner = js.context['testRunner'];
75 if (testRunner != null) testRunner.callMethod('waitUntilDone', []); 75 if (testRunner != null) testRunner.callMethod('waitUntilDone', []);
76 76
77 runZoned(() { 77 runZoned(() {
78 var serverChannel = _connectToServer(); 78 var serverChannel = _connectToServer();
79 serverChannel.stream.listen((message) { 79 serverChannel.stream.listen((message) {
80 if (message['command'] == 'loadSuite') { 80 if (message['command'] == 'loadSuite') {
81 var suiteChannel = serverChannel.virtualChannel(message['channel']); 81 var suiteChannel = serverChannel.virtualChannel(message['channel']);
82 var iframeChannel = _connectToIframe(message['url'], message['id']); 82 var iframeChannel = _connectToIframe(message['url'], message['id']);
83 suiteChannel.pipe(iframeChannel); 83 suiteChannel.pipe(iframeChannel);
84 } else if (message['command'] == 'displayPause') {
85 document.body.classes.add('paused');
86 } else if (message['command'] == 'resume') {
87 document.body.classes.remove('paused');
84 } else { 88 } else {
85 assert(message['command'] == 'closeSuite'); 89 assert(message['command'] == 'closeSuite');
86 _iframes[message['id']].remove(); 90 _iframes[message['id']].remove();
87 } 91 }
88 }); 92 });
93
94 var play = document.querySelector("#play");
95 play.onClick.listen((_) {
96 document.body.classes.remove('paused');
97 serverChannel.sink.add({"command": "resume"});
98 });
89 }, onError: (error, stackTrace) { 99 }, onError: (error, stackTrace) {
90 print("$error\n${new Trace.from(stackTrace).terse}"); 100 print("$error\n${new Trace.from(stackTrace).terse}");
91 }); 101 });
92 } 102 }
93 103
94 /// Creates a [MultiChannel] connection to the server, using a [WebSocket] as 104 /// Creates a [MultiChannel] connection to the server, using a [WebSocket] as
95 /// the underlying protocol. 105 /// the underlying protocol.
96 MultiChannel _connectToServer() { 106 MultiChannel _connectToServer() {
97 // The `managerUrl` query parameter contains the WebSocket URL of the remote 107 // The `managerUrl` query parameter contains the WebSocket URL of the remote
98 // [BrowserManager] with which this communicates. 108 // [BrowserManager] with which this communicates.
99 var currentUrl = Uri.parse(window.location.href); 109 var currentUrl = Uri.parse(window.location.href);
100 var webSocket = new WebSocket(currentUrl.queryParameters['managerUrl']); 110 var webSocket = new WebSocket(currentUrl.queryParameters['managerUrl']);
101 111
102 var inputController = new StreamController(sync: true); 112 var inputController = new StreamController(sync: true);
103 webSocket.onMessage.listen( 113 webSocket.onMessage.listen((message) {
104 (message) => inputController.add(JSON.decode(message.data))); 114 inputController.add(JSON.decode(message.data));
115 });
105 116
106 var outputController = new StreamController(sync: true); 117 var outputController = new StreamController(sync: true);
107 outputController.stream.listen( 118 outputController.stream.listen(
108 (message) => webSocket.send(JSON.encode(message))); 119 (message) => webSocket.send(JSON.encode(message)));
109 120
110 return new MultiChannel(inputController.stream, outputController.sink); 121 return new MultiChannel(inputController.stream, outputController.sink);
111 } 122 }
112 123
113 /// Creates an iframe with `src` [url] and establishes a connection to it using 124 /// Creates an iframe with `src` [url] and establishes a connection to it using
114 /// `postMessage`. 125 /// `postMessage`.
(...skipping 30 matching lines...) Expand all
145 if (!readyCompleter.isCompleted) readyCompleter.complete(); 156 if (!readyCompleter.isCompleted) readyCompleter.complete();
146 }); 157 });
147 158
148 outputController.stream.listen((message) async { 159 outputController.stream.listen((message) async {
149 await readyCompleter.future; 160 await readyCompleter.future;
150 iframe.contentWindow.postMessage(message, window.location.origin); 161 iframe.contentWindow.postMessage(message, window.location.origin);
151 }); 162 });
152 163
153 return new StreamChannel(inputController.stream, outputController.sink); 164 return new StreamChannel(inputController.stream, outputController.sink);
154 } 165 }
OLDNEW
« no previous file with comments | « lib/src/runner/browser/static/host.css ('k') | lib/src/runner/browser/static/host.dart.js.map » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698