File: navigated-named-objects.window.js

package info (click to toggle)
firefox-esr 68.10.0esr-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 3,143,932 kB
  • sloc: cpp: 5,227,879; javascript: 4,315,531; ansic: 2,467,042; python: 794,975; java: 349,993; asm: 232,034; xml: 228,320; sh: 82,008; lisp: 41,202; makefile: 22,347; perl: 15,555; objc: 5,277; cs: 4,725; yacc: 1,778; ada: 1,681; pascal: 1,673; lex: 1,417; exp: 527; php: 436; ruby: 225; awk: 162; sed: 53; csh: 44
file content (67 lines) | stat: -rw-r--r-- 2,453 bytes parent folder | download | duplicates (31)
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
// META: script=/common/get-host-info.sub.js

function echoURL(content) {
  return `/common/echo.py?content=${encodeURIComponent(content)}`;
}

function setSrc(frame, type, content) {
  if (type === "same-origin") {
    frame.src = echoURL(content);
  } else if (type === "cross-site") {
    frame.src = `${get_host_info().HTTP_NOTSAMESITE_ORIGIN}${echoURL(content)}`;
  } else {
    frame.srcdoc = content;
  }
}

["srcdoc", "same-origin", "cross-site"].forEach(type => {
  const initialType = type === "srcdoc" ? type : "same-origin";

  [
    {
      "namedObject": "<div id=abc></div>",
      "namedObjectLocalName": "div"
    },
    {
      "namedObject": "<object name=abc></object>",
      "namedObjectLocalName": "object"
    },
    {
      "namedObject": "<iframe id=abc></iframe>",
      "namedObjectLocalName": "iframe"
    }
  ].forEach(testData => {
    async_test(t => {
      const frame = document.createElement("iframe");
      t.add_cleanup(() => frame.remove());
      setSrc(frame, initialType, `<script>function f() { return abc }</script>${testData.namedObject}`);
      frame.onload = t.step_func(() => {
        const f = frame.contentWindow.f,
              associatedAbc = f();
        frame.onload = t.step_func_done(() => {
          assert_equals(f(), associatedAbc);
          assert_equals(associatedAbc.localName, testData.namedObjectLocalName);
        });
        setSrc(frame, type, "<span id=abc></span>");
      });
      document.body.append(frame);
    }, `Window's associated Document object is used for finding named objects (<${testData.namedObjectLocalName}> via ${type} <iframe>)`);
  });

  async_test(t => {
    const frame = document.createElement("iframe");
    t.add_cleanup(() => frame.remove());
    setSrc(frame, initialType, "<script>function f() { return abc }</script><object name=abc data='about:blank'></object>");
    frame.onload = t.step_func(() => {
      const f = frame.contentWindow.f,
            associatedAbc = f(),
            associatedAbcContainer = associatedAbc.frameElement;
      frame.onload = t.step_func_done(() => {
        assert_equals(f(), associatedAbcContainer);
        assert_equals(associatedAbcContainer.contentWindow, null);
      });
      setSrc(frame, type, "<span id=abc></span>");
    });
    document.body.append(frame);
  }, `Window's associated Document object is used for finding named objects (<object> with browsing ccontext via ${type} <iframe)>`);
});