tor-browser

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

test_table_rollback.js (3076B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 /* exported testGenerator */
      7 var testGenerator = testSteps();
      8 
      9 function* testSteps() {
     10  const dbName = "window" in this ? window.location.pathname : "test";
     11  const objName1 = "foo";
     12  const objName2 = "bar";
     13  const data1 = "1234567890";
     14  const data2 = "0987654321";
     15  const dataCount = 500;
     16 
     17  let request = indexedDB.open(dbName, 1);
     18  request.onerror = errorHandler;
     19  request.onupgradeneeded = grabEventAndContinueHandler;
     20 
     21  let event = yield undefined;
     22 
     23  is(event.type, "upgradeneeded", "Got upgradeneeded");
     24 
     25  request.onupgradeneeded = errorHandler;
     26  request.onsuccess = grabEventAndContinueHandler;
     27 
     28  let db = request.result;
     29 
     30  let objectStore1 = db.createObjectStore(objName1, { autoIncrement: true });
     31  let objectStore2 = db.createObjectStore(objName2, { autoIncrement: true });
     32 
     33  info("Created object stores, adding data");
     34 
     35  for (let i = 0; i < dataCount; i++) {
     36    objectStore1.add(data1);
     37    objectStore2.add(data2);
     38  }
     39 
     40  info("Done adding data");
     41 
     42  event = yield undefined;
     43 
     44  is(event.type, "success", "Got success");
     45 
     46  let readResult = null;
     47  let readError = null;
     48  let writeAborted = false;
     49 
     50  info("Creating readwrite transaction");
     51 
     52  objectStore1 = db.transaction(objName1, "readwrite").objectStore(objName1);
     53  objectStore1.openCursor().onsuccess = grabEventAndContinueHandler;
     54 
     55  event = yield undefined;
     56 
     57  let cursor = event.target.result;
     58  is(cursor.value, data1, "Got correct data for readwrite transaction");
     59 
     60  info("Modifying object store on readwrite transaction");
     61 
     62  cursor.update(data2);
     63  cursor.continue();
     64 
     65  event = yield undefined;
     66 
     67  info(
     68    "Done modifying object store on readwrite transaction, creating " +
     69      "readonly transaction"
     70  );
     71 
     72  objectStore2 = db.transaction(objName2, "readonly").objectStore(objName2);
     73  request = objectStore2.getAll();
     74  request.onsuccess = function (event) {
     75    readResult = event.target.result;
     76    is(
     77      readResult.length,
     78      dataCount,
     79      "Got correct number of results on readonly transaction"
     80    );
     81    for (let i = 0; i < readResult.length; i++) {
     82      is(readResult[i], data2, "Got correct data for readonly transaction");
     83    }
     84    if (writeAborted) {
     85      continueToNextStep();
     86    }
     87  };
     88  request.onerror = function (event) {
     89    readResult = null;
     90    readError = event.target.error;
     91 
     92    ok(false, "Got read error: " + readError.name);
     93    event.preventDefault();
     94 
     95    if (writeAborted) {
     96      continueToNextStep();
     97    }
     98  };
     99 
    100  cursor = event.target.result;
    101  is(cursor.value, data1, "Got correct data for readwrite transaction");
    102 
    103  info("Aborting readwrite transaction");
    104 
    105  cursor.source.transaction.abort();
    106  writeAborted = true;
    107 
    108  if (!readError && !readResult) {
    109    info("Waiting for readonly transaction to complete");
    110    yield undefined;
    111  }
    112 
    113  ok(readResult, "Got result from readonly transaction");
    114  is(readError, null, "No read error");
    115  is(writeAborted, true, "Aborted readwrite transaction");
    116 
    117  finishTest();
    118 }