Land stubs for File and Directory Entries API interfaces
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2017 22:41:04 +0000 (22:41 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 Aug 2017 22:41:04 +0000 (22:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175993
<rdar://problem/34087477>

Reviewed by Ryosuke Niwa.

Source/JavaScriptCore:

Add CommonIdentifiers needed for [EnabledAtRuntime].

* runtime/CommonIdentifiers.h:

Source/WebCore:

Land stubs for File and Directory Entries API interfaces:
- https://wicg.github.io/entries-api/#idl-index

Those will be needed to support drag and drop.

Test: http/wpt/entries-api/interfaces.html

* CMakeLists.txt:
* DerivedSources.cpp:
* DerivedSources.make:
* Modules/entriesapi/DOMFileSystem.cpp: Added.
(WebCore::DOMFileSystem::DOMFileSystem):
(WebCore::DOMFileSystem::~DOMFileSystem):
* Modules/entriesapi/DOMFileSystem.h: Added.
(WebCore::DOMFileSystem::create):
(WebCore::DOMFileSystem::name const):
(WebCore::DOMFileSystem::root const):
* Modules/entriesapi/DOMFileSystem.idl: Added.
* Modules/entriesapi/ErrorCallback.h: Added.
* Modules/entriesapi/ErrorCallback.idl: Added.
* Modules/entriesapi/FileCallback.h: Added.
* Modules/entriesapi/FileCallback.idl: Added.
* Modules/entriesapi/FileSystemDirectoryEntry.cpp: Added.
(WebCore::FileSystemDirectoryEntry::FileSystemDirectoryEntry):
(WebCore::FileSystemDirectoryEntry::getFile):
(WebCore::FileSystemDirectoryEntry::getDirectory):
* Modules/entriesapi/FileSystemDirectoryEntry.h: Added.
* Modules/entriesapi/FileSystemDirectoryEntry.idl: Added.
* Modules/entriesapi/FileSystemEntry.cpp: Added.
(WebCore::FileSystemEntry::FileSystemEntry):
* Modules/entriesapi/FileSystemEntry.h: Added.
(WebCore::FileSystemEntry::~FileSystemEntry):
(WebCore::FileSystemEntry::isFile const):
(WebCore::FileSystemEntry::isDirectory const):
(WebCore::FileSystemEntry::name const):
(WebCore::FileSystemEntry::fullPath const):
(WebCore::FileSystemEntry::filesystem const):
* Modules/entriesapi/FileSystemEntry.idl: Added.
* Modules/entriesapi/FileSystemEntryCallback.h: Added.
* Modules/entriesapi/FileSystemEntryCallback.idl: Added.
* Modules/entriesapi/FileSystemFileEntry.cpp: Added.
(WebCore::FileSystemFileEntry::FileSystemFileEntry):
(WebCore::FileSystemFileEntry::file):
* Modules/entriesapi/FileSystemFileEntry.h: Added.
* Modules/entriesapi/FileSystemFileEntry.idl: Added.
* WebCore.xcodeproj/project.pbxproj:

LayoutTests:

Add layout test coverage.

* http/wpt/entries-api/interfaces-expected.txt: Added.
* http/wpt/entries-api/interfaces.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@221209 268f45cc-cd09-0410-ab3c-d52691b4dbfc

28 files changed:
LayoutTests/ChangeLog
LayoutTests/http/wpt/entries-api/interfaces-expected.txt [new file with mode: 0644]
LayoutTests/http/wpt/entries-api/interfaces.html [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.cpp
Source/WebCore/DerivedSources.make
Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/DOMFileSystem.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/DOMFileSystem.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/ErrorCallback.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/ErrorCallback.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileCallback.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileCallback.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemEntry.cpp [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemEntry.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemEntry.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.idl [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemFileEntry.cpp [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemFileEntry.h [new file with mode: 0644]
Source/WebCore/Modules/entriesapi/FileSystemFileEntry.idl [new file with mode: 0644]
Source/WebCore/WebCore.xcodeproj/project.pbxproj

index 8d9d482..9dd6f64 100644 (file)
@@ -1,3 +1,16 @@
+2017-08-25  Chris Dumez  <cdumez@apple.com>
+
+        Land stubs for File and Directory Entries API interfaces
+        https://bugs.webkit.org/show_bug.cgi?id=175993
+        <rdar://problem/34087477>
+
+        Reviewed by Ryosuke Niwa.
+
+        Add layout test coverage.
+
+        * http/wpt/entries-api/interfaces-expected.txt: Added.
+        * http/wpt/entries-api/interfaces.html: Added.
+
 2017-08-25  Youenn Fablet  <youenn@apple.com>
 
         Add support for ReadableStream storage in FetchBody
diff --git a/LayoutTests/http/wpt/entries-api/interfaces-expected.txt b/LayoutTests/http/wpt/entries-api/interfaces-expected.txt
new file mode 100644 (file)
index 0000000..e505347
--- /dev/null
@@ -0,0 +1,69 @@
+Entries API IDL tests
+
+
+PASS ErrorCallback interface: existence and properties of interface object 
+PASS ErrorCallback interface: existence and properties of interface prototype object 
+PASS ErrorCallback interface: existence and properties of interface prototype object's "constructor" property 
+PASS ErrorCallback interface: operation handleEvent(DOMException) 
+PASS FileSystemEntry interface: existence and properties of interface object 
+PASS FileSystemEntry interface object length 
+PASS FileSystemEntry interface object name 
+PASS FileSystemEntry interface: existence and properties of interface prototype object 
+PASS FileSystemEntry interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileSystemEntry interface: attribute isFile 
+PASS FileSystemEntry interface: attribute isDirectory 
+PASS FileSystemEntry interface: attribute name 
+PASS FileSystemEntry interface: attribute fullPath 
+PASS FileSystemEntry interface: attribute filesystem 
+FAIL FileSystemEntry interface: operation getParent(FileSystemEntryCallback,ErrorCallback) assert_own_property: interface prototype object missing non-static operation expected property "getParent" missing
+PASS FileSystemDirectoryEntry interface: existence and properties of interface object 
+PASS FileSystemDirectoryEntry interface object length 
+PASS FileSystemDirectoryEntry interface object name 
+PASS FileSystemDirectoryEntry interface: existence and properties of interface prototype object 
+PASS FileSystemDirectoryEntry interface: existence and properties of interface prototype object's "constructor" property 
+FAIL FileSystemDirectoryEntry interface: operation createReader() assert_own_property: interface prototype object missing non-static operation expected property "createReader" missing
+PASS FileSystemDirectoryEntry interface: operation getFile(USVString,FileSystemFlags,FileSystemEntryCallback,ErrorCallback) 
+PASS FileSystemDirectoryEntry interface: operation getDirectory(USVString,FileSystemFlags,FileSystemEntryCallback,ErrorCallback) 
+PASS FileSystemEntryCallback interface: existence and properties of interface object 
+PASS FileSystemEntryCallback interface: existence and properties of interface prototype object 
+PASS FileSystemEntryCallback interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileSystemEntryCallback interface: operation handleEvent(FileSystemEntry) 
+FAIL FileSystemDirectoryReader interface: existence and properties of interface object assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+FAIL FileSystemDirectoryReader interface object length assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+FAIL FileSystemDirectoryReader interface object name assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+FAIL FileSystemDirectoryReader interface: existence and properties of interface prototype object assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+FAIL FileSystemDirectoryReader interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+FAIL FileSystemDirectoryReader interface: operation readEntries(FileSystemEntriesCallback,ErrorCallback) assert_own_property: self does not have own property "FileSystemDirectoryReader" expected property "FileSystemDirectoryReader" missing
+PASS FileSystemEntriesCallback interface: existence and properties of interface object 
+PASS FileSystemEntriesCallback interface: existence and properties of interface prototype object 
+PASS FileSystemEntriesCallback interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileSystemEntriesCallback interface: operation handleEvent([object Object]) 
+PASS FileSystemFileEntry interface: existence and properties of interface object 
+PASS FileSystemFileEntry interface object length 
+PASS FileSystemFileEntry interface object name 
+PASS FileSystemFileEntry interface: existence and properties of interface prototype object 
+PASS FileSystemFileEntry interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileSystemFileEntry interface: operation file(FileCallback,ErrorCallback) 
+PASS FileCallback interface: existence and properties of interface object 
+PASS FileCallback interface: existence and properties of interface prototype object 
+PASS FileCallback interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileCallback interface: operation handleEvent(File) 
+PASS FileSystem interface: existence and properties of interface object 
+PASS FileSystem interface object length 
+PASS FileSystem interface object name 
+PASS FileSystem interface: existence and properties of interface prototype object 
+PASS FileSystem interface: existence and properties of interface prototype object's "constructor" property 
+PASS FileSystem interface: attribute name 
+PASS FileSystem interface: attribute root 
+PASS File interface: attribute webkitRelativePath 
+PASS File must be primary interface of new File(["myFileBits"], "myFileName") 
+PASS Stringification of new File(["myFileBits"], "myFileName") 
+PASS File interface: new File(["myFileBits"], "myFileName") must inherit property "webkitRelativePath" with the proper type (0) 
+PASS HTMLInputElement interface: attribute webkitdirectory 
+FAIL HTMLInputElement interface: attribute webkitEntries assert_true: The prototype object must have a property "webkitEntries" expected true got false
+PASS HTMLInputElement must be primary interface of file_input 
+PASS Stringification of file_input 
+PASS HTMLInputElement interface: file_input must inherit property "webkitdirectory" with the proper type (0) 
+FAIL HTMLInputElement interface: file_input must inherit property "webkitEntries" with the proper type (1) assert_inherits: property "webkitEntries" not found in prototype chain
+FAIL DataTransferItem interface: operation webkitGetAsEntry() assert_own_property: interface prototype object missing non-static operation expected property "webkitGetAsEntry" missing
+
diff --git a/LayoutTests/http/wpt/entries-api/interfaces.html b/LayoutTests/http/wpt/entries-api/interfaces.html
new file mode 100644 (file)
index 0000000..40aaa49
--- /dev/null
@@ -0,0 +1,112 @@
+<!doctype html>
+<title>Entries API IDL tests</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/WebIDLParser.js></script>
+<script src=/resources/idlharness.js></script>
+
+<h1>Entries API IDL tests</h1>
+<div id=log></div>
+
+<form>
+    <input type="file" id="fileChooser">
+</form>
+
+<script type=text/plain>
+partial interface File {
+    readonly attribute USVString webkitRelativePath;
+};
+
+partial interface HTMLInputElement {
+    attribute boolean webkitdirectory;
+    readonly attribute FrozenArray<FileSystemEntry> webkitEntries;
+};
+
+partial interface DataTransferItem {
+    FileSystemEntry? webkitGetAsEntry();
+};
+
+callback interface ErrorCallback {
+    void handleEvent(DOMException err);
+};
+
+interface FileSystemEntry {
+    readonly attribute boolean isFile;
+    readonly attribute boolean isDirectory;
+    readonly attribute USVString name;
+    readonly attribute USVString fullPath;
+    readonly attribute FileSystem filesystem;
+
+    void getParent(optional FileSystemEntryCallback successCallback,
+                   optional ErrorCallback errorCallback);
+};
+
+interface FileSystemDirectoryEntry : FileSystemEntry {
+    FileSystemDirectoryReader createReader();
+    void getFile(optional USVString? path,
+                 optional FileSystemFlags options,
+                 optional FileSystemEntryCallback successCallback,
+                 optional ErrorCallback errorCallback);
+    void getDirectory(optional USVString? path,
+                      optional FileSystemFlags options,
+                      optional FileSystemEntryCallback successCallback,
+                      optional ErrorCallback errorCallback);
+};
+
+dictionary FileSystemFlags {
+    boolean create = false;
+    boolean exclusive = false;
+};
+
+callback interface FileSystemEntryCallback {
+    void handleEvent(FileSystemEntry entry);
+};
+
+interface FileSystemDirectoryReader {
+    void readEntries(FileSystemEntriesCallback successCallback,
+                     optional ErrorCallback errorCallback);
+};
+callback interface FileSystemEntriesCallback {
+    void handleEvent(sequence<FileSystemEntry> entries);
+};
+
+interface FileSystemFileEntry : FileSystemEntry {
+    void file(FileCallback successCallback,
+              optional ErrorCallback errorCallback);
+};
+callback interface FileCallback {
+    void handleEvent(File file);
+};
+
+interface FileSystem {
+    readonly attribute USVString name;
+    readonly attribute FileSystemDirectoryEntry root;
+};
+</script>
+<script>
+"use strict";
+var idlArray;
+var file_input;
+setup(function() {
+  idlArray = new IdlArray();
+  [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) {
+    if (node.className == "untested") {
+      idlArray.add_untested_idls(node.textContent);
+    } else {
+      idlArray.add_idls(node.textContent);
+    }
+    idlArray.add_untested_idls("interface File {};");
+    idlArray.add_untested_idls("interface HTMLInputElement {};");
+    idlArray.add_untested_idls("interface DataTransferItem {};");
+    file_input = document.getElementById("fileChooser");
+    idlArray.add_objects({
+        File: ['new File(["myFileBits"], "myFileName")'],
+        HTMLInputElement: ['file_input'],
+    });
+  });
+}, {explicit_done:true});
+window.onload = function() {
+  idlArray.test();
+  done();
+};
+</script>
index 84a9293..8ebd9f2 100644 (file)
@@ -1,3 +1,15 @@
+2017-08-25  Chris Dumez  <cdumez@apple.com>
+
+        Land stubs for File and Directory Entries API interfaces
+        https://bugs.webkit.org/show_bug.cgi?id=175993
+        <rdar://problem/34087477>
+
+        Reviewed by Ryosuke Niwa.
+
+        Add CommonIdentifiers needed for [EnabledAtRuntime].
+
+        * runtime/CommonIdentifiers.h:
+
 2017-08-25  Brian Burg  <bburg@apple.com>
 
         Web Automation: add capabilities to control ICE candidate filtering and insecure media capture
index 6768294..2e7828f 100644 (file)
     macro(Error) \
     macro(EvalError) \
     macro(FederatedCredential) \
+    macro(FileSystem) \
+    macro(FileSystemDirectoryEntry) \
+    macro(FileSystemEntry) \
+    macro(FileSystemFileEntry) \
     macro(Function) \
     macro(Gamepad) \
     macro(GamepadButton) \
index 5966f85..53a9b28 100644 (file)
@@ -21,6 +21,7 @@ set(WebCore_INCLUDE_DIRECTORIES
     "${WEBCORE_DIR}/Modules/credentials"
     "${WEBCORE_DIR}/Modules/encryptedmedia"
     "${WEBCORE_DIR}/Modules/encryptedmedia/legacy"
+    "${WEBCORE_DIR}/Modules/entriesapi"
     "${WEBCORE_DIR}/Modules/fetch"
     "${WEBCORE_DIR}/Modules/geolocation"
     "${WEBCORE_DIR}/Modules/indexeddb"
@@ -152,6 +153,7 @@ set(WebCore_IDL_INCLUDES
     Modules/cache
     Modules/credentials
     Modules/encryptedmedia/legacy
+    Modules/entriesapi
     Modules/fetch
     Modules/geolocation
     Modules/indexeddb
@@ -198,6 +200,14 @@ set(WebCore_NON_SVG_IDL_FILES
     Modules/credentials/PasswordCredential.idl
     Modules/credentials/PasswordCredentialData.idl
 
+    Modules/entriesapi/DOMFileSystem.idl
+    Modules/entriesapi/ErrorCallback.idl
+    Modules/entriesapi/FileCallback.idl
+    Modules/entriesapi/FileSystemDirectoryEntry.idl
+    Modules/entriesapi/FileSystemEntry.idl
+    Modules/entriesapi/FileSystemEntryCallback.idl
+    Modules/entriesapi/FileSystemFileEntry.idl
+
     Modules/fetch/DOMWindowFetch.idl
     Modules/fetch/FetchBody.idl
     Modules/fetch/FetchHeaders.idl
@@ -909,6 +919,11 @@ set(WebCore_SOURCES
     Modules/credentials/NavigatorCredentials.cpp
     Modules/credentials/PasswordCredential.cpp
 
+    Modules/entriesapi/DOMFileSystem.cpp
+    Modules/entriesapi/FileSystemDirectoryEntry.cpp
+    Modules/entriesapi/FileSystemEntry.cpp
+    Modules/entriesapi/FileSystemFileEntry.cpp
+
     Modules/fetch/DOMWindowFetch.cpp
     Modules/fetch/FetchBody.cpp
     Modules/fetch/FetchBodyConsumer.cpp
index 87a77bf..aa9e95d 100644 (file)
@@ -1,3 +1,58 @@
+2017-08-25  Chris Dumez  <cdumez@apple.com>
+
+        Land stubs for File and Directory Entries API interfaces
+        https://bugs.webkit.org/show_bug.cgi?id=175993
+        <rdar://problem/34087477>
+
+        Reviewed by Ryosuke Niwa.
+
+        Land stubs for File and Directory Entries API interfaces:
+        - https://wicg.github.io/entries-api/#idl-index
+
+        Those will be needed to support drag and drop.
+
+        Test: http/wpt/entries-api/interfaces.html
+
+        * CMakeLists.txt:
+        * DerivedSources.cpp:
+        * DerivedSources.make:
+        * Modules/entriesapi/DOMFileSystem.cpp: Added.
+        (WebCore::DOMFileSystem::DOMFileSystem):
+        (WebCore::DOMFileSystem::~DOMFileSystem):
+        * Modules/entriesapi/DOMFileSystem.h: Added.
+        (WebCore::DOMFileSystem::create):
+        (WebCore::DOMFileSystem::name const):
+        (WebCore::DOMFileSystem::root const):
+        * Modules/entriesapi/DOMFileSystem.idl: Added.
+        * Modules/entriesapi/ErrorCallback.h: Added.
+        * Modules/entriesapi/ErrorCallback.idl: Added.
+        * Modules/entriesapi/FileCallback.h: Added.
+        * Modules/entriesapi/FileCallback.idl: Added.
+        * Modules/entriesapi/FileSystemDirectoryEntry.cpp: Added.
+        (WebCore::FileSystemDirectoryEntry::FileSystemDirectoryEntry):
+        (WebCore::FileSystemDirectoryEntry::getFile):
+        (WebCore::FileSystemDirectoryEntry::getDirectory):
+        * Modules/entriesapi/FileSystemDirectoryEntry.h: Added.
+        * Modules/entriesapi/FileSystemDirectoryEntry.idl: Added.
+        * Modules/entriesapi/FileSystemEntry.cpp: Added.
+        (WebCore::FileSystemEntry::FileSystemEntry):
+        * Modules/entriesapi/FileSystemEntry.h: Added.
+        (WebCore::FileSystemEntry::~FileSystemEntry):
+        (WebCore::FileSystemEntry::isFile const):
+        (WebCore::FileSystemEntry::isDirectory const):
+        (WebCore::FileSystemEntry::name const):
+        (WebCore::FileSystemEntry::fullPath const):
+        (WebCore::FileSystemEntry::filesystem const):
+        * Modules/entriesapi/FileSystemEntry.idl: Added.
+        * Modules/entriesapi/FileSystemEntryCallback.h: Added.
+        * Modules/entriesapi/FileSystemEntryCallback.idl: Added.
+        * Modules/entriesapi/FileSystemFileEntry.cpp: Added.
+        (WebCore::FileSystemFileEntry::FileSystemFileEntry):
+        (WebCore::FileSystemFileEntry::file):
+        * Modules/entriesapi/FileSystemFileEntry.h: Added.
+        * Modules/entriesapi/FileSystemFileEntry.idl: Added.
+        * WebCore.xcodeproj/project.pbxproj:
+
 2017-08-25  Brent Fulgham  <bfulgham@apple.com>
 
         REGRESSION(r221017): Quip stuck in a perpetual loading loop
index 1ffbb7b..3f0b86f 100644 (file)
 #include "JSDOMCSSNamespace.cpp"
 #include "JSDOMError.cpp"
 #include "JSDOMException.cpp"
+#include "JSDOMFileSystem.cpp"
 #include "JSDOMFormData.cpp"
 #include "JSDOMImplementation.cpp"
 #include "JSDOMMimeType.cpp"
 #include "JSDOMWindowSpeechSynthesis.cpp"
 #include "JSDOMWindowWebDatabase.cpp"
 #include "JSElement.cpp"
+#include "JSErrorCallback.cpp"
 #include "JSErrorEvent.cpp"
 #include "JSEvent.cpp"
 #include "JSEventInit.cpp"
 #include "JSFetchRequest.cpp"
 #include "JSFetchResponse.cpp"
 #include "JSFile.cpp"
+#include "JSFileCallback.cpp"
 #include "JSFileError.cpp"
 #include "JSFileList.cpp"
 #include "JSFileReader.cpp"
 #include "JSFileReaderSync.cpp"
+#include "JSFileSystemDirectoryEntry.cpp"
+#include "JSFileSystemEntry.cpp"
+#include "JSFileSystemEntryCallback.cpp"
+#include "JSFileSystemFileEntry.cpp"
 #include "JSFocusEvent.cpp"
 #include "JSFontFace.cpp"
 #include "JSFontFaceSet.cpp"
index 41e2f8b..1068288 100644 (file)
@@ -35,6 +35,7 @@ VPATH = \
     $(WebCore)/Modules/credentials \
     $(WebCore)/Modules/encryptedmedia \
     $(WebCore)/Modules/encryptedmedia/legacy \
+    $(WebCore)/Modules/entriesapi \
     $(WebCore)/Modules/fetch \
     $(WebCore)/Modules/gamepad \
     $(WebCore)/Modules/geolocation \
@@ -133,6 +134,13 @@ JS_BINDING_IDLS = \
     $(WebCore)/Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl \
     $(WebCore)/Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl \
     $(WebCore)/Modules/encryptedmedia/legacy/WebKitMediaKeys.idl \
+    $(WebCore)/Modules/entriesapi/DOMFileSystem.idl \
+    $(WebCore)/Modules/entriesapi/ErrorCallback.idl \
+    $(WebCore)/Modules/entriesapi/FileCallback.idl \
+    $(WebCore)/Modules/entriesapi/FileSystemDirectoryEntry.idl \
+    $(WebCore)/Modules/entriesapi/FileSystemEntry.idl \
+    $(WebCore)/Modules/entriesapi/FileSystemEntryCallback.idl \
+    $(WebCore)/Modules/entriesapi/FileSystemFileEntry.idl \
     $(WebCore)/Modules/fetch/DOMWindowFetch.idl \
     $(WebCore)/Modules/fetch/FetchBody.idl \
     $(WebCore)/Modules/fetch/FetchHeaders.idl \
diff --git a/Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp b/Source/WebCore/Modules/entriesapi/DOMFileSystem.cpp
new file mode 100644 (file)
index 0000000..8174aa7
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2017 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 "DOMFileSystem.h"
+
+#include "FileSystemDirectoryEntry.h"
+
+namespace WebCore {
+
+DOMFileSystem::DOMFileSystem()
+    : m_root(FileSystemDirectoryEntry::create(*this))
+{
+}
+
+DOMFileSystem::~DOMFileSystem()
+{
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/DOMFileSystem.h b/Source/WebCore/Modules/entriesapi/DOMFileSystem.h
new file mode 100644 (file)
index 0000000..485cd05
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 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 "ScriptWrappable.h"
+#include <wtf/RefCounted.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class FileSystemDirectoryEntry;
+
+class DOMFileSystem : public ScriptWrappable, public RefCounted<DOMFileSystem> {
+public:
+    static Ref<DOMFileSystem> create()
+    {
+        return adoptRef(*new DOMFileSystem);
+    }
+
+    ~DOMFileSystem();
+
+    const String& name() const { return m_name; }
+    FileSystemDirectoryEntry& root() const { return m_root; }
+
+private:
+    DOMFileSystem();
+
+    String m_name;
+    Ref<FileSystemDirectoryEntry> m_root;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/DOMFileSystem.idl b/Source/WebCore/Modules/entriesapi/DOMFileSystem.idl
new file mode 100644 (file)
index 0000000..8cba302
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+[
+    EnabledAtRuntime=DirectoryUpload,
+    ImplementationLacksVTable,
+    InterfaceName=FileSystem,
+] interface DOMFileSystem {
+    readonly attribute USVString name;
+    readonly attribute FileSystemDirectoryEntry root;
+};
diff --git a/Source/WebCore/Modules/entriesapi/ErrorCallback.h b/Source/WebCore/Modules/entriesapi/ErrorCallback.h
new file mode 100644 (file)
index 0000000..9b203cc
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 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 "ActiveDOMCallback.h"
+#include "CallbackResult.h"
+#include <wtf/Forward.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class DOMException;
+
+class ErrorCallback : public RefCounted<ErrorCallback>, public ActiveDOMCallback {
+public:
+    using ActiveDOMCallback::ActiveDOMCallback;
+
+    virtual CallbackResult<void> handleEvent(DOMException&) = 0;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/ErrorCallback.idl b/Source/WebCore/Modules/entriesapi/ErrorCallback.idl
new file mode 100644 (file)
index 0000000..8ae2ad0
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+callback ErrorCallback = void (DOMException error);
diff --git a/Source/WebCore/Modules/entriesapi/FileCallback.h b/Source/WebCore/Modules/entriesapi/FileCallback.h
new file mode 100644 (file)
index 0000000..be3a2a7
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 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 "ActiveDOMCallback.h"
+#include "CallbackResult.h"
+#include <wtf/Forward.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class File;
+
+class FileCallback : public RefCounted<FileCallback>, public ActiveDOMCallback {
+public:
+    using ActiveDOMCallback::ActiveDOMCallback;
+
+    virtual CallbackResult<void> handleEvent(File&) = 0;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileCallback.idl b/Source/WebCore/Modules/entriesapi/FileCallback.idl
new file mode 100644 (file)
index 0000000..3a19ca8
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+callback FileCallback = void (File file);
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp b/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.cpp
new file mode 100644 (file)
index 0000000..df95982
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2017 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 "FileSystemDirectoryEntry.h"
+
+namespace WebCore {
+
+FileSystemDirectoryEntry::FileSystemDirectoryEntry(DOMFileSystem& filesystem)
+    : FileSystemEntry(filesystem)
+{
+}
+
+void FileSystemDirectoryEntry::getFile(const String&, const Flags&, RefPtr<FileSystemEntryCallback>&&, RefPtr<ErrorCallback>&&)
+{
+}
+
+void FileSystemDirectoryEntry::getDirectory(const String&, const Flags&, RefPtr<FileSystemEntryCallback>&&, RefPtr<ErrorCallback>&&)
+{
+
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.h b/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.h
new file mode 100644 (file)
index 0000000..13299e7
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 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 "FileSystemEntry.h"
+
+namespace WebCore {
+
+class ErrorCallback;
+class FileSystemEntryCallback;
+
+class FileSystemDirectoryEntry final : public FileSystemEntry {
+public:
+    static Ref<FileSystemDirectoryEntry> create(DOMFileSystem& filesystem)
+    {
+        return adoptRef(*new FileSystemDirectoryEntry(filesystem));
+    }
+
+    struct Flags {
+        bool create { false };
+        bool exclusive { false };
+    };
+
+    void getFile(const String& path, const Flags& options, RefPtr<FileSystemEntryCallback>&&, RefPtr<ErrorCallback>&&);
+    void getDirectory(const String& path, const Flags& options, RefPtr<FileSystemEntryCallback>&&, RefPtr<ErrorCallback>&&);
+
+private:
+    bool isDirectory() const final { return true; }
+
+    explicit FileSystemDirectoryEntry(DOMFileSystem&);
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.idl b/Source/WebCore/Modules/entriesapi/FileSystemDirectoryEntry.idl
new file mode 100644 (file)
index 0000000..2e68dcb
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+[
+    EnabledAtRuntime=DirectoryUpload,
+] interface FileSystemDirectoryEntry : FileSystemEntry {
+    // FileSystemDirectoryReader createReader();
+
+    void getFile(optional USVString? path,
+        optional FileSystemFlags options,
+        optional FileSystemEntryCallback? successCallback,
+        optional ErrorCallback? errorCallback);
+
+    void getDirectory(optional USVString? path,
+        optional FileSystemFlags options,
+        optional FileSystemEntryCallback? successCallback,
+        optional ErrorCallback? errorCallback);
+};
+
+dictionary FileSystemFlags {
+    boolean create = false;
+    boolean exclusive = false;
+};
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemEntry.cpp b/Source/WebCore/Modules/entriesapi/FileSystemEntry.cpp
new file mode 100644 (file)
index 0000000..8c8ffe1
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 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 "FileSystemEntry.h"
+
+namespace WebCore {
+
+FileSystemEntry::FileSystemEntry(DOMFileSystem& filesystem)
+    : m_filesystem(filesystem)
+{
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemEntry.h b/Source/WebCore/Modules/entriesapi/FileSystemEntry.h
new file mode 100644 (file)
index 0000000..4155bb0
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 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 "ScriptWrappable.h"
+#include <wtf/RefCounted.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class DOMFileSystem;
+
+class FileSystemEntry : public ScriptWrappable, public RefCounted<FileSystemEntry> {
+public:
+    virtual ~FileSystemEntry() { }
+
+    virtual bool isFile() const { return false; }
+    virtual bool isDirectory() const { return false; }
+
+    const String& name() const { return m_name; }
+    const String& fullPath() const { return m_fullPath; }
+    DOMFileSystem& filesystem() const { return m_filesystem; }
+
+protected:
+    explicit FileSystemEntry(DOMFileSystem&);
+
+private:
+    String m_name;
+    String m_fullPath;
+    DOMFileSystem& m_filesystem;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemEntry.idl b/Source/WebCore/Modules/entriesapi/FileSystemEntry.idl
new file mode 100644 (file)
index 0000000..b946de3
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+[
+    EnabledAtRuntime=DirectoryUpload,
+] interface FileSystemEntry {
+    readonly attribute boolean isFile;
+    readonly attribute boolean isDirectory;
+    readonly attribute USVString name;
+    readonly attribute USVString fullPath;
+    readonly attribute DOMFileSystem filesystem;
+
+    // void getParent(optional FileSystemEntryCallback successCallback, optional ErrorCallback errorCallback);
+};
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.h b/Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.h
new file mode 100644 (file)
index 0000000..aebc1b0
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 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 "ActiveDOMCallback.h"
+#include "CallbackResult.h"
+#include <wtf/Forward.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class FileSystemEntry;
+
+class FileSystemEntryCallback : public RefCounted<FileSystemEntryCallback>, public ActiveDOMCallback {
+public:
+    using ActiveDOMCallback::ActiveDOMCallback;
+
+    virtual CallbackResult<void> handleEvent(FileSystemEntry&) = 0;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.idl b/Source/WebCore/Modules/entriesapi/FileSystemEntryCallback.idl
new file mode 100644 (file)
index 0000000..4a2a285
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+callback FileSystemEntryCallback = void (FileSystemEntry entry);
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.cpp b/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.cpp
new file mode 100644 (file)
index 0000000..13b415e
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2017 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 "FileSystemFileEntry.h"
+
+namespace WebCore {
+
+FileSystemFileEntry::FileSystemFileEntry(DOMFileSystem& filesystem)
+    : FileSystemEntry(filesystem)
+{
+}
+
+void FileSystemFileEntry::file(RefPtr<FileCallback>&&, RefPtr<ErrorCallback>&&)
+{
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.h b/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.h
new file mode 100644 (file)
index 0000000..04e2c31
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2017 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 "FileSystemEntry.h"
+
+namespace WebCore {
+
+class ErrorCallback;
+class FileCallback;
+
+class FileSystemFileEntry final : public FileSystemEntry {
+public:
+    static Ref<FileSystemFileEntry> create(DOMFileSystem& filesystem)
+    {
+        return adoptRef(*new FileSystemFileEntry(filesystem));
+    }
+
+    void file(RefPtr<FileCallback>&&, RefPtr<ErrorCallback>&& = nullptr);
+
+private:
+    bool isFile() const final { return true; }
+
+    explicit FileSystemFileEntry(DOMFileSystem&);
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.idl b/Source/WebCore/Modules/entriesapi/FileSystemFileEntry.idl
new file mode 100644 (file)
index 0000000..1d8ec78
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+[
+    EnabledAtRuntime=DirectoryUpload,
+] interface FileSystemFileEntry : FileSystemEntry {
+    void file(FileCallback? successCallback, optional ErrorCallback? errorCallback);
+};
index 45613d1..9574bce 100644 (file)
                8321507E1F27EA1B0095B136 /* NavigatorBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8321507B1F27EA150095B136 /* NavigatorBeacon.h */; };
                832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 832B843319D8E55100B26055 /* SVGAnimateElementBase.h */; };
                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */; };
+               833B9E311F508D8500E0E428 /* JSFileSystemDirectoryEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833B9E2B1F508D8000E0E428 /* JSFileSystemDirectoryEntry.cpp */; };
+               833B9E321F508D8500E0E428 /* JSFileSystemDirectoryEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 833B9E2F1F508D8000E0E428 /* JSFileSystemDirectoryEntry.h */; };
+               833B9E331F508D8500E0E428 /* JSFileSystemEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833B9E2E1F508D8000E0E428 /* JSFileSystemEntry.cpp */; };
+               833B9E341F508D8500E0E428 /* JSFileSystemEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 833B9E2A1F508D8000E0E428 /* JSFileSystemEntry.h */; };
+               833B9E351F508D8500E0E428 /* JSFileSystemFileEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 833B9E2D1F508D8000E0E428 /* JSFileSystemFileEntry.cpp */; };
+               833B9E361F508D8500E0E428 /* JSFileSystemFileEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 833B9E2C1F508D8000E0E428 /* JSFileSystemFileEntry.h */; };
                83407FC11E8D9C1700E048D3 /* VisibilityChangeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 83407FC01E8D9C1200E048D3 /* VisibilityChangeClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                834476EE1DA5BC57002B6ED2 /* JSScrollToOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83E9B3001DA5A51E00FFE8F6 /* JSScrollToOptions.cpp */; };
                834476EF1DA5BC5E002B6ED2 /* JSScrollToOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E9B3011DA5A51E00FFE8F6 /* JSScrollToOptions.h */; };
                836DAA061CEAB80D00A2B707 /* RenderDescendantIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 836DAA051CEAB7CD00A2B707 /* RenderDescendantIterator.h */; };
                836FBCEA178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */; };
                836FBCEC178C117F00B21A15 /* SVGAnimatedProperty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */; };
+               8370568D1F50915500D93425 /* JSFileCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 837056881F50915000D93425 /* JSFileCallback.cpp */; };
+               8370568E1F50915700D93425 /* JSFileCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370568B1F50915000D93425 /* JSFileCallback.h */; };
+               8370568F1F50915900D93425 /* JSFileSystemEntryCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8370568A1F50915000D93425 /* JSFileSystemEntryCallback.cpp */; };
+               837056901F50915C00D93425 /* JSFileSystemEntryCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 837056891F50915000D93425 /* JSFileSystemEntryCallback.h */; };
+               8371AC3B1F509BE400FBF284 /* ErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 8371AC391F509BDD00FBF284 /* ErrorCallback.h */; };
                8372DB311A6780A800C697C5 /* DiagnosticLoggingResultType.h in Headers */ = {isa = PBXBuildFile; fileRef = 8372DB301A6780A800C697C5 /* DiagnosticLoggingResultType.h */; settings = {ATTRIBUTES = (Private, ); }; };
                83765F951DAC522F00C06537 /* MouseEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 83765F941DAC521800C06537 /* MouseEventInit.h */; settings = {ATTRIBUTES = (Private, ); }; };
                837A80131E1E127300026B9F /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 837A80111E1E127300026B9F /* Localizable.stringsdict */; };
                838EF5381DC149E2008F0C39 /* IDBTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 838EF5361DC149DA008F0C39 /* IDBTransactionMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
                838EF53B1DC14A7C008F0C39 /* JSIDBTransactionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838EF5391DC14A75008F0C39 /* JSIDBTransactionMode.cpp */; };
                838EF53C1DC14A7C008F0C39 /* JSIDBTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 838EF53A1DC14A75008F0C39 /* JSIDBTransactionMode.h */; };
+               838F86DA1F509E7400E8CFC5 /* FileCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 838F86D81F509E6C00E8CFC5 /* FileCallback.h */; };
+               838F86DB1F509E7B00E8CFC5 /* FileSystemEntryCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 838F86D71F509E6C00E8CFC5 /* FileSystemEntryCallback.h */; };
+               8399470B1F50B63E00E9D86B /* DOMFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 839947091F50B63800E9D86B /* DOMFileSystem.cpp */; };
+               8399470C1F50B63E00E9D86B /* DOMFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 839947071F50B63800E9D86B /* DOMFileSystem.h */; };
+               8399470F1F50B6FA00E9D86B /* JSDOMFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8399470D1F50B6F300E9D86B /* JSDOMFileSystem.cpp */; };
+               839947101F50B6FA00E9D86B /* JSDOMFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8399470E1F50B6F300E9D86B /* JSDOMFileSystem.h */; };
                839A2F2D1E204A710039057E /* WebGLStateTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 839A2F2B1E204A6D0039057E /* WebGLStateTracker.cpp */; };
                839A2F2E1E204A710039057E /* WebGLStateTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 839A2F2C1E204A6D0039057E /* WebGLStateTracker.h */; settings = {ATTRIBUTES = (Private, ); }; };
                839AAFEC1A0C0C8D00605F99 /* HTMLWBRElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 839AAFEA1A0C0C8D00605F99 /* HTMLWBRElement.cpp */; };
                83D35AF21C718D9000F70D5A /* JSXMLHttpRequestEventTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D35AF01C718D8400F70D5A /* JSXMLHttpRequestEventTarget.h */; };
                83E359A21BB1031D002CEB98 /* JSHTMLTimeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E359A01BB1031D002CEB98 /* JSHTMLTimeElement.h */; };
                83E359A31BB1031D002CEB98 /* JSHTMLTimeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83E359A11BB1031D002CEB98 /* JSHTMLTimeElement.cpp */; };
+               83EE598E1F50958E003E8B30 /* JSErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83EE598C1F50958B003E8B30 /* JSErrorCallback.cpp */; };
+               83EE598F1F50958E003E8B30 /* JSErrorCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 83EE598B1F50958B003E8B30 /* JSErrorCallback.h */; };
+               83FB33701F508A5400986E54 /* FileSystemDirectoryEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FB336B1F508A4E00986E54 /* FileSystemDirectoryEntry.cpp */; };
+               83FB33711F508A5400986E54 /* FileSystemDirectoryEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FB336D1F508A4E00986E54 /* FileSystemDirectoryEntry.h */; };
+               83FB33721F508A5800986E54 /* FileSystemEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FB336E1F508A4E00986E54 /* FileSystemEntry.cpp */; };
+               83FB33731F508A5800986E54 /* FileSystemEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FB336F1F508A4E00986E54 /* FileSystemEntry.h */; };
+               83FB33741F508A5B00986E54 /* FileSystemFileEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FB33691F508A4E00986E54 /* FileSystemFileEntry.cpp */; };
+               83FB33751F508A5B00986E54 /* FileSystemFileEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FB336C1F508A4E00986E54 /* FileSystemFileEntry.h */; };
                83FE7CA71DA9F1A70037237C /* UIEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FE7CA41DA9F1660037237C /* UIEventInit.h */; settings = {ATTRIBUTES = (Private, ); }; };
                83FE7CA81DA9F1B60037237C /* EventModifierInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FE7CA31DA9F1650037237C /* EventModifierInit.h */; settings = {ATTRIBUTES = (Private, ); }; };
                83FE90271E307C30003E9199 /* PerformanceMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FE90261E307C1C003E9199 /* PerformanceMonitor.h */; };
                8329DCC21C7A6AE300730B33 /* HTMLHyperlinkElementUtils.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLHyperlinkElementUtils.idl; sourceTree = "<group>"; };
                832B843319D8E55100B26055 /* SVGAnimateElementBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimateElementBase.h; sourceTree = "<group>"; };
                832B843519D8E57400B26055 /* SVGAnimateElementBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimateElementBase.cpp; sourceTree = "<group>"; };
+               833B9E2A1F508D8000E0E428 /* JSFileSystemEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileSystemEntry.h; sourceTree = "<group>"; };
+               833B9E2B1F508D8000E0E428 /* JSFileSystemDirectoryEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileSystemDirectoryEntry.cpp; sourceTree = "<group>"; };
+               833B9E2C1F508D8000E0E428 /* JSFileSystemFileEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileSystemFileEntry.h; sourceTree = "<group>"; };
+               833B9E2D1F508D8000E0E428 /* JSFileSystemFileEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileSystemFileEntry.cpp; sourceTree = "<group>"; };
+               833B9E2E1F508D8000E0E428 /* JSFileSystemEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileSystemEntry.cpp; sourceTree = "<group>"; };
+               833B9E2F1F508D8000E0E428 /* JSFileSystemDirectoryEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileSystemDirectoryEntry.h; sourceTree = "<group>"; };
                83407FC01E8D9C1200E048D3 /* VisibilityChangeClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisibilityChangeClient.h; sourceTree = "<group>"; };
                8348BFA91B85729500912F36 /* ClassCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClassCollection.cpp; sourceTree = "<group>"; };
                8348BFAA1B85729500912F36 /* ClassCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClassCollection.h; sourceTree = "<group>"; };
                836DAA051CEAB7CD00A2B707 /* RenderDescendantIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderDescendantIterator.h; sourceTree = "<group>"; };
                836FBCE9178C113200B21A15 /* SVGAnimatedTypeAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedTypeAnimator.cpp; sourceTree = "<group>"; };
                836FBCEB178C117F00B21A15 /* SVGAnimatedProperty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedProperty.cpp; sourceTree = "<group>"; };
+               837056881F50915000D93425 /* JSFileCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileCallback.cpp; sourceTree = "<group>"; };
+               837056891F50915000D93425 /* JSFileSystemEntryCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileSystemEntryCallback.h; sourceTree = "<group>"; };
+               8370568A1F50915000D93425 /* JSFileSystemEntryCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileSystemEntryCallback.cpp; sourceTree = "<group>"; };
+               8370568B1F50915000D93425 /* JSFileCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSFileCallback.h; sourceTree = "<group>"; };
+               8371AC361F509BDD00FBF284 /* FileSystemEntryCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FileSystemEntryCallback.idl; sourceTree = "<group>"; };
+               8371AC371F509BDD00FBF284 /* ErrorCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ErrorCallback.idl; sourceTree = "<group>"; };
+               8371AC381F509BDD00FBF284 /* FileCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FileCallback.idl; sourceTree = "<group>"; };
+               8371AC391F509BDD00FBF284 /* ErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ErrorCallback.h; sourceTree = "<group>"; };
                8372DB301A6780A800C697C5 /* DiagnosticLoggingResultType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiagnosticLoggingResultType.h; sourceTree = "<group>"; };
                83765F931DAC521800C06537 /* MouseEventInit.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MouseEventInit.idl; sourceTree = "<group>"; };
                83765F941DAC521800C06537 /* MouseEventInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseEventInit.h; sourceTree = "<group>"; };
                838EF5371DC149DA008F0C39 /* IDBTransactionMode.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBTransactionMode.idl; sourceTree = "<group>"; };
                838EF5391DC14A75008F0C39 /* JSIDBTransactionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBTransactionMode.cpp; sourceTree = "<group>"; };
                838EF53A1DC14A75008F0C39 /* JSIDBTransactionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBTransactionMode.h; sourceTree = "<group>"; };
+               838F86D71F509E6C00E8CFC5 /* FileSystemEntryCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemEntryCallback.h; sourceTree = "<group>"; };
+               838F86D81F509E6C00E8CFC5 /* FileCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileCallback.h; sourceTree = "<group>"; };
+               839947071F50B63800E9D86B /* DOMFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMFileSystem.h; sourceTree = "<group>"; };
+               839947081F50B63800E9D86B /* DOMFileSystem.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMFileSystem.idl; sourceTree = "<group>"; };
+               839947091F50B63800E9D86B /* DOMFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMFileSystem.cpp; sourceTree = "<group>"; };
+               8399470D1F50B6F300E9D86B /* JSDOMFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMFileSystem.cpp; sourceTree = "<group>"; };
+               8399470E1F50B6F300E9D86B /* JSDOMFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMFileSystem.h; sourceTree = "<group>"; };
                839A2F2B1E204A6D0039057E /* WebGLStateTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebGLStateTracker.cpp; sourceTree = "<group>"; };
                839A2F2C1E204A6D0039057E /* WebGLStateTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGLStateTracker.h; sourceTree = "<group>"; };
                839AAFEA1A0C0C8D00605F99 /* HTMLWBRElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLWBRElement.cpp; sourceTree = "<group>"; };
                83E959E11B8BC22B004D9385 /* NativeNodeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeNodeFilter.h; sourceTree = "<group>"; };
                83E9B3001DA5A51E00FFE8F6 /* JSScrollToOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSScrollToOptions.cpp; sourceTree = "<group>"; };
                83E9B3011DA5A51E00FFE8F6 /* JSScrollToOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScrollToOptions.h; sourceTree = "<group>"; };
+               83EE598B1F50958B003E8B30 /* JSErrorCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSErrorCallback.h; sourceTree = "<group>"; };
+               83EE598C1F50958B003E8B30 /* JSErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSErrorCallback.cpp; sourceTree = "<group>"; };
                83F570AD1C53268E007FD6CB /* JSXMLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSXMLDocument.h; sourceTree = "<group>"; };
                83F570AE1C53268E007FD6CB /* JSXMLDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLDocument.cpp; sourceTree = "<group>"; };
+               83FB33671F508A4E00986E54 /* FileSystemFileEntry.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FileSystemFileEntry.idl; sourceTree = "<group>"; };
+               83FB33681F508A4E00986E54 /* FileSystemEntry.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FileSystemEntry.idl; sourceTree = "<group>"; };
+               83FB33691F508A4E00986E54 /* FileSystemFileEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystemFileEntry.cpp; sourceTree = "<group>"; };
+               83FB336A1F508A4E00986E54 /* FileSystemDirectoryEntry.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FileSystemDirectoryEntry.idl; sourceTree = "<group>"; };
+               83FB336B1F508A4E00986E54 /* FileSystemDirectoryEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystemDirectoryEntry.cpp; sourceTree = "<group>"; };
+               83FB336C1F508A4E00986E54 /* FileSystemFileEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemFileEntry.h; sourceTree = "<group>"; };
+               83FB336D1F508A4E00986E54 /* FileSystemDirectoryEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemDirectoryEntry.h; sourceTree = "<group>"; };
+               83FB336E1F508A4E00986E54 /* FileSystemEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystemEntry.cpp; sourceTree = "<group>"; };
+               83FB336F1F508A4E00986E54 /* FileSystemEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemEntry.h; sourceTree = "<group>"; };
                83FE7CA31DA9F1650037237C /* EventModifierInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventModifierInit.h; sourceTree = "<group>"; };
                83FE7CA41DA9F1660037237C /* UIEventInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIEventInit.h; sourceTree = "<group>"; };
                83FE7CA51DA9F1660037237C /* UIEventInit.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = UIEventInit.idl; sourceTree = "<group>"; };
                                A83B790E0CCAFF97000B0825 /* CSS */,
                                5CE5D9A61DB899A800CE7A8D /* Encoding */,
                                CDA98DCD1601515C00FEA3B1 /* EncryptedMedia */,
+                               83FB33771F508CB500986E54 /* EntriesAPI */,
                                A83B79120CCB003F000B0825 /* Events */,
                                42A023FA1A39F13A00F722CF /* FetchAPI */,
                                89878576122CA1DA003AABDA /* FileAPI */,
                        path = beacon;
                        sourceTree = "<group>";
                };
+               83FB33651F508A1700986E54 /* entriesapi */ = {
+                       isa = PBXGroup;
+                       children = (
+                               839947091F50B63800E9D86B /* DOMFileSystem.cpp */,
+                               839947071F50B63800E9D86B /* DOMFileSystem.h */,
+                               839947081F50B63800E9D86B /* DOMFileSystem.idl */,
+                               8371AC391F509BDD00FBF284 /* ErrorCallback.h */,
+                               8371AC371F509BDD00FBF284 /* ErrorCallback.idl */,
+                               838F86D81F509E6C00E8CFC5 /* FileCallback.h */,
+                               8371AC381F509BDD00FBF284 /* FileCallback.idl */,
+                               83FB336B1F508A4E00986E54 /* FileSystemDirectoryEntry.cpp */,
+                               83FB336D1F508A4E00986E54 /* FileSystemDirectoryEntry.h */,
+                               83FB336A1F508A4E00986E54 /* FileSystemDirectoryEntry.idl */,
+                               83FB336E1F508A4E00986E54 /* FileSystemEntry.cpp */,
+                               83FB336F1F508A4E00986E54 /* FileSystemEntry.h */,
+                               83FB33681F508A4E00986E54 /* FileSystemEntry.idl */,
+                               838F86D71F509E6C00E8CFC5 /* FileSystemEntryCallback.h */,
+                               8371AC361F509BDD00FBF284 /* FileSystemEntryCallback.idl */,
+                               83FB33691F508A4E00986E54 /* FileSystemFileEntry.cpp */,
+                               83FB336C1F508A4E00986E54 /* FileSystemFileEntry.h */,
+                               83FB33671F508A4E00986E54 /* FileSystemFileEntry.idl */,
+                       );
+                       path = entriesapi;
+                       sourceTree = "<group>";
+               };
+               83FB33771F508CB500986E54 /* EntriesAPI */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8399470D1F50B6F300E9D86B /* JSDOMFileSystem.cpp */,
+                               8399470E1F50B6F300E9D86B /* JSDOMFileSystem.h */,
+                               83EE598C1F50958B003E8B30 /* JSErrorCallback.cpp */,
+                               83EE598B1F50958B003E8B30 /* JSErrorCallback.h */,
+                               837056881F50915000D93425 /* JSFileCallback.cpp */,
+                               8370568B1F50915000D93425 /* JSFileCallback.h */,
+                               833B9E2B1F508D8000E0E428 /* JSFileSystemDirectoryEntry.cpp */,
+                               833B9E2F1F508D8000E0E428 /* JSFileSystemDirectoryEntry.h */,
+                               833B9E2E1F508D8000E0E428 /* JSFileSystemEntry.cpp */,
+                               833B9E2A1F508D8000E0E428 /* JSFileSystemEntry.h */,
+                               8370568A1F50915000D93425 /* JSFileSystemEntryCallback.cpp */,
+                               837056891F50915000D93425 /* JSFileSystemEntryCallback.h */,
+                               833B9E2D1F508D8000E0E428 /* JSFileSystemFileEntry.cpp */,
+                               833B9E2C1F508D8000E0E428 /* JSFileSystemFileEntry.h */,
+                       );
+                       name = EntriesAPI;
+                       sourceTree = "<group>";
+               };
                89878576122CA1DA003AABDA /* FileAPI */ = {
                        isa = PBXGroup;
                        children = (
                                41380C1E1F34366000155FDA /* cache */,
                                57C7A6881E56946D00C67D71 /* credentials */,
                                CDA98DBD16014E0800FEA3B1 /* encryptedmedia */,
+                               83FB33651F508A1700986E54 /* entriesapi */,
                                41F54F7C1C50C4F600338488 /* fetch */,
                                518F4FE9194CA4B60081BAAE /* gamepad */,
                                971145FF14EF007900674FD9 /* geolocation */,
                                7AABA25A14BC613300AA9A11 /* DOMEditor.h in Headers */,
                                BC1BDF25156C18C7001C1243 /* DOMError.h in Headers */,
                                BC60D6E90D28D83400B9918F /* DOMException.h in Headers */,
+                               8399470C1F50B63E00E9D86B /* DOMFileSystem.h in Headers */,
                                2ED609BD1145B07100C8684E /* DOMFormData.h in Headers */,
                                A8185F3B09765766005826D9 /* DOMImplementation.h in Headers */,
                                E3C99A091DC3D41C00794AD3 /* DOMJITCheckDOM.h in Headers */,
                                B25599A50D00D8BA00BB825C /* EmptyClients.h in Headers */,
                                515BE1901D54F5FB00DD7C68 /* EmptyGamepadProvider.h in Headers */,
                                FD31609312B026F700C1A359 /* EqualPowerPanner.h in Headers */,
+                               8371AC3B1F509BE400FBF284 /* ErrorCallback.h in Headers */,
                                2ECF7AE210162B5800427DE7 /* ErrorEvent.h in Headers */,
                                85031B420A44EFC700F992E0 /* Event.h in Headers */,
                                4138D3351244054800323D33 /* EventContext.h in Headers */,
                                FD31609512B026F700C1A359 /* FFTConvolver.h in Headers */,
                                FD31609712B026F700C1A359 /* FFTFrame.h in Headers */,
                                976D6C81122B8A3D001FD1F7 /* File.h in Headers */,
+                               838F86DA1F509E7400E8CFC5 /* FileCallback.h in Headers */,
                                066C772B0AB603B700238CC4 /* FileChooser.h in Headers */,
                                976D6C83122B8A3D001FD1F7 /* FileError.h in Headers */,
                                5351D4B11DF916B4008010CD /* FileHandle.h in Headers */,
                                2EF1BFEB121C9F4200C27627 /* FileStream.h in Headers */,
                                2EF1BFF9121CB0CE00C27627 /* FileStreamClient.h in Headers */,
                                514B3F730C722047000530DF /* FileSystem.h in Headers */,
+                               83FB33711F508A5400986E54 /* FileSystemDirectoryEntry.h in Headers */,
+                               83FB33731F508A5800986E54 /* FileSystemEntry.h in Headers */,
+                               838F86DB1F509E7B00E8CFC5 /* FileSystemEntryCallback.h in Headers */,
+                               83FB33751F508A5B00986E54 /* FileSystemFileEntry.h in Headers */,
                                26C17A3E1491D2D400D12BA2 /* FileSystemIOS.h in Headers */,
                                BC5EB69F0E81DAEB00B25965 /* FillLayer.h in Headers */,
                                845E72F80FD261EE00A87D79 /* Filter.h in Headers */,
                                40ECAE7E16B8B67200C36103 /* JSDOMError.h in Headers */,
                                BC60D7C10D29A46300B9918F /* JSDOMException.h in Headers */,
                                7C45C9D61E3FCBF800AAB558 /* JSDOMExceptionHandling.h in Headers */,
+                               839947101F50B6FA00E9D86B /* JSDOMFileSystem.h in Headers */,
                                2E0888D51148848A00AF4265 /* JSDOMFormData.h in Headers */,
                                E1C36C030EB076D6007410BC /* JSDOMGlobalObject.h in Headers */,
                                7C2BDD3E17C7F98C0038FF15 /* JSDOMGlobalObjectTask.h in Headers */,
                                5750A9821E6A150800705C4A /* JSEcKeyParams.h in Headers */,
                                65DF31FA09D1CC60000BE325 /* JSElement.h in Headers */,
                                ADEC78F818EE5308001315C2 /* JSElementCustom.h in Headers */,
+                               83EE598F1F50958E003E8B30 /* JSErrorCallback.h in Headers */,
                                2ECF7ADD10162B3800427DE7 /* JSErrorEvent.h in Headers */,
                                F3D461491161D53200CA0D09 /* JSErrorHandler.h in Headers */,
                                14E8378E09F85D4F00B85AE4 /* JSEvent.h in Headers */,
                                7CE1917B1F2ABE7100272F78 /* JSFetchRequestRedirect.h in Headers */,
                                8E4C96DD1AD4483500365A50 /* JSFetchResponse.h in Headers */,
                                BC00F0150E0A189500FD04E3 /* JSFile.h in Headers */,
+                               8370568E1F50915700D93425 /* JSFileCallback.h in Headers */,
                                2E3BC0CB117D3E0800B9409A /* JSFileError.h in Headers */,
                                BC00F0170E0A189500FD04E3 /* JSFileList.h in Headers */,
                                2E94F43C119207DA00B7F75D /* JSFileReader.h in Headers */,
                                898785F5122E1EAC003AABDA /* JSFileReaderSync.h in Headers */,
+                               833B9E321F508D8500E0E428 /* JSFileSystemDirectoryEntry.h in Headers */,
+                               833B9E341F508D8500E0E428 /* JSFileSystemEntry.h in Headers */,
+                               837056901F50915C00D93425 /* JSFileSystemEntryCallback.h in Headers */,
+                               833B9E361F508D8500E0E428 /* JSFileSystemFileEntry.h in Headers */,
                                B6D9D27B14EAC0860090D75E /* JSFocusEvent.h in Headers */,
                                C280833F1C6DC26F001451B6 /* JSFontFace.h in Headers */,
                                1C24EEA91C72A7B40080F8FC /* JSFontFaceSet.h in Headers */,
                                7AABA25914BC613300AA9A11 /* DOMEditor.cpp in Sources */,
                                BC1BDF24156C1883001C1243 /* DOMError.cpp in Sources */,
                                978D07BE145A0F6C0096908D /* DOMException.cpp in Sources */,
+                               8399470B1F50B63E00E9D86B /* DOMFileSystem.cpp in Sources */,
                                2ED609BC1145B07100C8684E /* DOMFormData.cpp in Sources */,
                                A8185F3E09765766005826D9 /* DOMImplementation.cpp in Sources */,
                                E398FC241DC32A20003C4684 /* DOMJITHelpers.cpp in Sources */,
                                C57FEDE11212EE9C0097BE65 /* FileSystem.cpp in Sources */,
                                5160306C0CC4362300C8AC25 /* FileSystemCF.cpp in Sources */,
                                514B3F760C722055000530DF /* FileSystemCocoa.mm in Sources */,
+                               83FB33701F508A5400986E54 /* FileSystemDirectoryEntry.cpp in Sources */,
+                               83FB33721F508A5800986E54 /* FileSystemEntry.cpp in Sources */,
+                               83FB33741F508A5B00986E54 /* FileSystemFileEntry.cpp in Sources */,
                                26C17A3F1491D2D400D12BA2 /* FileSystemIOS.mm in Sources */,
                                A1CC11641E493D0100EFA69C /* FileSystemMac.mm in Sources */,
                                5160300B0CC4251200C8AC25 /* FileSystemPOSIX.cpp in Sources */,
                                40ECAE8116B8B68A00C36103 /* JSDOMError.cpp in Sources */,
                                BC60D7C00D29A46300B9918F /* JSDOMException.cpp in Sources */,
                                7C45C9D21E3EFE0800AAB558 /* JSDOMExceptionHandling.cpp in Sources */,
+                               8399470F1F50B6FA00E9D86B /* JSDOMFileSystem.cpp in Sources */,
                                2E0888D41148848A00AF4265 /* JSDOMFormData.cpp in Sources */,
                                E1C36CBD0EB08062007410BC /* JSDOMGlobalObject.cpp in Sources */,
                                7C2BDD3D17C7F98C0038FF15 /* JSDOMGlobalObjectTask.cpp in Sources */,
                                65DF31F909D1CC60000BE325 /* JSElement.cpp in Sources */,
                                BC2ED5550C6B9BD300920BFF /* JSElementCustom.cpp in Sources */,
                                E3975B7A1EC9AF3F00847717 /* JSElementDOMJIT.cpp in Sources */,
+                               83EE598E1F50958E003E8B30 /* JSErrorCallback.cpp in Sources */,
                                2ECF7ADC10162B3800427DE7 /* JSErrorEvent.cpp in Sources */,
                                F3D461481161D53200CA0D09 /* JSErrorHandler.cpp in Sources */,
                                14E8378409F85D1C00B85AE4 /* JSEvent.cpp in Sources */,
                                7CE1917A1F2ABE7100272F78 /* JSFetchRequestRedirect.cpp in Sources */,
                                8E4C96DC1AD4483500365A50 /* JSFetchResponse.cpp in Sources */,
                                BC00F0140E0A189500FD04E3 /* JSFile.cpp in Sources */,
+                               8370568D1F50915500D93425 /* JSFileCallback.cpp in Sources */,
                                2E3BC0CA117D3E0800B9409A /* JSFileError.cpp in Sources */,
                                BC00F0160E0A189500FD04E3 /* JSFileList.cpp in Sources */,
                                2E94F43B119207DA00B7F75D /* JSFileReader.cpp in Sources */,
                                898785F4122E1EAC003AABDA /* JSFileReaderSync.cpp in Sources */,
+                               833B9E311F508D8500E0E428 /* JSFileSystemDirectoryEntry.cpp in Sources */,
+                               833B9E331F508D8500E0E428 /* JSFileSystemEntry.cpp in Sources */,
+                               8370568F1F50915900D93425 /* JSFileSystemEntryCallback.cpp in Sources */,
+                               833B9E351F508D8500E0E428 /* JSFileSystemFileEntry.cpp in Sources */,
                                B6D9D27C14EAC0860090D75E /* JSFocusEvent.cpp in Sources */,
                                C28083401C6DC275001451B6 /* JSFontFace.cpp in Sources */,
                                1C24EEA81C72A7B40080F8FC /* JSFontFaceSet.cpp in Sources */,