summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/fission/browser_src_change.js
blob: e97cda3cc33259e2ff5dad9904684a4855292d83 (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
/* 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 });

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

    info("Replace src URL for the IFRAME with one with different origin.");
    const onDocLoad = waitForEvent(
      EVENT_DOCUMENT_LOAD_COMPLETE,
      DEFAULT_IFRAME_DOC_BODY_ID
    );

    await SpecialPowers.spawn(
      browser,
      [DEFAULT_IFRAME_ID, CURRENT_CONTENT_DIR],
      (id, olddir) => {
        const { src } = content.document.getElementById(id);
        content.document.getElementById(id).src = src.replace(
          olddir,
          // eslint-disable-next-line @microsoft/sdl/no-insecure-url
          "http://example.net/browser/accessible/tests/browser/"
        );
      }
    );
    const newiframeDocAcc = (await onDocLoad).accessible;

    ok(isAccessible(iframeAcc), "IFRAME should be accessible");
    ok(
      isAccessible(newiframeDocAcc),
      "new IFRAME document should be accessible"
    );
    isnot(
      iframeDocAcc,
      newiframeDocAcc,
      "A new accessible is created for a IFRAME document."
    );
    is(
      iframeAcc.firstChild,
      newiframeDocAcc,
      "An IFRAME has a new accessible for a IFRAME document as a child."
    );
    is(
      newiframeDocAcc.parent,
      iframeAcc,
      "A new accessible for a IFRAME document has an IFRAME as a parent."
    );
  },
  { topLevel: false, iframe: true, remoteIframe: true }
);