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#include "config.h" 31e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebFileSystemCallbacksImpl.h" 32e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 33e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(FILE_SYSTEM) 34e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "AsyncFileSystemCallbacks.h" 365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "AsyncFileSystemChromium.h" 37e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "FileMetadata.h" 38a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "ScriptExecutionContext.h" 39e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebFileInfo.h" 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "WebFileSystem.h" 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "WebFileSystemEntry.h" 42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebString.h" 43a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WorkerAsyncFileSystemChromium.h" 44e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/Vector.h> 45e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockusing namespace WebCore; 47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 48e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebKit { 49e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 502fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr<AsyncFileSystemCallbacks> callbacks, AsyncFileSystem::Type type, WebCore::ScriptExecutionContext* context, bool synchronous) 51e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : m_callbacks(callbacks) 522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_type(type) 53a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_context(context) 54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_synchronous(synchronous) 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT(m_callbacks); 57e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 59e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebFileSystemCallbacksImpl::~WebFileSystemCallbacksImpl() 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 62e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebFileSystemCallbacksImpl::didSucceed() 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_callbacks->didSucceed(); 66e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block delete this; 67e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 68e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 69e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid WebFileSystemCallbacksImpl::didReadMetadata(const WebFileInfo& webFileInfo) 70e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 71e14391e94c850b8bd03680c23b38978db68687a8John Reck FileMetadata fileMetadata; 72e14391e94c850b8bd03680c23b38978db68687a8John Reck fileMetadata.modificationTime = webFileInfo.modificationTime; 73e14391e94c850b8bd03680c23b38978db68687a8John Reck fileMetadata.length = webFileInfo.length; 74e14391e94c850b8bd03680c23b38978db68687a8John Reck fileMetadata.type = static_cast<FileMetadata::Type>(webFileInfo.type); 752bde8e466a4451c7319e3a072d118917957d6554Steve Block fileMetadata.platformPath = webFileInfo.platformPath; 76e14391e94c850b8bd03680c23b38978db68687a8John Reck m_callbacks->didReadMetadata(fileMetadata); 77e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block delete this; 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 79e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 80e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebFileSystemCallbacksImpl::didReadDirectory(const WebVector<WebFileSystemEntry>& entries, bool hasMore) 81e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 82e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block for (size_t i = 0; i < entries.size(); ++i) 83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_callbacks->didReadDirectoryEntry(entries[i].name, entries[i].isDirectory); 845ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_callbacks->didReadDirectoryEntries(hasMore); 85a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch delete this; 86e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 87e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebFileSystemCallbacksImpl::didOpenFileSystem(const WebString& name, const WebString& path) 89e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 90a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (m_context && m_context->isWorkerContext()) 912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_callbacks->didOpenFileSystem(name, WorkerAsyncFileSystemChromium::create(m_context, m_type, path, m_synchronous)); 92a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_callbacks->didOpenFileSystem(name, AsyncFileSystemChromium::create(m_type, path)); 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block delete this; 95e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebFileSystemCallbacksImpl::didFail(WebFileError error) 98e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 99e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_callbacks->didFail(error); 100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block delete this; 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 102e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} // namespace WebKit 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // ENABLE(FILE_SYSTEM) 106