| Index: tools/testing/dart/browser_controller.dart
|
| diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
|
| index d17612dbbcaa319b3216420f7173e347c8f8cd28..8a57d695c0c761830ea74a3faff33a8e3d869905 100644
|
| --- a/tools/testing/dart/browser_controller.dart
|
| +++ b/tools/testing/dart/browser_controller.dart
|
| @@ -1466,11 +1466,14 @@ class BrowserTestingServer {
|
| var number_of_tests = 0;
|
| var current_id;
|
| var next_id;
|
| - // Describes a state where we are currently fetching the next test
|
| - // from the server. We use this to never double request tasks.
|
| +
|
| + // Has the test in the current iframe reported that it is done?
|
| var test_completed = true;
|
| + // Has the test in the current iframe reported that it is started?
|
| + var test_started = false;
|
| var testing_window;
|
|
|
| + var embedded_iframe_div = document.getElementById('embedded_iframe_div');
|
| var embedded_iframe = document.getElementById('embedded_iframe');
|
| var number_div = document.getElementById('number');
|
| var executing_div = document.getElementById('currently_executing');
|
| @@ -1582,6 +1585,11 @@ class BrowserTestingServer {
|
| } else {
|
| embedded_iframe.onload = null;
|
| }
|
| + embedded_iframe_div.removeChild(embedded_iframe);
|
| + embedded_iframe = document.createElement('iframe');
|
| + embedded_iframe.id = "embedded_iframe";
|
| + embedded_iframe.style="width:100%;height:100%";
|
| + embedded_iframe_div.appendChild(embedded_iframe);
|
| embedded_iframe.src = url;
|
| } else {
|
| if (typeof testing_window != 'undefined') {
|
| @@ -1589,6 +1597,8 @@ class BrowserTestingServer {
|
| }
|
| testing_window = window.open(url);
|
| }
|
| + test_started = false;
|
| + test_completed = false;
|
| }
|
|
|
| window.onerror = function (message, url, lineNumber) {
|
| @@ -1613,8 +1623,14 @@ class BrowserTestingServer {
|
|
|
| function reportMessage(msg, isFirstMessage, isStatusUpdate) {
|
| if (isFirstMessage) {
|
| - test_completed = false;
|
| + if (test_started) {
|
| + reportMessage(
|
| + "FAIL: test started more than once (test reloads itself) " +
|
| + msg, false, false);
|
| + return;
|
| + }
|
| current_id = next_id;
|
| + test_started = true;
|
| contactBrowserController(
|
| 'POST', '$startedPath/${browserId}?id=' + current_id,
|
| function () {}, msg, true);
|
| @@ -1666,7 +1682,12 @@ class BrowserTestingServer {
|
| function messageHandler(e) {
|
| var msg = e.data;
|
| if (typeof msg != 'string') return;
|
| -
|
| + var expectedSource =
|
| + use_iframe ? embedded_iframe.contentWindow : testing_window;
|
| + if (e.source != expectedSource) {
|
| + reportError("Message received from old test window: " + msg);
|
| + return;
|
| + }
|
| var parsedData = parseResult(msg);
|
| if (parsedData) {
|
| // Only if the JSON message contains all required parameters,
|
| @@ -1744,7 +1765,7 @@ class BrowserTestingServer {
|
| Currently executing: <span id="currently_executing"></span><br>
|
| Unhandled error: <span id="unhandled_error"></span>
|
| </div>
|
| - <div class="test box">
|
| + <div id="embedded_iframe_div" class="test box">
|
| <iframe style="width:100%;height:100%;" id="embedded_iframe"></iframe>
|
| </div>
|
| </body>
|
|
|