summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/widgets/test_nac_mutations.html
blob: 3e4896bec2d19d190b9b165331415f4307548bf1 (plain)
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>UA Widget mutation observer test</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css" />
<video controls id="video"></video>
<div style="overflow: scroll; width: 100px; height: 100px" id="scroller"></div>
<script>
const video = document.getElementById("video");
const scroller = document.getElementById("scroller");

async function test_mutations_internal(observedNode, elementToMutate, expectMutations) {
  let resolveMutations;
  let mutations = new Promise(r => {
    resolveMutations = r;
  });

  let observer = new MutationObserver(function(m) {
    ok(expectMutations, "Mutations should be expected");
    resolveMutations(m)
  });

  SpecialPowers.wrap(observer).observe(observedNode, {
    subtree: true,
    attributes: true,
    chromeOnlyNodes: expectMutations,
  });

  elementToMutate.setAttribute("unlikely", `value-${expectMutations}`);

  if (expectMutations) {
    await mutations;
  } else {
    await new Promise(r => SimpleTest.executeSoon(r));
  }

  observer.disconnect();
}

async function test_mutations(observedNode, elementToMutate) {
  for (let chromeOnlyNodes of [true, false]) {
    info(`Testing chromeOnlyNodes: ${chromeOnlyNodes}`);
    await test_mutations_internal(observedNode, elementToMutate, chromeOnlyNodes);
  }
}

add_task(async function test_ua_mutations() {
  let shadow = SpecialPowers.wrap(video).openOrClosedShadowRoot;
  ok(!!shadow, "UA Widget ShadowRoot exists");

  await test_mutations(shadow, shadow.querySelector("*"));
});

add_task(async function test_scrollbar_mutations_same_anon_tree() {
  let scrollbar = SpecialPowers.wrap(window).InspectorUtils.getChildrenForNode(scroller, true, false)[0];
  is(scrollbar.tagName, "scrollbar", "should find a scrollbar");
  await test_mutations(scrollbar, scrollbar);
});

add_task(async function test_scrollbar_mutations_same_tree() {
  let scrollbar = SpecialPowers.wrap(window).InspectorUtils.getChildrenForNode(scroller, true, false)[0];
  is(scrollbar.tagName, "scrollbar", "should find a scrollbar");
  await test_mutations(scroller, scrollbar);
});
</script>