summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/fission/browser_hidden_iframe.js
blob: 61414b611d1b48e78b3e46a4f6b0bcfa2f196960 (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
/* 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/states.js */
/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "states.js", dir: MOCHITESTS_DIR });
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });

addAccessibleTask(
  `<input id="textbox" value="hello"/>`,
  async function (browser, contentDocAcc) {
    info(
      "Check that the IFRAME and the IFRAME document are not accessible initially."
    );
    let iframeAcc = findAccessibleChildByID(contentDocAcc, DEFAULT_IFRAME_ID);
    let iframeDocAcc = findAccessibleChildByID(
      contentDocAcc,
      DEFAULT_IFRAME_DOC_BODY_ID
    );
    ok(!iframeAcc, "IFRAME is hidden and should not be accessible");
    ok(!iframeDocAcc, "IFRAME document is hidden and should not be accessible");

    info(
      "Show the IFRAME and check that it's now available in the accessibility tree."
    );

    const events = [[EVENT_REORDER, contentDocAcc]];

    const onEvents = waitForEvents(events);
    await SpecialPowers.spawn(browser, [DEFAULT_IFRAME_ID], contentId => {
      content.document.getElementById(contentId).style.display = "";
    });
    await onEvents;

    iframeAcc = findAccessibleChildByID(contentDocAcc, DEFAULT_IFRAME_ID);
    ok(!isDefunct(iframeAcc), "IFRAME should be accessible");

    // Wait for the child iframe to layout itself. This can happen during or
    // after the reorder event, depending on timing.
    iframeDocAcc = await TestUtils.waitForCondition(() => {
      return findAccessibleChildByID(contentDocAcc, DEFAULT_IFRAME_DOC_BODY_ID);
    });

    is(iframeAcc.childCount, 1, "IFRAME accessible should have a single child");
    ok(iframeDocAcc, "IFRAME document exists");
    ok(!isDefunct(iframeDocAcc), "IFRAME document should be accessible");
    is(
      iframeAcc.firstChild,
      iframeDocAcc,
      "An accessible for a IFRAME document is the child of the IFRAME accessible"
    );
    is(
      iframeDocAcc.parent,
      iframeAcc,
      "IFRAME document's parent matches the IFRAME."
    );
  },
  {
    topLevel: false,
    iframe: true,
    remoteIframe: true,
    iframeAttrs: {
      style: "display: none;",
    },
    skipFissionDocLoad: true,
  }
);