<!DOCTYPE html> <head> <title>Performance Paint Timing Test: child ignores parent FCP</title> <meta name="timeout" content="long"> </head> <body> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <iframe src='../resources/subframe-sending-paint.html' id='child-iframe'></iframe> <img src='../resources/circles.png'/> <script> setup({"hide_test_state": true}); async_test(function (t) { assert_implements(window.PerformancePaintTiming, "Paint Timing isn't supported."); window.addEventListener('message', t.step_func(e => { // Child iframe should not have any paint-timing entries. assert_equals(e.data, '0'); t.done(); })); // Wait for onload to ensure img and iframe have loaded. window.addEventListener('load', function() { function testPaintEntries() { const bufferedEntries = performance.getEntriesByType('paint'); if (bufferedEntries.length < 2) { t.step_timeout(testPaintEntries, 20); return; } t.step(function() { assert_equals(bufferedEntries.length, 2, 'There should be two paint timing instances.'); assert_equals(bufferedEntries[0].entryType, 'paint'); assert_equals(bufferedEntries[0].name, 'first-paint'); assert_equals(bufferedEntries[1].entryType, 'paint'); assert_equals(bufferedEntries[1].name, 'first-contentful-paint'); // Ask child iframe to send its paint-timing entries. document.getElementById('child-iframe'). contentWindow.postMessage('', '*'); }) } testPaintEntries(); }); }, 'Child iframe ignores paint-timing events fired from parent image rendering.'); </script> </body> </html>