| Index: third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
|
| diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
|
| index 937f0573072b448ed9587ff47bd1b0d4c726c1a5..39a169c1a3b296604e588ae11255984715ed2636 100644
|
| --- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
|
| +++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
|
| @@ -31,6 +31,7 @@
|
| #ifndef FileSystemCallbacks_h
|
| #define FileSystemCallbacks_h
|
|
|
| +#include "core/fileapi/FileError.h"
|
| #include "modules/filesystem/EntriesCallback.h"
|
| #include "platform/AsyncFileSystemCallbacks.h"
|
| #include "platform/FileSystemType.h"
|
| @@ -42,10 +43,10 @@ namespace blink {
|
|
|
| class DOMFileSystemBase;
|
| class DirectoryReaderBase;
|
| +class BlobCallback;
|
| class EntriesCallback;
|
| class EntryCallback;
|
| class ErrorCallback;
|
| -class BlobCallback;
|
| class FileMetadata;
|
| class FileSystemCallback;
|
| class FileWriterBase;
|
| @@ -54,6 +55,16 @@ class MetadataCallback;
|
| class ExecutionContext;
|
| class VoidCallback;
|
|
|
| +// Passed to DOMFileSystem implementations that may report errors. Subclasses
|
| +// may capture the error for throwing on return to script (for synchronous APIs)
|
| +// or call an actual script callback (for asynchronous APIs).
|
| +class ErrorCallbackBase : public GarbageCollectedFinalized<ErrorCallbackBase> {
|
| +public:
|
| + virtual ~ErrorCallbackBase() { }
|
| + DEFINE_INLINE_VIRTUAL_TRACE() { }
|
| + virtual void invoke(FileError::ErrorCode) = 0;
|
| +};
|
| +
|
| class FileSystemCallbacksBase : public AsyncFileSystemCallbacks {
|
| public:
|
| ~FileSystemCallbacksBase() override;
|
| @@ -64,17 +75,20 @@ public:
|
| // Other callback methods are implemented by each subclass.
|
|
|
| protected:
|
| - FileSystemCallbacksBase(ErrorCallback*, DOMFileSystemBase*, ExecutionContext*);
|
| + FileSystemCallbacksBase(ErrorCallbackBase*, DOMFileSystemBase*, ExecutionContext*);
|
|
|
| bool shouldScheduleCallback() const;
|
|
|
| template <typename CB, typename CBArg>
|
| + void invokeOrScheduleCallback(CB*, CBArg);
|
| +
|
| + template <typename CB, typename CBArg>
|
| void handleEventOrScheduleCallback(CB*, CBArg*);
|
|
|
| template <typename CB>
|
| void handleEventOrScheduleCallback(CB*);
|
|
|
| - Persistent<ErrorCallback> m_errorCallback;
|
| + Persistent<ErrorCallbackBase> m_errorCallback;
|
| Persistent<DOMFileSystemBase> m_fileSystem;
|
| Persistent<ExecutionContext> m_executionContext;
|
| int m_asyncOperationId;
|
| @@ -82,13 +96,26 @@ protected:
|
|
|
| // Subclasses ----------------------------------------------------------------
|
|
|
| +// Wraps a script-provided callback for use in DOMFileSystem operations.
|
| +class ScriptErrorCallback final : public ErrorCallbackBase {
|
| +public:
|
| + static ScriptErrorCallback* wrap(ErrorCallback*);
|
| + virtual ~ScriptErrorCallback() { }
|
| + DECLARE_VIRTUAL_TRACE();
|
| +
|
| + void invoke(FileError::ErrorCode) override;
|
| +private:
|
| + explicit ScriptErrorCallback(ErrorCallback*);
|
| + Member<ErrorCallback> m_callback;
|
| +};
|
| +
|
| class EntryCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
|
| void didSucceed() override;
|
|
|
| private:
|
| - EntryCallbacks(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
|
| + EntryCallbacks(EntryCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
|
| Persistent<EntryCallback> m_successCallback;
|
| String m_expectedPath;
|
| bool m_isDirectory;
|
| @@ -96,12 +123,12 @@ private:
|
|
|
| class EntriesCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallbackBase*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
|
| void didReadDirectoryEntry(const String& name, bool isDirectory) override;
|
| void didReadDirectoryEntries(bool hasMore) override;
|
|
|
| private:
|
| - EntriesCallbacks(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
|
| + EntriesCallbacks(EntriesCallback*, ErrorCallbackBase*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
|
| Persistent<EntriesCallback> m_successCallback;
|
| Persistent<DirectoryReaderBase> m_directoryReader;
|
| String m_basePath;
|
| @@ -110,53 +137,53 @@ private:
|
|
|
| class FileSystemCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallbackBase*, ExecutionContext*, FileSystemType);
|
| void didOpenFileSystem(const String& name, const KURL& rootURL) override;
|
|
|
| private:
|
| - FileSystemCallbacks(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
|
| + FileSystemCallbacks(FileSystemCallback*, ErrorCallbackBase*, ExecutionContext*, FileSystemType);
|
| Persistent<FileSystemCallback> m_successCallback;
|
| FileSystemType m_type;
|
| };
|
|
|
| class ResolveURICallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| void didResolveURL(const String& name, const KURL& rootURL, FileSystemType, const String& filePath, bool isDirectry) override;
|
|
|
| private:
|
| - ResolveURICallbacks(EntryCallback*, ErrorCallback*, ExecutionContext*);
|
| + ResolveURICallbacks(EntryCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| Persistent<EntryCallback> m_successCallback;
|
| };
|
|
|
| class MetadataCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
|
| void didReadMetadata(const FileMetadata&) override;
|
|
|
| private:
|
| - MetadataCallbacks(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
|
| + MetadataCallbacks(MetadataCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
|
| Persistent<MetadataCallback> m_successCallback;
|
| };
|
|
|
| class FileWriterBaseCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| void didCreateFileWriter(std::unique_ptr<WebFileWriter>, long long length) override;
|
|
|
| private:
|
| - FileWriterBaseCallbacks(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
|
| + FileWriterBaseCallbacks(FileWriterBase*, FileWriterBaseCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| Persistent<FileWriterBase> m_fileWriter;
|
| Persistent<FileWriterBaseCallback> m_successCallback;
|
| };
|
|
|
| class SnapshotFileCallback final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| virtual void didCreateSnapshotFile(const FileMetadata&, PassRefPtr<BlobDataHandle> snapshot);
|
|
|
| private:
|
| - SnapshotFileCallback(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
|
| + SnapshotFileCallback(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallbackBase*, ExecutionContext*);
|
| String m_name;
|
| KURL m_url;
|
| Persistent<BlobCallback> m_successCallback;
|
| @@ -164,11 +191,11 @@ private:
|
|
|
| class VoidCallbacks final : public FileSystemCallbacksBase {
|
| public:
|
| - static std::unique_ptr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
|
| + static std::unique_ptr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
|
| void didSucceed() override;
|
|
|
| private:
|
| - VoidCallbacks(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
|
| + VoidCallbacks(VoidCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
|
| Persistent<VoidCallback> m_successCallback;
|
| };
|
|
|
|
|