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