diff options
Diffstat (limited to 'WebKit/chromium/src/AsyncFileSystemChromium.cpp')
-rw-r--r-- | WebKit/chromium/src/AsyncFileSystemChromium.cpp | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/WebKit/chromium/src/AsyncFileSystemChromium.cpp b/WebKit/chromium/src/AsyncFileSystemChromium.cpp index 08fcea6..db65bbd 100644 --- a/WebKit/chromium/src/AsyncFileSystemChromium.cpp +++ b/WebKit/chromium/src/AsyncFileSystemChromium.cpp @@ -33,9 +33,11 @@ #if ENABLE(FILE_SYSTEM) #include "AsyncFileSystemCallbacks.h" -#include "FileSystem.h" +#include "AsyncFileWriterChromium.h" +#include "WebFileInfo.h" #include "WebFileSystem.h" #include "WebFileSystemCallbacksImpl.h" +#include "WebFileWriter.h" #include "WebKit.h" #include "WebKitClient.h" @@ -43,6 +45,11 @@ namespace WebCore { +bool AsyncFileSystem::isAvailable() +{ + return true; +} + AsyncFileSystemChromium::AsyncFileSystemChromium(const String& rootPath) : AsyncFileSystem(rootPath) , m_webFileSystem(WebKit::webKitClient()->fileSystem()) @@ -99,6 +106,65 @@ void AsyncFileSystemChromium::readDirectory(const String& path, PassOwnPtr<Async m_webFileSystem->readDirectory(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); } +class FileWriterHelperCallbacks : public WebKit::WebFileSystemCallbacks { +public: + FileWriterHelperCallbacks(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks) + : m_client(client) + , m_path(path) + , m_webFileSystem(webFileSystem) + , m_callbacks(callbacks) + { + } + + virtual void didSucceed() + { + ASSERT_NOT_REACHED(); + delete this; + } + virtual void didReadMetadata(const WebKit::WebFileInfo& info) + { + ASSERT(m_callbacks); + if (info.type != WebKit::WebFileInfo::TypeFile || info.length < 0) + m_callbacks->didFail(WebKit::WebFileErrorInvalidState); + else { + OwnPtr<AsyncFileWriterChromium> asyncFileWriterChromium = adoptPtr(new AsyncFileWriterChromium(m_client)); + OwnPtr<WebKit::WebFileWriter> webFileWriter = adoptPtr(m_webFileSystem->createFileWriter(m_path, asyncFileWriterChromium.get())); + asyncFileWriterChromium->setWebFileWriter(webFileWriter.release()); + m_callbacks->didCreateFileWriter(asyncFileWriterChromium.release(), info.length); + } + delete this; + } + + virtual void didReadDirectory(const WebKit::WebVector<WebKit::WebFileSystemEntry>& entries, bool hasMore) + { + ASSERT_NOT_REACHED(); + delete this; + } + virtual void didOpenFileSystem(const WebKit::WebString& name, const WebKit::WebString& rootPath) + { + ASSERT_NOT_REACHED(); + delete this; + } + + virtual void didFail(WebKit::WebFileError error) + { + ASSERT(m_callbacks); + m_callbacks->didFail(error); + delete this; + } + +private: + AsyncFileWriterClient* m_client; + String m_path; + WebKit::WebFileSystem* m_webFileSystem; + OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks; +}; + +void AsyncFileSystemChromium::createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) +{ + m_webFileSystem->readMetadata(path, new FileWriterHelperCallbacks(client, path, m_webFileSystem, callbacks)); +} + } // namespace WebCore #endif |