diff options
Diffstat (limited to 'Source/WebCore/fileapi/FileSystemCallbacks.cpp')
-rw-r--r-- | Source/WebCore/fileapi/FileSystemCallbacks.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Source/WebCore/fileapi/FileSystemCallbacks.cpp b/Source/WebCore/fileapi/FileSystemCallbacks.cpp index 966337b..69fa53a 100644 --- a/Source/WebCore/fileapi/FileSystemCallbacks.cpp +++ b/Source/WebCore/fileapi/FileSystemCallbacks.cpp @@ -192,6 +192,65 @@ void FileSystemCallbacks::didOpenFileSystem(const String& name, PassOwnPtr<Async m_successCallback.clear(); } +// ResolveURICallbacks -------------------------------------------------------- + +namespace { + +class ErrorCallbackWrapper : public ErrorCallback { +public: + static PassRefPtr<ErrorCallbackWrapper> create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) + { + return adoptRef(new ErrorCallbackWrapper(successCallback, errorCallback, root, filePath)); + } + + virtual bool handleEvent(FileError* error) + { + ASSERT(error); + if (error->code() == FileError::TYPE_MISMATCH_ERR) + m_root->getFile(m_filePath, 0, m_successCallback, m_errorCallback); + else if (m_errorCallback) + m_errorCallback->handleEvent(error); + return true; + } + +private: + ErrorCallbackWrapper(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) + : m_successCallback(successCallback) + , m_errorCallback(errorCallback) + , m_root(root) + , m_filePath(filePath) + { + ASSERT(m_root); + } + + RefPtr<EntryCallback> m_successCallback; + RefPtr<ErrorCallback> m_errorCallback; + RefPtr<DirectoryEntry> m_root; + String m_filePath; +}; + +} // namespace + +PassOwnPtr<ResolveURICallbacks> ResolveURICallbacks::create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* scriptExecutionContext, const String& filePath) +{ + return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, scriptExecutionContext, filePath)); +} + +ResolveURICallbacks::ResolveURICallbacks(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, const String& filePath) + : FileSystemCallbacksBase(errorCallback) + , m_successCallback(successCallback) + , m_scriptExecutionContext(context) + , m_filePath(filePath) +{ +} + +void ResolveURICallbacks::didOpenFileSystem(const String& name, PassOwnPtr<AsyncFileSystem> asyncFileSystem) +{ + ASSERT(asyncFileSystem); + RefPtr<DirectoryEntry> root = DOMFileSystem::create(m_scriptExecutionContext.get(), name, asyncFileSystem.leakPtr())->root(); + root->getDirectory(m_filePath, 0, m_successCallback, ErrorCallbackWrapper::create(m_successCallback, m_errorCallback, root, m_filePath)); +} + // MetadataCallbacks ---------------------------------------------------------- PassOwnPtr<MetadataCallbacks> MetadataCallbacks::create(PassRefPtr<MetadataCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) |