diff options
Diffstat (limited to 'Source/WebCore/fileapi/DOMFileSystem.cpp')
-rw-r--r-- | Source/WebCore/fileapi/DOMFileSystem.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/Source/WebCore/fileapi/DOMFileSystem.cpp b/Source/WebCore/fileapi/DOMFileSystem.cpp index c1710cd..01d56d5 100644 --- a/Source/WebCore/fileapi/DOMFileSystem.cpp +++ b/Source/WebCore/fileapi/DOMFileSystem.cpp @@ -39,6 +39,7 @@ #include "ErrorCallback.h" #include "File.h" #include "FileEntry.h" +#include "FileMetadata.h" #include "FileSystemCallbacks.h" #include "FileWriter.h" #include "FileWriterBaseCallback.h" @@ -111,12 +112,46 @@ void DOMFileSystem::createWriter(const FileEntry* fileEntry, PassRefPtr<FileWrit m_asyncFileSystem->createWriter(fileWriter.get(), platformPath, callbacks.release()); } -void DOMFileSystem::createFile(const FileEntry* fileEntry, PassRefPtr<FileCallback> successCallback, PassRefPtr<ErrorCallback>) +namespace { + +class GetPathCallback : public FileSystemCallbacksBase { +public: + static PassOwnPtr<GetPathCallback> create(PassRefPtr<DOMFileSystem> filesystem, const String& path, PassRefPtr<FileCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) + { + return adoptPtr(new GetPathCallback(filesystem, path, successCallback, errorCallback)); + } + + virtual void didReadMetadata(const FileMetadata& metadata) + { + if (!metadata.platformPath.isEmpty()) + m_path = metadata.platformPath; + + m_filesystem->scheduleCallback(m_successCallback.release(), File::create(m_path)); + } + +private: + GetPathCallback(PassRefPtr<DOMFileSystem> filesystem, const String& path, PassRefPtr<FileCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) + : FileSystemCallbacksBase(errorCallback) + , m_filesystem(filesystem) + , m_path(path) + , m_successCallback(successCallback) + { + } + + RefPtr<DOMFileSystem> m_filesystem; + String m_path; + RefPtr<FileCallback> m_successCallback; +}; + +} // namespace + +void DOMFileSystem::createFile(const FileEntry* fileEntry, PassRefPtr<FileCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) { String platformPath = m_asyncFileSystem->virtualToPlatformPath(fileEntry->fullPath()); - scheduleCallback(successCallback, File::create(platformPath)); + + m_asyncFileSystem->readMetadata(platformPath, GetPathCallback::create(this, platformPath, successCallback, errorCallback)); } -} // namespace +} // namespace WebCore #endif // ENABLE(FILE_SYSTEM) |