tor-browser

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

dom-mutations.html (6833B)


      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'
     23    let a = doc.body.firstChild;
     24    let r = doc.createRange();
     25    r.setStart(a, 0);
     26    r.setEnd(a, 1);
     27    sel.addRange(r);
     28    doc.body.insertBefore(doc.createTextNode('.'), a);
     29    doc.body.appendChild(createDOM(doc));
     30  },
     31   function(win,doc,sel) {
     32    doc.body.innerHTML = 'I<br>B<br>C'
     33    let a = doc.body.firstChild;
     34    let r = doc.createRange();
     35    r.setStart(doc.firstChild, 0);
     36    r.setEnd(a, 1);
     37    sel.addRange(r);
     38    doc.body.insertBefore(doc.createTextNode('.'), a);
     39    doc.body.appendChild(createDOM(doc));
     40  },
     41 function(win,doc,sel) {
     42    doc.body.innerHTML = 'I<br>B<br>C'
     43    let a = doc.body.firstChild;
     44    let b = doc.body.childNodes[2];
     45    let c = doc.body.childNodes[4];
     46    let r = doc.createRange();
     47    r.setStart(a, 0);
     48    r.setEnd(c, 1);
     49    sel.addRange(r);
     50    doc.body.insertBefore(doc.createTextNode('.'), b);
     51    doc.body.appendChild(createDOM(doc));
     52  },
     53  function(win,doc,sel) {
     54    doc.body.innerHTML = 'I<br>B<br>C'
     55    let b = doc.body.childNodes[2];
     56    let c = doc.body.childNodes[4];
     57    let r = doc.createRange();
     58    r.setStart(doc.body, 0);
     59    r.setEnd(c, 1);
     60    sel.addRange(r);
     61    doc.body.insertBefore(doc.createTextNode('.'), b);
     62    doc.body.appendChild(createDOM(doc));
     63  },
     64  function(win,doc,sel) {
     65    doc.body.innerHTML = 'I<br>B<br>C'
     66    let b = doc.body.childNodes[2];
     67    let c = doc.body.childNodes[4];
     68    let r = doc.createRange();
     69    r.setStart(doc, 0);
     70    r.setEnd(c, 1);
     71    sel.addRange(r);
     72    doc.body.insertBefore(doc.createTextNode('.'), b);
     73    doc.body.appendChild(createDOM(doc));
     74  },
     75  function(win,doc,sel) {
     76    doc.body.innerHTML = 'I<br>B<br>C'
     77    let a = doc.body.firstChild;
     78    let c = doc.body.childNodes[4];
     79    let r = doc.createRange();
     80    r.setStart(a, 0);
     81    r.setEnd(c, 1);
     82    sel.addRange(r);
     83    doc.body.insertBefore(doc.createTextNode('.'), c);
     84    doc.body.appendChild(createDOM(doc));
     85  },
     86 
     87  function(win,doc,sel) {
     88    doc.body.innerHTML = 'I<br>B<br>C'
     89    let a = doc.body.firstChild;
     90    let r = doc.createRange();
     91    r.setStart(a, 0);
     92    r.setEnd(a, 1);
     93    sel.addRange(r);
     94    let span = createDOM(doc);
     95    doc.body.insertBefore(span, a);
     96    span.appendChild(createDOM(doc));
     97  },
     98   function(win,doc,sel) {
     99    doc.body.innerHTML = 'I<br>B<br>C'
    100    let a = doc.body.firstChild;
    101    let r = doc.createRange();
    102    r.setStart(doc.firstChild, 0);
    103    r.setEnd(a, 1);
    104    sel.addRange(r);
    105    let span = createDOM(doc);
    106    doc.body.insertBefore(span, a);
    107    span.appendChild(createDOM(doc));
    108  },
    109 function(win,doc,sel) {
    110    doc.body.innerHTML = 'I<br>B<br>C'
    111    let a = doc.body.firstChild;
    112    let b = doc.body.childNodes[2];
    113    let c = doc.body.childNodes[4];
    114    let r = doc.createRange();
    115    r.setStart(a, 0);
    116    r.setEnd(c, 1);
    117    sel.addRange(r);
    118    let span = createDOM(doc);
    119    doc.body.insertBefore(span, b);
    120    span.appendChild(createDOM(doc));
    121  },
    122  function(win,doc,sel) {
    123    doc.body.innerHTML = 'I<br>B<br>C'
    124    let b = doc.body.childNodes[2];
    125    let c = doc.body.childNodes[4];
    126    let r = doc.createRange();
    127    r.setStart(doc.body, 0);
    128    r.setEnd(c, 1);
    129    sel.addRange(r);
    130    let span = createDOM(doc);
    131    doc.body.insertBefore(span, b);
    132    span.appendChild(createDOM(doc));
    133  },
    134  function(win,doc,sel) {
    135    doc.body.innerHTML = 'I<br>B<br>C'
    136    let b = doc.body.childNodes[2];
    137    let c = doc.body.childNodes[4];
    138    let r = doc.createRange();
    139    r.setStart(doc, 0);
    140    r.setEnd(c, 1);
    141    sel.addRange(r);
    142    let span = createDOM(doc);
    143    doc.body.insertBefore(span, b);
    144    span.appendChild(createDOM(doc));
    145  },
    146  function(win,doc,sel) {
    147    doc.body.innerHTML = 'I<br>B<br>C'
    148    let a = doc.body.firstChild;
    149    let c = doc.body.childNodes[4];
    150    let r = doc.createRange();
    151    r.setStart(a, 0);
    152    r.setEnd(c, 1);
    153    sel.addRange(r);
    154    let span = createDOM(doc);
    155    doc.body.insertBefore(span, c);
    156    span.appendChild(createDOM(doc));
    157  },
    158 
    159  function(win,doc,sel) {
    160    doc.body.innerHTML = 'I<br>B<br>C'
    161    let a = doc.body.firstChild;
    162    let r = doc.createRange();
    163    r.setStart(a, 0);
    164    r.setEnd(a, 1);
    165    sel.addRange(r);
    166    doc.body.appendChild(a);
    167  },
    168  function(win,doc,sel) {
    169    doc.body.innerHTML = 'I<br>B<br>C'
    170    let a = doc.body.firstChild;
    171    let r = doc.createRange();
    172    r.setStart(a, 0);
    173    r.setEnd(a, 1);
    174    sel.addRange(r);
    175    document.adoptNode(a);
    176    document.body.appendChild(a);
    177    document.body.appendChild(document.createTextNode(' '));
    178  },
    179  function(win,doc,sel) {
    180    doc.body.innerHTML = 'I<br>B<br>C'
    181    let a = doc.body.firstChild;
    182    let c = doc.body.childNodes[4];
    183    let r = doc.createRange();
    184    r.setStart(a, 0);
    185    r.setEnd(c, 1);
    186    sel.addRange(r);
    187    let span = createDOM(doc);
    188    doc.body.insertBefore(span, c);
    189    document.adoptNode(span);
    190    document.body.appendChild(span);
    191  },
    192 
    193  function(win,doc,sel) {
    194    doc.body.innerHTML = 'I'
    195    let a = doc.body.firstChild;
    196    let span = createDOM(doc);
    197    let r = doc.createRange();
    198    r.setStart(span, 0);
    199    r.setEnd(span, 1);
    200    sel.addRange(r);
    201    doc.body.appendChild(span);
    202  },
    203 
    204  function(win,doc,sel) {
    205    doc.body.innerHTML = 'I'
    206    let a = doc.body.firstChild;
    207    let span = createDOM(doc);
    208    let r = doc.createRange();
    209    r.setStart(span.firstChild, 0);
    210    r.setEnd(span.firstChild, 1);
    211    sel.addRange(r);
    212    doc.body.appendChild(span);
    213    doc.body.appendChild(span.firstChild);
    214    r.setEnd(span.firstChild, 1);
    215  },
    216 ]
    217 
    218 function runTestInIframe(run,t) {
    219  let f = document.createElement('iframe');
    220  f.setAttribute('frameborder','0');
    221  f.setAttribute('height','100');
    222  f.setAttribute('width','200');
    223  f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">';
    224  f.onload = function () {
    225    try {
    226      run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection());
    227    } finally { ++tests_done; }
    228  }
    229  return f;
    230 }
    231 
    232 var id;
    233 function checkFinished() {
    234  if (window.frames.length == tests_done) {
    235    clearInterval(id);
    236    document.documentElement.className = "";
    237  }
    238 }
    239 
    240 function runTest() {
    241  for (let i=0; i < tests.length; ++i) {
    242    let t = tests[i];
    243    document.body.appendChild(runTestInIframe(t));
    244  }
    245  id = setInterval(checkFinished,500);
    246 }
    247 </script>
    248 </head>
    249 <body onload="runTest()"></body>
    250 </html>