| <!doctype html> | |
| <html> | |
| <head> | |
| <title>XMLHttpRequest: responseXML document properties</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| </head> | |
| <body> | |
| <div id="log"></div> | |
| <script> | |
| var timePreXHR = Math.floor(new Date().getTime(new Date().getTime() - 3000) / 1000); // three seconds ago, in case there's clock drift | |
| var client = new XMLHttpRequest() | |
| client.open("GET", "resources/well-formed.xml", false) | |
| client.send(null) | |
| var responseURL = new URL('resources/well-formed.xml', location.href).href | |
| var expected = { | |
| domain:undefined, | |
| URL:responseURL, | |
| documentURI:responseURL, | |
| baseURI:responseURL, | |
| referrer:'', | |
| title:'', | |
| contentType:'application/xml', | |
| readyState:'complete', | |
| location:null, | |
| defaultView:null, | |
| body:undefined, | |
| images: undefined, | |
| doctype:null, | |
| forms:undefined, | |
| all:undefined, | |
| links: undefined, | |
| cookie:'' | |
| } | |
| for (var name in expected) { | |
| runTest(name, expected[name]) | |
| } | |
| function runTest(name, value){ | |
| test(function(){ | |
| assert_equals(client.responseXML[name], value) | |
| }, name) | |
| } | |
| async_test(t => { | |
| const client = new XMLHttpRequest(); | |
| client.open("GET", "resources/redirect.py?location=well-formed.xml"); | |
| client.send(); | |
| client.onload = t.step_func_done(() => { | |
| assert_equals(client.responseXML.URL, responseURL); | |
| assert_equals(client.responseXML.baseURI, responseURL); | |
| }); | |
| }, "Test document URL properties after redirect"); | |
| async_test(t => { | |
| const client = new XMLHttpRequest(); | |
| client.open("GET", "resources/redirect.py?location=base.xml"); | |
| client.send(); | |
| client.onload = t.step_func_done(() => { | |
| const localResponseURL = new URL('resources/base.xml', location.href).href; | |
| assert_equals(client.responseXML.URL, localResponseURL); | |
| assert_equals(client.responseXML.baseURI, 'https://example.com/'); | |
| client.responseXML.documentElement.remove(); | |
| assert_equals(client.responseXML.baseURI, localResponseURL); | |
| const newBase = document.createElement("base"), | |
| newBaseURL = "https://elsewhere.example/"; | |
| newBase.href = "https://elsewhere.example/"; | |
| client.responseXML.appendChild(newBase); | |
| assert_equals(client.responseXML.baseURI, newBaseURL); | |
| newBase.remove(); | |
| document.head.appendChild(newBase); | |
| assert_equals(client.responseXML.baseURI, localResponseURL); | |
| newBase.remove(); | |
| }); | |
| }, "Test document URL properties of document with <base> after redirect"); | |
| test(function() { | |
| var lastModified = Math.floor(new Date(client.responseXML.lastModified).getTime() / 1000); | |
| var now = Math.floor(new Date().getTime(new Date().getTime() + 3000) / 1000); // three seconds from now, in case there's clock drift | |
| assert_greater_than_equal(lastModified, timePreXHR); | |
| assert_less_than_equal(lastModified, now); | |
| }, 'lastModified set to time of response if no HTTP header provided') | |
| test(function() { | |
| var client2 = new XMLHttpRequest() | |
| client2.open("GET", "resources/last-modified.py", false) | |
| client2.send(null) | |
| assert_equals((new Date(client2.getResponseHeader('Last-Modified'))).getTime(), (new Date(client2.responseXML.lastModified)).getTime()) | |
| }, 'lastModified set to related HTTP header if provided') | |
| test(function() { | |
| client.responseXML.cookie = "thisshouldbeignored" | |
| assert_equals(client.responseXML.cookie, "") | |
| }, 'cookie (after setting it)') | |
| test(function() { | |
| assert_equals(typeof(client.responseXML.styleSheets), "object") | |
| }, 'styleSheets') | |
| test(function() { | |
| assert_equals(typeof(client.responseXML.implementation), "object") | |
| }, 'implementation') | |
| </script> | |
| </body> | |
| </html> |