|
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 #if ENABLE(INDEXED_DATABASE) |
|
30 |
|
31 #include <wtf/PassRefPtr.h> |
|
32 #include <wtf/RefCounted.h> |
|
33 #include <wtf/RefPtr.h> |
|
34 |
|
35 namespace WebCore { |
|
36 |
|
37 class IDBDatabaseRequest; |
|
38 class IDBIndexRequest; |
|
39 class IDBKey; |
|
40 class IDBObjectStoreRequest; |
|
41 class IndexedDatabaseRequest; |
|
42 class SerializedScriptValue; |
|
43 |
|
44 class IDBAny : public RefCounted<IDBAny> { |
|
45 public: |
|
46 static PassRefPtr<IDBAny> create(); |
|
47 template<typename T> |
|
48 static PassRefPtr<IDBAny> create(T* idbObject) |
|
49 { |
|
50 RefPtr<IDBAny> any = IDBAny::create(); |
|
51 any->set(idbObject); |
|
52 return any.release(); |
|
53 } |
|
54 ~IDBAny(); |
|
55 |
|
56 enum Type { |
|
57 UndefinedType = 0, |
|
58 NullType, |
|
59 IDBDatabaseRequestType, |
|
60 IDBIndexRequestType, |
|
61 IDBKeyType, |
|
62 IDBObjectStoreRequestType, |
|
63 IndexedDatabaseRequestType, |
|
64 SerializedScriptValueType |
|
65 }; |
|
66 |
|
67 Type type() const { return m_type; } |
|
68 // Use type() to figure out which one of these you're allowed to call. |
|
69 PassRefPtr<IDBDatabaseRequest> idbDatabaseRequest(); |
|
70 PassRefPtr<IDBIndexRequest> idbIndexRequest(); |
|
71 PassRefPtr<IDBKey> idbKey(); |
|
72 PassRefPtr<IDBObjectStoreRequest> idbObjectStoreRequest(); |
|
73 PassRefPtr<IndexedDatabaseRequest> indexedDatabaseRequest(); |
|
74 PassRefPtr<SerializedScriptValue> serializedScriptValue(); |
|
75 |
|
76 // Set can only be called once. |
|
77 void set(); // For "null". |
|
78 void set(PassRefPtr<IDBDatabaseRequest>); |
|
79 void set(PassRefPtr<IDBIndexRequest>); |
|
80 void set(PassRefPtr<IDBKey>); |
|
81 void set(PassRefPtr<IDBObjectStoreRequest>); |
|
82 void set(PassRefPtr<IndexedDatabaseRequest>); |
|
83 void set(PassRefPtr<SerializedScriptValue>); |
|
84 |
|
85 private: |
|
86 IDBAny(); |
|
87 |
|
88 Type m_type; |
|
89 |
|
90 // Only one of the following should ever be in use at any given time. |
|
91 RefPtr<IDBDatabaseRequest> m_idbDatabaseRequest; |
|
92 RefPtr<IDBIndexRequest> m_idbIndexRequest; |
|
93 RefPtr<IDBKey> m_idbKey; |
|
94 RefPtr<IDBObjectStoreRequest> m_idbObjectStoreRequest; |
|
95 RefPtr<IndexedDatabaseRequest> m_indexedDatabaseRequest; |
|
96 RefPtr<SerializedScriptValue> m_serializedScriptValue; |
|
97 }; |
|
98 |
|
99 } // namespace WebCore |
|
100 |
|
101 #endif // ENABLE(INDEXED_DATABASE) |
|
102 |
|
103 #endif // IDBAny_h |