tor-browser

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

test_bug600307-DBOps.html (6091B)


      1 <html xmlns="http://www.w3.org/1999/xhtml">
      2 <head>
      3 <title>bug 600307</title>
      4 
      5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6 <script type="text/javascript" src="localStorageCommon.js"></script>
      7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      8 
      9 <script type="text/javascript">
     10 
     11 /* eslint-disable max-nested-callbacks */
     12 
     13 /*
     14 This is strictly implementation specific test for dom storage code from bug 600307.
     15 It exercises code for asynchronous data flushing with regard to cache life time and its preload.
     16 
     17 "flush + reload" means to tell the database to store all pending data then wipe the cached content and reload it from the db
     18 
     19 "reload" only means to simulate situation when there is a pending flush for an origin but a new cache is about to preload
     20 which is a corner case happening rarely ; this helps check the next preload operation will load correct data from the database anyway
     21 
     22 Case 1: set | flush + reload | remove | set | remove | flush + reload | get ?= null
     23        checks coalescing optimization for single key changes does work correctly for repeated removals of a key
     24 
     25 Case 2: set | set | clear | flush + reload | count ?= 0
     26        checks whether clear operation superseeds setting keys, the database must be empty for the origin
     27 
     28 Case 3: set | set | clear | reload | count ?= 0
     29        check the corner case when a data clear flush is pending but a new cache is about to preload
     30 */
     31 
     32 function startTest()
     33 {
     34  // Enable testing observer notifications
     35  localStorageEnableTestingMode(function() {
     36 
     37  // Have an untouched land
     38  localStorage.clear();
     39 
     40  // Initial flush
     41  localStorageFlush(function() {
     42  is(localStorage.length, 0, "localStorage empty at the test start");
     43 
     44  // Basic test 1 (set a key, check presence after reload):
     45  localStorage.setItem("item", "value");
     46  localStorageFlushAndReload(function() {
     47  is(localStorage.getItem("item"), "value", "Basic persistance works");
     48  is(localStorage.length, 1, "1 item in localStorage");
     49 
     50  // Basic test 2 (set a key twice, check presence of the last value):
     51  localStorage.setItem("item", "value2");
     52  localStorage.setItem("item", "value3");
     53  localStorageFlushAndReload(function() {
     54  is(localStorage.getItem("item"), "value3", "Basic persistance 2 works");
     55 
     56  // Basic test 3 (remove a key, check it has been deleted):
     57  localStorage.removeItem("item");
     58  localStorageFlushAndReload(function() {
     59  is(localStorage.getItem("item"), null, "Basic delete works");
     60 
     61  // Basic test 4 (set and remove a key, check it is not present):
     62  localStorage.setItem("item", "value4");
     63  localStorage.removeItem("item");
     64  localStorageFlushAndReload(function() {
     65  is(localStorage.getItem("item"), null, "Basic delete 2 works");
     66 
     67 
     68  // Case 1:
     69  localStorage.setItem("item", "value");
     70  localStorageFlushAndReload(function() {
     71  localStorage.removeItem("item");
     72  localStorage.setItem("item", "value2");
     73  localStorage.removeItem("item");
     74  localStorageFlushAndReload(function() {
     75  is(localStorage.getItem("item"), null, "Item deleted in case 1");
     76 
     77  // Case 2:
     78  localStorage.setItem("item", "value");
     79  localStorage.setItem("item2", "value2");
     80  localStorage.clear();
     81  localStorageFlushAndReload(function() {
     82  is(localStorage.length, 0, "localStorage clean in case 2");
     83 
     84  // Case 3:
     85  localStorageFlush(function() {
     86  localStorage.setItem("item", "value");
     87  localStorage.setItem("item2", "value2");
     88  localStorage.clear();
     89  localStorageReload(function() {
     90  is(localStorage.length, 0, "localStorage clean in case 4");
     91 
     92  if (!SpecialPowers.Services.domStorageManager.nextGenLocalStorageEnabled &&
     93      SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService(
     94      SpecialPowers.Ci.nsIXULRuntime).processType != SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
     95    // Following tests cannot be run in a child/plugin process type
     96    SimpleTest.finish();
     97    return;
     98  }
     99 
    100  // Cookies clean 1
    101  localStorageFlush(function() {
    102  localStorage.setItem("item", "value");
    103  localStorageClearAll(function() {
    104  is(localStorage.length, 0, "localStorage clean after cookies deletion");
    105  localStorage.setItem("item2", "value2");
    106  is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete");
    107  is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete");
    108  localStorageFlushAndReload(function() {
    109  is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete");
    110  is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete");
    111 
    112  // Cookies clean 2
    113  localStorage.clear();
    114  localStorageFlush(function() {
    115  localStorage.setItem("item", "value");
    116  localStorageClearAll(function() {
    117  is(localStorage.length, 0, "localStorage clean after cookies deletion 2");
    118  localStorageFlushAndReload(function() {
    119  is(localStorage.length, 0, "localStorage clean after cookies deletion 2");
    120 
    121 
    122  // Domain clean 1
    123  localStorageFlush(function() {
    124  localStorage.setItem("item", "value");
    125  localStorageClearDomain("test", function() {
    126  is(localStorage.length, 0, "localStorage clean after domain deletion");
    127  localStorage.setItem("item2", "value2");
    128  is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete");
    129  is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete");
    130  localStorageFlushAndReload(function() {
    131  is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete");
    132  is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete");
    133 
    134  // Domain clean 2
    135  localStorage.clear();
    136  localStorageFlush(function() {
    137  localStorage.setItem("item", "value");
    138  localStorageClearDomain("test", function() {
    139  is(localStorage.length, 0, "localStorage clean after domain deletion 2");
    140  localStorageFlushAndReload(function() {
    141  is(localStorage.length, 0, "localStorage clean after domain deletion 2");
    142 
    143  SimpleTest.finish();
    144 
    145  });
    146  });
    147  });
    148  });
    149  });
    150  });
    151  });
    152  });
    153  });
    154  });
    155  });
    156  });
    157  });
    158  });
    159  });
    160  });
    161  });
    162  });
    163  });
    164  });
    165  });
    166  });
    167  });
    168 }
    169 
    170 SimpleTest.waitForExplicitFinish();
    171 
    172 </script>
    173 
    174 </head>
    175 
    176 <body onload="startTest();">
    177 </body>
    178 </html>