[Native File System] Return modified time for File objects

Plumb through FileInfo to the renderer, and populate the returned File
object with the correct value.

BUG=1018945

Change-Id: Ic11d819ea83be49df831bbda37519779be0b8781
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1891463
Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Marijn Kruisselbrink <mek@chromium.org>
Commit-Queue: Olivier Yiptong <oyiptong@chromium.org>
Cr-Commit-Position: refs/heads/master@{#711864}
diff --git a/native-file-system/script-tests/FileSystemFileHandle-getFile.js b/native-file-system/script-tests/FileSystemFileHandle-getFile.js
index 88e5593..6b7d9f9 100644
--- a/native-file-system/script-tests/FileSystemFileHandle-getFile.js
+++ b/native-file-system/script-tests/FileSystemFileHandle-getFile.js
@@ -6,3 +6,35 @@
   let actualContents = await slice.text();
   assert_equals(actualContents, fileContents.slice(1, fileContents.length));
 }, 'getFile() provides a file that can be sliced');
+
+directory_test(async (t, root) => {
+  const handle = await createEmptyFile(t, 'mtime.txt', root);
+  let file = await handle.getFile();
+  const first_mtime = file.lastModified;
+
+  // We wait for 2s here to ensure that the files do not have the
+  // same modification time. Some filesystems have low resolutions
+  // for modification timestamps.
+  let timeout = new Promise(resolve => {
+    t.step_timeout(resolve, 2000);
+  });
+  await timeout;
+
+  const writer = await handle.createWriter({keepExistingData: false});
+  await writer.write(0, new Blob(['foo']));
+  await writer.close();
+
+  file = await handle.getFile();
+  const second_mtime = file.lastModified;
+
+  // We wait for 5 ms here to ensure that `lastModified`
+  // from the File objects is stable between getFile invocations.
+  timeout = new Promise(resolve => {
+    t.step_timeout(resolve, 5);
+  });
+  await timeout;
+  let fileReplica = await handle.getFile();
+  assert_equals(second_mtime, fileReplica.lastModified);
+
+  assert_less_than(first_mtime, second_mtime);
+}, 'getFile() returns last modified time');