Modern IDB: Pipe through cursor functions from client to server.
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / client / IDBAnyImpl.h
1 /*
2  * Copyright (C) 2015 Apple 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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef IDBAnyImpl_h
27 #define IDBAnyImpl_h
28
29 #if ENABLE(INDEXED_DATABASE)
30
31 #include "IDBAny.h"
32 #include "IDBDatabaseImpl.h"
33 #include "IDBIndexImpl.h"
34 #include "IDBObjectStoreImpl.h"
35
36 namespace WebCore {
37 namespace IDBClient {
38
39 class IDBAny : public WebCore::IDBAny {
40 public:
41     static RefPtr<IDBAny> create(Ref<IDBDatabase>&& database)
42     {
43         return adoptRef(new IDBAny(WTF::move(database)));
44     }
45
46     static Ref<IDBAny> create(Ref<IDBObjectStore>&& objectStore)
47     {
48         return adoptRef(*new IDBAny(WTF::move(objectStore)));
49     }
50
51     static Ref<IDBAny> create(Ref<IDBIndex>&& index)
52     {
53         return adoptRef(*new IDBAny(WTF::move(index)));
54     }
55
56     static RefPtr<IDBAny> create(Ref<IDBCursor>&& cursor)
57     {
58         return adoptRef(new IDBAny(WTF::move(cursor)));
59     }
60
61     static RefPtr<IDBAny> create(const IDBKeyPath& keyPath)
62     {
63         return adoptRef(new IDBAny(keyPath));
64     }
65
66     static RefPtr<IDBAny> create(const Deprecated::ScriptValue& value)
67     {
68         return adoptRef(new IDBAny(value));
69     }
70
71     static RefPtr<IDBAny> createUndefined()
72     {
73         return adoptRef(new IDBAny(IDBAny::Type::Undefined));
74     }
75
76     virtual ~IDBAny();
77
78     virtual Type type() const override final { return m_type; }
79     virtual RefPtr<WebCore::DOMStringList> domStringList() override final;
80     virtual RefPtr<WebCore::IDBCursor> idbCursor() override final;
81     virtual RefPtr<WebCore::IDBCursorWithValue> idbCursorWithValue() override final;
82     virtual RefPtr<WebCore::IDBDatabase> idbDatabase() override final;
83     virtual RefPtr<WebCore::IDBFactory> idbFactory() override final;
84     virtual RefPtr<WebCore::IDBIndex> idbIndex() override final;
85     virtual RefPtr<WebCore::IDBObjectStore> idbObjectStore() override final;
86     virtual RefPtr<WebCore::IDBTransaction> idbTransaction() override final;
87     virtual const Deprecated::ScriptValue& scriptValue() override final;
88     virtual int64_t integer() override final;
89     virtual const String& string() override final;
90     virtual const IDBKeyPath& keyPath() override final;
91
92     IDBObjectStore* modernIDBObjectStore();
93     IDBIndex* modernIDBIndex();
94     IDBCursor* modernIDBCursor();
95
96 private:
97     explicit IDBAny(IDBAny::Type);
98     explicit IDBAny(Ref<IDBDatabase>&&);
99     explicit IDBAny(Ref<IDBObjectStore>&&);
100     explicit IDBAny(Ref<IDBIndex>&&);
101     explicit IDBAny(Ref<IDBCursor>&&);
102     explicit IDBAny(const IDBKeyPath&);
103     explicit IDBAny(const Deprecated::ScriptValue&);
104
105     IDBAny::Type m_type { IDBAny::Type::Undefined };
106     RefPtr<IDBDatabase> m_database;
107     RefPtr<IDBObjectStore> m_objectStore;
108     RefPtr<IDBIndex> m_index;
109     RefPtr<IDBCursor> m_cursor;
110     RefPtr<IDBCursor> m_cursorWithValue;
111
112     const IDBKeyPath m_idbKeyPath;
113     const Deprecated::ScriptValue m_scriptValue;
114     const String m_string;
115     const int64_t m_integer { 0 };
116 };
117
118 } // namespace IDBClient
119 } // namespace WebCore
120
121 #endif // ENABLE(INDEXED_DATABASE)
122 #endif // IDBAnyImpl_h