Commit 3b65fb9e authored by Andreas Haas's avatar Andreas Haas Committed by moz-wptsync-bot
Browse files

Bug 1721529 [wpt PR 29725] - [fsa] Implement flush for the sync access handle, a=testonly

Automatic update from web-platform-tests
[fsa] Implement flush for the sync access handle

The implementation is ported from the implementation of
Storage Foundation in
https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/native_io/native_io_file_async.cc.

This is part of the efforts to merge Storage Foundation into OPFS.

Bug: chromium:1218431
Change-Id: I51b7def56a51af5c1ef384dce5c982604a48496d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3030342


Commit-Queue: Andreas Haas <ahaas@chromium.org>
Reviewed-by: default avatarMarijn Kruisselbrink <mek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#903804}

--

wpt-commits: 7c5613af9ade02e0aa50c3de2d8a5951da3acb59
wpt-pr: 29725
parent 0ca40740
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ function sync_access_handle_test(test, description) {
  promise_test(async t => {
    // To be extra resilient against bad tests, cleanup before every test.
    await cleanupSandboxedFileSystem();

    const dir = await navigator.storage.getDirectory();
    const fileHandle = await dir.getFileHandle('OPFS.test', {create: true});
    const syncHandle = await fileHandle.createSyncAccessHandle();
+49 −0
Original line number Diff line number Diff line
importScripts('/resources/testharness.js');
importScripts('resources/sync-access-handle-test.js');

'use strict';

sync_access_handle_test(async (t, handle) => {
  await handle.flush();
}, 'Test flush on an empty file.');

sync_access_handle_test(async (t, handle) => {
  if (!('TextEncoder' in self)) {
    return;
  }
  const encoder = new TextEncoder();
  const decoder = new TextDecoder();

  const text = 'Hello Storage Foundation';
  const writeBuffer = new TextEncoder().encode(text);
  handle.write(writeBuffer, {at: 0});
  await 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' +
    ' 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();