tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>