1 /* 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef File_h 27 #define File_h 28 29 #include "Blob.h" 30 #include "PlatformString.h" 31 #include <wtf/PassRefPtr.h> 32 #include <wtf/RefCounted.h> 33 34 namespace WebCore { 35 36 class KURL; 37 38 class File : public Blob { 39 public: 40 static PassRefPtr<File> create(const String& path) 41 { 42 return adoptRef(new File(path)); 43 } 44 45 // For deserialization. 46 static PassRefPtr<File> create(const String& path, const KURL& srcURL, const String& type) 47 { 48 return adoptRef(new File(path, srcURL, type)); 49 } 50 51 #if ENABLE(DIRECTORY_UPLOAD) 52 static PassRefPtr<File> create(const String& relativePath, const String& path) 53 { 54 return adoptRef(new File(relativePath, path)); 55 } 56 #endif 57 58 virtual unsigned long long size() const; 59 virtual bool isFile() const { return true; } 60 61 const String& path() const { return m_path; } 62 const String& name() const { return m_name; } 63 double lastModifiedDate() const; 64 #if ENABLE(DIRECTORY_UPLOAD) 65 // Returns the relative path of this file in the context of a directory selection. 66 const String& webkitRelativePath() const { return m_relativePath; } 67 #endif 68 69 // Note that this involves synchronous file operation. Think twice before calling this function. 70 void captureSnapshot(long long& snapshotSize, double& snapshotModificationTime) const; 71 72 // FIXME: obsolete attributes. To be removed. 73 const String& fileName() const { return name(); } 74 unsigned long long fileSize() const { return size(); } 75 76 private: 77 File(const String& path); 78 79 // For deserialization. 80 File(const String& path, const KURL& srcURL, const String& type); 81 82 #if ENABLE(DIRECTORY_UPLOAD) 83 File(const String& relativePath, const String& path); 84 #endif 85 86 String m_path; 87 String m_name; 88 #if ENABLE(DIRECTORY_UPLOAD) 89 String m_relativePath; 90 #endif 91 }; 92 93 } // namespace WebCore 94 95 #endif // File_h 96