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
23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef StorageAreaImpl_h
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define StorageAreaImpl_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
29b679b2a6c810dd2f9e8d7072e542b884a4e7060fBen Murdoch#if ENABLE(DOM_STORAGE)
30b679b2a6c810dd2f9e8d7072e542b884a4e7060fBen Murdoch
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StorageArea.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/PassRefPtr.h>
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/RefPtr.h>
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class SecurityOrigin;
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class StorageMap;
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class StorageAreaSync;
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class StorageAreaImpl : public StorageArea {
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        static PassRefPtr<StorageAreaImpl> create(StorageType, PassRefPtr<SecurityOrigin>, PassRefPtr<StorageSyncManager>, unsigned quota);
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual ~StorageAreaImpl();
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // The HTML5 DOM Storage API (and contains)
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual unsigned length() const;
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual String key(unsigned index) const;
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual String getItem(const String& key) const;
51d0825bca7fe65beaee391d30da42e937db621564Steve Block        virtual String setItem(const String& key, const String& value, ExceptionCode& ec, Frame* sourceFrame);
52d0825bca7fe65beaee391d30da42e937db621564Steve Block        virtual String removeItem(const String& key, Frame* sourceFrame);
53d0825bca7fe65beaee391d30da42e937db621564Steve Block        virtual bool clear(Frame* sourceFrame);
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual bool contains(const String& key) const;
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        PassRefPtr<StorageAreaImpl> copy();
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void close();
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        // Only called from a background thread.
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void importItem(const String& key, const String& value);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
622bde8e466a4451c7319e3a072d118917957d6554Steve Block        // Used to clear a StorageArea and close db before backing db file is deleted.
632bde8e466a4451c7319e3a072d118917957d6554Steve Block        void clearForOriginDeletion();
642bde8e466a4451c7319e3a072d118917957d6554Steve Block
652bde8e466a4451c7319e3a072d118917957d6554Steve Block        void sync();
662bde8e466a4451c7319e3a072d118917957d6554Steve Block
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        StorageAreaImpl(StorageType, PassRefPtr<SecurityOrigin>, PassRefPtr<StorageSyncManager>, unsigned quota);
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        StorageAreaImpl(StorageAreaImpl*);
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void blockUntilImportComplete() const;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        StorageType m_storageType;
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<SecurityOrigin> m_securityOrigin;
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<StorageMap> m_storageMap;
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<StorageAreaSync> m_storageAreaSync;
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RefPtr<StorageSyncManager> m_storageSyncManager;
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef NDEBUG
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool m_isShutdown;
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
87b679b2a6c810dd2f9e8d7072e542b884a4e7060fBen Murdoch#endif // ENABLE(DOM_STORAGE)
88b679b2a6c810dd2f9e8d7072e542b884a4e7060fBen Murdoch
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // StorageAreaImpl_h
90