layout/reftests/selection/dom-mutations.html

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     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;version=1.7">
     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 }
    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   },
    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   },
   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   },
   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   },
   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 ]
   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 }
   232 var id;
   233 function checkFinished() {
   234   if (window.frames.length == tests_done) {
   235     clearInterval(id);
   236     document.documentElement.className = "";
   237   }
   238 }
   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>

mercurial