• 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 #include "config.h"
27 #include "modules/indexeddb/IDBAny.h"
28 
29 #include "core/dom/DOMStringList.h"
30 #include "modules/indexeddb/IDBCursorWithValue.h"
31 #include "modules/indexeddb/IDBDatabase.h"
32 #include "modules/indexeddb/IDBIndex.h"
33 #include "modules/indexeddb/IDBObjectStore.h"
34 
35 namespace blink {
36 
createUndefined()37 IDBAny* IDBAny::createUndefined()
38 {
39     return new IDBAny(UndefinedType);
40 }
41 
createNull()42 IDBAny* IDBAny::createNull()
43 {
44     return new IDBAny(NullType);
45 }
46 
createString(const String & value)47 IDBAny* IDBAny::createString(const String& value)
48 {
49     return new IDBAny(value);
50 }
51 
IDBAny(Type type)52 IDBAny::IDBAny(Type type)
53     : m_type(type)
54     , m_integer(0)
55 {
56     ASSERT(type == UndefinedType || type == NullType);
57 }
58 
~IDBAny()59 IDBAny::~IDBAny()
60 {
61 }
62 
contextWillBeDestroyed()63 void IDBAny::contextWillBeDestroyed()
64 {
65     if (m_idbCursor)
66         m_idbCursor->contextWillBeDestroyed();
67 }
68 
domStringList() const69 DOMStringList* IDBAny::domStringList() const
70 {
71     ASSERT(m_type == DOMStringListType);
72     return m_domStringList.get();
73 }
74 
idbCursor() const75 IDBCursor* IDBAny::idbCursor() const
76 {
77     ASSERT(m_type == IDBCursorType);
78     ASSERT_WITH_SECURITY_IMPLICATION(m_idbCursor->isKeyCursor());
79     return m_idbCursor.get();
80 }
81 
idbCursorWithValue() const82 IDBCursorWithValue* IDBAny::idbCursorWithValue() const
83 {
84     ASSERT(m_type == IDBCursorWithValueType);
85     ASSERT_WITH_SECURITY_IMPLICATION(m_idbCursor->isCursorWithValue());
86     return toIDBCursorWithValue(m_idbCursor.get());
87 }
88 
idbDatabase() const89 IDBDatabase* IDBAny::idbDatabase() const
90 {
91     ASSERT(m_type == IDBDatabaseType);
92     return m_idbDatabase.get();
93 }
94 
idbIndex() const95 IDBIndex* IDBAny::idbIndex() const
96 {
97     ASSERT(m_type == IDBIndexType);
98     return m_idbIndex.get();
99 }
100 
idbObjectStore() const101 IDBObjectStore* IDBAny::idbObjectStore() const
102 {
103     ASSERT(m_type == IDBObjectStoreType);
104     return m_idbObjectStore.get();
105 }
106 
idbTransaction() const107 IDBTransaction* IDBAny::idbTransaction() const
108 {
109     ASSERT(m_type == IDBTransactionType);
110     return m_idbTransaction.get();
111 }
112 
key() const113 const IDBKey* IDBAny::key() const
114 {
115     ASSERT(m_type == KeyType || m_type == BufferKeyAndKeyPathType);
116     return m_idbKey.get();
117 }
118 
keyPath() const119 const IDBKeyPath& IDBAny::keyPath() const
120 {
121     ASSERT(m_type == KeyPathType || m_type == BufferKeyAndKeyPathType);
122     return m_idbKeyPath;
123 }
124 
buffer() const125 SharedBuffer* IDBAny::buffer() const
126 {
127     ASSERT(m_type == BufferType || m_type == BufferKeyAndKeyPathType);
128     return m_buffer.get();
129 }
130 
blobInfo() const131 const Vector<WebBlobInfo>* IDBAny::blobInfo() const
132 {
133     ASSERT(m_type == BufferType || m_type == BufferKeyAndKeyPathType);
134     return m_blobInfo;
135 }
136 
string() const137 const String& IDBAny::string() const
138 {
139     ASSERT(m_type == StringType);
140     return m_string;
141 }
142 
integer() const143 int64_t IDBAny::integer() const
144 {
145     ASSERT(m_type == IntegerType);
146     return m_integer;
147 }
148 
IDBAny(PassRefPtrWillBeRawPtr<DOMStringList> value)149 IDBAny::IDBAny(PassRefPtrWillBeRawPtr<DOMStringList> value)
150     : m_type(DOMStringListType)
151     , m_domStringList(value)
152     , m_integer(0)
153 {
154 }
155 
IDBAny(IDBCursor * value)156 IDBAny::IDBAny(IDBCursor* value)
157     : m_type(value->isCursorWithValue() ? IDBCursorWithValueType : IDBCursorType)
158     , m_idbCursor(value)
159     , m_integer(0)
160 {
161 }
162 
IDBAny(IDBDatabase * value)163 IDBAny::IDBAny(IDBDatabase* value)
164     : m_type(IDBDatabaseType)
165     , m_idbDatabase(value)
166     , m_integer(0)
167 {
168 }
169 
IDBAny(IDBIndex * value)170 IDBAny::IDBAny(IDBIndex* value)
171     : m_type(IDBIndexType)
172     , m_idbIndex(value)
173     , m_integer(0)
174 {
175 }
176 
IDBAny(IDBTransaction * value)177 IDBAny::IDBAny(IDBTransaction* value)
178     : m_type(IDBTransactionType)
179     , m_idbTransaction(value)
180     , m_integer(0)
181 {
182 }
183 
IDBAny(IDBObjectStore * value)184 IDBAny::IDBAny(IDBObjectStore* value)
185     : m_type(IDBObjectStoreType)
186     , m_idbObjectStore(value)
187     , m_integer(0)
188 {
189 }
190 
IDBAny(PassRefPtr<SharedBuffer> value,const Vector<WebBlobInfo> * blobInfo)191 IDBAny::IDBAny(PassRefPtr<SharedBuffer> value, const Vector<WebBlobInfo>* blobInfo)
192     : m_type(BufferType)
193     , m_buffer(value)
194     , m_blobInfo(blobInfo)
195     , m_integer(0)
196 {
197 }
198 
IDBAny(PassRefPtr<SharedBuffer> value,const Vector<WebBlobInfo> * blobInfo,IDBKey * key,const IDBKeyPath & keyPath)199 IDBAny::IDBAny(PassRefPtr<SharedBuffer> value, const Vector<WebBlobInfo>* blobInfo, IDBKey* key, const IDBKeyPath& keyPath)
200     : m_type(BufferKeyAndKeyPathType)
201     , m_idbKey(key)
202     , m_idbKeyPath(keyPath)
203     , m_buffer(value)
204     , m_blobInfo(blobInfo)
205     , m_integer(0)
206 {
207 }
208 
IDBAny(IDBKey * key)209 IDBAny::IDBAny(IDBKey* key)
210     : m_type(KeyType)
211     , m_idbKey(key)
212     , m_integer(0)
213 {
214 }
215 
IDBAny(const IDBKeyPath & value)216 IDBAny::IDBAny(const IDBKeyPath& value)
217     : m_type(KeyPathType)
218     , m_idbKeyPath(value)
219     , m_integer(0)
220 {
221 }
222 
IDBAny(const String & value)223 IDBAny::IDBAny(const String& value)
224     : m_type(StringType)
225     , m_string(value)
226     , m_integer(0)
227 {
228 }
229 
IDBAny(int64_t value)230 IDBAny::IDBAny(int64_t value)
231     : m_type(IntegerType)
232     , m_integer(value)
233 {
234 }
235 
trace(Visitor * visitor)236 void IDBAny::trace(Visitor* visitor)
237 {
238     visitor->trace(m_domStringList);
239     visitor->trace(m_idbCursor);
240     visitor->trace(m_idbDatabase);
241     visitor->trace(m_idbIndex);
242     visitor->trace(m_idbObjectStore);
243     visitor->trace(m_idbTransaction);
244     visitor->trace(m_idbKey);
245 }
246 
247 } // namespace blink
248