| // 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.'); |