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