tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

responsexml-document-properties.htm (4532B)


      1 <!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>
      7    <script src="../html/dom/documents/resource-metadata-management/support/document-lastModified-utils.js"></script>
      8  </head>
      9  <body>
     10    <div id="log"></div>
     11    <script>
     12      var client = new XMLHttpRequest()
     13      client.open("GET", "resources/well-formed.xml", false)
     14      client.send(null)
     15      var responseURLObject = new URL('resources/well-formed.xml', location.href);
     16      var responseURL = responseURLObject.href
     17      var responseDomain = responseURLObject.hostname
     18      var expected = {
     19        domain:responseDomain,
     20        URL:responseURL,
     21        documentURI:responseURL,
     22        baseURI:responseURL,
     23        referrer:'',
     24        title:'',
     25        contentType:'application/xml',
     26        readyState:'complete',
     27        location:null,
     28        defaultView:null,
     29        body:null,
     30        doctype:null,
     31        all:HTMLAllCollection,
     32        cookie:''
     33      }
     34 
     35      for (var name in expected) {
     36        runTest(name, expected[name])
     37      }
     38 
     39      function runTest(name, value){
     40        test(function(){
     41          if (name == "all") {
     42            assert_equals(Object.getPrototypeOf(client.responseXML[name]), value.prototype)
     43          } else {
     44            assert_equals(client.responseXML[name], value)
     45          }
     46        }, name)
     47      }
     48 
     49      // Parse a "lastModified" value and convert it to a Date.
     50      // See https://html.spec.whatwg.org/multipage/dom.html#dom-document-lastmodified
     51      function parseLastModified(value) {
     52        const [undefined, month, day, year, hours, minutes, seconds] =
     53          /^(\d\d)\/(\d\d)\/(\d+) (\d\d):(\d\d):(\d\d)$/.exec(value);
     54        return new Date(year, month - 1, day, hours, minutes, seconds);
     55      }
     56 
     57      async_test(t => {
     58        const client = new XMLHttpRequest();
     59        client.open("GET", "resources/redirect.py?location=well-formed.xml");
     60        client.send();
     61        client.onload = t.step_func_done(() => {
     62          assert_equals(client.responseXML.URL, responseURL);
     63          assert_equals(client.responseXML.baseURI, responseURL);
     64        });
     65      }, "Test document URL properties after redirect");
     66 
     67      async_test(t => {
     68        const client = new XMLHttpRequest();
     69        client.open("GET", "resources/redirect.py?location=base.xml");
     70        client.send();
     71        client.onload = t.step_func_done(() => {
     72          const localResponseURL = new URL('resources/base.xml', location.href).href;
     73          assert_equals(client.responseXML.URL, localResponseURL);
     74          assert_equals(client.responseXML.baseURI, 'https://example.com/');
     75          client.responseXML.documentElement.remove();
     76          assert_equals(client.responseXML.baseURI, localResponseURL);
     77          const newBase = document.createElement("base"),
     78                newBaseURL = "https://elsewhere.example/";
     79          newBase.href = "https://elsewhere.example/";
     80          client.responseXML.appendChild(newBase);
     81          assert_equals(client.responseXML.baseURI, newBaseURL);
     82          newBase.remove();
     83          document.head.appendChild(newBase);
     84          assert_equals(client.responseXML.baseURI, localResponseURL);
     85          newBase.remove();
     86        });
     87      }, "Test document URL properties of document with <base> after redirect");
     88 
     89      test(function() {
     90        assert_document_lastmodified_string_approximately_now(client.responseXML.lastModified);
     91      }, 'lastModified set to time of response if no HTTP header provided')
     92 
     93      test(function() {
     94        var client2 = new XMLHttpRequest()
     95        client2.open("GET", "resources/last-modified.py", false)
     96        client2.send(null)
     97        assert_equals((new Date(client2.getResponseHeader('Last-Modified'))).getTime(), (parseLastModified(client2.responseXML.lastModified)).getTime())
     98      }, 'lastModified set to related HTTP header if provided')
     99 
    100      test(function() {
    101        client.responseXML.cookie = "thisshouldbeignored"
    102        assert_equals(client.responseXML.cookie, "")
    103      }, 'cookie (after setting it)')
    104 
    105      var objectProps = [
    106        "styleSheets",
    107        "implementation",
    108        "images",
    109        "forms",
    110        "links",
    111      ];
    112 
    113      for (let prop of objectProps) {
    114        test(function() {
    115          assert_equals(typeof(client.responseXML[prop]), "object")
    116        }, prop + " should be an object")
    117      }
    118    </script>
    119  </body>
    120 </html>