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/long-animation-frame/tentative/loaf-script-window-attribution.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/long-animation-frame/tentative/loaf-script-window-attribution.html')
-rw-r--r-- | testing/web-platform/tests/long-animation-frame/tentative/loaf-script-window-attribution.html | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/long-animation-frame/tentative/loaf-script-window-attribution.html b/testing/web-platform/tests/long-animation-frame/tentative/loaf-script-window-attribution.html new file mode 100644 index 0000000000..0b8f45bed0 --- /dev/null +++ b/testing/web-platform/tests/long-animation-frame/tentative/loaf-script-window-attribution.html @@ -0,0 +1,61 @@ + +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>Long Animation Frame Timing: window attribution</title> +<meta name="timeout" content="long"> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="resources/utils.js"></script> +<div id="log"></div> +<script> + +const host_info = get_host_info(); +const {ORIGIN, REMOTE_ORIGIN, HTTP_NOTSAMESITE_ORIGIN} = host_info; + +promise_test (async t => { + const [entry, script] = await expect_long_frame_with_script(() => { + requestAnimationFrame(() => busy_wait()); + }, () => true, t); + assert_equals(script.windowAttribution, "self"); + assert_equals(script.window, window); +}, 'Scripts in this window should be self-attributed'); + +promise_test (async t => { + let found = false; + for (let i = 0; i < 10 && !found; ++i) { + const [executor, iframe] = await prepare_exec_iframe(t, ORIGIN); + const [entry, script] = await expect_long_frame_with_script(() => + executor.execute_script(async (duration) => { + await new Promise(resolve => window.requestAnimationFrame(resolve)); + const deadline = performance.now() + duration; + while (performance.now() < deadline) {} + }, [very_long_frame_duration]), () => true, t); + + if (script.windowAttribution === "descendant" && script.window === iframe.contentWindow) { + found = true; + } + } + + assert_true(found); +}, 'Scripts in subframes should be descendant-attributed'); + +promise_test(async t => { + const iframe = document.createElement("iframe"); + iframe.src = "/resource-timing/resources/green.html"; + document.body.append(iframe); + t.add_cleanup(() => iframe.remove()); + const [entry, script] = await expect_long_frame_with_script( + () => requestAnimationFrame(busy_wait), () => true, t); + const in_iframe = iframe.contentWindow.performance.getEntriesByType("long-animation-frame").some( + e => e.scripts.some(script_in_iframe => script_in_iframe.invoker === script.invoker) + ); + + assert_false(in_iframe, "IFrame should not receive the LoAF entry"); +}, 'A long busy wait in a requestAnimationFrame should not be observable by same-origin iframes'); + +</script> +</body> |