1e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block/* 2e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 3e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 4e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Redistribution and use in source and binary forms, with or without 5e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * modification, are permitted provided that the following conditions are 6e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * met: 7e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 8e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Redistributions of source code must retain the above copyright 9e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * notice, this list of conditions and the following disclaimer. 10e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Redistributions in binary form must reproduce the above 11e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * copyright notice, this list of conditions and the following disclaimer 12e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * in the documentation and/or other materials provided with the 13e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * distribution. 14e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Neither the name of Google Inc. nor the names of its 15e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * contributors may be used to endorse or promote products derived from 16e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * this software without specific prior written permission. 17e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 18e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block */ 30e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 31e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "config.h" 32e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "FileSystemCallbacks.h" 33e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 34e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(FILE_SYSTEM) 35e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "AsyncFileSystem.h" 37bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "AsyncFileWriter.h" 385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "DOMFilePath.h" 39a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "DOMFileSystemBase.h" 40e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "DirectoryEntry.h" 41a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "DirectoryReader.h" 42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "EntriesCallback.h" 43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "EntryArray.h" 44e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "EntryCallback.h" 45e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "ErrorCallback.h" 46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "FileEntry.h" 47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "FileError.h" 48e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "FileMetadata.h" 49e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "FileSystemCallback.h" 504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "FileWriterBase.h" 514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "FileWriterBaseCallback.h" 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "Metadata.h" 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "MetadataCallback.h" 54e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "ScriptExecutionContext.h" 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "VoidCallback.h" 56e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 57e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebCore { 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 59e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockFileSystemCallbacksBase::FileSystemCallbacksBase(PassRefPtr<ErrorCallback> errorCallback) 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : m_errorCallback(errorCallback) 61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 62e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockFileSystemCallbacksBase::~FileSystemCallbacksBase() 65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 66e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 67e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 68e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid FileSystemCallbacksBase::didSucceed() 69e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 70e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Each subclass must implement an appropriate one. 71e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 72e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 73e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid FileSystemCallbacksBase::didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem>) 75e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Each subclass must implement an appropriate one. 77e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 79e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 80e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid FileSystemCallbacksBase::didReadMetadata(const FileMetadata&) 81e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 82e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Each subclass must implement an appropriate one. 83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 84e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 85e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid FileSystemCallbacksBase::didReadDirectoryEntries(bool) 87e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Each subclass must implement an appropriate one. 89e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 90e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 91e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid FileSystemCallbacksBase::didReadDirectoryEntry(const String&, bool) 93e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Each subclass must implement an appropriate one. 95e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid FileSystemCallbacksBase::didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long) 99bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Each subclass must implement an appropriate one. 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT_NOT_REACHED(); 102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid FileSystemCallbacksBase::didFail(int code) 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 106e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_errorCallback) { 107e14391e94c850b8bd03680c23b38978db68687a8John Reck m_errorCallback->handleEvent(FileError::create(static_cast<FileError::ErrorCode>(code)).get()); 108e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_errorCallback.clear(); 109e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 110e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 111e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 112e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// EntryCallbacks ------------------------------------------------------------- 113e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 114e14391e94c850b8bd03680c23b38978db68687a8John ReckPassOwnPtr<EntryCallbacks> EntryCallbacks::create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 115bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return adoptPtr(new EntryCallbacks(successCallback, errorCallback, fileSystem, expectedPath, isDirectory)); 117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 119e14391e94c850b8bd03680c23b38978db68687a8John ReckEntryCallbacks::EntryCallbacks(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DOMFileSystemBase> fileSystem, const String& expectedPath, bool isDirectory) 120e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : FileSystemCallbacksBase(errorCallback) 121e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_successCallback(successCallback) 122e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_fileSystem(fileSystem) 123e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_expectedPath(expectedPath) 124e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_isDirectory(isDirectory) 125e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 126e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 127e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 128e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid EntryCallbacks::didSucceed() 129e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 130e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_successCallback) { 131e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_isDirectory) 132e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback->handleEvent(DirectoryEntry::create(m_fileSystem, m_expectedPath).get()); 133e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else 134e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback->handleEvent(FileEntry::create(m_fileSystem, m_expectedPath).get()); 135e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 136e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback.clear(); 137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 138e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 139e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// EntriesCallbacks ----------------------------------------------------------- 140e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 141e14391e94c850b8bd03680c23b38978db68687a8John ReckPassOwnPtr<EntriesCallbacks> EntriesCallbacks::create(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, directoryReader, basePath)); 144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 146e14391e94c850b8bd03680c23b38978db68687a8John ReckEntriesCallbacks::EntriesCallbacks(PassRefPtr<EntriesCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryReaderBase> directoryReader, const String& basePath) 147e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : FileSystemCallbacksBase(errorCallback) 148e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_successCallback(successCallback) 149a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_directoryReader(directoryReader) 150e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_basePath(basePath) 15168513a70bcd92384395513322f1b801e7bf9c729Steve Block , m_entries(EntryArray::create()) 152e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 153a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT(m_directoryReader); 154e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 155e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 156e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid EntriesCallbacks::didReadDirectoryEntry(const String& name, bool isDirectory) 157e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 158e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (isDirectory) 159a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_entries->append(DirectoryEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 160e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block else 161a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_entries->append(FileEntry::create(m_directoryReader->filesystem(), DOMFilePath::append(m_basePath, name))); 162e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 163e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid EntriesCallbacks::didReadDirectoryEntries(bool hasMore) 165e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 166a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_directoryReader->setHasMoreEntries(hasMore); 167a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (m_successCallback) 168e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback->handleEvent(m_entries.get()); 169e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 170e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 171e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// FileSystemCallbacks -------------------------------------------------------- 172e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 173bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPassOwnPtr<FileSystemCallbacks> FileSystemCallbacks::create(PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* scriptExecutionContext) 174bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 175bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, scriptExecutionContext)); 176bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenFileSystemCallbacks::FileSystemCallbacks(PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context) 179e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : FileSystemCallbacksBase(errorCallback) 180e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_successCallback(successCallback) 1815ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen , m_scriptExecutionContext(context) 182e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 183e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 184e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 1855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid FileSystemCallbacks::didOpenFileSystem(const String& name, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 186e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 1875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (m_successCallback) { 1885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen ASSERT(asyncFileSystem); 1895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_successCallback->handleEvent(DOMFileSystem::create(m_scriptExecutionContext.get(), name, asyncFileSystem.leakPtr()).get()); 1905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_scriptExecutionContext.clear(); 1915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 192e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback.clear(); 193e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 194e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// ResolveURICallbacks -------------------------------------------------------- 19681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 19781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace { 19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ErrorCallbackWrapper : public ErrorCallback { 20081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic: 20181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static PassRefPtr<ErrorCallbackWrapper> create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) 20281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 20381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return adoptRef(new ErrorCallbackWrapper(successCallback, errorCallback, root, filePath)); 20481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 20581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 20681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual bool handleEvent(FileError* error) 20781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 20881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(error); 20981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (error->code() == FileError::TYPE_MISMATCH_ERR) 21081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_root->getFile(m_filePath, 0, m_successCallback, m_errorCallback); 21181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch else if (m_errorCallback) 21281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_errorCallback->handleEvent(error); 21381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return true; 21481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 21581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 21681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate: 21781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ErrorCallbackWrapper(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, PassRefPtr<DirectoryEntry> root, const String& filePath) 21881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch : m_successCallback(successCallback) 21981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_errorCallback(errorCallback) 22081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_root(root) 22181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_filePath(filePath) 22281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 22381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(m_root); 22481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 22581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 22681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<EntryCallback> m_successCallback; 22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<ErrorCallback> m_errorCallback; 22881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<DirectoryEntry> m_root; 22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String m_filePath; 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}; 23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} // namespace 23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 23481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochPassOwnPtr<ResolveURICallbacks> ResolveURICallbacks::create(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* scriptExecutionContext, const String& filePath) 23581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 23681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, scriptExecutionContext, filePath)); 23781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 23881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochResolveURICallbacks::ResolveURICallbacks(PassRefPtr<EntryCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback, ScriptExecutionContext* context, const String& filePath) 24081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch : FileSystemCallbacksBase(errorCallback) 24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_successCallback(successCallback) 24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_scriptExecutionContext(context) 24381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_filePath(filePath) 24481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 24581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid ResolveURICallbacks::didOpenFileSystem(const String& name, PassOwnPtr<AsyncFileSystem> asyncFileSystem) 24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 24981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(asyncFileSystem); 25081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<DirectoryEntry> root = DOMFileSystem::create(m_scriptExecutionContext.get(), name, asyncFileSystem.leakPtr())->root(); 25181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch root->getDirectory(m_filePath, 0, m_successCallback, ErrorCallbackWrapper::create(m_successCallback, m_errorCallback, root, m_filePath)); 25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 254e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// MetadataCallbacks ---------------------------------------------------------- 255e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 256bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPassOwnPtr<MetadataCallbacks> MetadataCallbacks::create(PassRefPtr<MetadataCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 257bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 258bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return adoptPtr(new MetadataCallbacks(successCallback, errorCallback)); 259bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 260bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 261e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockMetadataCallbacks::MetadataCallbacks(PassRefPtr<MetadataCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 262e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : FileSystemCallbacksBase(errorCallback) 263e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_successCallback(successCallback) 264e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 265e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 266e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 267e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid MetadataCallbacks::didReadMetadata(const FileMetadata& metadata) 268e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 269e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_successCallback) 270e14391e94c850b8bd03680c23b38978db68687a8John Reck m_successCallback->handleEvent(Metadata::create(metadata.modificationTime).get()); 271e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback.clear(); 272e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 273e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 2744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang// FileWriterBaseCallbacks ---------------------------------------------------------- 275bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 2764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangPassOwnPtr<FileWriterBaseCallbacks> FileWriterBaseCallbacks::create(PassRefPtr<FileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 2784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback)); 279bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 280bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 2814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangFileWriterBaseCallbacks::FileWriterBaseCallbacks(PassRefPtr<FileWriterBase> fileWriter, PassRefPtr<FileWriterBaseCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 282bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen : FileSystemCallbacksBase(errorCallback) 283bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_fileWriter(fileWriter) 284bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_successCallback(successCallback) 285bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 286bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 287bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 2884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<AsyncFileWriter> asyncFileWriter, long long length) 289bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 290bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_fileWriter->initialize(asyncFileWriter, length); 291bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (m_successCallback) 292bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_successCallback->handleEvent(m_fileWriter.release().get()); 293bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_successCallback.clear(); 294bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 296e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// VoidCallbacks -------------------------------------------------------------- 297e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPassOwnPtr<VoidCallbacks> VoidCallbacks::create(PassRefPtr<VoidCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 300bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return adoptPtr(new VoidCallbacks(successCallback, errorCallback)); 301bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 302bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 303e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockVoidCallbacks::VoidCallbacks(PassRefPtr<VoidCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback) 304e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : FileSystemCallbacksBase(errorCallback) 305e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_successCallback(successCallback) 306e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 307e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 308e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 309e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid VoidCallbacks::didSucceed() 310e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 311e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_successCallback) 312e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback->handleEvent(); 313e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_successCallback.clear(); 314e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 315e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 316e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} // namespace 317e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 318e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // ENABLE(FILE_SYSTEM) 319