tor-browser

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

test_abort_deleted_index.js (2694B)


      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 name = this.window ? window.location.pathname : "Splendid Test";
     11  const storeName = "test store";
     12  const indexName_ToBeDeleted = "test index to be deleted";
     13 
     14  info("Create index in v1.");
     15  let request = indexedDB.open(name, 1);
     16  request.onerror = errorHandler;
     17  request.onupgradeneeded = grabEventAndContinueHandler;
     18  request.onsuccess = unexpectedSuccessHandler;
     19  let event = yield undefined;
     20 
     21  let db = event.target.result;
     22  let txn = event.target.transaction;
     23 
     24  is(db.objectStoreNames.length, 0, "Correct objectStoreNames list");
     25 
     26  let objectStore = db.createObjectStore(storeName, { keyPath: "foo" });
     27  is(db.objectStoreNames.length, 1, "Correct objectStoreNames list");
     28  is(
     29    db.objectStoreNames.item(0),
     30    objectStore.name,
     31    "Correct object store name"
     32  );
     33 
     34  // create index to be deleted later in v2.
     35  objectStore.createIndex(indexName_ToBeDeleted, "foo");
     36  ok(objectStore.index(indexName_ToBeDeleted), "Index created.");
     37 
     38  txn.oncomplete = continueToNextStepSync;
     39  yield undefined;
     40  request.onsuccess = continueToNextStep;
     41  yield undefined;
     42  db.close();
     43 
     44  info("Delete index in v2.");
     45  request = indexedDB.open(name, 2);
     46  request.onerror = errorHandler;
     47  request.onupgradeneeded = grabEventAndContinueHandler;
     48  request.onsuccess = unexpectedSuccessHandler;
     49  event = yield undefined;
     50 
     51  db = event.target.result;
     52  txn = event.target.transaction;
     53 
     54  objectStore = txn.objectStore(storeName);
     55  let index = objectStore.index(indexName_ToBeDeleted);
     56  ok(index, "index is valid.");
     57  objectStore.deleteIndex(indexName_ToBeDeleted);
     58 
     59  // Aborting the transaction.
     60  request.onerror = expectedErrorHandler("AbortError");
     61  txn.abort();
     62  try {
     63    index.get("foo");
     64    ok(
     65      false,
     66      "TransactionInactiveError shall be thrown right after a deletion of an index is aborted."
     67    );
     68  } catch (e) {
     69    ok(e instanceof DOMException, "got a database exception");
     70    is(
     71      e.name,
     72      "TransactionInactiveError",
     73      "TransactionInactiveError shall be thrown right after a deletion of an index is aborted."
     74    );
     75  }
     76 
     77  yield undefined;
     78 
     79  try {
     80    index.get("foo");
     81    ok(
     82      false,
     83      "TransactionInactiveError shall be thrown after the transaction is inactive."
     84    );
     85  } catch (e) {
     86    ok(e instanceof DOMException, "got a database exception");
     87    is(
     88      e.name,
     89      "TransactionInactiveError",
     90      "TransactionInactiveError shall be thrown after the transaction is inactive."
     91    );
     92  }
     93 
     94  finishTest();
     95 }