text-not-observed-when-changed.html (2033B)
1 <!DOCTYPE HTML> 2 <meta charset=utf-8> 3 <title>Element Timing: text not observed when changed</title> 4 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="resources/element-timing-helpers.js"></script> 8 9 <p id="content" elementtiming="initial-text">This is some text</p> 10 <div id="target"></div> 11 12 <script> 13 promise_test(async t => { 14 assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented"); 15 16 let entries = await new Promise(resolve => { 17 new PerformanceObserver((list, observer) => { 18 resolve(list.getEntries()); 19 observer.disconnect(); 20 }).observe({type: 'element', buffered: true}); 21 }); 22 23 assert_equals( 24 entries.length, 1, 25 'Expected exactly one ElementTiming entry for initial text'); 26 assert_equals( 27 entries[0].identifier, 'initial-text', 28 'Unexpected ElementTiming entry; expected "initial-text"'); 29 30 // Update existing text. We should not get an entry for this. 31 content.innerText = "This is new text for an existing element"; 32 // Add new text. We should get an entry for this. 33 target.innerHTML = '<div elementtiming="new-element-text">This is new text for a new element</div>'; 34 35 // Wait for the ElementTiming entry. Note: it's okay to kick this off after 36 // after modifying the DOM because paint timing isn't marked until 37 // rendering, which happens in a separate task. 38 entries = await new Promise(resolve => { 39 new PerformanceObserver((list, observer) => { 40 resolve(list.getEntries()); 41 observer.disconnect(); 42 }).observe({type: 'element'}); 43 }); 44 45 assert_equals( 46 entries.length, 1, 47 'Expected exactly one ElementTiming entry for additional text'); 48 assert_equals( 49 entries[0].identifier, 'new-element-text', 50 'Unexpected ElementTiming entry: expected "new-element-text"'); 51 }, 'Changing the text of an already-observed element is not observed'); 52 </script>