tor-browser

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

dom-mutations-ref.html (4811B)


      1 <!DOCTYPE HTML>
      2 <html class="reftest-wait">
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=619273
      5 -->
      6 <head>
      7  <title>Test for Bug 619273</title>
      8 <script type="application/javascript">
      9 /** Test DOM mutations inside selection **/
     10 function createDOM(doc) {
     11  let s = doc.createElement('span');
     12  s.appendChild(doc.createTextNode('|'))
     13  let s2 = doc.createElement('span');
     14  s2.appendChild(doc.createTextNode('z'))
     15  s.appendChild(s2)
     16  return s;
     17 }
     18 
     19 var tests_done = 0;
     20 var tests = [
     21  function(win,doc,sel) {
     22    doc.body.innerHTML = '.I<br>B<br>C|z'
     23    let a = doc.body.firstChild;
     24    let r = doc.createRange();
     25    r.setStart(a, 1);
     26    r.setEnd(a, 2);
     27    sel.addRange(r);
     28  },
     29   function(win,doc,sel) {
     30    doc.body.innerHTML = '.I<br>B<br>C|z'
     31    let a = doc.body.firstChild;
     32    let r = doc.createRange();
     33    r.setStart(doc.firstChild, 0);
     34    r.setEnd(a, 2);
     35    sel.addRange(r);
     36  },
     37 function(win,doc,sel) {
     38    doc.body.innerHTML = 'I<br>.B<br>C|z'
     39    let a = doc.body.firstChild;
     40    let b = doc.body.childNodes[2];
     41    let c = doc.body.childNodes[4];
     42    let r = doc.createRange();
     43    r.setStart(a, 0);
     44    r.setEnd(c, 1);
     45    sel.addRange(r);
     46  },
     47  function(win,doc,sel) {
     48    doc.body.innerHTML = 'I<br>.B<br>C|z'
     49    let b = doc.body.childNodes[2];
     50    let c = doc.body.childNodes[4];
     51    let r = doc.createRange();
     52    r.setStart(doc.body, 0);
     53    r.setEnd(c, 1);
     54    sel.addRange(r);
     55  },
     56  function(win,doc,sel) {
     57    doc.body.innerHTML = 'I<br>.B<br>C|z'
     58    let b = doc.body.childNodes[2];
     59    let c = doc.body.childNodes[4];
     60    let r = doc.createRange();
     61    r.setStart(doc, 0);
     62    r.setEnd(c, 1);
     63    sel.addRange(r);
     64  },
     65  function(win,doc,sel) {
     66    doc.body.innerHTML = 'I<br>B<br>.C|z'
     67    let a = doc.body.firstChild;
     68    let c = doc.body.childNodes[4];
     69    let r = doc.createRange();
     70    r.setStart(a, 0);
     71    r.setEnd(c, 2);
     72    sel.addRange(r);
     73  },
     74 
     75  function(win,doc,sel) {
     76    doc.body.innerHTML = '|z|zI<br>B<br>C'
     77    let a = doc.body.firstChild;
     78    let r = doc.createRange();
     79    r.setStart(a, 4);
     80    r.setEnd(a, 5);
     81    sel.addRange(r);
     82  },
     83   function(win,doc,sel) {
     84    doc.body.innerHTML = '|z|zI<br>B<br>C'
     85    let a = doc.body.firstChild;
     86    let r = doc.createRange();
     87    r.setStart(doc.firstChild, 0);
     88    r.setEnd(a, 5);
     89    sel.addRange(r);
     90  },
     91 function(win,doc,sel) {
     92    doc.body.innerHTML = 'I<br>|z|zB<br>C'
     93    let a = doc.body.firstChild;
     94    let b = doc.body.childNodes[2];
     95    let c = doc.body.childNodes[4];
     96    let r = doc.createRange();
     97    r.setStart(a, 0);
     98    r.setEnd(c, 1);
     99    sel.addRange(r);
    100  },
    101  function(win,doc,sel) {
    102    doc.body.innerHTML = 'I<br>|z|zB<br>C'
    103    let b = doc.body.childNodes[2];
    104    let c = doc.body.childNodes[4];
    105    let r = doc.createRange();
    106    r.setStart(doc.body, 0);
    107    r.setEnd(c, 1);
    108    sel.addRange(r);
    109  },
    110  function(win,doc,sel) {
    111    doc.body.innerHTML = 'I<br>|z|zB<br>C'
    112    let b = doc.body.childNodes[2];
    113    let c = doc.body.childNodes[4];
    114    let r = doc.createRange();
    115    r.setStart(doc, 0);
    116    r.setEnd(c, 1);
    117    sel.addRange(r);
    118  },
    119  function(win,doc,sel) {
    120    doc.body.innerHTML = 'I<br>B<br>|z|zC'
    121    let a = doc.body.firstChild;
    122    let c = doc.body.childNodes[4];
    123    let r = doc.createRange();
    124    r.setStart(a, 0);
    125    r.setEnd(c, 5);
    126    sel.addRange(r);
    127  },
    128 
    129  function(win,doc,sel) {
    130    doc.body.innerHTML = '<br>B<br>CI'
    131  },
    132  function(win,doc,sel) {
    133    doc.body.innerHTML = '<br>B<br>C'
    134  },
    135  function(win,doc,sel) {
    136    doc.body.innerHTML = 'I<br>B<br>C'
    137    let a = doc.body.firstChild;
    138    let c = doc.body.childNodes[4];
    139    let r = doc.createRange();
    140    r.setStart(a, 0);
    141    r.setEnd(c, 1);
    142    sel.addRange(r);
    143  },
    144 
    145  function(win,doc,sel) {
    146    doc.body.innerHTML = 'I|z'
    147  },
    148 
    149  function(win,doc,sel) {
    150    doc.body.innerHTML = 'Iz|'
    151 
    152    document.body.appendChild(document.createTextNode('I'));
    153    document.body.appendChild(document.createTextNode(' '));
    154    document.body.appendChild(createDOM(document));
    155  },
    156 ]
    157 
    158 function runTestInIframe(run,t) {
    159  let f = document.createElement('iframe');
    160  f.setAttribute('frameborder','0');
    161  f.setAttribute('height','100');
    162  f.setAttribute('width','200');
    163  f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">';
    164  f.onload = function () {
    165    try {
    166      run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection());
    167    } finally { ++tests_done; }
    168  }
    169  return f;
    170 }
    171 
    172 var id;
    173 function checkFinished() {
    174  if (window.frames.length == tests_done) {
    175    clearInterval(id);
    176    document.documentElement.className = "";
    177  }
    178 }
    179 
    180 function runTest() {
    181  for (let i=0; i < tests.length; ++i) {
    182    let t = tests[i];
    183    document.body.appendChild(runTestInIframe(t));
    184  }
    185  id = setInterval(checkFinished,500);
    186 }
    187 </script>
    188 </head>
    189 <body onload="runTest()"></body>
    190 </html>