018fc0e77871da430ae3445ba44f1306359f8651
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / client / IDBConnectionToServer.cpp
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 #include "config.h"
27 #include "IDBConnectionToServer.h"
28
29 #if ENABLE(INDEXED_DATABASE)
30
31 #include "IDBOpenDBRequestImpl.h"
32 #include "IDBRequestData.h"
33 #include "IDBResultData.h"
34 #include "Logging.h"
35
36 namespace WebCore {
37 namespace IDBClient {
38
39 Ref<IDBConnectionToServer> IDBConnectionToServer::create(IDBConnectionToServerDelegate& delegate)
40 {
41     return adoptRef(*new IDBConnectionToServer(delegate));
42 }
43
44 IDBConnectionToServer::IDBConnectionToServer(IDBConnectionToServerDelegate& delegate)
45     : m_delegate(delegate)
46 {
47 }
48
49 uint64_t IDBConnectionToServer::identifier() const
50 {
51     return m_delegate->identifier();
52 }
53
54 void IDBConnectionToServer::deleteDatabase(IDBOpenDBRequest& request)
55 {
56     LOG(IndexedDB, "IDBConnectionToServer::deleteDatabase - %s", request.databaseIdentifier().debugString().utf8().data());
57
58     ASSERT(!m_openDBRequestMap.contains(request.resourceIdentifier()));
59     m_openDBRequestMap.set(request.resourceIdentifier(), &request);
60     
61     IDBRequestData requestData(*this, request);
62     m_delegate->deleteDatabase(requestData);
63 }
64
65 void IDBConnectionToServer::didDeleteDatabase(const IDBResultData& resultData)
66 {
67     LOG(IndexedDB, "IDBConnectionToServer::didDeleteDatabase");
68
69     auto request = m_openDBRequestMap.take(resultData.requestIdentifier());
70     ASSERT(request);
71
72     request->requestCompleted(resultData);
73 }
74
75 void IDBConnectionToServer::openDatabase(IDBOpenDBRequest& request)
76 {
77     LOG(IndexedDB, "IDBConnectionToServer::openDatabase - %s", request.databaseIdentifier().debugString().utf8().data());
78
79     ASSERT(!m_openDBRequestMap.contains(request.resourceIdentifier()));
80     m_openDBRequestMap.set(request.resourceIdentifier(), &request);
81     
82     IDBRequestData requestData(*this, request);
83     m_delegate->openDatabase(requestData);
84 }
85
86 void IDBConnectionToServer::didOpenDatabase(const IDBResultData& resultData)
87 {
88     LOG(IndexedDB, "IDBConnectionToServer::didOpenDatabase");
89
90     auto request = m_openDBRequestMap.take(resultData.requestIdentifier());
91     ASSERT(request);
92
93     request->requestCompleted(resultData);
94 }
95
96 void IDBConnectionToServer::commitTransaction(IDBTransaction& transaction)
97 {
98     LOG(IndexedDB, "IDBConnectionToServer::commitTransaction");
99     ASSERT(!m_committingTransactions.contains(transaction.info().identifier()));
100     m_committingTransactions.set(transaction.info().identifier(), &transaction);
101
102     auto identifier = transaction.info().identifier();
103     m_delegate->commitTransaction(identifier);
104 }
105
106 void IDBConnectionToServer::didCommitTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError& error)
107 {
108     LOG(IndexedDB, "IDBConnectionToServer::didCommitTransaction");
109
110     auto transaction = m_committingTransactions.take(transactionIdentifier);
111     ASSERT(transaction);
112
113     transaction->didCommit(error);
114 }
115
116 void IDBConnectionToServer::fireVersionChangeEvent(uint64_t /*databaseConnectionIdentifier*/ , uint64_t /*requestedVersion*/)
117 {
118     LOG(IndexedDB, "IDBConnectionToServer::fireVersionChangeEvent");
119
120     // FIXME: Implement versionchange events firing on already-open transactions.
121 }
122
123 void IDBConnectionToServer::registerDatabaseConnection(IDBDatabase& database)
124 {
125     ASSERT(!m_databaseConnections.contains(&database));
126     m_databaseConnections.add(&database);
127 }
128
129 void IDBConnectionToServer::unregisterDatabaseConnection(IDBDatabase& database)
130 {
131     ASSERT(m_databaseConnections.contains(&database));
132     m_databaseConnections.remove(&database);
133 }
134
135 } // namespace IDBClient
136 } // namespace WebCore
137
138 #endif // ENABLE(INDEXED_DATABASE)