File: historical-mutation-events.html

package info (click to toggle)
firefox-esr 140.5.0esr-1~deb13u1
  • links: PTS, VCS
  • area: main
  • in suites: trixie-proposed-updates
  • size: 4,539,036 kB
  • sloc: cpp: 7,381,527; javascript: 6,388,905; ansic: 3,710,087; python: 1,393,776; xml: 628,165; asm: 426,918; java: 184,004; sh: 65,744; makefile: 19,302; objc: 13,059; perl: 12,912; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,226; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (65 lines) | stat: -rw-r--r-- 2,343 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE html>
<title>Historical DOM features must be removed</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
// This test has been split out from dom/historical.html so that the removal
// of Mutation Events can be tracked separately from the removal of other
// features as part of Interop2025 [1]. When Interop2025 concludes, the contents
// of this test can be merged back into dom/historical.html.
// [1] https://github.com/web-platform-tests/interop/blob/main/2025/README.md

function isInterfaceRemoved(name) {
  test(function() {
    assert_false(name in window)
    assert_equals(window[name], undefined)
  }, "Historical DOM features must be removed: " + name)
}
var removedInterfaces = [
  "MutationEvent"
]
removedInterfaces.forEach(isInterfaceRemoved)

// For reference, these events were defined in
// https://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/DOM3-Events.html#events-Events-EventTypes-complete
const mutationEvents = [
  'DOMSubtreeModified',
  'DOMNodeInserted',
  'DOMNodeRemoved',
  'DOMNodeRemovedFromDocument',
  'DOMNodeInsertedIntoDocument',
  'DOMCharacterDataModified',
  'DOMAttrModified',
  'DOMAttributeNameChanged',
  'DOMElementNameChanged',
];
mutationEvents.forEach(evt => {
  promise_test(async (t) => {
    const target = document.createElement('div');
    let fired = false;
    function listener(event) {
      fired = true;
    }
    target.addEventListener(evt,listener);
    document.body.addEventListener(evt,listener);
    target.append('here');
    t.add_cleanup(() => target.remove());
    document.body.appendChild(target);

    // Trigger all mutation types except DOMElementNameChanged, which could
    // only be triggered by a call to the (deprecated, removed)
    // Document.renameNode() API.
    target.remove();
    document.body.appendChild(target);
    target.setAttribute('test','foo');
    target.attributes[0].value='bar';
    target.attributes[0].name='baz';
    target.firstChild.textContent = "bar";
    // Mutation events were synchronous, but ensure even async versions
    // would fail this test.
    await new Promise(resolve=>t.step_timeout(resolve,0));
    assert_false(fired,'Event was fired');
  }, `The ${evt} mutation event must not be fired.`);
});
</script>