| // META: global=window,worker |
| // META: script=resources/test-helpers.js |
| // META: script=resources/sandboxed-fs-test-helpers.js |
| // META: script=resources/messaging-helpers.js |
| // META: script=/IndexedDB/resources/support-promises.js |
| |
| 'use strict'; |
| |
| directory_test(async (t, root_dir) => { |
| const handle = await createFileWithContents('file', 'contents', root_dir); |
| |
| const db = await createDatabase(t, db => { |
| db.createObjectStore('store'); |
| }); |
| |
| let tx = db.transaction('store', 'readwrite'); |
| await promiseForRequest(t, tx.objectStore('store').put(handle, 'key')); |
| await promiseForTransaction(t, tx); |
| |
| tx = db.transaction('store', 'readwrite'); |
| const store = tx.objectStore('store'); |
| const getRequest = store.get('key'); |
| await requestWatcher(t, getRequest).wait_for('success'); |
| |
| await promiseForRequest(t, store.delete('key')); |
| await promiseForTransaction(t, tx); |
| |
| const retrieved = getRequest.result; |
| assert_true(await handle.isSameEntry(retrieved)); |
| const file = await retrieved.getFile(); |
| assert_equals(await file.text(), 'contents'); |
| }, 'Reading request.result after the record is deleted still produces a usable handle.'); |
| |
| directory_test(async (t, root_dir) => { |
| const handle = await createFileWithContents('file', 'contents', root_dir); |
| |
| const db = await createDatabase(t, db => { |
| db.createObjectStore('store'); |
| }); |
| |
| const tx = db.transaction('store', 'readwrite'); |
| await promiseForRequest(t, tx.objectStore('store').put(handle, 'key')); |
| await promiseForTransaction(t, tx); |
| |
| const readTx = db.transaction('store', 'readonly'); |
| const getRequest = readTx.objectStore('store').get('key'); |
| await requestWatcher(t, getRequest).wait_for('success'); |
| await promiseForTransaction(t, readTx); |
| |
| db.close(); |
| |
| const retrieved = getRequest.result; |
| assert_true(await handle.isSameEntry(retrieved)); |
| const file = await retrieved.getFile(); |
| assert_equals(await file.text(), 'contents'); |
| }, 'Reading request.result after the database is closed still produces a usable handle.'); |