file_support.sub.html (2168B)
1 <!doctype html> 2 <meta charset=utf8> 3 <title>File support in IndexedDB</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/resources/testdriver.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 <script src="resources/support-promises.js"></script> 9 <form id="form"> 10 <input id="file_input" name="file_input" type="file"> 11 </form> 12 <script> 13 14 function assert_file_metadata_equal(file1, file2) { 15 assert_true(file1 instanceof File); 16 assert_true(file2 instanceof File) 17 assert_equals(file1.lastModified, file2.lastModified); 18 assert_equals(file1.name, file2.name); 19 assert_equals(file1.size, file2.size); 20 assert_equals(file1.type, file2.type); 21 } 22 23 async function assert_file_contents_equals(file1, file2) { 24 const file1_text = await file1.text(); 25 const file2_text = await file2.text(); 26 assert_equals(file1_text, file2_text); 27 } 28 29 promise_test(async (testCase) => { 30 const input = document.getElementById("file_input"); 31 await test_driver.send_keys(input, String.raw`{{fs_path(resources/file_to_save.txt)}}`); 32 assert_equals(input.files.length, 1); 33 34 const file = input.files[0]; 35 36 const db = await createDatabase(testCase, db => { 37 db.createObjectStore('objectStore'); 38 }); 39 40 const txn = db.transaction(['objectStore'], 'readwrite'); 41 txn.objectStore('objectStore').add(file, 'key1'); 42 txn.objectStore('objectStore').add({file: file, other: 'data'}, 'key2'); 43 await promiseForTransaction(testCase, txn); 44 45 const readTxn = db.transaction(['objectStore'], 'readonly'); 46 const fileByItself = await promiseForRequest( 47 testCase, readTxn.objectStore('objectStore').get('key1')); 48 const fileInDict = await promiseForRequest( 49 testCase, readTxn.objectStore('objectStore').get('key2')); 50 51 assert_file_metadata_equal(fileByItself, file); 52 assert_file_metadata_equal(fileInDict.file, file); 53 assert_file_metadata_equal(fileInDict.file, fileByItself); 54 55 await assert_file_contents_equals(fileByItself, file); 56 await assert_file_contents_equals(fileInDict.file, file); 57 58 db.close(); 59 }, "Saves and loads back File objects from IndexedDB"); 60 61 </script>