tor-browser

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

idbdatabase_deleteObjectStore.any.js (3674B)


      1 // META: global=window,worker
      2 // META: title=IDBDatabase.deleteObjectStore()
      3 // META: script=resources/support.js
      4 // @author Microsoft <https://www.microsoft.com>
      5 // @author Odin Hørthe Omdal <mailto:odinho@opera.com>
      6 'use strict';
      7 
      8 
      9 async_test(t => {
     10    let db;
     11    let add_success = false;
     12 
     13    const open_rq = createdb(t);
     14    open_rq.onupgradeneeded = function(e) {
     15        db = e.target.result;
     16 
     17        const objStore = db.createObjectStore("store", { autoIncrement: true });
     18        assert_equals(db.objectStoreNames[0], "store", "objectStoreNames");
     19 
     20        const rq_add = objStore.add(1);
     21        rq_add.onsuccess = function() { add_success = true; };
     22        rq_add.onerror = fail(t, 'rq_add.error');
     23 
     24        objStore.createIndex("idx", "a");
     25        db.deleteObjectStore("store");
     26        assert_equals(db.objectStoreNames.length, 0, "objectStoreNames.length after delete");
     27        assert_false(db.objectStoreNames.contains("store"));
     28 
     29        const exc = "InvalidStateError";
     30        assert_throws_dom(exc, function() { objStore.add(2); });
     31        assert_throws_dom(exc, function() { objStore.put(3); });
     32        assert_throws_dom(exc, function() { objStore.get(1); });
     33        assert_throws_dom(exc, function() { objStore.clear(); });
     34        assert_throws_dom(exc, function() { objStore.count(); });
     35        assert_throws_dom(exc, function() { objStore.delete(1); });
     36        assert_throws_dom(exc, function() { objStore.openCursor(); });
     37        assert_throws_dom(exc, function() { objStore.index("idx"); });
     38        assert_throws_dom(exc, function() { objStore.deleteIndex("idx"); });
     39        assert_throws_dom(exc, function() { objStore.createIndex("idx2", "a");
     40        });
     41    };
     42 
     43    open_rq.onsuccess = function() {
     44        assert_true(add_success, "First add was successful");
     45        t.done();
     46    }
     47 }, 'Deleted object store\'s name should be removed from database\'s list. Attempting to use a \
     48 deleted IDBObjectStore should throw an InvalidStateError');
     49 
     50 async_test(t => {
     51    const open_rq = createdb(t);
     52 
     53    open_rq.onupgradeneeded = function(e) {
     54        const db = e.target.result;
     55        assert_throws_dom('NotFoundError', function() { db.deleteObjectStore('whatever'); });
     56        t.done();
     57    };
     58 }, 'Attempting to remove an object store that does not exist should throw a NotFoundError');
     59 
     60 async_test(t => {
     61    const keys = [];
     62    const open_rq = createdb(t);
     63 
     64    open_rq.onupgradeneeded = function(e) {
     65        const db = e.target.result;
     66 
     67        const objStore = db.createObjectStore("resurrected", { autoIncrement: true, keyPath: "k" });
     68        objStore.add({ k: 5 }).onsuccess = function(e) { keys.push(e.target.result); };
     69        objStore.add({}).onsuccess = function(e) { keys.push(e.target.result); };
     70        objStore.createIndex("idx", "i");
     71        assert_true(objStore.indexNames.contains("idx"));
     72        assert_equals(objStore.keyPath, "k", "keyPath");
     73 
     74        db.deleteObjectStore("resurrected");
     75 
     76        const objStore2 = db.createObjectStore("resurrected", { autoIncrement: true });
     77        objStore2.add("Unicorns'R'us").onsuccess = function(e) { keys.push(e.target.result); };
     78        assert_false(objStore2.indexNames.contains("idx"), "index exist on new objstore");
     79        assert_equals(objStore2.keyPath, null, "keyPath");
     80 
     81        assert_throws_dom("NotFoundError", function() { objStore2.index("idx"); });
     82    };
     83 
     84    open_rq.onsuccess = function(e) {
     85        assert_array_equals(keys, [5, 6, 1], "keys");
     86        t.done();
     87    };
     88 }, 'Attempting to access an index that was deleted as part of object store deletion and then \
     89 recreated using the same object store name should throw a NotFoundError');