tor-browser

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

test_file_delete.html (3916B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <html>
      6 <head>
      7  <title>Indexed Database Property Test</title>
      8 
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11 
     12  <script type="text/javascript">
     13  function* testSteps()
     14  {
     15    const READ_WRITE = "readwrite";
     16 
     17    const name = window.location.pathname;
     18 
     19    const objectStoreName = "Blobs";
     20 
     21    const fileData1 = { key: 1, file: getRandomFile("random1.bin", 110000) };
     22    const fileData2 = { key: 2, file: getRandomFile("random2.bin", 120000) };
     23    const fileData3 = { key: 3, file: getRandomFile("random3.bin", 130000) };
     24 
     25    SpecialPowers.pushPrefEnv({ set: [["dom.indexedDB.dataThreshold", -1]] },
     26                              continueToNextStep);
     27    yield undefined;
     28 
     29    {
     30      let request = indexedDB.open(name, 1);
     31      request.onerror = errorHandler;
     32      request.onupgradeneeded = grabEventAndContinueHandler;
     33      request.onsuccess = grabEventAndContinueHandler;
     34      let event = yield undefined;
     35 
     36      is(event.type, "upgradeneeded", "Got correct event type");
     37 
     38      let db = event.target.result;
     39      db.onerror = errorHandler;
     40 
     41      let objectStore = db.createObjectStore(objectStoreName, { });
     42 
     43      objectStore.add(fileData1.file, fileData1.key);
     44      objectStore.add(fileData2.file, fileData2.key);
     45      objectStore.add(fileData3.file, fileData3.key);
     46 
     47      event = yield undefined;
     48 
     49      is(event.type, "success", "Got correct event type");
     50 
     51      let trans = db.transaction([objectStoreName], READ_WRITE);
     52      trans.objectStore(objectStoreName).delete(fileData1.key);
     53      trans.oncomplete = grabEventAndContinueHandler;
     54      event = yield undefined;
     55 
     56      is(event.type, "complete", "Got correct event type");
     57 
     58      is(getFileDBRefCount(name, 1), 0, "Correct db ref count");
     59 
     60      fileData1.file = null;
     61      fileData2.file = null;
     62      fileData3.file = null;
     63    }
     64 
     65    yield* assertEventuallyHasNoFileInfo(name, 1);
     66    yield* assertEventuallyHasFileInfo(name, 2);
     67    yield* assertEventuallyHasFileInfo(name, 3);
     68 
     69    {
     70      let request = indexedDB.open(name, 1);
     71      request.onerror = errorHandler;
     72      request.onsuccess = grabEventAndContinueHandler;
     73      let event = yield undefined;
     74 
     75      is(event.type, "success", "Got correct event type");
     76 
     77      let db = event.target.result;
     78      db.onerror = errorHandler;
     79 
     80      let trans = db.transaction([objectStoreName], READ_WRITE);
     81      let objectStore = trans.objectStore(objectStoreName);
     82 
     83      request = objectStore.get(fileData2.key);
     84      request.onsuccess = grabEventAndContinueHandler;
     85      event = yield undefined;
     86 
     87      let result = event.target.result;
     88      ok(result, "Got result");
     89 
     90      objectStore.delete(fileData2.key);
     91 
     92      trans.oncomplete = grabEventAndContinueHandler;
     93      event = yield undefined;
     94 
     95      is(event.type, "complete", "Got correct event type");
     96 
     97      is(getFileDBRefCount(name, 2), 0, "Correct db ref count");
     98 
     99 
    100      trans = db.transaction([objectStoreName], READ_WRITE);
    101      objectStore = trans.objectStore(objectStoreName);
    102 
    103      objectStore.delete(fileData3.key);
    104 
    105      trans.oncomplete = grabEventAndContinueHandler;
    106      event = yield undefined;
    107 
    108      is(event.type, "complete", "Got correct event type");
    109 
    110      yield *assertEventuallyWithGC(() => -1 == getFileDBRefCount(name, 3),
    111                                    "Correct db ref count");
    112 
    113      event = null;
    114      result = null;
    115    }
    116 
    117    yield* assertEventuallyHasNoFileInfo(name, 1);
    118    yield* assertEventuallyHasNoFileInfo(name, 2);
    119    yield* assertEventuallyHasNoFileInfo(name, 3);
    120 
    121    finishTest();
    122  }
    123  </script>
    124  <script type="text/javascript" src="file.js"></script>
    125  <script type="text/javascript" src="helpers.js"></script>
    126 
    127 </head>
    128 
    129 <body onload="runTest();"></body>
    130 
    131 </html>