15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileSystemCallbacks.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ExecutionContext.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/fileapi/FileError.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/VoidCallback.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DOMFilePath.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DOMFileSystemBase.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DirectoryEntry.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DirectoryReader.h" 413c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "modules/filesystem/Entry.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/EntryCallback.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/ErrorCallback.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileEntry.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileSystemCallback.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileWriterBase.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileWriterBaseCallback.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/Metadata.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/MetadataCallback.h" 501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FileMetadata.h" 51e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "public/platform/WebFileWriter.h" 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)FileSystemCallbacksBase::FileSystemCallbacksBase(PassOwnPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_errorCallback(errorCallback) 578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) , m_fileSystem(fileSystem) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (m_fileSystem) 608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_fileSystem->addPendingCallbacks(); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FileSystemCallbacksBase::~FileSystemCallbacksBase() 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (m_fileSystem) 668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_fileSystem->removePendingCallbacks(); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FileSystemCallbacksBase::didFail(int code) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_errorCallback) { 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_errorCallback->handleEvent(FileError::create(static_cast<FileError::ErrorCode>(code)).get()); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_errorCallback.clear(); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// EntryCallbacks ------------------------------------------------------------- 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> EntryCallbacks::create(PassOwnPtr<EntryCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new EntryCallbacks(successCallback, errorCallback, fileSystem, expectedPath, isDirectory)); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)EntryCallbacks::EntryCallbacks(PassOwnPtr<EntryCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, fileSystem.get()) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_expectedPath(expectedPath) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isDirectory(isDirectory) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntryCallbacks::didSucceed() 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_isDirectory) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(DirectoryEntry::create(m_fileSystem, m_expectedPath).get()); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(FileEntry::create(m_fileSystem, m_expectedPath).get()); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// EntriesCallbacks ----------------------------------------------------------- 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> EntriesCallbacks::create(PassOwnPtr<EntriesCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, directoryReader, basePath)); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 110a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)EntriesCallbacks::EntriesCallbacks(PassOwnPtr<EntriesCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 1118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, directoryReader->filesystem()) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_directoryReader(directoryReader) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_basePath(basePath) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_directoryReader); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntriesCallbacks::didReadDirectoryEntry(const String& name, bool isDirectory) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isDirectory) 1223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch m_entries.append(DirectoryEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1243c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch m_entries.append(FileEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntriesCallbacks::didReadDirectoryEntries(bool hasMore) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_directoryReader->setHasMoreEntries(hasMore); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 1313c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch m_successCallback->handleEvent(m_entries); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FileSystemCallbacks -------------------------------------------------------- 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(PassOwnPtr<FileSystemCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* executionContext, FileSystemType type) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, executionContext, type)); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 141a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)FileSystemCallbacks::FileSystemCallbacks(PassOwnPtr<FileSystemCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context, FileSystemType type) 1428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, 0) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 1441e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) , m_executionContext(context) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_type(type) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1498abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& rootURL) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) { 1521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) RefPtr<DOMFileSystem> fileSystem = DOMFileSystem::create(m_executionContext.get(), name, m_type, rootURL); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(fileSystem.get()); 1541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_executionContext.clear(); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ResolveURICallbacks -------------------------------------------------------- 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(PassOwnPtr<EntryCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* executionContext) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, executionContext)); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)ResolveURICallbacks::ResolveURICallbacks(PassOwnPtr<EntryCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, ExecutionContext* context) 1678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, 0) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 1691e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) , m_executionContext(context) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1739bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)void ResolveURICallbacks::didResolveURL(const String& name, const KURL& rootURL, FileSystemType type, const String& filePath, bool isDirectory) 1749bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles){ 1751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) RefPtr<DOMFileSystem> filesystem = DOMFileSystem::create(m_executionContext.get(), name, type, rootURL); 1769bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) RefPtr<DirectoryEntry> root = filesystem->root(); 1779bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1789bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) String absolutePath; 1799bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (!DOMFileSystemBase::pathToAbsolutePath(type, root.get(), filePath, absolutePath)) { 1809bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_errorCallback->handleEvent(FileError::create(FileError::INVALID_MODIFICATION_ERR).get()); 1819bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_errorCallback.clear(); 1829bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) return; 1839bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 1849bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1859bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (isDirectory) 1869bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_successCallback->handleEvent(DirectoryEntry::create(filesystem, absolutePath).get()); 1879bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) else 1889bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_successCallback->handleEvent(FileEntry::create(filesystem, absolutePath).get()); 1899bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) m_successCallback.clear(); 1909bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)} 1919bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// MetadataCallbacks ---------------------------------------------------------- 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 194a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> MetadataCallbacks::create(PassOwnPtr<MetadataCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 19651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new MetadataCallbacks(successCallback, errorCallback, fileSystem)); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 199a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)MetadataCallbacks::MetadataCallbacks(PassOwnPtr<MetadataCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem) 2008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, fileSystem) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(Metadata::create(metadata).get()); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FileWriterBaseCallbacks ---------------------------------------------------------- 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 214a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(PassRefPtr<FileWriterBase> fileWriter, PassOwnPtr<FileWriterBaseCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 21651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback)); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 219a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)FileWriterBaseCallbacks::FileWriterBaseCallbacks(PassRefPtr<FileWriterBase> fileWriter, PassOwnPtr<FileWriterBaseCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback) 2208abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, 0) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_fileWriter(fileWriter) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 22651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<blink::WebFileWriter> fileWriter, long long length) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 228e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_fileWriter->initialize(fileWriter, length); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(m_fileWriter.release().get()); 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// VoidCallbacks -------------------------------------------------------------- 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 236a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassOwnPtr<AsyncFileSystemCallbacks> VoidCallbacks::create(PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 23851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adoptPtr(new VoidCallbacks(successCallback, errorCallback, fileSystem)); 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 241a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)VoidCallbacks::VoidCallbacks(PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<ErrorCallback> errorCallback, DOMFileSystemBase* fileSystem) 2428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback, fileSystem) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void VoidCallbacks::didSucceed() 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace 255