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
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef IDBAny_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define IDBAny_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptWrappable.h"
30a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "modules/indexeddb/IDBKey.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/indexeddb/IDBKeyPath.h"
32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/SharedBuffer.h"
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "wtf/Forward.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/text/WTFString.h"
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liunamespace blink {
37f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DOMStringList;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBCursor;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBCursorWithValue;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBDatabase;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBIndex;
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBKeyPath;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBObjectStore;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IDBTransaction;
46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebBlobInfo;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class IDBAny : public GarbageCollectedFinalized<IDBAny> {
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* createUndefined();
51d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* createNull();
52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* createString(const String&);
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    template<typename T>
54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* create(T* idbObject)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(idbObject);
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    template<typename T>
59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* create(const T& idbObject)
60f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    {
61d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(idbObject);
62f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    }
63e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    static IDBAny* create(PassRefPtr<SharedBuffer> value, const Vector<WebBlobInfo>* blobInfo)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
65d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(value, blobInfo);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    template<typename T>
68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* create(PassRefPtr<T> idbObject)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
70d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(idbObject);
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
72d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static IDBAny* create(int64_t value)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
74d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(value);
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
76e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    static IDBAny* create(PassRefPtr<SharedBuffer> value, const Vector<WebBlobInfo>* blobInfo, IDBKey* key, const IDBKeyPath& keyPath)
77a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    {
78d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return new IDBAny(value, blobInfo, key, keyPath);
79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    }
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~IDBAny();
81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void trace(Visitor*);
82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void contextWillBeDestroyed();
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum Type {
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UndefinedType = 0,
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NullType,
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMStringListType,
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBCursorType,
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBCursorWithValueType,
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBDatabaseType,
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBIndexType,
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBObjectStoreType,
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IDBTransactionType,
94a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        BufferType,
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IntegerType,
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        StringType,
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        KeyPathType,
98a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        KeyType,
99a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        BufferKeyAndKeyPathType,
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Type type() const { return m_type; }
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Use type() to figure out which one of these you're allowed to call.
104a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    DOMStringList* domStringList() const;
105a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBCursor* idbCursor() const;
106a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBCursorWithValue* idbCursorWithValue() const;
107a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBDatabase* idbDatabase() const;
108a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBIndex* idbIndex() const;
109a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBObjectStore* idbObjectStore() const;
110a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    IDBTransaction* idbTransaction() const;
111a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    SharedBuffer* buffer() const;
112e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    const Vector<WebBlobInfo>* blobInfo() const;
113a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    int64_t integer() const;
114a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const String& string() const;
115a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const IDBKey* key() const;
116a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const IDBKeyPath& keyPath() const;
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    explicit IDBAny(Type);
120323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    explicit IDBAny(PassRefPtrWillBeRawPtr<DOMStringList>);
121d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBCursor*);
122d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBDatabase*);
123d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBIndex*);
124d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBObjectStore*);
125d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBTransaction*);
126d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    explicit IDBAny(IDBKey*);
127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    explicit IDBAny(const IDBKeyPath&);
128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    explicit IDBAny(const String&);
129e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    IDBAny(PassRefPtr<SharedBuffer>, const Vector<WebBlobInfo>*);
130e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    IDBAny(PassRefPtr<SharedBuffer>, const Vector<WebBlobInfo>*, IDBKey*, const IDBKeyPath&);
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    explicit IDBAny(int64_t);
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const Type m_type;
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
135f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    // Only one of the following should ever be in use at any given time, except that BufferType uses two and BufferKeyAndKeyPathType uses four.
136323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    const RefPtrWillBeMember<DOMStringList> m_domStringList;
137d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBCursor> m_idbCursor;
138d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBDatabase> m_idbDatabase;
139d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBIndex> m_idbIndex;
140d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBObjectStore> m_idbObjectStore;
141d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBTransaction> m_idbTransaction;
142d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const Member<IDBKey> m_idbKey;
143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const IDBKeyPath m_idbKeyPath;
144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const RefPtr<SharedBuffer> m_buffer;
145e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    const Vector<WebBlobInfo>* m_blobInfo;
146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const String m_string;
147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const int64_t m_integer;
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
150c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // IDBAny_h
153