[Cache API] Unify WebCore and WebKit error handling
[WebKit-https.git] / Source / WebCore / Modules / cache / CacheStorageConnection.cpp
1
2 /*
3  * Copyright (C) 2017 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
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 INC. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include "config.h"
28 #include "CacheStorageConnection.h"
29
30 using namespace WebCore::DOMCache;
31
32 namespace WebCore {
33
34 void CacheStorageConnection::open(const String& origin, const String& cacheName, CacheIdentifierCallback&& callback)
35 {
36     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
37     m_openAndRemoveCachePendingRequests.add(requestIdentifier, WTFMove(callback));
38
39     doOpen(requestIdentifier, origin, cacheName);
40 }
41
42 void CacheStorageConnection::remove(uint64_t cacheIdentifier, CacheIdentifierCallback&& callback)
43 {
44     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
45     m_openAndRemoveCachePendingRequests.add(requestIdentifier, WTFMove(callback));
46
47     doRemove(requestIdentifier, cacheIdentifier);
48 }
49
50 void CacheStorageConnection::retrieveCaches(const String& origin, CacheInfosCallback&& callback)
51 {
52     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
53     m_retrieveCachesPendingRequests.add(requestIdentifier, WTFMove(callback));
54
55     doRetrieveCaches(requestIdentifier, origin);
56 }
57
58 void CacheStorageConnection::retrieveRecords(uint64_t cacheIdentifier, RecordsCallback&& callback)
59 {
60     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
61     m_retrieveRecordsPendingRequests.add(requestIdentifier, WTFMove(callback));
62
63     doRetrieveRecords(requestIdentifier, cacheIdentifier);
64 }
65
66 void CacheStorageConnection::batchDeleteOperation(uint64_t cacheIdentifier, const ResourceRequest& request, CacheQueryOptions&& options, RecordIdentifiersCallback&& callback)
67 {
68     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
69     m_batchDeleteAndPutPendingRequests.add(requestIdentifier, WTFMove(callback));
70
71     doBatchDeleteOperation(requestIdentifier, cacheIdentifier, request, WTFMove(options));
72 }
73
74 void CacheStorageConnection::batchPutOperation(uint64_t cacheIdentifier, Vector<Record>&& records, RecordIdentifiersCallback&& callback)
75 {
76     uint64_t requestIdentifier = ++m_lastRequestIdentifier;
77     m_batchDeleteAndPutPendingRequests.add(requestIdentifier, WTFMove(callback));
78
79     doBatchPutOperation(requestIdentifier, cacheIdentifier, WTFMove(records));
80 }
81
82 void CacheStorageConnection::openOrRemoveCompleted(uint64_t requestIdentifier, const CacheIdentifierOrError& result)
83 {
84     if (auto callback = m_openAndRemoveCachePendingRequests.take(requestIdentifier))
85         callback(result);
86 }
87
88 void CacheStorageConnection::updateCaches(uint64_t requestIdentifier, CacheInfosOrError&& result)
89 {
90     if (auto callback = m_retrieveCachesPendingRequests.take(requestIdentifier))
91         callback(WTFMove(result));
92 }
93
94 void CacheStorageConnection::updateRecords(uint64_t requestIdentifier, RecordsOrError&& result)
95 {
96     if (auto callback = m_retrieveRecordsPendingRequests.take(requestIdentifier))
97         callback(WTFMove(result));
98 }
99
100 void CacheStorageConnection::deleteRecordsCompleted(uint64_t requestIdentifier, Expected<Vector<uint64_t>, Error>&& result)
101 {
102     if (auto callback = m_batchDeleteAndPutPendingRequests.take(requestIdentifier))
103         callback(WTFMove(result));
104 }
105
106 void CacheStorageConnection::putRecordsCompleted(uint64_t requestIdentifier, Expected<Vector<uint64_t>, Error>&& result)
107 {
108     if (auto callback = m_batchDeleteAndPutPendingRequests.take(requestIdentifier))
109         callback(WTFMove(result));
110 }
111
112 } // namespace WebCore