// GENERATED CONTENT - DO NOT EDIT
// Content of this file was automatically extracted from the File and Directory Entries API spec.
// See https://wicg.github.io/entries-api/

partial interface File {
    readonly attribute USVString webkitRelativePath;
};

partial interface HTMLInputElement {
    attribute boolean webkitdirectory;
    readonly attribute FrozenArray<FileSystemEntry> webkitEntries;
};

partial interface DataTransferItem {
    FileSystemEntry? webkitGetAsEntry();
};

callback ErrorCallback = void (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 FileSystemEntryCallback = void (FileSystemEntry entry);

interface FileSystemDirectoryReader {
    void readEntries(FileSystemEntriesCallback successCallback,
                     optional ErrorCallback errorCallback);
};
callback FileSystemEntriesCallback = void (sequence<FileSystemEntry> entries);

interface FileSystemFileEntry : FileSystemEntry {
    void file(FileCallback successCallback,
              optional ErrorCallback errorCallback);
};
callback FileCallback = void (File file);

interface FileSystem {
    readonly attribute USVString name;
    readonly attribute FileSystemDirectoryEntry root;
};
