1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef WebServiceWorkerCache_h
6#define WebServiceWorkerCache_h
7
8#include "public/platform/WebCallbacks.h"
9#include "public/platform/WebCommon.h"
10#include "public/platform/WebServiceWorkerCacheError.h"
11#include "public/platform/WebServiceWorkerRequest.h"
12#include "public/platform/WebServiceWorkerResponse.h"
13#include "public/platform/WebString.h"
14#include "public/platform/WebVector.h"
15
16namespace blink {
17
18// The Service Worker Cache API. The embedder provides the implementation of the Cache to Blink. Blink uses the interface
19// to operate on entries.
20// This object is owned by Blink, and should be destroyed as each Cache instance is no longer in use.
21class WebServiceWorkerCache {
22public:
23    typedef WebCallbacks<WebServiceWorkerResponse, WebServiceWorkerCacheError> CacheMatchCallbacks;
24    typedef WebCallbacks<WebVector<WebServiceWorkerResponse>, WebServiceWorkerCacheError> CacheWithResponsesCallbacks;
25    typedef WebCallbacks<WebVector<WebServiceWorkerRequest>, WebServiceWorkerCacheError> CacheWithRequestsCallbacks;
26
27    virtual ~WebServiceWorkerCache() { }
28
29    // Options that affect the scope of searches.
30    struct QueryParams {
31        QueryParams() : ignoreSearch(false), ignoreMethod(false), ignoreVary(false), prefixMatch(false) { }
32
33        bool ignoreSearch;
34        bool ignoreMethod;
35        bool ignoreVary;
36        bool prefixMatch;
37        WebString cacheName;
38    };
39
40    enum OperationType {
41        OperationTypeUndefined,
42        OperationTypePut,
43        OperationTypeDelete,
44        OperationTypeLast = OperationTypeDelete
45    };
46
47    struct BatchOperation {
48        BatchOperation() : operationType(OperationTypeUndefined) { }
49
50        OperationType operationType;
51        WebServiceWorkerRequest request;
52        WebServiceWorkerResponse response;
53        QueryParams matchParams;
54    };
55
56    WebServiceWorkerCache() { }
57
58    // Ownership of the Cache*Callbacks methods passes to the WebServiceWorkerCache instance, which will delete it after
59    // calling onSuccess or onFailure.
60    virtual void dispatchMatch(CacheMatchCallbacks*, const WebServiceWorkerRequest&, const QueryParams&) = 0;
61    virtual void dispatchMatchAll(CacheWithResponsesCallbacks*, const WebServiceWorkerRequest&, const QueryParams&) = 0;
62    virtual void dispatchKeys(CacheWithRequestsCallbacks*, const WebServiceWorkerRequest*, const QueryParams&) = 0;
63    virtual void dispatchBatch(CacheWithResponsesCallbacks*, const WebVector<BatchOperation>&) = 0;
64};
65
66} // namespace blink
67
68#endif // WebServiceWorkerCache_h
69