summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/dom-level0/test_setting_document.domain_idn.html
blob: b6e8c05462dcd8fd48ea747acc9282ab3af9b062 (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Setting document.domain and IDN</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none">

</div>

<!--

This test checks that the value of document.domain is always punycode,
no matter if the TLD is whitelisted or not.
Prior to bug 945240 that was not true.

-->

<div>
<h2>Whitelisted</h2>
<iframe name="idnKidWhitelist" src="http://sub1.παράδειγμα.δοκιμή/tests/dom/tests/mochitest/dom-level0/idn_child.html?idn-whitelist"></iframe>
<iframe name="punycodeKidWhitelist" src="http://sub1.παράδειγμα.δοκιμή/tests/dom/tests/mochitest/dom-level0/idn_child.html?punycode-whitelist"></iframe>
</div>

<div>
<h2>Not whitelisted</h2>
<iframe name="idnKidNoWhitelist" src="http://sub1.exaмple.test/tests/dom/tests/mochitest/dom-level0/idn_child.html?idn-nowhitelist"></iframe>
<iframe name="punycodeKidNoWhitelist" src="http://sub1.exaмple.test/tests/dom/tests/mochitest/dom-level0/idn_child.html?punycode-nowhitelist"></iframe>
</div>

<pre id="test">
<script class="testbody" type="application/javascript">

SimpleTest.waitForExplicitFinish();

var gotIDNNoWhitelist = false;
var gotPunycodeNoWhitelist = false;
var gotIDNWhitelist = false;
var gotPunycodeWhitelist = false;

var whitelistRegex =
  new RegExp("^http://sub1\\.παράδειγμα\\.δοκιμή/tests/dom/tests/" +
             "mochitest/dom-level0/idn_child\\.html\\?(.+)$");

var noWhitelistRegex =
  new RegExp("^http://sub1\\.exaмple\\.test/tests/dom/tests/" +
             "mochitest/dom-level0/idn_child\\.html\\?(.+)$");

var state = 0;

var messages =
  [
   "idn-whitelist",
   "punycode-whitelist",
   "idn-nowhitelist",
   "punycode-nowhitelist",
  ];


function receiveMessage(evt)
{
  var origin = evt.origin;
  var match;
  if (/test$/.test(origin))
  {
    is(evt.origin, "http://sub1.xn--exaple-kqf.test", "wrong sender");
  }
  else
  {
    is(evt.origin, "http://sub1.xn--hxajbheg2az3al.xn--jxalpdlp", "wrong sender");
  }

  is(messages[state] + "-response", evt.data.split(" ")[0],
     "unexpected data: " + evt.data);

  switch (messages[state])
  {
    case "idn-whitelist":
      gotIDNWhitelist = true;
      ok(evt.source === window.frames.idnKidWhitelist, "wrong source");
      is(evt.data, "idn-whitelist-response", "wrong response for IDN");
      break;

    case "punycode-whitelist":
      gotPunycodeWhitelist = true;
      ok(evt.source === window.frames.punycodeKidWhitelist, "wrong source");
      is(evt.data, "punycode-whitelist-response", "wrong response for punycode");
      break;

    case "idn-nowhitelist":
      gotIDNNoWhitelist = true;
      ok(evt.source === window.frames.idnKidNoWhitelist, "wrong source");
      is(evt.data, "idn-nowhitelist-response", "wrong response for IDN");
      break;

    case "punycode-nowhitelist":
      gotPunycodeNoWhitelist = true;
      ok(evt.source === window.frames.punycodeKidNoWhitelist, "wrong source");
      is(evt.data, "punycode-nowhitelist-response", "wrong response for punycode");
      break;

    default:
      ok(false, "unreached");
      break;
  }

  state++;
}

function* rungen() {
  var target = window.frames.idnKidWhitelist;
  target.postMessage("idn-whitelist", "http://sub1.παράδειγμα.δοκιμή");
  receiveMessage(yield);

  ok(gotIDNWhitelist, "IDN whitelist message not received");

  var target = window.frames.punycodeKidWhitelist;
  target.postMessage("punycode-whitelist", "http://sub1.παράδειγμα.δοκιμή");

  receiveMessage(yield);

  ok(gotPunycodeWhitelist, "punycode whitelist message not received");

  var target = window.frames.idnKidNoWhitelist;
  target.postMessage("idn-nowhitelist", "http://sub1.exaмple.test");

  receiveMessage(yield);

  ok(gotIDNNoWhitelist, "IDN no-whitelist message not received");

  var target = window.frames.punycodeKidNoWhitelist;
  target.postMessage("punycode-nowhitelist",
                     "http://sub1.exaмple.test");

  receiveMessage(yield);

  ok(gotPunycodeNoWhitelist,
     "punycode no-whitelist message not received");

  SimpleTest.finish();
}

var gen = rungen();
window.addEventListener("message", (m) => gen.next(m));
window.addEventListener("load", () => gen.next());
</script>
</pre>
</body>
</html>