summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/e10s/browser_treeupdate_csscontentvisibility.js
blob: 8a1f93d0be6bf8d68a742c1d109dd4c85c58ea98 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });

const snippet = `
  <style>
    #target {
      width: 150px;
      height: 150px;
      background-color: lightblue;
    }
    #child {
      width: 100px;
      height: 100px;
      background-color: lightgreen;
    }
    #content-child {
      width: 100px;
      height: 100px;
      background-color: green;
      display: contents;
    }
    .hidden {
      content-visibility: hidden;
    }
    .auto {
      content-visibility: auto;
    }
    #hidden-subtree-2 {
      visibility: hidden;
    }
  </style>
  <div class="hidden" id="target">
    <div id="child">A</div>
    <div id="content-child">B</div>
    <div id="hidden-subtree-1" class="hidden">C</div>
    <div id="hidden-subtree-2">D</div>
    <div id="shadow-host"></div>
  </div>
  <script>
    const host = document.querySelector("#shadow-host");
    const shadowRoot = host.attachShadow({ mode: "open" });
    shadowRoot.innerHTML = "<div id='shadowDiv'>E</div>";
  </script>
  `;

add_setup(async function () {
  await SpecialPowers.pushPrefEnv({
    set: [["layout.css.content-visibility.enabled", true]],
  });
});

async function setContentVisibility(browser, value) {
  let mutationPromise = (() => {
    switch (value) {
      case "hidden":
        return waitForEvent(EVENT_REORDER, "target");
      case "auto":
        return waitForEvents({
          expected: [
            [EVENT_REORDER, "child"],
            [EVENT_REORDER, "content-child"],
            [EVENT_REORDER, "shadowDiv"],
            [EVENT_REORDER, "target"],
          ],
        });
      default:
        throw new Error(`unexpected content-visibility: ${value}`);
    }
  })();

  // Change the value of `content-visibility` property for the target
  info(`Setting content-visibility: ${value}`);
  await invokeSetAttribute(browser, "target", "class", value);
  await mutationPromise;
}

addAccessibleTask(
  snippet,
  async function (browser, accDoc) {
    const target = findAccessibleChildByID(accDoc, "target");

    info("Initial Accessibility Structure Test");
    testAccessibleTree(target, { SECTION: [] });

    await setContentVisibility(browser, "auto");
    testAccessibleTree(target, {
      SECTION: [
        { SECTION: [{ TEXT_LEAF: [] }] } /* child */,
        { SECTION: [{ TEXT_LEAF: [] }] } /* content-child */,
        { SECTION: [] } /* hidden-subtree-1 */,
        { SECTION: [{ SECTION: [{ TEXT_LEAF: [] }] }] } /* shadow-host */,
      ],
    });

    await setContentVisibility(browser, "hidden");
    testAccessibleTree(target, { SECTION: [] });
  },
  { iframe: true, remoteIframe: true, chrome: true }
);