tor-browser

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

idbobjectstore_delete.any.js (6005B)


      1 // META: global=window,worker
      2 // META: title=IDBObjectStore.delete()
      3 // META: script=resources/support.js
      4 // @author Microsoft <https://www.microsoft.com>
      5 'use strict';
      6 
      7 
      8 async_test(t => {
      9    let db;
     10    const record = { key: 1, property: "data" };
     11 
     12    const open_rq = createdb(t);
     13    open_rq.onupgradeneeded = function(e) {
     14        db = e.target.result;
     15 
     16        const objStore = db.createObjectStore("test", { keyPath: "key" });
     17        objStore.add(record);
     18    };
     19 
     20    open_rq.onsuccess = function(e) {
     21        const delete_rq = db.transaction("test", "readwrite")
     22                          .objectStore("test")
     23                          .delete(record.key);
     24 
     25        delete_rq.onsuccess = t.step_func(function(e) {
     26            assert_equals(e.target.result, undefined);
     27 
     28            e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved);
     29        });
     30    };
     31 
     32    function VerifyRecordRemoved() {
     33        const rq = db.transaction("test", "readonly")
     34                   .objectStore("test")
     35                   .get(record.key);
     36 
     37        rq.onsuccess = t.step_func(function(e) {
     38            assert_equals(e.target.result, undefined);
     39            t.done();
     40        });
     41    }
     42 }, 'delete() removes record (inline keys)');
     43 
     44 async_test(t => {
     45    const open_rq = createdb(t);
     46    open_rq.onupgradeneeded = function(e) {
     47        const db = e.target.result;
     48 
     49        const delete_rq = db.createObjectStore("test")
     50                          .delete(1);
     51 
     52        delete_rq.onsuccess = t.step_func(function(e) {
     53            assert_equals(e.target.result, undefined);
     54            t.done();
     55        });
     56    };
     57 }, 'delete() key doesn\'t match any records');
     58 
     59 async_test(t => {
     60    let db;
     61    const record = { test: { obj: { key: 1 } }, property: "data" };
     62 
     63    const open_rq = createdb(t);
     64    open_rq.onupgradeneeded = function(e) {
     65        db = e.target.result;
     66 
     67        const objStore = db.createObjectStore("test",
     68        { keyPath: "test.obj.key" });
     69        objStore.add(record);
     70    };
     71 
     72    open_rq.onsuccess = function(e) {
     73        const delete_rq = db.transaction("test", "readwrite")
     74                          .objectStore("test")
     75                          .delete(record.test.obj.key);
     76 
     77        delete_rq.onsuccess = t.step_func(function(e) {
     78            assert_equals(e.target.result, undefined);
     79 
     80            e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved);
     81        });
     82    };
     83 
     84    function VerifyRecordRemoved() {
     85        const rq = db.transaction("test", "readonly")
     86                   .objectStore("test")
     87                   .get(record.test.obj.key);
     88 
     89        rq.onsuccess = t.step_func(function(e) {
     90            assert_equals(e.target.result, undefined);
     91            t.done();
     92        });
     93    }
     94 }, 'Object store\'s key path is an object attribute');
     95 
     96 async_test(t => {
     97    let db;
     98    const key = 1;
     99    const record = { property: "data" };
    100 
    101    const open_rq = createdb(t);
    102    open_rq.onupgradeneeded = function(e) {
    103        db = e.target.result;
    104 
    105        const objStore = db.createObjectStore("test");
    106        objStore.add(record, key);
    107    };
    108 
    109    open_rq.onsuccess = function(e) {
    110        const delete_rq = db.transaction("test", "readwrite")
    111                          .objectStore("test")
    112                          .delete(key);
    113 
    114        delete_rq.onsuccess = t.step_func(function(e) {
    115            assert_equals(e.target.result, undefined);
    116 
    117            e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved);
    118        });
    119    };
    120 
    121    function VerifyRecordRemoved() {
    122        const rq = db.transaction("test", "readonly")
    123                   .objectStore("test")
    124                   .get(key);
    125 
    126        rq.onsuccess = t.step_func(function(e) {
    127            assert_equals(e.target.result, undefined);
    128            t.done();
    129        });
    130    }
    131 }, 'delete() removes record (out-of-line keys)');
    132 
    133 async_test(t => {
    134    let db;
    135    const open_rq = createdb(t);
    136 
    137    open_rq.onupgradeneeded = function(e) {
    138        db = e.target.result;
    139        const os = db.createObjectStore("store");
    140 
    141        for(let i = 0; i < 10; i++)
    142            os.add("data" + i, i);
    143    };
    144 
    145    open_rq.onsuccess = function (e) {
    146        const os = db.transaction("store", "readwrite")
    147                   .objectStore("store");
    148 
    149        os.delete(IDBKeyRange.bound(3, 6));
    150        os.count().onsuccess = t.step_func(function(e) {
    151            assert_equals(e.target.result, 6, "Count after deleting \
    152            3-6 from 10");
    153            t.done();
    154        });
    155    };
    156 }, 'delete() removes all of the records in the range');
    157 
    158 async_test(function(t) {
    159    let db;
    160    const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }];
    161 
    162    const open_rq = createdb(t);
    163    open_rq.onupgradeneeded = function(event) {
    164        db = event.target.result;
    165        const objStore = db.createObjectStore("store", { keyPath: "pKey" });
    166        for (let  i = 0; i < records.length; i++) {
    167            objStore.add(records[i]);
    168        }
    169    };
    170 
    171    open_rq.onsuccess = function(event) {
    172        const txn = db.transaction("store", "readonly");
    173        const ostore = txn.objectStore("store");
    174        t.step(function() {
    175            assert_throws_dom("ReadOnlyError", function() {
    176                ostore.delete("primaryKey_0");
    177            });
    178        });
    179        t.done();
    180    };
    181 }, 'If the transaction this IDBObjectStore belongs to has its mode set to \
    182 readonly, throw ReadOnlyError');
    183 
    184 async_test(t => {
    185    let ostore;
    186    const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }];
    187 
    188    const open_rq = createdb(t);
    189    open_rq.onupgradeneeded = function(event) {
    190        const db = event.target.result;
    191        ostore = db.createObjectStore("store", { keyPath: "pKey" });
    192        db.deleteObjectStore("store");
    193        assert_throws_dom("InvalidStateError", function() {
    194            ostore.delete("primaryKey_0");
    195        });
    196        t.done();
    197    };
    198 }, 'If the object store has been deleted, the implementation must throw a \
    199 DOMException of type InvalidStateError');