18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All Rights Reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef File_h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define File_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Blob.h" 305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "PlatformString.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h> 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h> 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass KURL; 375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 38d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass File : public Blob { 39d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic: 4068513a70bcd92384395513322f1b801e7bf9c729Steve Block static PassRefPtr<File> create(const String& path) 41d0825bca7fe65beaee391d30da42e937db621564Steve Block { 4268513a70bcd92384395513322f1b801e7bf9c729Steve Block return adoptRef(new File(path)); 43d0825bca7fe65beaee391d30da42e937db621564Steve Block } 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // For deserialization. 4668513a70bcd92384395513322f1b801e7bf9c729Steve Block static PassRefPtr<File> create(const String& path, const KURL& srcURL, const String& type) 47f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick { 4868513a70bcd92384395513322f1b801e7bf9c729Steve Block return adoptRef(new File(path, srcURL, type)); 49f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick } 50f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 51967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD) 5268513a70bcd92384395513322f1b801e7bf9c729Steve Block static PassRefPtr<File> create(const String& relativePath, const String& path) 53967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch { 5468513a70bcd92384395513322f1b801e7bf9c729Steve Block return adoptRef(new File(relativePath, path)); 55967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch } 56967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 57967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen virtual unsigned long long size() const; 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool isFile() const { return true; } 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen const String& path() const { return m_path; } 625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen const String& name() const { return m_name; } 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch double lastModifiedDate() const; 64967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD) 65967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Returns the relative path of this file in the context of a directory selection. 665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen const String& webkitRelativePath() const { return m_relativePath; } 67967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 695ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // Note that this involves synchronous file operation. Think twice before calling this function. 705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen void captureSnapshot(long long& snapshotSize, double& snapshotModificationTime) const; 715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 72d0825bca7fe65beaee391d30da42e937db621564Steve Block // FIXME: obsolete attributes. To be removed. 73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch const String& fileName() const { return name(); } 74d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned long long fileSize() const { return size(); } 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 76d0825bca7fe65beaee391d30da42e937db621564Steve Blockprivate: 7768513a70bcd92384395513322f1b801e7bf9c729Steve Block File(const String& path); 785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 79f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // For deserialization. 8068513a70bcd92384395513322f1b801e7bf9c729Steve Block File(const String& path, const KURL& srcURL, const String& type); 81967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 82967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD) 8368513a70bcd92384395513322f1b801e7bf9c729Steve Block File(const String& relativePath, const String& path); 84967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 85f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen String m_path; 875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen String m_name; 885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(DIRECTORY_UPLOAD) 895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen String m_relativePath; 905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 91d0825bca7fe65beaee391d30da42e937db621564Steve Block}; 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // File_h 96