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. 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> <div id="fullscreen-div">The element.</div>
</body> </body>
<script> <script>
function toggleFullscreen() { function enterFullscreen() {
const element = document.getElementById("fullscreen-div"); 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(); element.requestFullscreen();
} else {
document.exitFullscreen();
} }
} )}
function fullscreenchanged(event) { function exitFullscreen() {
if (document.fullscreenElement) { document.exitFullscreen();
console.log("Entered fullscreen mode: "
+ document.fullscreenElement.id);
}
} }
document.getElementById("fullscreen-div")
.addEventListener("fullscreenchange", fullscreenchanged);
</script> </script>
</html> </html>
`; `;
const {session, dp} = const {session, dp} =
await testRunner.startHTML(html, 'Tests element requestFullscreen.'); 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(); await dp.Page.enable();
session.evaluateAsyncWithUserGesture('window.toggleFullscreen();'); const [entered_fullscreen] = await Promise.all([
await dp.Page.onceFrameResized(); 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(); await dp.Page.onceFrameResized();
testRunner.log('Seen page un-zoom');
testRunner.completeTest(); testRunner.completeTest();
}) })

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