| <!doctype html> | |
| <meta charset=utf8> | |
| <title>File support in IndexedDB</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| <script src="support-promises.js"></script> | |
| <form id="form"> | |
| <input id="file_input" name="file_input" type="file"> | |
| </form> | |
| <script> | |
| function assert_file_metadata_equal(file1, file2) { | |
| assert_true(file1 instanceof File); | |
| assert_true(file2 instanceof File) | |
| assert_equals(file1.lastModified, file2.lastModified); | |
| assert_equals(file1.name, file2.name); | |
| assert_equals(file1.size, file2.size); | |
| assert_equals(file1.type, file2.type); | |
| } | |
| async function assert_file_contents_equals(file1, file2) { | |
| const file1_text = await file1.text(); | |
| const file2_text = await file2.text(); | |
| assert_equals(file1_text, file2_text); | |
| } | |
| promise_test(async (testCase) => { | |
| const input = document.getElementById("file_input"); | |
| await test_driver.send_keys(input, String.raw`{{fs_path(file_to_save.txt)}}`); | |
| assert_equals(input.files.length, 1); | |
| const file = input.files[0]; | |
| const db = await createDatabase(testCase, db => { | |
| db.createObjectStore('objectStore'); | |
| }); | |
| const txn = db.transaction(['objectStore'], 'readwrite'); | |
| txn.objectStore('objectStore').add(file, 'key1'); | |
| txn.objectStore('objectStore').add({file: file, other: 'data'}, 'key2'); | |
| await promiseForTransaction(testCase, txn); | |
| const readTxn = db.transaction(['objectStore'], 'readonly'); | |
| const fileByItself = await promiseForRequest( | |
| testCase, readTxn.objectStore('objectStore').get('key1')); | |
| const fileInDict = await promiseForRequest( | |
| testCase, readTxn.objectStore('objectStore').get('key2')); | |
| assert_file_metadata_equal(fileByItself, file); | |
| assert_file_metadata_equal(fileInDict.file, file); | |
| assert_file_metadata_equal(fileInDict.file, fileByItself); | |
| await assert_file_contents_equals(fileByItself, file); | |
| await assert_file_contents_equals(fileInDict.file, file); | |
| db.close(); | |
| }, "Saves and loads back File objects from IndexedDB"); | |
| </script> |