Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Element Timing: text not observed when changed</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/element-timing-helpers.js"></script>
<p id="content" elementtiming="initial-text">This is some text</p>
<div id="target"></div>
<script>
promise_test(async t => {
assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
let entries = await new Promise(resolve => {
new PerformanceObserver((list, observer) => {
resolve(list.getEntries());
observer.disconnect();
}).observe({type: 'element', buffered: true});
});
assert_equals(
entries.length, 1,
'Expected exactly one ElementTiming entry for initial text');
assert_equals(
entries[0].identifier, 'initial-text',
'Unexpected ElementTiming entry; expected "initial-text"');
// Update existing text. We should not get an entry for this.
content.innerText = "This is new text for an existing element";
// Add new text. We should get an entry for this.
target.innerHTML = '<div elementtiming="new-element-text">This is new text for a new element</div>';
// Wait for the ElementTiming entry. Note: it's okay to kick this off after
// after modifying the DOM because paint timing isn't marked until
// rendering, which happens in a separate task.
entries = await new Promise(resolve => {
new PerformanceObserver((list, observer) => {
resolve(list.getEntries());
observer.disconnect();
}).observe({type: 'element'});
});
assert_equals(
entries.length, 1,
'Expected exactly one ElementTiming entry for additional text');
assert_equals(
entries[0].identifier, 'new-element-text',
'Unexpected ElementTiming entry: expected "new-element-text"');
}, 'Changing the text of an already-observed element is not observed');
</script>