content/base/test/test_bug622088.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:24f28f308199
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>Bug 622088 - Test that XHR gives the referrer corresponding to the dynamic script context.</title>
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
6 <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
8 </head>
9 <body>
10 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=622088">Mozilla Bug 622088</a>
11 <pre id="test">
12
13 <iframe id='iframe' src='file_bug622088_inner.html'></iframe>
14
15 <iframe id='dataWindow' src="data:text/html,<html><head>
16 <script>function getXHRObject() { return new XMLHttpRequest(); }</script>
17 </head><body onload='parent.dataWindowLoaded()'>Hello!!</body></html>"></iframe>
18
19 <script class="testbody" type="application/javascript;version=1.8">
20
21 // Bug 622088 - Test that XHR gives the referrer corresponding to the
22 // dynamic script context.
23
24 const kOriginalLocation = location.href;
25
26 SimpleTest.waitForExplicitFinish();
27
28 var innerFinishedLoading = false;
29 function innerLoaded(inner) {
30 // Here, we're being called through inner's onload handler, so our referrer
31 // should be inner's URL.
32 var referrer = inner.doXHR();
33 is (referrer, inner.document.location, 'Expected inner frame location');
34
35 // Now change the location of the inner frame. This should be reflected in
36 // the XHR's referrer.
37 inner.history.pushState('', '', Math.random());
38 referrer = inner.doXHR();
39 is (referrer, inner.document.location, 'Expected inner frame location after pushstate');
40
41 innerFinishedLoading = true;
42 }
43
44 var dataWindowFinishedLoading = false;
45 function dataWindowLoaded() {
46 dataWindowFinishedLoading = true;
47 }
48
49 function callXHR() {
50 if (innerFinishedLoading && dataWindowFinishedLoading) {
51 var inner = document.getElementById('iframe').contentWindow;
52 var referrer = inner.doXHR();
53 is (referrer, inner.document.location,
54 'Expected inner frame location when called from outer frame.');
55
56 var referrer = inner.doXHR(new XMLHttpRequest());
57 is (referrer, document.location,
58 "Expected outer frame location when called with outer's XHR object.");
59
60 // Now do a request within the inner window using an XMLHttpRequest
61 // retrieved from a data: URI. The referrer should be this window, not the
62 // data: URI.
63 var dataWindow = document.getElementById('dataWindow').contentWindow;
64 var referrer = inner.doXHR(dataWindow.getXHRObject());
65 is (referrer, document.location,
66 "Expected outer frame location when called with data's XHR object.");
67
68 // Now do that test again, but after having changed the outer window's URI.
69 // This currently fails, due to basically bug 631949. It's not even clear
70 // what the right behavior is. So marking as a todo for now.
71 history.replaceState('', '', Math.random());
72
73 var referrer = inner.doXHR(dataWindow.getXHRObject());
74 todo_is (referrer, document.location,
75 "Expected outer frame location when called with data's XHR object " +
76 "after replaceState.");
77
78 // In case you're temped, you probably don't want to do history.pushState
79 // here and test again with the outer frame. Calling pushState on the
80 // outer frame messes up Mochitest in subtle ways.
81
82 history.replaceState('', '', kOriginalLocation);
83 SimpleTest.finish();
84 }
85 else {
86 // ugh.
87 setTimeout(callXHR, 0);
88 }
89 }
90
91 callXHR();
92
93 </script>
94 </pre>
95 </body>
96 </html>

mercurial