15ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen/* 25ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2010 Google Inc. All rights reserved. 35ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * 45ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Redistribution and use in source and binary forms, with or without 55ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * modification, are permitted provided that the following conditions are 65ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * met: 75ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * 85ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * * Redistributions of source code must retain the above copyright 95ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * notice, this list of conditions and the following disclaimer. 105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * * Redistributions in binary form must reproduce the above 115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * copyright notice, this list of conditions and the following disclaimer 125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * in the documentation and/or other materials provided with the 135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * distribution. 145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * * Neither the name of Google Inc. nor the names of its 155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * contributors may be used to endorse or promote products derived from 165ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * this software without specific prior written permission. 175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * 185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen */ 305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "config.h" 315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "AsyncFileSystemChromium.h" 325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(FILE_SYSTEM) 345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "AsyncFileSystemCallbacks.h" 36bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "AsyncFileWriterChromium.h" 37bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "WebFileInfo.h" 385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "WebFileSystem.h" 395ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "WebFileSystemCallbacksImpl.h" 40bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "WebFileWriter.h" 415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "WebKit.h" 425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "WebKitClient.h" 435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include <wtf/text/CString.h> 455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsennamespace WebCore { 475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 48bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool AsyncFileSystem::isAvailable() 49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return true; 51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 52bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 532fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockAsyncFileSystemChromium::AsyncFileSystemChromium(AsyncFileSystem::Type type, const String& rootPath) 542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : AsyncFileSystem(type, rootPath) 555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen , m_webFileSystem(WebKit::webKitClient()->fileSystem()) 565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen ASSERT(m_webFileSystem); 585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenAsyncFileSystemChromium::~AsyncFileSystemChromium() 615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 635ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 64a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid AsyncFileSystemChromium::move(const String& sourcePath, const String& destinationPath, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 66a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_webFileSystem->move(sourcePath, destinationPath, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 69a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid AsyncFileSystemChromium::copy(const String& sourcePath, const String& destinationPath, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_webFileSystem->copy(sourcePath, destinationPath, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::remove(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 755ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->remove(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 775ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid AsyncFileSystemChromium::removeRecursively(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_webFileSystem->removeRecursively(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 82a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 83a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 845ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::readMetadata(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->readMetadata(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::createFile(const String& path, bool exclusive, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->createFile(path, exclusive, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::createDirectory(const String& path, bool exclusive, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->createDirectory(path, exclusive, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::fileExists(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 1005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 1015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->fileExists(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 1025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 1035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 1045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::directoryExists(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 1055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 1065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->directoryExists(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 1075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 1085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 1095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid AsyncFileSystemChromium::readDirectory(const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 1105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 1115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_webFileSystem->readDirectory(path, new WebKit::WebFileSystemCallbacksImpl(callbacks)); 1125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 1135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 114bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenclass FileWriterHelperCallbacks : public WebKit::WebFileSystemCallbacks { 115bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenpublic: 116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen FileWriterHelperCallbacks(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks) 117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen : m_client(client) 118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_path(path) 119bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_webFileSystem(webFileSystem) 120bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_callbacks(callbacks) 121bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 122bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 123bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 124bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void didSucceed() 125bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 126bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT_NOT_REACHED(); 127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this; 128bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 129bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void didReadMetadata(const WebKit::WebFileInfo& info) 130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT(m_callbacks); 132bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (info.type != WebKit::WebFileInfo::TypeFile || info.length < 0) 133bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_callbacks->didFail(WebKit::WebFileErrorInvalidState); 134bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else { 135bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen OwnPtr<AsyncFileWriterChromium> asyncFileWriterChromium = adoptPtr(new AsyncFileWriterChromium(m_client)); 136bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen OwnPtr<WebKit::WebFileWriter> webFileWriter = adoptPtr(m_webFileSystem->createFileWriter(m_path, asyncFileWriterChromium.get())); 137bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen asyncFileWriterChromium->setWebFileWriter(webFileWriter.release()); 138bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_callbacks->didCreateFileWriter(asyncFileWriterChromium.release(), info.length); 139bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 140bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this; 141bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void didReadDirectory(const WebKit::WebVector<WebKit::WebFileSystemEntry>& entries, bool hasMore) 144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT_NOT_REACHED(); 146bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this; 147bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 148bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void didOpenFileSystem(const WebKit::WebString& name, const WebKit::WebString& rootPath) 149bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 150bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT_NOT_REACHED(); 151bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this; 152bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 153bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 154bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void didFail(WebKit::WebFileError error) 155bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen { 156bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT(m_callbacks); 157bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_callbacks->didFail(error); 158bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen delete this; 159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenprivate: 162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen AsyncFileWriterClient* m_client; 163bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen String m_path; 164bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebKit::WebFileSystem* m_webFileSystem; 165bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks; 166bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}; 167bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 168bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid AsyncFileSystemChromium::createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks) 169bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 170bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webFileSystem->readMetadata(path, new FileWriterHelperCallbacks(client, path, m_webFileSystem, callbacks)); 171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 172bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} // namespace WebCore 1745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 1755ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 176