diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html')
-rw-r--r-- | testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html b/testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html new file mode 100644 index 0000000000..6caadeba89 --- /dev/null +++ b/testing/web-platform/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<title> +View transitions: Resizing viewport before animating rejects the ready promise. +</title> +<link rel="help" href="https://github.com/WICG/view-transitions"> +<link rel="author" href="mailto:bokan@chromium.org"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<script> +function pollForResize(win) { + const initial_width = win.innerWidth; + return new Promise(resolve => { + const interval_id = win.setInterval(() => { + if (win.innerWidth != initial_width) { + win.clearInterval(interval_id); + resolve(); + } + }, 100); + }); +} + +promise_test(async t => { + assert_implements( + document.startViewTransition, 'Missing document.startViewTransition'); + + let popup_win; + + // Open a popup window that we'll use to start a transition + await test_driver.bless('Open a popup in a new window', () => { + popup_win = window.open('about:blank', 'popup', 'width=300,height=300'); + }); + + // Resize the window while the update callback is running (i.e. before + // capturing the new state). + let transition = popup_win.document.startViewTransition(async () => { + // resizeTo is asynchonous so we want to wait until it takes effect + // before proceeding to capture the new state. Needs to poll for a + // changed size since rAFs are currently blocked (and thus, so is + // `resize` event). + const popup_resize = pollForResize(popup_win); + popup_win.resizeTo(popup_win.innerWidth/2, popup_win.innerHeight/2); + await popup_resize; + }); + + // Since the window was resized before capturing the new state, the + // transition must be skipped and the ready promise rejected. + + let did_finish = false; + transition.finished.then(() => { did_finish = true; }); + + await promise_rejects_dom(t, 'InvalidStateError', popup_win.DOMException, + transition.ready, 'Resize must must reject `ready`.'); + + assert_true(did_finish, 'Transition must be skipped.'); +}); +</script> |