[FSA API] Enable all-sync surface for SyncAccessHandle.
I2S: https://groups.google.com/a/chromium.org/g/blink-dev/c/UzGXhVEFpwU
Bug: 1338340
Change-Id: I066d304a1ae6ecf98c90553bc93f75e45952cdb1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3868249
Reviewed-by: Hayato Ito <hayato@chromium.org>
Commit-Queue: Daseul Lee <dslee@chromium.org>
Reviewed-by: Austin Sullivan <asully@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1062802}
diff --git a/file-system-access/resources/message-target.js b/file-system-access/resources/message-target.js
index 211caeb..191b474 100644
--- a/file-system-access/resources/message-target.js
+++ b/file-system-access/resources/message-target.js
@@ -109,7 +109,7 @@
let success = true;
try {
const access_handle = await message_data.file_handle.createSyncAccessHandle();
- await access_handle.close();
+ access_handle.close();
} catch (error) {
success = false;
}
diff --git a/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js b/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js
index 4fe120b..7f244bc 100644
--- a/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js
+++ b/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js
@@ -10,9 +10,9 @@
await promise_rejects_dom(
t, 'NoModificationAllowedError', fileHandle.createSyncAccessHandle());
- await syncHandle1.close();
+ syncHandle1.close();
const syncHandle2 = await fileHandle.createSyncAccessHandle();
- await syncHandle2.close();
+ syncHandle2.close();
}, 'There can only be one open access handle at any given time');
directory_test(async (t, root_dir) => {
@@ -26,9 +26,9 @@
await promise_rejects_dom(
t, 'NoModificationAllowedError', barFileHandle.createSyncAccessHandle());
- await barSyncHandle1.close();
+ barSyncHandle1.close();
const barSyncHandle2 = await barFileHandle.createSyncAccessHandle();
- await barSyncHandle2.close();
+ barSyncHandle2.close();
}, 'An access handle from one file does not interfere with the creation of an' +
' access handle on another file');
@@ -62,8 +62,7 @@
const syncHandle = await fileHandle.createSyncAccessHandle();
await promise_rejects_dom(
t, 'NoModificationAllowedError', fileHandle.createWritable());
-
- await syncHandle.close();
+ syncHandle.close();
const writable = await fileHandle.createWritable();
await writable.close();
}, 'Writable streams cannot be created if there is an open access handle');
@@ -82,7 +81,7 @@
await writable2.close();
const syncHandle = await fileHandle.createSyncAccessHandle();
- await syncHandle.close();
+ syncHandle.close();
}, 'Access handles cannot be created if there are open Writable streams');
done();
diff --git a/fs/FileSystemSyncAccessHandle-close.https.tentative.worker.js b/fs/FileSystemSyncAccessHandle-close.https.tentative.worker.js
index 870eeb6..1c6aaf3 100644
--- a/fs/FileSystemSyncAccessHandle-close.https.tentative.worker.js
+++ b/fs/FileSystemSyncAccessHandle-close.https.tentative.worker.js
@@ -2,89 +2,39 @@
importScripts('resources/sync-access-handle-test.js');
'use strict';
-
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
-
- assert_equals(await handle.close(), undefined);
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
+ assert_equals(handle.close(), undefined);
}, 'SyncAccessHandle.close is idempotent');
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
-
- assert_equals(await handle.close(), undefined);
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.close is idempotent when called immediately');
-
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
-
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
const readBuffer = new Uint8Array(4);
- assert_throws_dom('InvalidStateError', () => handle.read(readBuffer, {at: 0}));
-}, 'SyncAccessHandle.read fails after SyncAccessHandle.close settles');
+ assert_throws_dom(
+ 'InvalidStateError', () => handle.read(readBuffer, {at: 0}));
+}, 'SyncAccessHandle.read fails after SyncAccessHandle.close');
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
-
- const readBuffer = new Uint8Array(4);
- assert_throws_dom('InvalidStateError', () => handle.read(readBuffer, {at: 0}));
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.read fails immediately after calling SyncAccessHandle.close');
-
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
-
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
const writeBuffer = new Uint8Array(4);
writeBuffer.set([96, 97, 98, 99]);
- assert_throws_dom('InvalidStateError', () => handle.write(writeBuffer, {at: 0}));
-}, 'SyncAccessHandle.write fails after SyncAccessHandle.close settles');
+ assert_throws_dom(
+ 'InvalidStateError', () => handle.write(writeBuffer, {at: 0}));
+}, 'SyncAccessHandle.write fails after SyncAccessHandle.close');
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
+ assert_throws_dom('InvalidStateError', () => handle.flush());
+}, 'SyncAccessHandle.flush fails after SyncAccessHandle.close');
- const writeBuffer = new Uint8Array(4);
- writeBuffer.set([96, 97, 98, 99]);
- assert_throws_dom('InvalidStateError', () => handle.write(writeBuffer, {at: 0}));
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.write fails immediately after calling SyncAccessHandle.close');
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
+ assert_throws_dom('InvalidStateError', () => handle.getSize());
+}, 'SyncAccessHandle.getSize fails after SyncAccessHandle.close');
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.close(), undefined);
+ assert_throws_dom('InvalidStateError', () => handle.truncate(4));
+}, 'SyncAccessHandle.truncate fails after SyncAccessHandle.handle.close');
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.flush());
-}, 'SyncAccessHandle.flush fails after SyncAccessHandle.close settles');
-
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
-
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.flush());
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.flush fails immediately after calling SyncAccessHandle.close');
-
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
-
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.getSize());
-}, 'SyncAccessHandle.getSize fails after SyncAccessHandle.close settles');
-
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
-
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.getSize());
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.getSize fails immediately after calling SyncAccessHandle.close');
-
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.close(), undefined);
-
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.truncate(4));
-}, 'SyncAccessHandle.truncate fails after SyncAccessHandle.close settles');
-
-sync_access_handle_test(async (testCase, handle) => {
- const closePromise = handle.close();
-
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.truncate(4));
- assert_equals(await closePromise, undefined);
-}, 'SyncAccessHandle.truncate fails immediately after calling SyncAccessHandle.close');
-
-done();
+done();
\ No newline at end of file
diff --git a/fs/FileSystemSyncAccessHandle-flush.https.tentative.worker.js b/fs/FileSystemSyncAccessHandle-flush.https.tentative.worker.js
index 0893747..96953a8 100644
--- a/fs/FileSystemSyncAccessHandle-flush.https.tentative.worker.js
+++ b/fs/FileSystemSyncAccessHandle-flush.https.tentative.worker.js
@@ -3,11 +3,11 @@
'use strict';
-sync_access_handle_test(async (t, handle) => {
- await handle.flush();
+sync_access_handle_test((t, handle) => {
+ handle.flush();
}, 'Test flush on an empty file.');
-sync_access_handle_test(async (t, handle) => {
+sync_access_handle_test((t, handle) => {
if (!('TextEncoder' in self)) {
return;
}
@@ -17,33 +17,13 @@
const text = 'Hello Storage Foundation';
const writeBuffer = new TextEncoder().encode(text);
handle.write(writeBuffer, {at: 0});
- await handle.flush();
+ handle.flush();
let readBuffer = new Uint8Array(text.length);
handle.read(readBuffer, {at: 0});
assert_equals(
text, new TextDecoder().decode(readBuffer),
'Check that the written bytes and the read bytes match');
-},
-'SyncAccessHandle.read returns bytes written by SyncAccessHandle.write' +
+}, 'SyncAccessHandle.read returns bytes written by SyncAccessHandle.write' +
' after SyncAccessHandle.flush');
-sync_access_handle_test(async (testCase, handle) => {
- const flushPromise = handle.flush();
- const readBuffer = new Uint8Array(4);
- assert_throws_dom(
- 'InvalidStateError', () => handle.read(readBuffer, {at: 0}));
- assert_equals(await flushPromise, undefined);
-},
-'SyncAccessHandle.read fails when there is a pending SyncAccessHandle.flush');
-
-sync_access_handle_test(async (testCase, handle) => {
- const flushPromise = handle.flush();
- const writeBuffer = new Uint8Array(4);
- writeBuffer.set([96, 97, 98, 99]);
- assert_throws_dom(
- 'InvalidStateError', () => handle.write(writeBuffer, {at: 0}));
- assert_equals(await flushPromise, undefined);
-},
-'SyncAccessHandle.write fails when there is a pending SyncAccessHandle.flush');
-
done();
diff --git a/fs/FileSystemSyncAccessHandle-getSize.https.tentative.worker.js b/fs/FileSystemSyncAccessHandle-getSize.https.tentative.worker.js
index 9a18b17..4b62b28 100644
--- a/fs/FileSystemSyncAccessHandle-getSize.https.tentative.worker.js
+++ b/fs/FileSystemSyncAccessHandle-getSize.https.tentative.worker.js
@@ -3,24 +3,19 @@
'use strict';
-sync_access_handle_test(async (testCase, handle) => {
- assert_equals(await handle.getSize(), 0);
+sync_access_handle_test((t, handle) => {
+ assert_equals(handle.getSize(), 0);
const bufferSize = 4;
const writeBuffer = new Uint8Array(bufferSize);
writeBuffer.set([96, 97, 98, 99]);
handle.write(writeBuffer, {at: 0});
- assert_equals(await handle.getSize(), bufferSize);
+ assert_equals(handle.getSize(), bufferSize);
let offset = 3;
handle.write(writeBuffer, {at: offset});
- assert_equals(await handle.getSize(), bufferSize + offset);
+ assert_equals(handle.getSize(), bufferSize + offset);
offset = 10;
handle.write(writeBuffer, {at: offset});
- assert_equals(await handle.getSize(), bufferSize + offset);
+ assert_equals(handle.getSize(), bufferSize + offset);
}, 'test SyncAccessHandle.getSize after SyncAccessHandle.write');
-sync_access_handle_test(async (testCase, handle) => {
- const getSizePromise = handle.getSize();
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.getSize());
- assert_equals(await getSizePromise, 0);
-}, 'test createSyncAccessHandle.getSize with pending operation');
done();
diff --git a/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js b/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
index 01ccbdb..921e006 100644
--- a/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
+++ b/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
@@ -3,31 +3,28 @@
'use strict';
-sync_access_handle_test(async (testCase, handle) => {
- const getSizePromise = handle.getSize();
- await promise_rejects_dom(testCase, 'InvalidStateError', handle.truncate(4));
- assert_equals(await getSizePromise, 0);
-}, 'test createSyncAccessHandle.truncate with pending operation');
+sync_access_handle_test((t, handle) => {
+ // Without this assertion, the test passes even if truncate is not defined.
+ assert_implements(handle.truncate,
+ "SyncAccessHandle.truncate is not implemented.");
-sync_access_handle_test(async (testCase, handle) => {
- await handle.truncate(4);
- assert_equals(await handle.getSize(), 4);
-
- await handle.truncate(2);
- assert_equals(await handle.getSize(), 2);
-
- await handle.truncate(7);
- assert_equals(await handle.getSize(), 7);
-
- await promise_rejects_js(testCase, TypeError, handle.truncate(-4));
+ handle.truncate(4);
+ assert_equals(handle.getSize(), 4);
+ handle.truncate(2);
+ assert_equals(handle.getSize(), 2);
+ handle.truncate(7);
+ assert_equals(handle.getSize(), 7);
+ handle.truncate(0);
+ assert_equals(handle.getSize(), 0);
+ assert_throws_js(TypeError, () => handle.truncate(-4));
}, 'test SyncAccessHandle.truncate with different sizes');
-sync_access_handle_test(async (testCase, handle) => {
+sync_access_handle_test((t, handle) => {
const writeBuffer = new Uint8Array(4);
writeBuffer.set([96, 97, 98, 99]);
handle.write(writeBuffer, {at: 0});
- await handle.truncate(2);
+ handle.truncate(2);
let readBuffer = new Uint8Array(6);
assert_equals(2, handle.read(readBuffer, {at: 0}));
let expected = new Uint8Array(6);
@@ -35,8 +32,9 @@
assert_array_equals(expected, readBuffer);
// Resize the file to 6, expect that everything beyond the old size is '0'.
- await handle.truncate(6);
+ handle.truncate(6);
assert_equals(6, handle.read(readBuffer, {at: 0}));
assert_array_equals(expected, readBuffer);
}, 'test SyncAccessHandle.truncate after SyncAccessHandle.write');
+
done();
diff --git a/fs/resources/message-target.js b/fs/resources/message-target.js
index 5cba949..7c29afb 100644
--- a/fs/resources/message-target.js
+++ b/fs/resources/message-target.js
@@ -110,7 +110,7 @@
try {
const access_handle = await message_data.file_handle
.createSyncAccessHandle({mode: "in-place"});
- await access_handle.close();
+ access_handle.close();
} catch (error) {
success = false;
}
diff --git a/fs/resources/sync-access-handle-test.js b/fs/resources/sync-access-handle-test.js
index ec13ff9a..46c5d30 100644
--- a/fs/resources/sync-access-handle-test.js
+++ b/fs/resources/sync-access-handle-test.js
@@ -11,7 +11,7 @@
const dir = await navigator.storage.getDirectory();
const fileHandle = await dir.getFileHandle('OPFS.test', {create: true});
const syncHandle = await fileHandle.createSyncAccessHandle();
- await test(t, syncHandle);
- await syncHandle.close();
+ test(t, syncHandle);
+ syncHandle.close();
}, description);
}