tor-browser

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

test_bug311681.xhtml (3267B)


      1 <?xml version="1.0"?>
      2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
      3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
      4 <!--
      5 https://bugzilla.mozilla.org/show_bug.cgi?id=311681
      6 -->
      7 <window title="Mozilla Bug 311681"
      8  xmlns:html="http://www.w3.org/1999/xhtml"
      9  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     10 
     11  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>      
     12 
     13 <body  xmlns="http://www.w3.org/1999/xhtml">
     14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=311681">Mozilla Bug 311681</a>
     15 <script class="testbody" type="text/javascript">
     16 <![CDATA[
     17  // Setup script
     18  SimpleTest.waitForExplicitFinish();
     19 
     20  // Make sure to trigger the hashtable case by asking for enough elements
     21  // by ID.
     22  for (var i = 0; i < 256; ++i) {
     23    var x = document.getElementById(i);
     24  }
     25 
     26  // save off the document.getElementById function, since getting it as a
     27  // property off the document it causes a content flush.      
     28  var fun = document.getElementById;
     29 
     30  // Slot for our initial element with id "content"
     31  var testNode;
     32 
     33  function getCont() {
     34    return fun.call(document, "content");
     35  }
     36  
     37  function testClone() {
     38    // Test to make sure that if we have multiple nodes with the same ID in
     39    // a document we don't forget about one of them when the other is
     40    // removed.
     41    var newParent = $("display");
     42    var node = testNode.cloneNode(true);
     43    isnot(node, testNode, "Clone should be a different node");
     44 
     45    newParent.appendChild(node);
     46 
     47    // Check what getElementById returns, no flushing
     48    is(getCont(), node, "Should be getting new node pre-flush 1")
     49    
     50    // Trigger a layout flush, just in case.
     51    let itemHeight = newParent.offsetHeight/10;
     52 
     53    // Check what getElementById returns now.
     54    is(getCont(), node, "Should be getting new node post-flush 1")
     55    
     56    clear(newParent);
     57    
     58    // Check what getElementById returns, no flushing
     59    is(getCont(), testNode, "Should be getting orig node pre-flush 2");
     60    
     61    // Trigger a layout flush, just in case.
     62    itemHeight = newParent.offsetHeight/10;
     63 
     64    // Check what getElementById returns now.
     65    is(getCont(), testNode, "Should be getting orig node post-flush 2");
     66 
     67    node = testNode.cloneNode(true);
     68    newParent.appendChild(node);
     69    testNode.remove();
     70 
     71    // Check what getElementById returns, no flushing
     72    is(getCont(), node, "Should be getting clone pre-flush");
     73    
     74    // Trigger a layout flush, just in case.
     75    // eslint-disable-next-line no-unused-vars
     76    itemHeight = newParent.offsetHeight/10;
     77 
     78    // Check what getElementById returns now.
     79    is(getCont(), node, "Should be getting clone post-flush");
     80 
     81  }
     82 
     83  function clear(node) {
     84    while (node.hasChildNodes()) {
     85      node.firstChild.remove();
     86    }
     87  }
     88 
     89  addLoadEvent(testClone);
     90  addLoadEvent(SimpleTest.finish);
     91 ]]>
     92 </script>
     93 <p id="display"></p>
     94 <div id="content" style="display: none">
     95  <script class="testbody" type="text/javascript">
     96  <![CDATA[
     97    testNode = fun.call(document, "content");
     98    // Needs incremental XML parser
     99    isnot(testNode, null, "Should have node here");
    100  ]]>
    101  </script>  
    102 </div>
    103 <pre id="test">
    104 </pre>
    105 </body>
    106 
    107 </window>