Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<head>
<meta charset=utf-8>
<title>Largest Contentful Paint: observe image.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/largest-contentful-paint-helpers.js"></script>
</head>
<body>
<script>
promise_test(async () => {
assert_implements(window.LargestContentfulPaint,
"LargestContentfulPaint is not implemented");
const beforeLoad = performance.now();
// Offsets inside `anim-gr.png`:
// IHDR: 8..33
// acTL: 33..53
// fcTL (1st frame): 53..91
// IDAT (1st frame): 91..254
// fcTL (2nd frame): 254..292
// fcTL payload starts at offset 262
// fdAT (2nd frame): 292..448
// fdAT payload starts at offset 304
//
// The HTTP request below will stall for 2 seconds after all pixels of
// the 1st frame are available, but before any 2nd frame pixels are
// available. The test will verify that LargestContentfulPaint fires
// "immediately", without waiting for the rest of the bytes.
//
// See https://crbug.com/393205780 why this offset (and not an earlier
// one) is used in the test.
const url = window.location.origin +
`/images/anim-gr.png?pipe=trickle(304:d${delay_pipe_value})`;
const entry = await load_and_observe(url);
const size = 100 * 50; // `anim-gr.png` is 100 by 50.
checkImage(entry, url, 'image_id', size, beforeLoad, ["animated"]);
}, "Same origin animated image is observable and has a first frame.");
</script>
</body>
</html>