summaryrefslogtreecommitdiffstats
path: root/docshell/test/mochitest/test_triggeringprincipal_location_seturi.html
blob: 92e20b03eab4780bcdbc80d1e8c7b9807c2b1016 (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
<!DOCTYPE html>
<html>
<head>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>        
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>

<script type="text/javascript">

SimpleTest.waitForExplicitFinish();

const SAME_ORIGIN_URI = "http://mochi.test:8888/tests/docshell/test/dummy_page.html";
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
const CROSS_ORIGIN_URI = "http://example.com/tests/docshell/test/dummy_page.html";
const NUMBER_OF_TESTS = 3;
let testCounter = 0;

function checkFinish() {
  testCounter++;
  if (testCounter < NUMBER_OF_TESTS) {
    return;
  }
  SimpleTest.finish();
}

// ---- test 1 ----

let myFrame1 = document.createElement("iframe");
myFrame1.src = SAME_ORIGIN_URI;
myFrame1.addEventListener("load", checkLoadFrame1);
document.documentElement.appendChild(myFrame1);

function checkLoadFrame1() {
  myFrame1.removeEventListener("load", checkLoadFrame1);
  // window.location.href is no longer cross-origin accessible in gecko.
  is(SpecialPowers.wrap(myFrame1.contentWindow).location.href, SAME_ORIGIN_URI,
    "initial same origin dummy loaded into frame1");

  SpecialPowers.wrap(myFrame1.contentWindow).location.hash = "#bar";
  is(SpecialPowers.wrap(myFrame1.contentWindow).location.href, SAME_ORIGIN_URI + "#bar",
    "initial same origin dummy#bar loaded into iframe1");

  myFrame1.addEventListener("load", checkNavFrame1);
  myFrame1.src = CROSS_ORIGIN_URI;
}

async function checkNavFrame1() {
  myFrame1.removeEventListener("load", checkNavFrame1);
  is(await SpecialPowers.spawn(myFrame1, [], () => this.content.location.href),
     CROSS_ORIGIN_URI,
    "cross origin dummy loaded into frame1");

  myFrame1.addEventListener("load", checkBackNavFrame1);
  myFrame1.src = SAME_ORIGIN_URI + "#bar";
}

async function checkBackNavFrame1() {
  myFrame1.removeEventListener("load", checkBackNavFrame1);
  is(await SpecialPowers.spawn(myFrame1, [], () => this.content.location.href),
     SAME_ORIGIN_URI + "#bar",
    "navagiating back to same origin dummy for frame1");
  checkFinish();
}

// ---- test 2 ----

let myFrame2 = document.createElement("iframe");
myFrame2.src = "about:blank";
myFrame2.addEventListener("load", checkLoadFrame2);
document.documentElement.appendChild(myFrame2);

function checkLoadFrame2() {
  myFrame2.removeEventListener("load", checkLoadFrame2);
  is(SpecialPowers.wrap(myFrame2.contentWindow).location.href, "about:blank",
    "initial about:blank frame loaded");

  myFrame2.contentWindow.location.hash = "#foo";
  is(SpecialPowers.wrap(myFrame2.contentWindow).location.href, "about:blank#foo",
      "about:blank#foo frame loaded");

  myFrame2.addEventListener("load", checkHistoryFrame2);
  myFrame2.src = "about:blank";
}

function checkHistoryFrame2() {
  myFrame2.removeEventListener("load", checkHistoryFrame2);
  is(SpecialPowers.wrap(myFrame2.contentWindow).location.href, "about:blank",
    "about:blank frame loaded again");
  checkFinish();
}

// ---- test 3 ----

let myFrame3 = document.createElement("frame");
document.documentElement.appendChild(myFrame3);
myFrame3.contentWindow.location.hash = "#foo";

is(myFrame3.contentWindow.location.href, "about:blank#foo",
   "created history entry with about:blank#foo");
checkFinish();

</script>
</body>
</html>