Title: [284375] branches/safari-612-branch
Revision
284375
Author
[email protected]
Date
2021-10-18 09:07:47 -0700 (Mon, 18 Oct 2021)

Log Message

Apply patch rdar://83954608

Modified Paths


Added Paths

Diff

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,7 +1,7 @@
 
-FAIL Store handle in IndexedDB and read from pending transaction. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Store handle in IndexedDB and read from new transaction. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Store handles and blobs in IndexedDB. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Store handle in IndexedDB and read using a cursor. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Store handle in IndexedDB using inline keys. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL Store handle in IndexedDB and read from pending transaction. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Store handle in IndexedDB and read from new transaction. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Store handles and blobs in IndexedDB. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Store handle in IndexedDB and read using a cursor. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Store handle in IndexedDB using inline keys. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,10 +1,10 @@
 
-FAIL isSameEntry for identical directory handles returns true promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry for different directories returns false promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry for different handles for the same directory promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry for identical file handles returns true promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry for different files returns false promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry for different handles for the same file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry comparing a file to a file in a different directory returns false promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL isSameEntry comparing a file to a directory returns false promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL isSameEntry for identical directory handles returns true promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry for different directories returns false promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry for different handles for the same directory promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry for identical file handles returns true promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry for different files returns false promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry for different handles for the same file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry comparing a file to a file in a different directory returns false promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL isSameEntry comparing a file to a directory returns false promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemBaseHandle-remove.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,9 +1,9 @@
 
-FAIL remove() to remove a file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() on an already removed file should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() to remove an empty directory promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() on an already removed directory should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL remove() on a file should ignore the recursive option promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL remove() to remove a file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() on an already removed directory should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL remove() on a file should ignore the recursive option promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,12 +1,12 @@
 
-FAIL getDirectoryHandle(create=false) rejects for non-existing directories promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle(create=true) creates an empty directory promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle(create=false) returns existing directories promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle(create=true) returns existing directories without erasing promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle() when a file already exists with the same name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle() with empty name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle() with "." name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle() with ".." name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle(create=false) with a path separator when the directory exists promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getDirectoryHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL getDirectoryHandle(create=false) rejects for non-existing directories promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle(create=true) creates an empty directory promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle(create=false) returns existing directories promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle(create=true) returns existing directories without erasing promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle() when a file already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle(create=false) with a path separator when the directory exists promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getDirectoryHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,13 +1,13 @@
 
-FAIL getFileHandle(create=false) rejects for non-existing files promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=true) creates an empty file for non-existing files promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=false) returns existing files promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=true) returns existing files without erasing promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=false) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=true) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle() with empty name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle() with "." name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle() with ".." name promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=false) with a path separator when the file exists. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFileHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL getFileHandle(create=false) rejects for non-existing files promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=true) creates an empty file for non-existing files promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=false) returns existing files promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=true) returns existing files without erasing promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=false) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=true) when a directory already exists with the same name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle() with empty name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle() with "." name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle() with ".." name promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=false) with a path separator when the file exists. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFileHandle(create=true) with a path separator promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,8 +1,8 @@
 
-FAIL returning early from an iteration doesn't crash promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL @@asyncIterator: full iteration works promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL entries: full iteration works promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL values: full iteration works promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL keys: full iteration works promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL iteration while iterator gets garbage collected promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL returning early from an iteration doesn't crash promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL @@asyncIterator: full iteration works promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL entries: full iteration works promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL values: full iteration works promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL keys: full iteration works promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL iteration while iterator gets garbage collected promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,11 +1,11 @@
 
-FAIL removeEntry() to remove a file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() on an already removed file should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() to remove an empty directory promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() with empty name should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() with "." name should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() with ".." name should fail promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL removeEntry() with a path separator should fail. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL removeEntry() to remove a file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() on an already removed file should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() to remove an empty directory promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() on a non-empty directory should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() on a directory recursively should delete all sub-items promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() with empty name should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() with "." name should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() with ".." name should fail promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL removeEntry() with a path separator should fail. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,6 +1,6 @@
 
-FAIL Resolve returns empty array for same directory promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Resolve returns correct path promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Resolve returns correct path with non-ascii characters promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Resolve returns null when entry is not a child promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL Resolve returns empty array for same directory promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Resolve returns correct path promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Resolve returns correct path with non-ascii characters promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Resolve returns null when entry is not a child promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,4 +1,4 @@
 
-FAIL getFile() provides a file that can be sliced promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getFile() returns last modified time promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL getFile() provides a file that can be sliced promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getFile() returns last modified time promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-sync-access-handle-lock.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-sync-access-handle-lock.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemFileHandle-sync-access-handle-lock.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,4 +1,4 @@
 
-FAIL There can only be one open access handle at any given time promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL An access handle from one file does not interfere with the creation of an access handle on another file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL There can only be one open access handle at any given time promise_test: Unhandled rejection with value: object "TypeError: fileHandle.createSyncAccessHandle is not a function. (In 'fileHandle.createSyncAccessHandle()', 'fileHandle.createSyncAccessHandle' is undefined)"
+FAIL An access handle from one file does not interfere with the creation of an access handle on another file promise_test: Unhandled rejection with value: object "TypeError: fooFileHandle.createSyncAccessHandle is not a function. (In 'fooFileHandle.createSyncAccessHandle()', 'fooFileHandle.createSyncAccessHandle' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-close.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-close.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-close.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,14 +1,14 @@
 
-FAIL SyncAccessHandle.close is idempotent promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.close is idempotent when called immediately promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.read fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.read fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.write fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.write fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.flush fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.flush fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.getSize fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.getSize fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.truncate fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.truncate fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL SyncAccessHandle.close is idempotent promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.close is idempotent when called immediately promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.read fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.read fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.write fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.write fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.flush fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.flush fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.getSize fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.getSize fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.truncate fails after SyncAccessHandle.close settles promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.truncate fails immediately after calling SyncAccessHandle.close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-flush.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-flush.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-flush.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,6 +1,6 @@
 
-FAIL Test flush on an empty file. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.read returns bytes written by SyncAccessHandle.write after SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.read fails when there is a pending SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL SyncAccessHandle.write fails when there is a pending SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL Test flush on an empty file. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.read returns bytes written by SyncAccessHandle.write after SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.read fails when there is a pending SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL SyncAccessHandle.write fails when there is a pending SyncAccessHandle.flush promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-getSize.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-getSize.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-getSize.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,4 +1,4 @@
 
-FAIL test SyncAccessHandle.getSize after SyncAccessHandle.write promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL test createSyncAccessHandle.getSize with pending operation promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL test SyncAccessHandle.getSize after SyncAccessHandle.write promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL test createSyncAccessHandle.getSize with pending operation promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-read-write.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-read-write.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-read-write.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,10 +1,10 @@
 
-FAIL Test reading an empty file through a sync access handle. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test writing and reading through a sync access handle. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test second write that is bigger than the first write promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test second write that is smaller than the first write promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test initial write with an offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test overwriting the file at an offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test read at an offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL Test reading at a negative offset fails. promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL Test reading an empty file through a sync access handle. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test writing and reading through a sync access handle. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test second write that is bigger than the first write promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test second write that is smaller than the first write promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test initial write with an offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test overwriting the file at an offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test read at an offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL Test reading at a negative offset fails. promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemSyncAccessHandle-truncate.https.tentative.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,5 +1,5 @@
 
-FAIL test createSyncAccessHandle.truncate with pending operation promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL test SyncAccessHandle.truncate with different sizes promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL test SyncAccessHandle.truncate after SyncAccessHandle.write promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL test createSyncAccessHandle.truncate with pending operation promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL test SyncAccessHandle.truncate with different sizes promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL test SyncAccessHandle.truncate after SyncAccessHandle.write promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,10 +1,10 @@
 
-FAIL can be piped to with a string promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL can be piped to with an ArrayBuffer promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL can be piped to with a Blob promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL can be piped to with a param object with write command promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL can be piped to with a param object with multiple commands promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL multiple operations can be queued promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL plays well with fetch promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL abort() aborts write promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL can be piped to with a string promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL can be piped to with an ArrayBuffer promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL can be piped to with a Blob promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL can be piped to with a param object with write command promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL can be piped to with a param object with multiple commands promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL multiple operations can be queued promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL plays well with fetch promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL abort() aborts write promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,31 +1,31 @@
 
-FAIL write() with an empty blob to an empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() a blob to an empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with WriteParams without position to an empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() a string to an empty file with zero offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() a blob to an empty file with zero offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() called consecutively appends promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() WriteParams without position and string appends promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() WriteParams without position and blob appends promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() called with a string and a valid offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() called with a blob and a valid offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() called with an offset beyond the end of the file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with an empty string to an empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with a valid utf-8 string promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with a string with unix line ending preserved promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with a string with windows line ending preserved promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with an empty array buffer to an empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with a valid typed array buffer promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: close() fails when parent directory is removed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: writable file streams make atomic changes on close promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: write() after close() fails promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: truncate() after close() fails promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: close() after close() fails promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: only one close() operation may succeed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL atomic writes: writable file stream persists file on close, even if file is removed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL getWriter() can be used promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL WriteParams: truncate missing size param promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL WriteParams: write missing data param promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL WriteParams: seek missing position param promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() with an invalid blob to an empty file should reject promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL write() with an empty blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() a blob to an empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with WriteParams without position to an empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() a string to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() a blob to an empty file with zero offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() called consecutively appends promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() WriteParams without position and string appends promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() WriteParams without position and blob appends promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() called with a string and a valid offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() called with a blob and a valid offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() called with an offset beyond the end of the file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with an empty string to an empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with a valid utf-8 string promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with a string with unix line ending preserved promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with a string with windows line ending preserved promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with an empty array buffer to an empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with a valid typed array buffer promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: close() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: writable file streams make atomic changes on close promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: write() after close() fails promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: truncate() after close() fails promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: close() after close() fails promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: only one close() operation may succeed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL atomic writes: writable file stream persists file on close, even if file is removed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL getWriter() can be used promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL WriteParams: truncate missing size param promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL WriteParams: write missing data param promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL WriteParams: seek missing position param promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() with an invalid blob to an empty file should reject promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker-expected.txt (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker-expected.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -1,12 +1,12 @@
 
-FAIL truncate() to shrink a file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL truncate() to grow a file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL createWritable() fails when parent directory is removed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL write() fails when parent directory is removed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL truncate() fails when parent directory is removed promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL createWritable({keepExistingData: true}): atomic writable file stream initialized with source contents promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL createWritable({keepExistingData: false}): atomic writable file stream initialized with empty file promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL cursor position: truncate size > offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL cursor position: truncate size < offset promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
-FAIL commands are queued, stream is unlocked after each operation promise_test: Unhandled rejection with value: object "NotSupportedError: The operation is not supported."
+FAIL truncate() to shrink a file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL truncate() to grow a file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL createWritable() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL write() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL truncate() fails when parent directory is removed promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL createWritable({keepExistingData: true}): atomic writable file stream initialized with source contents promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL createWritable({keepExistingData: false}): atomic writable file stream initialized with empty file promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL cursor position: truncate size > offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL cursor position: truncate size < offset promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
+FAIL commands are queued, stream is unlocked after each operation promise_test: Unhandled rejection with value: object "TypeError: dir.values is not a function. (In 'dir.values()', 'dir.values' is undefined)"
 

Added: branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker-expected.txt (0 => 284375)


--- branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker-expected.txt	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker-expected.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,21 @@
+[Worker] This test checks basic funtionalities of FileSystemDirectoryHandle.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/directory-handle-basics.js
+PASS [Worker] rootHandle.name is ""
+PASS [Worker] rootHandle.kind is "directory"
+PASS [Worker] dirHandle.name is "dir"
+PASS [Worker] dirHandle.kind is "directory"
+PASS [Worker] isSameEntry is false
+PASS [Worker] fileHandle.name is "file"
+PASS [Worker] fileHandle.kind is "file"
+PASS [Worker] handleNames.length is 2
+PASS [Worker] handleNames[0] is "dir"
+PASS [Worker] handleNames[1] is "file"
+PASS [Worker] createError.toString() is "NotFoundError: The object can not be found here."
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker.html (0 => 284375)


--- branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker.html	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics-worker.html	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,9 @@
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script>
+worker = startWorker('resources/directory-handle-basics.js');</script>
+</body>
+</html>
\ No newline at end of file

Modified: branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics.html (284374 => 284375)


--- branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics.html	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics.html	2021-10-18 16:07:47 UTC (rev 284375)
@@ -5,96 +5,12 @@
 </head>
 <body>
 <script>
-description("This test checks basic funtionalities of FileSystemDirectoryHandle.");
+var jsTestIsAsync = true;
 
-var rootHandle, dirHandle, fileHandle, isSameEntry, handleNames, createError;
-
-function finishTest(error)
-{
-    if (error) {
-        testFailed(error);
-    }
-    finishJSTest();
-}
-
-function getDirectory() {
-    navigator.storage.getDirectory().then((handle) => {
-        rootHandle = handle;
-        shouldBeEqualToString("rootHandle.name", "");
-        shouldBeEqualToString("rootHandle.kind", "directory");
-        createDirectoryHandle(rootHandle);
-    }).catch((error) => {
-        finishTest(error);
-    });
-}
-
-function createDirectoryHandle(fromHandle) {
-    fromHandle.getDirectoryHandle("dir", { "create" : true }).then((handle) => {
-        dirHandle = handle;
-        shouldBeEqualToString("dirHandle.name", "dir");
-        shouldBeEqualToString("dirHandle.kind", "directory");
-        checkIfSameEntry(rootHandle, dirHandle);
-    }).catch((error) => {
-        finishTest(error);
-    });
-}
-
-function checkIfSameEntry(handle1, handle2)
-{
-    handle1.isSameEntry(handle2).then((result) => {
-        isSameEntry = result;
-        shouldBeFalse("isSameEntry");
-        createFileHandle(dirHandle, true);
-    }).catch((error) => {
-        finishTest(error);
-    });
-}
-
-function createFileHandle(fromHandle, create) {
-    let options = { "create" : create };
-    fromHandle.getFileHandle("file", options).then((handle) => {
-        fileHandle = handle;
-        shouldBeEqualToString("fileHandle.name", "file");
-        shouldBeEqualToString("fileHandle.kind", "file");
-        resolvePath();
-    }).catch((error) => {
-        if (create) {
-            finishTest(error);
-            return;
-        }
-        createError = error;
-        shouldBeEqualToString("createError.toString()", "NotFoundError: The object can not be found here.");
-        finishTest();
-    });
-}
-
-function resolvePath() {
-    rootHandle.resolve(fileHandle).then((result) => {
-        handleNames = result;
-        shouldBe("handleNames.length", "2");
-        shouldBeEqualToString("handleNames[0]", "dir");
-        shouldBeEqualToString("handleNames[1]", "file");
-        removeEntry(dirHandle, "file");
-    }).catch((error) => {
-        finishTest(error);
-    });
-}
-
-function removeEntry(fromHandle, name) {
-    fromHandle.removeEntry(name).then((result) => {
-        // No error means it is removed.
-        createFileHandle(dirHandle, false);
-    }).catch((error) => {
-        finishTest(error);
-    });
-}
-
-if (window.testRunner) {
-    jsTestIsAsync = true;
-    getDirectory();
-} else {
+if (!window.testRunner) {
     finishTest("window.testRunner is not available");
 }
 </script>
+<script src=""
 </body>
 </html>

Copied: branches/safari-612-branch/LayoutTests/storage/filesystemaccess/resources/directory-handle-basics.js (from rev 284357, branches/safari-612-branch/LayoutTests/storage/filesystemaccess/directory-handle-basics.html) (0 => 284375)


--- branches/safari-612-branch/LayoutTests/storage/filesystemaccess/resources/directory-handle-basics.js	                        (rev 0)
+++ branches/safari-612-branch/LayoutTests/storage/filesystemaccess/resources/directory-handle-basics.js	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,89 @@
+if (this.importScripts) {
+    importScripts('../../../resources/js-test.js');
+}
+
+description("This test checks basic funtionalities of FileSystemDirectoryHandle.");
+
+var rootHandle, dirHandle, fileHandle, isSameEntry, handleNames, createError;
+
+function finishTest(error)
+{
+    if (error) {
+        testFailed(error);
+    }
+    finishJSTest();
+}
+
+function getDirectory() {
+    navigator.storage.getDirectory().then((handle) => {
+        rootHandle = handle;
+        shouldBeEqualToString("rootHandle.name", "");
+        shouldBeEqualToString("rootHandle.kind", "directory");
+        createDirectoryHandle(rootHandle);
+    }).catch((error) => {
+        finishTest(error);
+    });
+}
+
+function createDirectoryHandle(fromHandle) {
+    fromHandle.getDirectoryHandle("dir", { "create" : true }).then((handle) => {
+        dirHandle = handle;
+        shouldBeEqualToString("dirHandle.name", "dir");
+        shouldBeEqualToString("dirHandle.kind", "directory");
+        checkIfSameEntry(rootHandle, dirHandle);
+    }).catch((error) => {
+        finishTest(error);
+    });
+}
+
+function checkIfSameEntry(handle1, handle2)
+{
+    handle1.isSameEntry(handle2).then((result) => {
+        isSameEntry = result;
+        shouldBeFalse("isSameEntry");
+        createFileHandle(dirHandle, true);
+    }).catch((error) => {
+        finishTest(error);
+    });
+}
+
+function createFileHandle(fromHandle, create) {
+    let options = { "create" : create };
+    fromHandle.getFileHandle("file", options).then((handle) => {
+        fileHandle = handle;
+        shouldBeEqualToString("fileHandle.name", "file");
+        shouldBeEqualToString("fileHandle.kind", "file");
+        resolvePath();
+    }).catch((error) => {
+        if (create) {
+            finishTest(error);
+            return;
+        }
+        createError = error;
+        shouldBeEqualToString("createError.toString()", "NotFoundError: The object can not be found here.");
+        finishTest();
+    });
+}
+
+function resolvePath() {
+    rootHandle.resolve(fileHandle).then((result) => {
+        handleNames = result;
+        shouldBe("handleNames.length", "2");
+        shouldBeEqualToString("handleNames[0]", "dir");
+        shouldBeEqualToString("handleNames[1]", "file");
+        removeEntry(dirHandle, "file");
+    }).catch((error) => {
+        finishTest(error);
+    });
+}
+
+function removeEntry(fromHandle, name) {
+    fromHandle.removeEntry(name).then((result) => {
+        // No error means it is removed.
+        createFileHandle(dirHandle, false);
+    }).catch((error) => {
+        finishTest(error);
+    });
+}
+
+getDirectory();

Modified: branches/safari-612-branch/Source/WTF/wtf/CrossThreadCopier.h (284374 => 284375)


--- branches/safari-612-branch/Source/WTF/wtf/CrossThreadCopier.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WTF/wtf/CrossThreadCopier.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -35,6 +35,7 @@
 #include <wtf/Assertions.h>
 #include <wtf/Forward.h>
 #include <wtf/HashSet.h>
+#include <wtf/ObjectIdentifier.h>
 #include <wtf/RefPtr.h>
 #include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/text/WTFString.h>
@@ -104,6 +105,14 @@
     }
 };
 
+template<typename T> struct CrossThreadCopierBase<false, false, ObjectIdentifier<T>> {
+    typedef ObjectIdentifier<T> Type;
+    static Type copy(const Type& source)
+    {
+        return source;
+    }
+};
+
 template<typename T>
 struct CrossThreadCopier : public CrossThreadCopierBase<CrossThreadCopierBaseHelper::IsEnumOrConvertibleToInteger<T>::value, CrossThreadCopierBaseHelper::IsThreadSafeRefCountedPointer<T>::value, T> {
 };

Modified: branches/safari-612-branch/Source/WebCore/Headers.cmake (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Headers.cmake	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Headers.cmake	2021-10-18 16:07:47 UTC (rev 284375)
@@ -42,6 +42,8 @@
     Modules/filesystemaccess/FileSystemHandleIdentifier.h
     Modules/filesystemaccess/FileSystemStorageConnection.h
     Modules/filesystemaccess/StorageManagerFileSystemAccess.h
+    Modules/filesystemaccess/WorkerFileSystemStorageConnection.h
+    Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h
 
     Modules/geolocation/Geolocation.h
     Modules/geolocation/GeolocationClient.h
@@ -154,6 +156,7 @@
     Modules/storage/StorageConnection.h
     Modules/storage/StorageManager.h
     Modules/storage/StorageProvider.h
+    Modules/storage/WorkerStorageConnection.h
 
     Modules/streams/ReadableStreamSink.h
     Modules/streams/ReadableStreamSource.h

Added: branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp (0 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp	                        (rev 0)
+++ branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WorkerFileSystemStorageConnection.h"
+
+#include "WorkerGlobalScope.h"
+#include "WorkerLoaderProxy.h"
+#include "WorkerThread.h"
+
+namespace WebCore {
+
+Ref<WorkerFileSystemStorageConnection> WorkerFileSystemStorageConnection::create(WorkerGlobalScope& scope, Ref<FileSystemStorageConnection>&& mainThreadConnection)
+{
+    return adoptRef(*new WorkerFileSystemStorageConnection(scope, WTFMove(mainThreadConnection)));
+}
+
+WorkerFileSystemStorageConnection::WorkerFileSystemStorageConnection(WorkerGlobalScope& scope, Ref<FileSystemStorageConnection>&& connection)
+    : m_scope(makeWeakPtr(scope))
+    , m_mainThreadConnection(WTFMove(connection))
+{
+}
+
+WorkerFileSystemStorageConnection::~WorkerFileSystemStorageConnection()
+{
+    if (m_mainThreadConnection)
+        callOnMainThread([mainThreadConenction = WTFMove(m_mainThreadConnection)]() { });
+}
+
+void WorkerFileSystemStorageConnection::connectionClosed()
+{
+    scopeClosed();
+}
+
+void WorkerFileSystemStorageConnection::scopeClosed()
+{
+    auto sameEntryCallbacks = std::exchange(m_sameEntryCallbacks, { });
+    for (auto& callback : sameEntryCallbacks.values())
+        callback(Exception { InvalidStateError });
+
+    auto getHandleCallbacks = std::exchange(m_getHandleCallbacks, { });
+    for (auto& callback : getHandleCallbacks.values())
+        callback(Exception { InvalidStateError });
+
+    auto removeEntryCallbacks = std::exchange(m_removeEntryCallbacks, { });
+    for (auto& callback : removeEntryCallbacks.values())
+        callback(Exception { InvalidStateError });
+
+    auto resolveCallbacks = std::exchange(m_resolveCallbacks, { });
+    for (auto& callback : resolveCallbacks.values())
+        callback(Exception { InvalidStateError });
+
+    m_scope = nullptr;
+}
+
+void WorkerFileSystemStorageConnection::isSameEntry(FileSystemHandleIdentifier identifier, FileSystemHandleIdentifier otherIdentifier, FileSystemStorageConnection::SameEntryCallback&& callback)
+{
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+
+    auto callbackIdentifier = CallbackIdentifier::generateThreadSafe();
+    m_sameEntryCallbacks.add(callbackIdentifier, WTFMove(callback));
+
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, mainThreadConnection = m_mainThreadConnection, identifier, otherIdentifier]() mutable {
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                if (auto connection = downcast<WorkerGlobalScope>(scope).fileSystemStorageConnection())
+                    connection->didIsSameEntry(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+
+        mainThreadConnection->isSameEntry(identifier, otherIdentifier, WTFMove(mainThreadCallback));
+    });
+}
+
+void WorkerFileSystemStorageConnection::didIsSameEntry(CallbackIdentifier callbackIdentifier, ExceptionOr<bool>&& result)
+{
+    if (auto callback = m_sameEntryCallbacks.take(callbackIdentifier))
+        callback(WTFMove(result));
+}
+
+void WorkerFileSystemStorageConnection::getFileHandle(FileSystemHandleIdentifier identifier, const String& name, bool createIfNecessary, FileSystemStorageConnection::GetHandleCallback&& callback)
+{
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+
+    auto callbackIdentifier = CallbackIdentifier::generateThreadSafe();
+    m_getHandleCallbacks.add(callbackIdentifier, WTFMove(callback));
+
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, mainThreadConnection = m_mainThreadConnection, identifier, name = name.isolatedCopy(), createIfNecessary]() mutable {
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                if (auto connection = downcast<WorkerGlobalScope>(scope).fileSystemStorageConnection())
+                    connection->didGetHandle(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+
+        mainThreadConnection->getFileHandle(identifier, name, createIfNecessary, WTFMove(mainThreadCallback));
+    });
+}
+
+void WorkerFileSystemStorageConnection::getDirectoryHandle(FileSystemHandleIdentifier identifier, const String& name, bool createIfNecessary, FileSystemStorageConnection::GetHandleCallback&& callback)
+{
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+
+    auto callbackIdentifier = CallbackIdentifier::generateThreadSafe();
+    m_getHandleCallbacks.add(callbackIdentifier, WTFMove(callback));
+
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, mainThreadConnection = m_mainThreadConnection, identifier, name = name.isolatedCopy(), createIfNecessary]() mutable {
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                if (auto connection = downcast<WorkerGlobalScope>(scope).fileSystemStorageConnection())
+                    connection->didGetHandle(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+
+        mainThreadConnection->getDirectoryHandle(identifier, name, createIfNecessary, WTFMove(mainThreadCallback));
+    });
+}
+
+void WorkerFileSystemStorageConnection::didGetHandle(CallbackIdentifier callbackIdentifier, ExceptionOr<FileSystemHandleIdentifier>&& result)
+{
+    if (auto callback = m_getHandleCallbacks.take(callbackIdentifier))
+        callback(WTFMove(result));
+}
+
+void WorkerFileSystemStorageConnection::removeEntry(FileSystemHandleIdentifier identifier, const String& name, bool deleteRecursively, FileSystemStorageConnection::RemoveEntryCallback&& callback)
+{
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+
+    auto callbackIdentifier = CallbackIdentifier::generateThreadSafe();
+    m_removeEntryCallbacks.add(callbackIdentifier, WTFMove(callback));
+
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, mainThreadConnection = m_mainThreadConnection, identifier, name = name.isolatedCopy(), deleteRecursively]() mutable {
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                if (auto connection = downcast<WorkerGlobalScope>(scope).fileSystemStorageConnection())
+                    connection->didRemoveEntry(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+
+        mainThreadConnection->removeEntry(identifier, name, deleteRecursively, WTFMove(mainThreadCallback));
+    });
+}
+
+void WorkerFileSystemStorageConnection::didRemoveEntry(CallbackIdentifier callbackIdentifier, ExceptionOr<void>&& result)
+{
+    if (auto callback = m_removeEntryCallbacks.take(callbackIdentifier))
+        callback(WTFMove(result));
+}
+
+void WorkerFileSystemStorageConnection::resolve(FileSystemHandleIdentifier identifier, FileSystemHandleIdentifier otherIdentifier, FileSystemStorageConnection::ResolveCallback&& callback)
+{
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+
+    auto callbackIdentifier = CallbackIdentifier::generateThreadSafe();
+    m_resolveCallbacks.add(callbackIdentifier, WTFMove(callback));
+
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, mainThreadConnection = m_mainThreadConnection, identifier, otherIdentifier]() mutable {
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                if (auto connection = downcast<WorkerGlobalScope>(scope).fileSystemStorageConnection())
+                    connection->didResolve(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+
+        mainThreadConnection->resolve(identifier, otherIdentifier, WTFMove(mainThreadCallback));
+    });
+}
+
+void WorkerFileSystemStorageConnection::didResolve(CallbackIdentifier callbackIdentifier, ExceptionOr<Vector<String>>&& result)
+{
+    if (auto callback = m_resolveCallbacks.take(callbackIdentifier))
+        callback(WTFMove(result));
+}
+
+} // namespace WebCore

Added: branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.h (0 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.h	                        (rev 0)
+++ branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnection.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "FileSystemHandleIdentifier.h"
+#include "FileSystemStorageConnection.h"
+#include "WorkerFileSystemStorageConnectionCallbackIdentifier.h"
+#include <wtf/WeakPtr.h>
+
+namespace WebCore {
+
+class WorkerGlobalScope;
+class WorkerThread;
+
+class WorkerFileSystemStorageConnection final : public FileSystemStorageConnection, public CanMakeWeakPtr<WorkerFileSystemStorageConnection, WeakPtrFactoryInitialization::Eager>  {
+public:
+    static Ref<WorkerFileSystemStorageConnection> create(WorkerGlobalScope&, Ref<FileSystemStorageConnection>&&);
+    ~WorkerFileSystemStorageConnection();
+
+    FileSystemStorageConnection* mainThreadConnection() const { return m_mainThreadConnection.get(); }
+    void connectionClosed();
+    void scopeClosed();
+    using CallbackIdentifier = WorkerFileSystemStorageConnectionCallbackIdentifier;
+    void didIsSameEntry(CallbackIdentifier, ExceptionOr<bool>&&);
+    void didGetHandle(CallbackIdentifier, ExceptionOr<FileSystemHandleIdentifier>&&);
+    void didRemoveEntry(CallbackIdentifier, ExceptionOr<void>&&);
+    void didResolve(CallbackIdentifier, ExceptionOr<Vector<String>>&&);
+
+private:
+    WorkerFileSystemStorageConnection(WorkerGlobalScope&, Ref<FileSystemStorageConnection>&&);
+
+    // FileSystemStorageConnection
+    void isSameEntry(FileSystemHandleIdentifier, FileSystemHandleIdentifier, FileSystemStorageConnection::SameEntryCallback&&) final;
+    void getFileHandle(FileSystemHandleIdentifier, const String& name, bool createIfNecessary, FileSystemStorageConnection::GetHandleCallback&&) final;
+    void getDirectoryHandle(FileSystemHandleIdentifier, const String& name, bool createIfNecessary, FileSystemStorageConnection::GetHandleCallback&&) final;
+    void removeEntry(FileSystemHandleIdentifier, const String& name, bool deleteRecursively, FileSystemStorageConnection::RemoveEntryCallback&&) final;
+    void resolve(FileSystemHandleIdentifier, FileSystemHandleIdentifier, FileSystemStorageConnection::ResolveCallback&&) final;
+
+    WeakPtr<WorkerGlobalScope> m_scope;
+    RefPtr<FileSystemStorageConnection> m_mainThreadConnection;
+    HashMap<CallbackIdentifier, FileSystemStorageConnection::SameEntryCallback> m_sameEntryCallbacks;
+    HashMap<CallbackIdentifier, FileSystemStorageConnection::GetHandleCallback> m_getHandleCallbacks;
+    HashMap<CallbackIdentifier, FileSystemStorageConnection::RemoveEntryCallback> m_removeEntryCallbacks;
+    HashMap<CallbackIdentifier, FileSystemStorageConnection::ResolveCallback> m_resolveCallbacks;
+};
+
+} // namespace WebCore

Copied: branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h (from rev 284357, branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.h) (0 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h	                        (rev 0)
+++ branches/safari-612-branch/Source/WebCore/Modules/filesystemaccess/WorkerFileSystemStorageConnectionCallbackIdentifier.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebCore {
+
+enum WorkerFileSystemStorageConnectionCallbackIdentifierType { };
+using WorkerFileSystemStorageConnectionCallbackIdentifier = ObjectIdentifier<WorkerFileSystemStorageConnectionCallbackIdentifierType>;
+
+} // namespace WebCore
+

Modified: branches/safari-612-branch/Source/WebCore/Modules/remoteplayback/RemotePlayback.h (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/remoteplayback/RemotePlayback.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Modules/remoteplayback/RemotePlayback.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -38,6 +38,7 @@
 class DeferredPromise;
 class HTMLMediaElement;
 class MediaPlaybackTarget;
+class Node;
 class RemotePlaybackAvailabilityCallback;
 
 class RemotePlayback final : public RefCounted<RemotePlayback>, public ActiveDOMObject, public EventTargetWithInlineData {

Modified: branches/safari-612-branch/Source/WebCore/Modules/storage/StorageConnection.h (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/storage/StorageConnection.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Modules/storage/StorageConnection.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -41,7 +41,8 @@
     using PersistCallback = CompletionHandler<void(bool)>;
     virtual void getPersisted(const ClientOrigin&, PersistCallback&&) = 0;
     virtual void persist(const ClientOrigin&, PersistCallback&& completionHandler) { completionHandler(false); }
-    using GetDirectoryCallback = CompletionHandler<void(ExceptionOr<std::pair<FileSystemHandleIdentifier, RefPtr<FileSystemStorageConnection>>>)>;
+    using DirectoryInfo = std::pair<FileSystemHandleIdentifier, RefPtr<FileSystemStorageConnection>>;
+    using GetDirectoryCallback = CompletionHandler<void(ExceptionOr<DirectoryInfo>&&)>;
     virtual void fileSystemGetDirectory(const ClientOrigin&, GetDirectoryCallback&&) = 0;
 };
 

Modified: branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.cpp (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.cpp	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.cpp	2021-10-18 16:07:47 UTC (rev 284375)
@@ -27,9 +27,11 @@
 #include "WorkerStorageConnection.h"
 
 #include "ClientOrigin.h"
+#include "WorkerFileSystemStorageConnection.h"
 #include "WorkerGlobalScope.h"
 #include "WorkerLoaderProxy.h"
 #include "WorkerThread.h"
+#include <wtf/Scope.h>
 
 namespace WebCore {
 
@@ -49,6 +51,10 @@
     for (auto& callback : getPersistedCallbacks.values())
         callback(false);
 
+    auto getDirectoryCallbacks = std::exchange(m_getDirectoryCallbacks, { });
+    for (auto& callback : getDirectoryCallbacks.values())
+        callback(Exception { InvalidStateError });
+
     m_scope = nullptr;
 }
 
@@ -79,12 +85,45 @@
         callback(persisted);
 }
 
-void WorkerStorageConnection::fileSystemGetDirectory(const ClientOrigin&, StorageConnection::GetDirectoryCallback&& completionHandler)
+void WorkerStorageConnection::fileSystemGetDirectory(const ClientOrigin& origin, StorageConnection::GetDirectoryCallback&& completionHandler)
 {
     ASSERT(m_scope);
+    
+    auto callbackIdentifier = ++m_lastCallbackIdentifier;
+    m_getDirectoryCallbacks.add(callbackIdentifier, WTFMove(completionHandler));
 
-    // FIXME: implement this when FileSystemHandle is supported in Worker.
-    return completionHandler(Exception { NotSupportedError });
+    callOnMainThread([callbackIdentifier, workerThread = Ref { m_scope->thread() }, origin = origin.isolatedCopy()]() mutable {
+        auto mainThreadConnection = workerThread->workerLoaderProxy().storageConnection();
+        auto mainThreadCallback = [callbackIdentifier, workerThread = WTFMove(workerThread)](auto result) mutable {
+            workerThread->runLoop().postTaskForMode([callbackIdentifier, result = crossThreadCopy(result)] (auto& scope) mutable {
+                downcast<WorkerGlobalScope>(scope).storageConnection().didGetDirectory(callbackIdentifier, WTFMove(result));
+            }, WorkerRunLoop::defaultMode());
+        };
+        mainThreadConnection->fileSystemGetDirectory(origin, WTFMove(mainThreadCallback));
+    });
 }
 
+void WorkerStorageConnection::didGetDirectory(uint64_t callbackIdentifier, ExceptionOr<StorageConnection::DirectoryInfo>&& result)
+{
+    RefPtr<FileSystemStorageConnection> mainThreadFileSystemStorageConnection = result.hasException() ? nullptr : result.returnValue().second;
+    auto releaseConnectionScope = makeScopeExit([connection = mainThreadFileSystemStorageConnection]() mutable {
+        if (connection)
+            callOnMainThread([connection = WTFMove(connection)]() { });
+    });
+
+    auto callback = m_getDirectoryCallbacks.take(callbackIdentifier);
+    if (!callback)
+        return;
+
+    if (result.hasException())
+        return callback(WTFMove(result));
+
+    if (!m_scope)
+        return callback(Exception { InvalidStateError });
+    releaseConnectionScope.release();
+
+    auto& workerFileSystemStorageConnection = m_scope->getFileSystemStorageConnection(Ref { *mainThreadFileSystemStorageConnection });
+    callback(StorageConnection::DirectoryInfo { result.returnValue().first, Ref { workerFileSystemStorageConnection } });
+}
+
 } // namespace WebCore

Modified: branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.h (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Modules/storage/WorkerStorageConnection.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -40,6 +40,7 @@
 private:
     explicit WorkerStorageConnection(WorkerGlobalScope&);
     void didGetPersisted(uint64_t callbackIdentifier, bool result);
+    void didGetDirectory(uint64_t callbackIdentifier, ExceptionOr<StorageConnection::DirectoryInfo>&&);
 
     // StorageConnection
     void getPersisted(const ClientOrigin&, StorageConnection::PersistCallback&&) final;
@@ -48,6 +49,7 @@
     WeakPtr<WorkerGlobalScope> m_scope;
     uint64_t m_lastCallbackIdentifier { 0 };
     HashMap<uint64_t, StorageConnection::PersistCallback> m_getPersistedCallbacks;
+    HashMap<uint64_t, StorageConnection::GetDirectoryCallback> m_getDirectoryCallbacks;
 };
 
 } // namespace WebCore

Modified: branches/safari-612-branch/Source/WebCore/Sources.txt (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/Sources.txt	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/Sources.txt	2021-10-18 16:07:47 UTC (rev 284375)
@@ -61,6 +61,7 @@
 Modules/filesystemaccess/FileSystemDirectoryHandle.cpp
 Modules/filesystemaccess/FileSystemFileHandle.cpp
 Modules/filesystemaccess/FileSystemHandle.cpp
+Modules/filesystemaccess/WorkerFileSystemStorageConnection.cpp
 Modules/geolocation/GeoNotifier.cpp
 Modules/geolocation/Geolocation.cpp
 Modules/geolocation/GeolocationController.cpp

Modified: branches/safari-612-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-10-18 16:07:47 UTC (rev 284375)
@@ -2783,7 +2783,9 @@
 		931CBD0F161A44E900E4C874 /* ScrollingStateScrollingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 931CBD09161A44E900E4C874 /* ScrollingStateScrollingNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		931CBD11161A44E900E4C874 /* ScrollingStateTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 931CBD0B161A44E900E4C874 /* ScrollingStateTree.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		931D72F615FE695300C4C07E /* LayoutMilestone.h in Headers */ = {isa = PBXBuildFile; fileRef = 931D72F515FE695300C4C07E /* LayoutMilestone.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		93217ABC270632D2002E60F0 /* WorkerFileSystemStorageConnectionCallbackIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 93217ABB270632D2002E60F0 /* WorkerFileSystemStorageConnectionCallbackIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		932199FA2702162500B1FAF9 /* WorkerStorageConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 932199F82702162500B1FAF9 /* WorkerStorageConnection.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		93233C8627054C7900BBF41E /* WorkerFileSystemStorageConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 93233C8327054C7800BBF41E /* WorkerFileSystemStorageConnection.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		9323B07023061F9700901C8B /* IDBSerializationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9323B06F23061E9C00901C8B /* IDBSerializationContext.h */; };
 		932CC0B71DFFD158004C0F9F /* MediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 932CC0B61DFFD158004C0F9F /* MediaTrackConstraints.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		932CC0D51DFFD667004C0F9F /* JSMediaTrackConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 932CC0D11DFFD667004C0F9F /* JSMediaTrackConstraints.h */; };
@@ -11512,8 +11514,11 @@
 		931CBD0A161A44E900E4C874 /* ScrollingStateTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateTree.cpp; sourceTree = "<group>"; };
 		931CBD0B161A44E900E4C874 /* ScrollingStateTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingStateTree.h; sourceTree = "<group>"; };
 		931D72F515FE695300C4C07E /* LayoutMilestone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayoutMilestone.h; sourceTree = "<group>"; };
+		93217ABB270632D2002E60F0 /* WorkerFileSystemStorageConnectionCallbackIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerFileSystemStorageConnectionCallbackIdentifier.h; sourceTree = "<group>"; };
 		932199F62702162400B1FAF9 /* WorkerStorageConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerStorageConnection.cpp; sourceTree = "<group>"; };
 		932199F82702162500B1FAF9 /* WorkerStorageConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerStorageConnection.h; sourceTree = "<group>"; };
+		93233C8327054C7800BBF41E /* WorkerFileSystemStorageConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerFileSystemStorageConnection.h; sourceTree = "<group>"; };
+		93233C8527054C7800BBF41E /* WorkerFileSystemStorageConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerFileSystemStorageConnection.cpp; sourceTree = "<group>"; };
 		9323B06D23061E9B00901C8B /* IDBSerializationContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSerializationContext.cpp; sourceTree = "<group>"; };
 		9323B06F23061E9C00901C8B /* IDBSerializationContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSerializationContext.h; sourceTree = "<group>"; };
 		9327A94109968D1A0068A546 /* HTMLOptionsCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLOptionsCollection.cpp; sourceTree = "<group>"; };
@@ -23030,6 +23035,9 @@
 				935424292703BCAD005CA72C /* FileSystemStorageConnection.h */,
 				93443E7B26E8A6BC0058538F /* StorageManager+FileSystemAccess.idl */,
 				93443E7D26E8A6BC0058538F /* StorageManagerFileSystemAccess.h */,
+				93233C8527054C7800BBF41E /* WorkerFileSystemStorageConnection.cpp */,
+				93233C8327054C7800BBF41E /* WorkerFileSystemStorageConnection.h */,
+				93217ABB270632D2002E60F0 /* WorkerFileSystemStorageConnectionCallbackIdentifier.h */,
 			);
 			path = filesystemaccess;
 			sourceTree = "<group>";
@@ -35459,6 +35467,8 @@
 				A5B81CCE1FAA44DE0037D1E6 /* WorkerDebuggerAgent.h in Headers */,
 				A52B349E1FA41703008B6246 /* WorkerDebuggerProxy.h in Headers */,
 				91E0DDC4230B41F10019E1E3 /* WorkerDOMDebuggerAgent.h in Headers */,
+				93233C8627054C7900BBF41E /* WorkerFileSystemStorageConnection.h in Headers */,
+				93217ABC270632D2002E60F0 /* WorkerFileSystemStorageConnectionCallbackIdentifier.h in Headers */,
 				A7D6B3490F61104500FF9FD1 /* WorkerFontLoadRequest.h in Headers */,
 				2E4346490F546A8200B0F1BA /* WorkerGlobalScope.h in Headers */,
 				2E43464B0F546A8200B0F1BA /* WorkerGlobalScopeProxy.h in Headers */,

Modified: branches/safari-612-branch/Source/WebCore/dom/ExceptionOr.h (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/dom/ExceptionOr.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/dom/ExceptionOr.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -219,4 +219,15 @@
         return crossThreadCopy(source.returnValue());
     }
 };
+
+template<> struct CrossThreadCopierBase<false, false, WebCore::ExceptionOr<void> > {
+    typedef WebCore::ExceptionOr<void> Type;
+    static Type copy(const Type& source)
+    {
+        if (source.hasException())
+            return crossThreadCopy(source.exception());
+        return { };
+    }
+};
+
 }

Modified: branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.cpp (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.cpp	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.cpp	2021-10-18 16:07:47 UTC (rev 284375)
@@ -47,6 +47,7 @@
 #include "SecurityOriginPolicy.h"
 #include "ServiceWorkerGlobalScope.h"
 #include "SocketProvider.h"
+#include "WorkerFileSystemStorageConnection.h"
 #include "WorkerFontLoadRequest.h"
 #include "WorkerLoaderProxy.h"
 #include "WorkerLocation.h"
@@ -141,6 +142,9 @@
 
     if (m_storageConnection)
         m_storageConnection->scopeClosed();
+
+    if (m_fileSystemStorageConnection)
+        m_fileSystemStorageConnection->scopeClosed();
 }
 
 void WorkerGlobalScope::removeAllEventListeners()
@@ -225,6 +229,23 @@
     return *m_storageConnection;
 }
 
+WorkerFileSystemStorageConnection& WorkerGlobalScope::getFileSystemStorageConnection(Ref<FileSystemStorageConnection>&& mainThreadConnection)
+{
+    if (!m_fileSystemStorageConnection)
+        m_fileSystemStorageConnection = WorkerFileSystemStorageConnection::create(*this, WTFMove(mainThreadConnection));
+    else if (m_fileSystemStorageConnection->mainThreadConnection() != mainThreadConnection.ptr()) {
+        m_fileSystemStorageConnection->connectionClosed();
+        m_fileSystemStorageConnection = WorkerFileSystemStorageConnection::create(*this, WTFMove(mainThreadConnection));
+    }
+
+    return *m_fileSystemStorageConnection;
+}
+
+WorkerFileSystemStorageConnection* WorkerGlobalScope::fileSystemStorageConnection()
+{
+    return m_fileSystemStorageConnection.get();
+}
+
 WorkerLocation& WorkerGlobalScope::location() const
 {
     if (!m_location)

Modified: branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.h (284374 => 284375)


--- branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.h	2021-10-18 15:49:34 UTC (rev 284374)
+++ branches/safari-612-branch/Source/WebCore/workers/WorkerGlobalScope.h	2021-10-18 16:07:47 UTC (rev 284375)
@@ -54,10 +54,12 @@
 class FontFaceSet;
 class Performance;
 class ScheduledAction;
+class WorkerFileSystemStorageConnection;
 class WorkerLocation;
 class WorkerNavigator;
 class WorkerSWClientConnection;
 class WorkerStorageConnection;
+class WorkerStorageConnection;
 struct WorkerParameters;
 
 namespace IDBClient {
@@ -83,6 +85,8 @@
     using WeakValueType = EventTarget::WeakValueType;
     using EventTarget::weakPtrFactory;
     WorkerStorageConnection& storageConnection();
+    WorkerFileSystemStorageConnection& getFileSystemStorageConnection(Ref<FileSystemStorageConnection>&&);
+    WorkerFileSystemStorageConnection* fileSystemStorageConnection();
     WorkerCacheStorageConnection& cacheStorageConnection();
     MessagePortChannelProvider& messagePortChannelProvider();
 #if ENABLE(SERVICE_WORKER)
@@ -217,6 +221,7 @@
     WorkerType m_workerType;
     FetchOptions::Credentials m_credentials;
     RefPtr<WorkerStorageConnection> m_storageConnection;
+    RefPtr<WorkerFileSystemStorageConnection> m_fileSystemStorageConnection;
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to