tor-browser

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

Document-createElement-namespace.html (4466B)


      1 <!doctype html>
      2 <title>document.createElement() namespace tests</title>
      3 <link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
      4 <div id=log></div>
      5 <script src=/resources/testharness.js></script>
      6 <script src=/resources/testharnessreport.js></script>
      7 <script>
      8 "use strict";
      9 /**
     10 * This tests the namespace of elements created by the Document interface's
     11 * createElement() method.  See bug:
     12 * https://www.w3.org/Bugs/Public/show_bug.cgi?id=19431
     13 */
     14 
     15 /**
     16 * Test that an element created using the Document object doc has the namespace
     17 * that would be expected for the given contentType.
     18 */
     19 function testDoc(doc, contentType) {
     20  if (doc.contentType !== undefined) {
     21    // Sanity check
     22    assert_equals(doc.contentType, contentType,
     23                  "Wrong MIME type returned from doc.contentType");
     24  }
     25 
     26  var expectedNamespace = contentType == "text/html" ||
     27                          contentType == "application/xhtml+xml"
     28                          ? "http://www.w3.org/1999/xhtml" : null;
     29 
     30  assert_equals(doc.createElement("x").namespaceURI, expectedNamespace);
     31 }
     32 
     33 // First test various objects we create in JS
     34 test(function() {
     35  testDoc(document, "text/html")
     36 }, "Created element's namespace in current document");
     37 test(function() {
     38  testDoc(document.implementation.createHTMLDocument(""), "text/html");
     39 }, "Created element's namespace in created HTML document");
     40 test(function() {
     41  testDoc(document.implementation.createDocument(null, "", null),
     42          "application/xml");
     43 }, "Created element's namespace in created XML document");
     44 test(function() {
     45  testDoc(document.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", null),
     46          "application/xhtml+xml");
     47 }, "Created element's namespace in created XHTML document");
     48 test(function() {
     49  testDoc(document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", null),
     50          "image/svg+xml");
     51 }, "Created element's namespace in created SVG document");
     52 test(function() {
     53  testDoc(document.implementation.createDocument("http://www.w3.org/1998/Math/MathML", "math", null),
     54          "application/xml");
     55 }, "Created element's namespace in created MathML document");
     56 
     57 // Second also test document created by DOMParser
     58 test(function() {
     59  testDoc(new DOMParser().parseFromString("", "text/html"), "text/html");
     60 }, "Created element's namespace in created HTML document by DOMParser ('text/html')");
     61 test(function() {
     62  testDoc(new DOMParser().parseFromString("<root/>", "text/xml"), "text/xml");
     63 }, "Created element's namespace in created XML document by DOMParser ('text/xml')");
     64 test(function() {
     65  testDoc(new DOMParser().parseFromString("<root/>", "application/xml"), "application/xml");
     66 }, "Created element's namespace in created XML document by DOMParser ('application/xml')");
     67 test(function() {
     68  testDoc(new DOMParser().parseFromString("<html/>", "application/xhtml+xml"), "application/xhtml+xml");
     69 }, "Created element's namespace in created XHTML document by DOMParser ('application/xhtml+xml')");
     70 test(function() {
     71  testDoc(new DOMParser().parseFromString("<math/>", "image/svg+xml"), "image/svg+xml");
     72 }, "Created element's namespace in created SVG document by DOMParser ('image/svg+xml')");
     73 
     74 // Now for various externally-loaded files.  Note: these lists must be kept
     75 // synced with the lists in generate.py in the subdirectory, and that script
     76 // must be run whenever the lists are updated.  (We could keep the lists in a
     77 // shared JSON file, but it seems like too much effort.)
     78 var testExtensions = {
     79  html: "text/html",
     80  xhtml: "application/xhtml+xml",
     81  xml: "application/xml",
     82  svg: "image/svg+xml",
     83  // Was not able to get server MIME type working properly :(
     84  //mml: "application/mathml+xml",
     85 };
     86 
     87 var tests = [
     88  "empty",
     89  "minimal_html",
     90 
     91  "xhtml",
     92  "svg",
     93  "mathml",
     94 
     95  "bare_xhtml",
     96  "bare_svg",
     97  "bare_mathml",
     98 
     99  "xhtml_ns_removed",
    100  "xhtml_ns_changed",
    101 ];
    102 
    103 tests.forEach(function(testName) {
    104  Object.keys(testExtensions).forEach(function(ext) {
    105    async_test(function(t) {
    106      var iframe = document.createElement("iframe");
    107      iframe.src = "Document-createElement-namespace-tests/" +
    108                  testName + "." + ext;
    109      iframe.onload = t.step_func_done(function() {
    110        testDoc(iframe.contentDocument, testExtensions[ext]);
    111        document.body.removeChild(iframe);
    112      });
    113      document.body.appendChild(iframe);
    114    }, "Created element's namespace in " + testName + "." + ext);
    115  });
    116 });
    117 </script>