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) 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ScriptExecutionContext.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/fileapi/FileError.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/VoidCallback.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/AsyncFileSystem.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/FileMetadata.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/AsyncFileWriter.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DOMFilePath.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DOMFileSystemBase.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DirectoryEntry.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/DirectoryReader.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/EntriesCallback.h" 45e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "modules/filesystem/Entry.h" 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/EntryCallback.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/ErrorCallback.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileEntry.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileSystemCallback.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileWriterBase.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileWriterBaseCallback.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/Metadata.h" 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/MetadataCallback.h" 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FileSystemCallbacksBase::FileSystemCallbacksBase(PassRefPtr<ErrorCallback> errorCallback) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_errorCallback(errorCallback) 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch , m_blockUntilCompletion(false) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FileSystemCallbacksBase::~FileSystemCallbacksBase() 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FileSystemCallbacksBase::didFail(int code) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_errorCallback) { 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_errorCallback->handleEvent(FileError::create(static_cast<FileError::ErrorCode>(code)).get()); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_errorCallback.clear(); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// EntryCallbacks ------------------------------------------------------------- 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<EntryCallbacks> EntryCallbacks::create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new EntryCallbacks(successCallback, errorCallback, fileSystem, expectedPath, isDirectory)); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)EntryCallbacks::EntryCallbacks(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_fileSystem(fileSystem) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_expectedPath(expectedPath) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isDirectory(isDirectory) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntryCallbacks::didSucceed() 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) { 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_isDirectory) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(DirectoryEntry::create(m_fileSystem, m_expectedPath).get()); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(FileEntry::create(m_fileSystem, m_expectedPath).get()); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// EntriesCallbacks ----------------------------------------------------------- 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<EntriesCallbacks> EntriesCallbacks::create(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, directoryReader, basePath)); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)EntriesCallbacks::EntriesCallbacks(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_directoryReader(directoryReader) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_basePath(basePath) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_directoryReader); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntriesCallbacks::didReadDirectoryEntry(const String& name, bool isDirectory) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isDirectory) 121e6d4491e48613634a83c1957c72759da80987961Ben Murdoch m_entries.append(DirectoryEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 123e6d4491e48613634a83c1957c72759da80987961Ben Murdoch m_entries.append(FileEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void EntriesCallbacks::didReadDirectoryEntries(bool hasMore) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_directoryReader->setHasMoreEntries(hasMore); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 130e6d4491e48613634a83c1957c72759da80987961Ben Murdoch m_successCallback->handleEvent(m_entries); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FileSystemCallbacks -------------------------------------------------------- 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<FileSystemCallbacks> FileSystemCallbacks::create(PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* scriptExecutionContext, FileSystemType type) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, scriptExecutionContext, type)); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FileSystemCallbacks::FileSystemCallbacks(PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, FileSystemType type) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scriptExecutionContext(context) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_type(type) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FileSystemCallbacks::didOpenFileSystem(const String& name, const KURL& rootURL, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) { 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(asyncFileSystem); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DOMFileSystem> fileSystem = DOMFileSystem::create(m_scriptExecutionContext.get(), name, m_type, rootURL, asyncFileSystem); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(fileSystem.get()); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scriptExecutionContext.clear(); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ResolveURICallbacks -------------------------------------------------------- 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace { 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ErrorCallbackWrapper : public ErrorCallback { 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<ErrorCallbackWrapper> create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new ErrorCallbackWrapper(successCallback, errorCallback, root, filePath)); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool handleEvent(FileError* error) 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(error); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (error->code() == FileError::TYPE_MISMATCH_ERR) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_root->getFile(m_filePath, Dictionary(), m_successCallback, m_errorCallback); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_errorCallback) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_errorCallback->handleEvent(error); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ErrorCallbackWrapper(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_successCallback(successCallback) 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_errorCallback(errorCallback) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_root(root) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_filePath(filePath) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_root); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<EntryCallback> m_successCallback; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<ErrorCallback> m_errorCallback; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DirectoryEntry> m_root; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_filePath; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<ResolveURICallbacks> ResolveURICallbacks::create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* scriptExecutionContext, FileSystemType type, const String& filePath) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, scriptExecutionContext, type, filePath)); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ResolveURICallbacks::ResolveURICallbacks(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, FileSystemType type, const String& filePath) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scriptExecutionContext(context) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_type(type) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_filePath(filePath) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ResolveURICallbacks::didOpenFileSystem(const String& name, const KURL& rootURL, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(asyncFileSystem); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DirectoryEntry> root = DOMFileSystem::create(m_scriptExecutionContext.get(), name, m_type, rootURL, asyncFileSystem)->root(); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) root->getDirectory(m_filePath, Dictionary(), m_successCallback, ErrorCallbackWrapper::create(m_successCallback, m_errorCallback, root, m_filePath)); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// MetadataCallbacks ---------------------------------------------------------- 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<MetadataCallbacks> MetadataCallbacks::create(PassRefPtr<MetadataCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new MetadataCallbacks(successCallback, errorCallback)); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)MetadataCallbacks::MetadataCallbacks(PassRefPtr<MetadataCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(Metadata::create(metadata).get()); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FileWriterBaseCallbacks ---------------------------------------------------------- 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<FileWriterBaseCallbacks> FileWriterBaseCallbacks::create(PassRefPtr<FileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback)); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FileWriterBaseCallbacks::FileWriterBaseCallbacks(PassRefPtr<FileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_fileWriter(fileWriter) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<AsyncFileWriter> asyncFileWriter, long long length) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fileWriter->initialize(asyncFileWriter, length); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(m_fileWriter.release().get()); 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// VoidCallbacks -------------------------------------------------------------- 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<VoidCallbacks> VoidCallbacks::create(PassRefPtr<VoidCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new VoidCallbacks(successCallback, errorCallback)); 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VoidCallbacks::VoidCallbacks(PassRefPtr<VoidCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : FileSystemCallbacksBase(errorCallback) 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_successCallback(successCallback) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void VoidCallbacks::didSucceed() 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_successCallback) 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback->handleEvent(); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_successCallback.clear(); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace 282