File: document-base-url-initiated-grand-parent.https.window.js

package info (click to toggle)
firefox 145.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,528 kB
  • sloc: cpp: 7,594,999; javascript: 6,459,658; ansic: 3,752,909; python: 1,403,455; xml: 629,809; asm: 438,679; java: 186,421; sh: 67,287; makefile: 19,169; objc: 13,086; perl: 12,982; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (62 lines) | stat: -rw-r--r-- 2,284 bytes parent folder | download | duplicates (21)
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
// META: script=/common/get-host-info.sub.js
// META: script=/common/utils.js
// META: script=/common/dispatcher/dispatcher.js

const testBaseUriAboutBlankFromGrandParent = (description, child_origin) => {
  promise_test(async test => {
    // Create a child in an iframe.
    const child_token = token();
    const child_url = child_origin +
      '/common/dispatcher/executor.html' +
      `?uuid=${child_token}`;
    const iframe = document.createElement("iframe");
    iframe.src = child_url;
    document.body.appendChild(iframe);

    // The child creates a grand child in an iframe.
    const reply_token = token();
    send(child_token, `
      const iframe = document.createElement("iframe");
      location.hash = "interesting-fragment";
      iframe.src = "/common/blank.html";
      iframe.onload = () => {
        send("${reply_token}", "grand child loaded");
      };
      document.body.appendChild(iframe);
    `);
    assert_equals(await receive(reply_token), "grand child loaded");

    const child = iframe.contentWindow;
    const grandchild = child[0];

    // Navigate the grand-child toward about:blank.
    // Navigation are always asynchronous. It doesn't exist a ways to know the
    // about:blank document committed. A timer is used instead:
    grandchild.location = "about:blank";
    await new Promise(r => test.step_timeout(r, /*ms=*/500));

    // The grandchild baseURI must correspond to its grand parent.
    //
    // Note: `child_token` is removed, to get a stable failure, in case the
    // about:blank's document.baseURI reports the parent's URL instead of its
    // grand-parent.
    assert_equals(
        grandchild.document.baseURI.replace(child_token, "child_token"),
        self.document.baseURI);
  }, description);
}

onload = () => {
  testBaseUriAboutBlankFromGrandParent(
    "Check the baseURL of an about:blank document same-origin with its parent",
    get_host_info().HTTPS_ORIGIN,
  );
  testBaseUriAboutBlankFromGrandParent(
    "Check the baseURL of an about:blank document cross-origin with its parent",
    get_host_info().HTTPS_REMOTE_ORIGIN,
  );
  testBaseUriAboutBlankFromGrandParent(
    "Check the baseURL of an about:blank document cross-site with its parent",
    get_host_info().HTTPS_NOTSAMESITE_ORIGIN,
  );
}