transaction-requestqueue.any.js (2515B)
1 // META: title=IndexedDB Transaction Request Queue Handling 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 'use strict'; 6 7 async_test(t => { 8 let db; 9 let keys = {txn: [], txn2: []}; 10 let open_rq = createdb(t); 11 12 open_rq.onupgradeneeded = function(e) { 13 let i; 14 let os; 15 db = e.target.result; 16 17 for (i = 1; i < 6; i++) { 18 os = db.createObjectStore('os' + i, {autoIncrement: true, keyPath: 'k'}); 19 os.add({os: 'os' + i}); 20 os.put({os: 'os' + i, k: i}); 21 os.add({os: 'os' + i}); 22 } 23 }; 24 25 open_rq.onsuccess = function(e) { 26 let txn = db.transaction(['os2', 'os1', 'os3', 'os5']) 27 txn.objectStore('os1').openCursor().onsuccess = reg('txn') 28 txn.objectStore('os3').openCursor().onsuccess = reg('txn') 29 txn.objectStore('os1').get(2).onsuccess = reg('txn') 30 txn.objectStore('os2').get(3).onsuccess = reg('txn') 31 32 let txn2 = db.transaction(['os4', 'os3', 'os1', 'os5']) 33 let os4 = txn2.objectStore('os4') 34 35 for (let i = 0; i < 3; i++) { 36 os4.openCursor().onsuccess = reg('txn2') 37 os4.get(5).onsuccess = reg('txn2') 38 os4.get(4).onsuccess = reg('txn2') 39 txn.objectStore('os2').get(1).onsuccess = reg('txn') 40 txn2.objectStore('os3').get(1).onsuccess = reg('txn2') 41 } 42 43 txn2.objectStore('os1').get(2).onsuccess = reg('txn2') 44 txn.objectStore('os1').openCursor(null, 'prev').onsuccess = reg('txn') 45 os4.openCursor(null, 'prev').onsuccess = reg('txn2') 46 47 txn.oncomplete = t.step_func(finish); 48 txn2.oncomplete = t.step_func(finish); 49 }; 50 51 52 function reg(n) { 53 return t.step_func(function(e) { 54 let v = e.target.result; 55 if (v.value) 56 v = v.value; 57 keys[n].push(v.os + ': ' + v.k); 58 }); 59 } 60 61 let finish_to_go = 2; 62 function finish() { 63 if (--finish_to_go) 64 return; 65 66 assert_array_equals( 67 keys['txn'], 68 [ 69 'os1: 1', 70 'os3: 1', 71 'os1: 2', 72 'os2: 3', 73 'os2: 1', 74 'os2: 1', 75 'os2: 1', 76 'os1: 2', 77 ], 78 'transaction keys'); 79 80 assert_array_equals( 81 keys['txn2'], 82 [ 83 'os4: 1', 84 'os4: 5', 85 'os4: 4', 86 'os3: 1', 87 'os4: 1', 88 'os4: 5', 89 'os4: 4', 90 'os3: 1', 91 'os4: 1', 92 'os4: 5', 93 'os4: 4', 94 'os3: 1', 95 'os1: 2', 96 'os4: 5', 97 ], 98 'transaction 2 keys'); 99 100 t.done(); 101 } 102 }, 'Transactions have a request queue');