blob: f67ea10e24bc8ba7d531c97912f4ffce4fe72700 [file] [log] [blame]
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:401<!doctype html>
2<html>
3 <head>
4 <title>XMLHttpRequest: responseXML document properties</title>
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:407 </head>
8 <body>
9 <div id="log"></div>
10 <script>
jgrahamb2854612016-10-06 18:36:4211 var timePreXHR = Math.floor(new Date().getTime(new Date().getTime() - 3000) / 1000); // three seconds ago, in case there's clock drift
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:4012 var client = new XMLHttpRequest()
13 client.open("GET", "resources/well-formed.xml", false)
14 client.send(null)
Anne van Kesterene2d2cde2017-05-15 07:43:4815 var responseURL = new URL('resources/well-formed.xml', location.href).href
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0816 var expected = {
17 domain:undefined,
Anne van Kesterene2d2cde2017-05-15 07:43:4818 URL:responseURL,
19 documentURI:responseURL,
20 baseURI:responseURL,
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0821 referrer:'',
22 title:'',
Hallvord R. M. Steen9ac6d662013-05-14 15:33:0023 contentType:'application/xml',
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0824 readyState:'complete',
25 location:null,
26 defaultView:null,
Boris Zbarskyb96d0ba2018-01-30 18:09:0727 body:null,
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0828 images: undefined,
29 doctype:null,
30 forms:undefined,
31 all:undefined,
32 links: undefined,
33 cookie:''
Hallvord Reiar M. Steen4e96dac2013-07-03 12:42:1034 }
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0835
36 for (var name in expected) {
37 runTest(name, expected[name])
Hallvord Reiar M. Steen4e96dac2013-07-03 12:42:1038 }
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0839
40 function runTest(name, value){
41 test(function(){
Hallvord Reiar M. Steen4e96dac2013-07-03 12:42:1042 assert_equals(client.responseXML[name], value)
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0843 }, name)
44 }
45
Anne van Kesterene2d2cde2017-05-15 07:43:4846 async_test(t => {
47 const client = new XMLHttpRequest();
48 client.open("GET", "resources/redirect.py?location=well-formed.xml");
49 client.send();
50 client.onload = t.step_func_done(() => {
51 assert_equals(client.responseXML.URL, responseURL);
52 assert_equals(client.responseXML.baseURI, responseURL);
53 });
54 }, "Test document URL properties after redirect");
55
56 async_test(t => {
57 const client = new XMLHttpRequest();
58 client.open("GET", "resources/redirect.py?location=base.xml");
59 client.send();
60 client.onload = t.step_func_done(() => {
61 const localResponseURL = new URL('resources/base.xml', location.href).href;
62 assert_equals(client.responseXML.URL, localResponseURL);
63 assert_equals(client.responseXML.baseURI, 'https://example.com/');
64 client.responseXML.documentElement.remove();
65 assert_equals(client.responseXML.baseURI, localResponseURL);
66 const newBase = document.createElement("base"),
67 newBaseURL = "https://elsewhere.example/";
68 newBase.href = "https://elsewhere.example/";
69 client.responseXML.appendChild(newBase);
70 assert_equals(client.responseXML.baseURI, newBaseURL);
71 newBase.remove();
72 document.head.appendChild(newBase);
73 assert_equals(client.responseXML.baseURI, localResponseURL);
74 newBase.remove();
75 });
76 }, "Test document URL properties of document with <base> after redirect");
77
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:4078 test(function() {
Thomas Wisniewskife9bcee2016-06-29 12:28:2279 var lastModified = Math.floor(new Date(client.responseXML.lastModified).getTime() / 1000);
jgrahamb2854612016-10-06 18:36:4280 var now = Math.floor(new Date().getTime(new Date().getTime() + 3000) / 1000); // three seconds from now, in case there's clock drift
Thomas Wisniewskife9bcee2016-06-29 12:28:2281 assert_greater_than_equal(lastModified, timePreXHR);
82 assert_less_than_equal(lastModified, now);
83 }, 'lastModified set to time of response if no HTTP header provided')
84
85 test(function() {
86 var client2 = new XMLHttpRequest()
87 client2.open("GET", "resources/last-modified.py", false)
88 client2.send(null)
89 assert_equals((new Date(client2.getResponseHeader('Last-Modified'))).getTime(), (new Date(client2.responseXML.lastModified)).getTime())
90 }, 'lastModified set to related HTTP header if provided')
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0891
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:4092 test(function() {
93 client.responseXML.cookie = "thisshouldbeignored"
94 assert_equals(client.responseXML.cookie, "")
95 }, 'cookie (after setting it)')
Hallvord Reiar M. Steend3d45612013-04-30 12:46:0896
97 test(function() {
98 assert_equals(typeof(client.responseXML.styleSheets), "object")
99 }, 'styleSheets')
100
101 test(function() {
102 assert_equals(typeof(client.responseXML.implementation), "object")
103 }, 'implementation')
Hallvord Reiar M. Steene3ce86d2013-04-30 10:15:40104 </script>
105 </body>
106</html>