| <!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> |