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)#ifndef DOMFileSystemBase_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define DOMFileSystemBase_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/filesystem/FileSystemFlags.h" 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FileSystemType.h" 3610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/heap/Handle.h" 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/KURL.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/text/WTFString.h" 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 418abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)class WebFileSystem; 428abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 438abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 44c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DirectoryEntry; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DirectoryReaderBase; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EntriesCallback; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EntryBase; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EntryCallback; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ErrorCallback; 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass File; 53a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class FileError; 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistruct FileMetadata; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MetadataCallback; 561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class ExecutionContext; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SecurityOrigin; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class VoidCallback; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// A common base class for DOMFileSystem and DOMFileSystemSync. 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class DOMFileSystemBase : public GarbageCollectedFinalized<DOMFileSystemBase> { 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch enum SynchronousType { 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Synchronous, 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Asynchronous, 66e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch }; 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Path prefixes that are used in the filesystem URLs (that can be obtained by toURL()). 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://www.w3.org/TR/file-system-api/#widl-Entry-toURL 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const char persistentPathPrefix[]; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const char temporaryPathPrefix[]; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const char isolatedPathPrefix[]; 7353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) static const char externalPathPrefix[]; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~DOMFileSystemBase(); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // These are called when a new callback is created and resolved in 788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // FileSystem API, so that subclasses can track the number of pending 798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // callbacks if necessary. 808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual void addPendingCallbacks() { } 818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual void removePendingCallbacks() { } 828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 83a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // Overridden by subclasses to handle sync vs async error-handling. 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void reportError(ErrorCallback*, PassRefPtrWillBeRawPtr<FileError>) = 0; 85a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& name() const { return m_name; } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FileSystemType type() const { return m_type; } 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL rootURL() const { return m_filesystemRootURL; } 8951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::WebFileSystem* fileSystem() const; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SecurityOrigin* securityOrigin() const; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The clonable flag is used in the structured clone algorithm to test 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // whether the FileSystem API object is permitted to be cloned. It defaults 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to false, and must be explicitly set by internal code permit cloning. 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void makeClonable() { m_clonable = true; } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool clonable() const { return m_clonable; } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isValidType(FileSystemType); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool crackFileSystemURL(const KURL&, FileSystemType&, String& filePath); 1009bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) static KURL createFileSystemRootURL(const String& origin, FileSystemType); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool supportsToURL() const; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL createFileSystemURL(const EntryBase*) const; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL createFileSystemURL(const String& fullPath) const; 1049bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) static bool pathToAbsolutePath(FileSystemType, const EntryBase*, String path, String& absolutePath); 1059bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) static bool pathPrefixToFileSystemType(const String& pathPrefix, FileSystemType&); 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassRefPtrWillBeRawPtr<File> createFile(const FileMetadata&, const KURL& fileSystemURL, FileSystemType, const String name); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Actual FileSystem API implementations. All the validity checks on virtual paths are done at this level. 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void getMetadata(const EntryBase*, MetadataCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void move(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void copy(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void remove(const EntryBase*, VoidCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void removeRecursively(const EntryBase*, VoidCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void getParent(const EntryBase*, EntryCallback*, ErrorCallback*); 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void getFile(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void getDirectory(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous); 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci int readDirectory(DirectoryReaderBase*, const String& path, EntriesCallback*, ErrorCallback*, SynchronousType = Asynchronous); 118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool waitForAdditionalResult(int callbacksId); 119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual void trace(Visitor*) { } 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 1231e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) DOMFileSystemBase(ExecutionContext*, const String& name, FileSystemType, const KURL& rootURL); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class DOMFileSystemSync; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ExecutionContext* m_context; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_name; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FileSystemType m_type; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL m_filesystemRootURL; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_clonable; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const DOMFileSystemBase& a, const DOMFileSystemBase& b) { return a.name() == b.name() && a.type() == b.type() && a.rootURL() == b.rootURL(); } 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // DOMFileSystemBase_h 138