PassRefPtr<> to RefPtr<> conversion in legacy IndexedDB code.
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / legacy / LegacyAny.h
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 LegacyAny_h
27 #define LegacyAny_h
28
29 #if ENABLE(INDEXED_DATABASE)
30
31 #include "IDBAny.h"
32 #include "IDBKeyPath.h"
33 #include "ScriptWrappable.h"
34 #include <bindings/ScriptValue.h>
35 #include <wtf/PassRefPtr.h>
36 #include <wtf/RefCounted.h>
37 #include <wtf/RefPtr.h>
38 #include <wtf/text/WTFString.h>
39
40 namespace WebCore {
41
42 class DOMStringList;
43 class IDBCursor;
44 class IDBCursorWithValue;
45 class IDBDatabase;
46 class IDBFactory;
47 class IDBIndex;
48 class IDBKeyPath;
49 class IDBObjectStore;
50 class IDBTransaction;
51
52 class LegacyCursor;
53 class LegacyCursorWithValue;
54 class LegacyDatabase;
55 class LegacyFactory;
56 class LegacyIndex;
57 class LegacyObjectStore;
58 class LegacyTransaction;
59
60 class LegacyAny : public IDBAny {
61 public:
62     static RefPtr<LegacyAny> createInvalid();
63     static RefPtr<LegacyAny> createNull();
64     static RefPtr<LegacyAny> createString(const String&);
65     template<typename T>
66     static RefPtr<LegacyAny> create(T* idbObject)
67     {
68         return adoptRef(new LegacyAny(idbObject));
69     }
70     template<typename T>
71     static RefPtr<LegacyAny> create(const T& idbObject)
72     {
73         return adoptRef(new LegacyAny(idbObject));
74     }
75     template<typename T>
76     static RefPtr<LegacyAny> create(PassRefPtr<T> idbObject)
77     {
78         RefPtr<T> refObject = idbObject;
79         return adoptRef(new LegacyAny(WTF::move(refObject)));
80     }
81     static RefPtr<LegacyAny> create(int64_t value)
82     {
83         return adoptRef(new LegacyAny(value));
84     }
85     ~LegacyAny();
86
87     virtual Type type() const override final { return m_type; }
88     // Use type() to figure out which one of these you're allowed to call.
89     virtual RefPtr<DOMStringList> domStringList() override final;
90     virtual RefPtr<IDBCursor> idbCursor() override final;
91     virtual RefPtr<IDBCursorWithValue> idbCursorWithValue() override final;
92     virtual RefPtr<IDBDatabase> idbDatabase() override final;
93     virtual RefPtr<IDBFactory> idbFactory() override final;
94     virtual RefPtr<IDBIndex> idbIndex() override final;
95     virtual RefPtr<IDBObjectStore> idbObjectStore() override final;
96     virtual RefPtr<IDBTransaction> idbTransaction() override final;
97     virtual const Deprecated::ScriptValue& scriptValue() override final;
98     virtual int64_t integer() override final;
99     virtual const String& string() override final;
100     virtual const IDBKeyPath& keyPath() override final { return m_idbKeyPath; };
101
102     LegacyCursor* legacyCursor();
103     LegacyCursorWithValue* legacyCursorWithValue();
104     LegacyDatabase* legacyDatabase();
105     LegacyFactory* legacyFactory();
106     LegacyIndex* legacyIndex();
107     LegacyObjectStore* legacyObjectStore();
108     LegacyTransaction* legacyTransaction();
109
110 private:
111     explicit LegacyAny(Type);
112     explicit LegacyAny(RefPtr<DOMStringList>);
113     explicit LegacyAny(RefPtr<LegacyCursor>);
114     explicit LegacyAny(RefPtr<LegacyCursorWithValue>);
115     explicit LegacyAny(RefPtr<LegacyDatabase>);
116     explicit LegacyAny(RefPtr<LegacyFactory>);
117     explicit LegacyAny(RefPtr<LegacyIndex>);
118     explicit LegacyAny(RefPtr<LegacyObjectStore>);
119     explicit LegacyAny(RefPtr<LegacyTransaction>);
120     explicit LegacyAny(const IDBKeyPath&);
121     explicit LegacyAny(const String&);
122     explicit LegacyAny(const Deprecated::ScriptValue&);
123     explicit LegacyAny(int64_t);
124
125     const Type m_type;
126
127     // Only one of the following should ever be in use at any given time.
128     const RefPtr<DOMStringList> m_domStringList;
129     const RefPtr<LegacyCursor> m_idbCursor;
130     const RefPtr<LegacyCursorWithValue> m_idbCursorWithValue;
131     const RefPtr<LegacyDatabase> m_idbDatabase;
132     const RefPtr<LegacyFactory> m_idbFactory;
133     const RefPtr<LegacyIndex> m_idbIndex;
134     const RefPtr<LegacyObjectStore> m_idbObjectStore;
135     const RefPtr<LegacyTransaction> m_idbTransaction;
136     const IDBKeyPath m_idbKeyPath;
137     const Deprecated::ScriptValue m_scriptValue;
138     const String m_string;
139     const int64_t m_integer;
140 };
141
142 } // namespace WebCore
143
144 #endif // ENABLE(INDEXED_DATABASE)
145
146 #endif // LegacyAny_h