dom/tests/mochitest/localstorage/test_cookieSession.html

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 <html xmlns="http://www.w3.org/1999/xhtml">
     2 <head>
     3 <title>cookie per-session only test</title>
     5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     8 <script type="text/javascript">
    10 /*
    11   Set cookie access to be just per session and store to the localStorage.
    12   Content stored must prevail only for session of the browser, so it must
    13   be accessible in another window we try to access that key in the same
    14   storage.
    15  */
    17 function pushCookie(aPermission, aNext) {
    18   SpecialPowers.pushPermissions([{'type': 'cookie', 'allow': aPermission, 'context': document}], aNext);
    19 }
    21 function test1() {
    22   localStorage.setItem("persistent1", "persistent value 1");
    23   localStorage.setItem("persistent2", "persistent value 2");
    25   pushCookie(SpecialPowers.Ci.nsICookiePermission.ACCESS_SESSION, test1_b);
    26 }
    28 function test1_b() {
    29   localStorage.setItem("session only", "session value");
    30   parent.is(localStorage.getItem("session only"), "session value");
    31   parent.is(localStorage.getItem("persistent1"), "persistent value 1");
    32   parent.is(localStorage.getItem("persistent2"), "persistent value 2");
    34   window.location.search = '?2';
    35 }
    37 function test2()
    38 {
    39   parent.is(localStorage.getItem("session only"), "session value", "Value present when cookies in session-only mode");
    40   parent.is(localStorage.getItem("persistent1"), "persistent value 1", "Persistent value present");
    41   parent.is(localStorage.getItem("persistent2"), "persistent value 2", "Persistent value present");
    43   localStorage.setItem("persistent1", "changed persistent value 1");
    44   localStorage.removeItem("persistent2");
    46   parent.is(localStorage.getItem("session only"), "session value", "Value present when cookies in session-only mode");
    47   parent.is(localStorage.getItem("persistent1"), "changed persistent value 1", "Persistent value present");
    48   parent.is(localStorage.getItem("persistent2"), null, "Persistent value removed");
    50   // This clear has to delete only changes made in session only mode
    51   localStorage.clear();
    53   parent.is(localStorage.getItem("session only"), null, "Value not present when cookies in session-only mode after delete");
    54   parent.is(localStorage.getItem("persistent1"), null, "Persistent value not present in session only after delete");
    55   parent.is(localStorage.getItem("persistent2"), null, "Persistent value not present in session only after delete");
    57   localStorage.setItem("session only 2", "must be deleted on drop of session-only cookies permissions");
    59   pushCookie(SpecialPowers.Ci.nsICookiePermission.ACCESS_DEFAULT, function() { window.location.search = '?3'; });
    60 }
    62 function test3() {
    63   parent.is(localStorage.getItem("session only"), null, "No value when cookies are in default mode");
    64   parent.is(localStorage.getItem("session only 2"), null, "No value when cookies are in default mode");
    65   parent.is(localStorage.getItem("persistent1"), "persistent value 1", "Persistent value present");
    66   parent.is(localStorage.getItem("persistent2"), "persistent value 2", "Persistent value present");
    68   pushCookie(SpecialPowers.Ci.nsICookiePermission.ACCESS_SESSION, function() { window.location.search = '?4'; });
    69 }
    71 function test4() {
    72   parent.is(localStorage.getItem("session only"), null, "Value not present when cookies in session-only mode after delete");
    73   parent.is(localStorage.getItem("session only 2"), null, "Value not present when cookies in session-only mode after delete");
    74   parent.is(localStorage.getItem("persistent1"), "persistent value 1", "Persistent value present again");
    75   parent.is(localStorage.getItem("persistent2"), "persistent value 2", "Persistent value present again");
    77   pushCookie(SpecialPowers.Ci.nsICookiePermission.ACCESS_DEFAULT, function() { window.location.search = '?5'; });
    78 }
    80 function test5() {
    81   localStorage.clear();
    83   parent.is(localStorage.getItem("session only"), null, "No value when cookies are in default mode");
    84   parent.is(localStorage.getItem("persistent1"), null, "Persistent value not present after delete");
    85   parent.is(localStorage.getItem("persistent2"), null, "Persistent value not present after delete");
    87   pushCookie(SpecialPowers.Ci.nsICookiePermission.ACCESS_SESSION, function() { window.location.search = '?6'; });
    88 }
    90 function test6() {
    91   parent.is(localStorage.getItem("session only"), null, "Value not present when cookies in session-only mode after delete");
    92   parent.is(localStorage.getItem("session only 2"), null, "No value when cookies are in default mode");
    93   parent.is(localStorage.getItem("persistent1"), null, "Persistent value not present in session only after delete");
    94   parent.is(localStorage.getItem("persistent2"), null, "Persistent value not present in session only after delete");
    96   parent.SimpleTest.finish();
    97 }
    99 function startTest() {
   100   switch (location.search) {
   101     case '?1':
   102       test1();
   103       break;
   104     case '?2':
   105       test2();
   106       break;
   107     case '?3':
   108       test3();
   109       break;
   110     case '?4':
   111       test4();
   112       break;
   113     case '?5':
   114       test5();
   115       break;
   116     case '?6':
   117       test6();
   118       break;
   119     default:
   120       SimpleTest.waitForExplicitFinish();
   121       var iframe = document.createElement('iframe');
   122       iframe.src = 'test_cookieSession.html?1';
   123       document.body.appendChild(iframe);
   124   }
   125 }
   126 </script>
   128 </head>
   130 <body onload="startTest()">
   131 </body>
   132 </html>

mercurial