• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef IDBAny_h
27 #define IDBAny_h
28 
29 #include "bindings/v8/ScriptWrappable.h"
30 #include "modules/indexeddb/IDBKey.h"
31 #include "modules/indexeddb/IDBKeyPath.h"
32 #include "platform/SharedBuffer.h"
33 #include "wtf/PassRefPtr.h"
34 #include "wtf/RefCounted.h"
35 #include "wtf/RefPtr.h"
36 #include "wtf/text/WTFString.h"
37 
38 namespace blink {
39 
40 class WebBlobInfo;
41 
42 }
43 
44 namespace WebCore {
45 
46 class DOMStringList;
47 class IDBCursor;
48 class IDBCursorWithValue;
49 class IDBDatabase;
50 class IDBIndex;
51 class IDBKeyPath;
52 class IDBObjectStore;
53 class IDBTransaction;
54 
55 class IDBAny : public GarbageCollectedFinalized<IDBAny> {
56 public:
57     static IDBAny* createUndefined();
58     static IDBAny* createNull();
59     static IDBAny* createString(const String&);
60     template<typename T>
create(T * idbObject)61     static IDBAny* create(T* idbObject)
62     {
63         return new IDBAny(idbObject);
64     }
65     template<typename T>
create(const T & idbObject)66     static IDBAny* create(const T& idbObject)
67     {
68         return new IDBAny(idbObject);
69     }
create(PassRefPtr<SharedBuffer> value,const Vector<blink::WebBlobInfo> * blobInfo)70     static IDBAny* create(PassRefPtr<SharedBuffer> value, const Vector<blink::WebBlobInfo>* blobInfo)
71     {
72         return new IDBAny(value, blobInfo);
73     }
74     template<typename T>
create(PassRefPtr<T> idbObject)75     static IDBAny* create(PassRefPtr<T> idbObject)
76     {
77         return new IDBAny(idbObject);
78     }
create(int64_t value)79     static IDBAny* create(int64_t value)
80     {
81         return new IDBAny(value);
82     }
create(PassRefPtr<SharedBuffer> value,const Vector<blink::WebBlobInfo> * blobInfo,IDBKey * key,const IDBKeyPath & keyPath)83     static IDBAny* create(PassRefPtr<SharedBuffer> value, const Vector<blink::WebBlobInfo>* blobInfo, IDBKey* key, const IDBKeyPath& keyPath)
84     {
85         return new IDBAny(value, blobInfo, key, keyPath);
86     }
87     ~IDBAny();
88     void trace(Visitor*);
89     void contextWillBeDestroyed();
90 
91     enum Type {
92         UndefinedType = 0,
93         NullType,
94         DOMStringListType,
95         IDBCursorType,
96         IDBCursorWithValueType,
97         IDBDatabaseType,
98         IDBIndexType,
99         IDBObjectStoreType,
100         IDBTransactionType,
101         BufferType,
102         IntegerType,
103         StringType,
104         KeyPathType,
105         KeyType,
106         BufferKeyAndKeyPathType,
107     };
108 
type()109     Type type() const { return m_type; }
110     // Use type() to figure out which one of these you're allowed to call.
111     DOMStringList* domStringList() const;
112     IDBCursor* idbCursor() const;
113     IDBCursorWithValue* idbCursorWithValue() const;
114     IDBDatabase* idbDatabase() const;
115     IDBIndex* idbIndex() const;
116     IDBObjectStore* idbObjectStore() const;
117     IDBTransaction* idbTransaction() const;
118     SharedBuffer* buffer() const;
119     const Vector<blink::WebBlobInfo>* blobInfo() const;
120     int64_t integer() const;
121     const String& string() const;
122     const IDBKey* key() const;
123     const IDBKeyPath& keyPath() const;
124 
125 private:
126     explicit IDBAny(Type);
127     explicit IDBAny(PassRefPtrWillBeRawPtr<DOMStringList>);
128     explicit IDBAny(IDBCursor*);
129     explicit IDBAny(IDBDatabase*);
130     explicit IDBAny(IDBIndex*);
131     explicit IDBAny(IDBObjectStore*);
132     explicit IDBAny(IDBTransaction*);
133     explicit IDBAny(IDBKey*);
134     explicit IDBAny(const IDBKeyPath&);
135     explicit IDBAny(const String&);
136     IDBAny(PassRefPtr<SharedBuffer>, const Vector<blink::WebBlobInfo>*);
137     IDBAny(PassRefPtr<SharedBuffer>, const Vector<blink::WebBlobInfo>*, IDBKey*, const IDBKeyPath&);
138     explicit IDBAny(int64_t);
139 
140     const Type m_type;
141 
142     // Only one of the following should ever be in use at any given time, except that BufferType uses two and BufferKeyAndKeyPathType uses four.
143     const RefPtrWillBeMember<DOMStringList> m_domStringList;
144     const Member<IDBCursor> m_idbCursor;
145     const Member<IDBDatabase> m_idbDatabase;
146     const Member<IDBIndex> m_idbIndex;
147     const Member<IDBObjectStore> m_idbObjectStore;
148     const Member<IDBTransaction> m_idbTransaction;
149     const Member<IDBKey> m_idbKey;
150     const IDBKeyPath m_idbKeyPath;
151     const RefPtr<SharedBuffer> m_buffer;
152     const Vector<blink::WebBlobInfo>* m_blobInfo;
153     const String m_string;
154     const int64_t m_integer;
155 };
156 
157 } // namespace WebCore
158 
159 #endif // IDBAny_h
160