content/html/content/test/test_checked.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>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=418756
     5 https://bugzilla.mozilla.org/show_bug.cgi?id=617528
     6 -->
     7 <head>
     8   <title>Test for Bug 418756 and 617528</title>
     9   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    11 </head>
    12 <body>
    13 Mozilla bug
    14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418756">418756</a>
    15 and
    16 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=617528">617528</a>
    17 <p id="display"></p>
    18 <div id="content">
    19   <form id="f1">
    20   </form>
    21   <form id="f2">
    22   </form>
    23   <menu id="m1">
    24   </menu>
    25   <menu id="m2">
    26   </menu>
    27 </div>
    28 <pre id="test">
    29 <script class="testbody" type="text/javascript; version=1.7">
    31 /** Test for Bug 418756 and 617528 **/
    32 let group1;
    33 let group2;
    34 let group3;
    36 let tags = ["input", "menuitem"];
    37 for each (let tag in tags) {
    39 function bounce(node) {
    40   let n = node.nextSibling;
    41   let p = node.parentNode;
    42   p.removeChild(node);
    43   p.insertBefore(node, n);
    44 }
    46 let createdNodes = [];
    48 function cleanup() {
    49   for each (let node in createdNodes) {
    50     if (node.parentNode) {
    51       node.parentNode.removeChild(node);
    52     }
    53   }
    55   createdNodes = [];
    56 }
    58 let typeMapper = {
    59  'c': 'checkbox',
    60  'r': 'radio'
    61 };
    63 let id = 0;
    65 // type can be 'c' for 'checkbox' and 'r' for 'radio'
    66 function createNode(type, name, checked) {
    67   let node = document.createElement(tag);
    68   node.setAttribute("type",  typeMapper[type]);
    69   if (checked) {
    70     node.setAttribute("checked", "checked");
    71   }
    72   node.setAttribute("id", type + (++id));
    73   node.setAttribute(tag == "input" ? "name" : "radiogroup", name);
    74   createdNodes.push(node);
    75   return node;
    76 }
    78 let types = ['c', 'r'];
    80 // First make sure that setting .checked makes .defaultChecked changes no
    81 // longer affect .checked.
    82 for each (let type in types) {
    83   let n = createNode(type, '', false);
    84   is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type]);
    85   is(n.checked, false, "Bogus checked on " + typeMapper[type]);
    86   n.defaultChecked = true;
    87   is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
    88                              "after mutation");
    89   is(n.checked, true, "Bogus checked on " + typeMapper[type] +
    90                       "after mutation");
    91   n.checked = false;
    92   is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
    93                              "after second mutation");
    94   is(n.checked, false, "Bogus checked on " + typeMapper[type] +
    95                        "after second mutation");
    96   n.defaultChecked = false;
    97   is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type] +
    98                               "after third mutation");
    99   is(n.checked, false, "Bogus checked on " + typeMapper[type] +
   100                        "after third mutation");
   101   n.defaultChecked = true;
   102   is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] +
   103                              "after fourth mutation");
   104   is(n.checked, false, "Bogus checked on " + typeMapper[type] +
   105                        "after fourth mutation");
   106 }
   108 cleanup();
   110 // Now check that bouncing a control that's the only one of its kind has no
   111 // effect
   112 for each (let type in types) {
   113   let n = createNode(type, 'test1', true);
   114   $(tag == "input" ? "f1" : "m1").appendChild(n);
   115   n.checked = false;
   116   n.defaultChecked = false;
   117   bounce(n);
   118   n.defaultChecked = true;
   119   is(n.checked, false, "We set .checked on this " + typeMapper[type]);
   120 }
   122 cleanup();
   124 // Now check that playing with a single radio in a group affects all
   125 // other radios in the group (but not radios not in that group)
   126 group1 = [ createNode('r', 'g1', false),
   127            createNode('r', 'g1', false),
   128            createNode('r', 'g1', false) ];
   129 group2 = [ createNode('r', 'g2', false),
   130            createNode('r', 'g2', false),
   131            createNode('r', 'g2', false) ];
   132 group3 = [ createNode('r', 'g1', false),
   133            createNode('r', 'g1', false),
   134            createNode('r', 'g1', false) ];
   135 for each (let g in group1) {
   136   $(tag == "input" ? "f1" : "m1").appendChild(g);
   137 }
   138 for each (let g in group2) {
   139   $(tag == "input" ? "f1" : "m1").appendChild(g);
   140 }
   141 for each (let g in group3) {
   142   $(tag == "input" ? "f2" : "m2").appendChild(g);
   143 }
   145 for each (let n in [1, 2, 3]) {
   146   for each (let g in window["group"+n]) {
   147     is(g.defaultChecked, false,
   148        "group" + n + "[" + window["group"+n].indexOf(g) +
   149        "] defaultChecked wrong pass 1");
   150     is(g.checked, false,
   151        "group" + n + "[" + window["group"+n].indexOf(g) +
   152        "] checkedhecked wrong pass 1");
   153   }
   154 }
   156 group1[1].defaultChecked = true;
   157 for each (let n in [1, 2, 3]) {
   158   for each (let g in window["group"+n]) {
   159     is(g.defaultChecked, n == 1 && group1.indexOf(g) == 1,
   160        "group" + n + "[" + window["group"+n].indexOf(g) +
   161        "] defaultChecked wrong pass 2");
   162     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   163        "group" + n + "[" + window["group"+n].indexOf(g) +
   164        "] checked wrong pass 2");
   165   }
   166 }
   168 group1[0].defaultChecked = true;
   169 for each (let n in [1, 2, 3]) {
   170   for each (let g in window["group"+n]) {
   171     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 1 ||
   172                                     group1.indexOf(g) == 0),
   173        "group" + n + "[" + window["group"+n].indexOf(g) +
   174        "] defaultChecked wrong pass 3");
   175     is(g.checked, n == 1 && group1.indexOf(g) == 0,
   176        "group" + n + "[" + window["group"+n].indexOf(g) +
   177        "] checked wrong pass 3");
   178   }
   179 }
   181 group1[2].defaultChecked = true;
   182 for each (let n in [1, 2, 3]) {
   183   for each (let g in window["group"+n]) {
   184     is(g.defaultChecked, n == 1,
   185        "group" + n + "[" + window["group"+n].indexOf(g) +
   186        "] defaultChecked wrong pass 4");
   187     is(g.checked, n == 1 && group1.indexOf(g) == 2,
   188        "group" + n + "[" + window["group"+n].indexOf(g) +
   189        "] checked wrong pass 4");
   190   }
   191 }
   193 var next = group1[1].nextSibling;
   194 var p = group1[1].parentNode;
   195 p.removeChild(group1[1]);
   196 group1[1].defaultChecked = false;
   197 group1[1].defaultChecked = true;
   198 p.insertBefore(group1[1], next);
   199 for each (let n in [1, 2, 3]) {
   200   for each (let g in window["group"+n]) {
   201     is(g.defaultChecked, n == 1,
   202        "group" + n + "[" + window["group"+n].indexOf(g) +
   203        "] defaultChecked wrong pass 5");
   204     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   205        "group" + n + "[" + window["group"+n].indexOf(g) +
   206        "] checked wrong pass 5");
   207   }
   208 }
   210 for each(let g in group1) {
   211   g.defaultChecked = false;
   212 }
   213 for each (let n in [1, 2, 3]) {
   214   for each (let g in window["group"+n]) {
   215     is(g.defaultChecked, false,
   216        "group" + n + "[" + window["group"+n].indexOf(g) +
   217        "] defaultChecked wrong pass 6");
   218     is(g.checked, false,
   219        "group" + n + "[" + window["group"+n].indexOf(g) +
   220        "] checkedhecked wrong pass 6");
   221   }
   222 }
   224 group1[1].checked = true;
   225 for each (let n in [1, 2, 3]) {
   226   for each (let g in window["group"+n]) {
   227     is(g.defaultChecked, false,
   228        "group" + n + "[" + window["group"+n].indexOf(g) +
   229        "] defaultChecked wrong pass 7");
   230     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   231        "group" + n + "[" + window["group"+n].indexOf(g) +
   232        "] checked wrong pass 7");
   233   }
   234 }
   236 group1[0].defaultChecked = true;
   237 for each (let n in [1, 2, 3]) {
   238   for each (let g in window["group"+n]) {
   239     is(g.defaultChecked, n == 1 && group1.indexOf(g) == 0,
   240        "group" + n + "[" + window["group"+n].indexOf(g) +
   241        "] defaultChecked wrong pass 8");
   242     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   243        "group" + n + "[" + window["group"+n].indexOf(g) +
   244        "] checked wrong pass 8");
   245   }
   246 }
   248 group1[2].defaultChecked = true;
   249 for each (let n in [1, 2, 3]) {
   250   for each (let g in window["group"+n]) {
   251     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   252                                     group1.indexOf(g) == 2),
   253        "group" + n + "[" + window["group"+n].indexOf(g) +
   254        "] defaultChecked wrong pass 9");
   255     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   256        "group" + n + "[" + window["group"+n].indexOf(g) +
   257        "] checked wrong pass 9");
   258   }
   259 }
   260 group1[1].parentNode.removeChild(group1[1]);
   261 for each (let n in [1, 2, 3]) {
   262   for each (let g in window["group"+n]) {
   263     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   264                                     group1.indexOf(g) == 2),
   265        "group" + n + "[" + window["group"+n].indexOf(g) +
   266        "] defaultChecked wrong pass 10");
   267     is(g.checked, n == 1 && group1.indexOf(g) == 1,
   268        "group" + n + "[" + window["group"+n].indexOf(g) +
   269        "] checked wrong pass 10");
   270   }
   271 }
   273 group1[2].checked = true;
   274 for each (let n in [1, 2, 3]) {
   275   for each (let g in window["group"+n]) {
   276     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   277                                     group1.indexOf(g) == 2),
   278        "group" + n + "[" + window["group"+n].indexOf(g) +
   279        "] defaultChecked wrong pass 11");
   280     is(g.checked, n == 1 && (group1.indexOf(g) == 1 ||
   281                              group1.indexOf(g) == 2),
   282        "group" + n + "[" + window["group"+n].indexOf(g) +
   283        "] checked wrong pass 11");
   284   }
   285 }
   287 group1[0].checked = true;
   288 for each (let n in [1, 2, 3]) {
   289   for each (let g in window["group"+n]) {
   290     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   291                                     group1.indexOf(g) == 2),
   292        "group" + n + "[" + window["group"+n].indexOf(g) +
   293        "] defaultChecked wrong pass 12");
   294     is(g.checked, n == 1 && (group1.indexOf(g) == 1 ||
   295                              group1.indexOf(g) == 0),
   296        "group" + n + "[" + window["group"+n].indexOf(g) +
   297        "] checked wrong pass 12");
   298   }
   299 }
   301 next = group2[1].nextSibling;
   302 p = group2[1].parentNode;
   303 p.removeChild(group2[1]);
   304 p.insertBefore(group2[1], next);
   305 group2[0].checked = true;
   306 for each (let n in [1, 2, 3]) {
   307   for each (let g in window["group"+n]) {
   308     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   309                                     group1.indexOf(g) == 2),
   310        "group" + n + "[" + window["group"+n].indexOf(g) +
   311        "] defaultChecked wrong pass 13");
   312     is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
   313                               group1.indexOf(g) == 0)) ||
   314                   (n == 2 && group2.indexOf(g) == 0), 
   315        "group" + n + "[" + window["group"+n].indexOf(g) +
   316        "] checked wrong pass 13");
   317   }
   318 }
   320 p.insertBefore(group2[1], next);
   321 for each (let n in [1, 2, 3]) {
   322   for each (let g in window["group"+n]) {
   323     is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 ||
   324                                     group1.indexOf(g) == 2),
   325        "group" + n + "[" + window["group"+n].indexOf(g) +
   326        "] defaultChecked wrong pass 14");
   327     is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
   328                               group1.indexOf(g) == 0)) ||
   329                   (n == 2 && group2.indexOf(g) == 0), 
   330        "group" + n + "[" + window["group"+n].indexOf(g) +
   331        "] checked wrong pass 14");
   332   }
   333 }
   335 group2[1].defaultChecked = true;
   336 for each (let n in [1, 2, 3]) {
   337   for each (let g in window["group"+n]) {
   338     is(g.defaultChecked, (n == 1 && (group1.indexOf(g) == 0 ||
   339                                      group1.indexOf(g) == 2)) ||
   340                          (n == 2 && group2.indexOf(g) == 1),
   341        "group" + n + "[" + window["group"+n].indexOf(g) +
   342        "] defaultChecked wrong pass 15");
   343     is(g.checked, (n == 1 && (group1.indexOf(g) == 1 ||
   344                               group1.indexOf(g) == 0)) ||
   345                   (n == 2 && group2.indexOf(g) == 0), 
   346        "group" + n + "[" + window["group"+n].indexOf(g) +
   347        "] checked wrong pass 15");
   348   }
   349 }
   351 cleanup();
   353 }
   354 </script>
   355 </pre>
   356 </body>
   357 </html>

mercurial