Skip to content

Commit 5b4a14c

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Handle test output messages that arrive before the waiter is ready.
The waitForTestResultsAsMessage function now buffers test output messages received via top.postMessage in earlyTestResults if the waiter is not yet active. This prevents missing test results that are posted very quickly after the test starts. When waitForTestResultsAsMessage is called, it first checks the buffer before setting up a waiter. Bug: 491766258 Change-Id: Ib34bb6e87ab1036e1c52ecbcd057050dc490fe7b Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/7704616 Reviewed-by: Andrey Kosyakov <caseq@chromium.org> Commit-Queue: Danil Somsikov <dsv@chromium.org> Auto-Submit: Danil Somsikov <dsv@chromium.org> Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
1 parent 1a9e439 commit 5b4a14c

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

front_end/Tests.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,20 +1086,36 @@
10861086
this.takeControl({slownessFactor: 10});
10871087
};
10881088

1089-
TestSuite.prototype.waitForTestResultsAsMessage = function() {
1090-
const onMessage = event => {
1091-
if (!event.data.testOutput) {
1092-
return;
1093-
}
1094-
top.removeEventListener('message', onMessage);
1089+
const earlyTestResults = [];
1090+
let testResultsWaiter = null;
1091+
1092+
top.addEventListener('message', event => {
1093+
if (event.data && event.data.testOutput) {
10951094
const text = event.data.testOutput;
1095+
if (testResultsWaiter) {
1096+
testResultsWaiter(text);
1097+
} else {
1098+
earlyTestResults.push(text);
1099+
}
1100+
}
1101+
});
1102+
1103+
TestSuite.prototype.waitForTestResultsAsMessage = function() {
1104+
const handleMessage = text => {
1105+
testResultsWaiter = null;
10961106
if (text === 'PASS') {
10971107
this.releaseControl();
10981108
} else {
10991109
this.fail(text);
11001110
}
11011111
};
1102-
top.addEventListener('message', onMessage);
1112+
1113+
if (earlyTestResults.length) {
1114+
handleMessage(earlyTestResults.shift());
1115+
return;
1116+
}
1117+
1118+
testResultsWaiter = handleMessage;
11031119
this.takeControl();
11041120
};
11051121

0 commit comments

Comments
 (0)