0

[headless] Deflake requestFullscreen call tests

Race between fullscreen change and frame resized notifications
caused test flakiness.

This CL stabilizes the test by waiting for the racy events using
Promise.all().

Bug: 339788212, 335520870
Change-Id: I3ca12da9edea018e45d4437b5119512ee2a2a59b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5533640
Auto-Submit: Peter Kvitek <kvitekp@chromium.org>
Commit-Queue: Peter Kvitek <kvitekp@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1300343}
This commit is contained in:
Peter Kvitek
2024-05-13 22:58:13 +00:00
committed by Chromium LUCI CQ
parent 0b27323790
commit e1d2011d4d
3 changed files with 22 additions and 31 deletions

@ -1,2 +1,3 @@
Tests element requestFullscreen.
Entered fullscreen mode: fullscreen-div
Seen page zoom and fullscreen element: fullscreen-div
Seen page un-zoom

@ -8,44 +8,40 @@
<div id="fullscreen-div">The element.</div>
</body>
<script>
function toggleFullscreen() {
function enterFullscreen() {
const element = document.getElementById("fullscreen-div");
if (!document.fullscreenElement) {
return new Promise(resolve => {
element.addEventListener("fullscreenchange", () => {
if (document.fullscreenElement) {
resolve(document.fullscreenElement.id);
}
});
element.requestFullscreen();
} else {
document.exitFullscreen();
}
}
)}
function fullscreenchanged(event) {
if (document.fullscreenElement) {
console.log("Entered fullscreen mode: "
+ document.fullscreenElement.id);
}
function exitFullscreen() {
document.exitFullscreen();
}
document.getElementById("fullscreen-div")
.addEventListener("fullscreenchange", fullscreenchanged);
</script>
</html>
`;
const {session, dp} =
await testRunner.startHTML(html, 'Tests element requestFullscreen.');
await dp.Runtime.enable();
dp.Runtime.onConsoleAPICalled(data => {
const text = data.params.args[0].value;
testRunner.log(text);
});
await dp.Page.enable();
session.evaluateAsyncWithUserGesture('window.toggleFullscreen();');
await dp.Page.onceFrameResized();
const [entered_fullscreen] = await Promise.all([
session.evaluateAsyncWithUserGesture('window.enterFullscreen();'),
dp.Page.onceFrameResized()
]);
session.evaluateAsyncWithUserGesture('window.toggleFullscreen();');
testRunner.log(
'Seen page zoom and fullscreen element: ' + entered_fullscreen);
session.evaluateAsyncWithUserGesture('window.exitFullscreen();');
await dp.Page.onceFrameResized();
testRunner.log('Seen page un-zoom');
testRunner.completeTest();
})

@ -370,13 +370,7 @@ HEADLESS_PROTOCOL_TEST(LargeBrowserWindowSize,
HEADLESS_PROTOCOL_TEST(ScreencastBasics, "sanity/screencast-basics.js")
HEADLESS_PROTOCOL_TEST(ScreencastViewport, "sanity/screencast-viewport.js")
// https://crbug.com/339788212
#if BUILDFLAG(IS_MAC)
#define MAYBE_RequestFullscreen DISABLED_RequestFullscreen
#else
#define MAYBE_RequestFullscreen RequestFullscreen
#endif
HEADLESS_PROTOCOL_TEST(MAYBE_RequestFullscreen, "sanity/request-fullscreen.js")
HEADLESS_PROTOCOL_TEST(RequestFullscreen, "sanity/request-fullscreen.js")
class HeadlessProtocolBrowserTestWithProxy
: public HeadlessProtocolBrowserTest {