open-request-queue.any.js (1758B)
1 // META: title=IndexedDB: open and delete request queues 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#connection-queues 6 7 'use strict'; 8 9 async_test(t => { 10 const db_name = 'db' + self.location.pathname + '-' + t.name; 11 indexedDB.deleteDatabase(db_name); 12 13 // Open and hold connection while other requests are queued up. 14 const r = indexedDB.open(db_name, 1); 15 r.onerror = t.unreached_func('open should succeed'); 16 r.onsuccess = t.step_func(e => { 17 const db = r.result; 18 19 const saw = expect(t, [ 20 'open1 success', 'open1 versionchange', 'delete1 blocked', 21 'delete1 success', 'open2 success', 'open2 versionchange', 22 'delete2 blocked', 'delete2 success' 23 ]); 24 25 function open(token, version) { 26 const r = indexedDB.open(db_name, version); 27 r.onsuccess = t.step_func(e => { 28 saw(token + ' success'); 29 const db = r.result; 30 db.onversionchange = t.step_func(e => { 31 saw(token + ' versionchange'); 32 setTimeout(t.step_func(() => db.close()), 0); 33 }); 34 }); 35 r.onblocked = t.step_func(e => saw(token + ' blocked')); 36 r.onerror = t.unreached_func('open should succeed'); 37 } 38 39 function deleteDatabase(token) { 40 const r = indexedDB.deleteDatabase(db_name); 41 r.onsuccess = t.step_func(e => saw(token + ' success')); 42 r.onblocked = t.step_func(e => saw(token + ' blocked')); 43 r.onerror = t.unreached_func('deleteDatabase should succeed'); 44 } 45 46 open('open1', 2); 47 deleteDatabase('delete1'); 48 open('open2', 3); 49 deleteDatabase('delete2'); 50 51 // Now unblock the queue. 52 db.close(); 53 }); 54 }, 'IndexedDB: open and delete requests are processed as a FIFO queue');