tor-browser

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

test_eviction.js (2243B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 add_task(async function testSteps() {
      7  const globalLimitKB = 5 * 1024;
      8 
      9  const data = {};
     10  data.sizeKB = 1 * 1024;
     11  data.key = "A";
     12  data.value = repeatChar(data.sizeKB * 1024 - data.key.length, ".");
     13  data.urlCount = globalLimitKB / data.sizeKB;
     14 
     15  function getSpec(index) {
     16    return "http://example" + index + ".com";
     17  }
     18 
     19  info("Setting prefs");
     20 
     21  Services.prefs.setBoolPref(
     22    "dom.storage.enable_unsupported_legacy_implementation",
     23    false
     24  );
     25  Services.prefs.setBoolPref("dom.storage.snapshot_reusing", false);
     26 
     27  info("Setting limits");
     28 
     29  setGlobalLimit(globalLimitKB);
     30 
     31  let request = clear();
     32  await requestFinished(request);
     33 
     34  info("Getting storages");
     35 
     36  let storages = [];
     37  for (let i = 0; i < data.urlCount; i++) {
     38    let storage = getLocalStorage(getPrincipal(getSpec(i)));
     39    storages.push(storage);
     40  }
     41 
     42  info("Filling up entire default storage");
     43 
     44  for (let i = 0; i < data.urlCount; i++) {
     45    storages[i].setItem(data.key, data.value);
     46    await returnToEventLoop();
     47  }
     48 
     49  info("Verifying no more data can be written");
     50 
     51  for (let i = 0; i < data.urlCount; i++) {
     52    try {
     53      storages[i].setItem("B", "");
     54      ok(false, "Should have thrown");
     55    } catch (ex) {
     56      ok(true, "Did throw");
     57      ok(DOMException.isInstance(ex), "Threw DOMException");
     58      is(ex.name, "QuotaExceededError", "Threw right DOMException");
     59      is(ex.code, NS_ERROR_DOM_QUOTA_EXCEEDED_ERR, "Threw with right code");
     60    }
     61  }
     62 
     63  info("Closing first origin");
     64 
     65  storages[0].close();
     66 
     67  let principal = getPrincipal("http://example0.com");
     68 
     69  request = resetClient(principal);
     70  await requestFinished(request);
     71 
     72  info("Getting usage for first origin");
     73 
     74  request = getOriginUsage(principal);
     75  await requestFinished(request);
     76 
     77  is(request.result.usage, data.sizeKB * 1024, "Correct usage");
     78 
     79  info("Verifying more data data can be written");
     80 
     81  for (let i = 1; i < data.urlCount; i++) {
     82    storages[i].setItem("B", "");
     83  }
     84 
     85  info("Getting usage for first origin");
     86 
     87  request = getOriginUsage(principal);
     88  await requestFinished(request);
     89 
     90  is(request.result.usage, 0, "Zero usage");
     91 });