76 lines
2.6 KiB
HTML
76 lines
2.6 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<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 src="resources/soft-navigation-helper.js"></script>
|
|
</head>
|
|
<body>
|
|
<main id=main>
|
|
<div>
|
|
<a id=link><img src="/images/lcp-256x256.png" id="img"></a>
|
|
<a id=not_nav><img src="/images/lcp-16x16.png"></a>
|
|
</div>
|
|
</main>
|
|
<script>
|
|
// Push state a couple of times
|
|
history.pushState({}, "", "foobar.html");
|
|
history.pushState({}, "", "anotherOne.html");
|
|
|
|
(async () => {
|
|
const link = document.getElementById("link");
|
|
// Trigger a user interaction that doesn't result in a soft navigation, but
|
|
// does paint.
|
|
await (async () => {
|
|
const not_nav = document.getElementById("not_nav");
|
|
let non_soft_nav_click;
|
|
const non_soft_nav_click_promise =
|
|
new Promise(r => { non_soft_nav_click = r; });
|
|
not_nav.addEventListener("click", () => {
|
|
addImageToMain("lcp-133x106.png", "not_soft_nav_image");
|
|
(new PerformanceObserver(non_soft_nav_click)).observe({type: "element"});
|
|
});
|
|
if (test_driver) {
|
|
test_driver.click(not_nav);
|
|
}
|
|
await non_soft_nav_click_promise;
|
|
})();
|
|
const url = URL + "?" + counter;
|
|
link.addEventListener("click", () => {
|
|
// Add an LCP element.
|
|
const img = new Image();
|
|
img.src = '/images/lcp-100x500.png' + "?" + Math.random();
|
|
document.getElementById("main").appendChild(img);
|
|
history.back();
|
|
});
|
|
promise_test(async t => {
|
|
if (test_driver) {
|
|
test_driver.click(link);
|
|
}
|
|
await waitOnSoftNav();
|
|
assert_equals(
|
|
document.softNavigations, 1,
|
|
'Single Soft Navigation detected');
|
|
const [entries, options] = await new Promise(resolve => {
|
|
(new PerformanceObserver((list, obs, options) => resolve(
|
|
[list.getEntries(), options]))).observe(
|
|
{type: 'soft-navigation', buffered: true});
|
|
});
|
|
|
|
assert_equals(entries.length, 1,
|
|
"Performance observer got an entry");
|
|
}, "Ensure that soft navigation entry emitted through a synchronous " +
|
|
"event that modified DOM and committed a same document navigation, " +
|
|
"and that was preceded by a user intreaction that resulted in a " +
|
|
"contentful paint is properly detected.");
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|
|
|
|
|
|
|