1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PAYMENTS_CONTENT_PAYMENT_MANIFEST_WEB_DATA_SERVICE_H_
#define COMPONENTS_PAYMENTS_CONTENT_PAYMENT_MANIFEST_WEB_DATA_SERVICE_H_
#include <stdint.h>
#include <memory>
#include <vector>
#include "base/memory/ref_counted.h"
#include "components/payments/content/browser_binding/browser_bound_key_metadata.h"
#include "components/payments/content/web_app_manifest.h"
#include "components/webdata/common/web_data_service_base.h"
#include "components/webdata/common/web_data_service_consumer.h"
#include "components/webdata/common/web_database.h"
class WDTypedResult;
class WebDatabaseService;
namespace base {
class SequencedTaskRunner;
}
namespace payments {
struct SecurePaymentConfirmationCredential;
// Web data service to read/write data in WebAppManifestSectionTable and
// PaymentMethodManifestTable.
class PaymentManifestWebDataService : public WebDataServiceBase,
public WebDataServiceConsumer {
public:
PaymentManifestWebDataService(
scoped_refptr<WebDatabaseService> wdbs,
scoped_refptr<base::SequencedTaskRunner> ui_task_runner);
PaymentManifestWebDataService(const PaymentManifestWebDataService&) = delete;
PaymentManifestWebDataService& operator=(
const PaymentManifestWebDataService&) = delete;
// Adds the web app `manifest`.
void AddPaymentWebAppManifest(std::vector<WebAppManifestSection> manifest);
// Adds the `payment_method`'s manifest.
void AddPaymentMethodManifest(const std::string& payment_method,
std::vector<std::string> app_package_names);
// Gets the `web_app`'s manifest and returns it to the `consumer`, which must
// outlive the DB operation, because DB tasks cannot be cancelled.
WebDataServiceBase::Handle GetPaymentWebAppManifest(
const std::string& web_app,
WebDataServiceConsumer* consumer);
// Gets the `payment_method`'s manifest and returns it the `consumer`, which
// must outlive the DB operation, because DB tasks cannot be cancelled.
WebDataServiceBase::Handle GetPaymentMethodManifest(
const std::string& payment_method,
WebDataServiceConsumer* consumer);
// Adds the secure payment confirmation `credential` and returns a boolean
// status to the `consumer`, which must outlive the DB operation, because DB
// tasks cannot be cancelled. The `credential` should not be null.
WebDataServiceBase::Handle AddSecurePaymentConfirmationCredential(
std::unique_ptr<SecurePaymentConfirmationCredential> credential,
WebDataServiceConsumer* consumer);
// Gets the secure payment confirmation credential information for the given
// `credential_ids` and returns it to the `consumer`, which must outlive the
// DB operation, because DB tasks cannot be cancelled. Please use
// `std::move()` for `credential_ids` parameter to avoid extra copies.
WebDataServiceBase::Handle GetSecurePaymentConfirmationCredentials(
std::vector<std::vector<uint8_t>> credential_ids,
const std::string& relying_party_id,
WebDataServiceConsumer* consumer);
// Clears all of the the secure payment confirmation credential information
// created in the given time range `begin` and `end`, and invokes `callback`
// when the clearing is completed.
virtual void ClearSecurePaymentConfirmationCredentials(
base::Time begin,
base::Time end,
base::OnceClosure callback);
// Set the `browser_bound_key_id` for the given `credential_id` and
// `relying_party_id`, and returns a boolean status to the `consumer`, which
// must outlive the DB operation, because DB tasks cannot be cancelled.
virtual WebDataServiceBase::Handle SetBrowserBoundKey(
std::vector<uint8_t> credential_id,
std::string relying_party_id,
std::vector<uint8_t> browser_bound_key_id,
WebDataServiceConsumer* consumer);
// Get the browser bound key id given the `credential_id` and
// `relying_party_id`. Returns the key id or nullopt to the `consumer`, which
// must outlive the DB operation, because DB tasks cannot be cancelled.
virtual WebDataServiceBase::Handle GetBrowserBoundKey(
const std::vector<uint8_t> credential_id,
std::string relying_party_id,
WebDataServiceConsumer* consumer);
// Get all browser bound keys. Returns the BrowserBoundKeyMetadata structs in
// a vector to the `callback`.
virtual WebDataServiceBase::Handle GetAllBrowserBoundKeys(
WebDataServiceRequestCallback callback);
// Deletes the browser bound keys associated to `passkeys` - the list of the
// relying party and credential id pairs. `callback` is invoked once the
// webdatabase operation has completed.
virtual void DeleteBrowserBoundKeys(
std::vector<BrowserBoundKeyMetadata::RelyingPartyAndCredentialId>
passkeys,
base::OnceClosure callback);
// Override WebDataServiceConsumer interface.
void OnWebDataServiceRequestDone(
WebDataServiceBase::Handle h,
std::unique_ptr<WDTypedResult> result) override;
protected:
~PaymentManifestWebDataService() override;
private:
std::unique_ptr<WDTypedResult> ClearSecurePaymentConfirmationCredentialsImpl(
base::Time begin,
base::Time end,
WebDatabase* db);
void RemoveExpiredData(WebDatabase* db);
WebDatabase::State AddPaymentWebAppManifestImpl(
const std::vector<WebAppManifestSection>& manifest,
WebDatabase* db);
WebDatabase::State AddPaymentMethodManifestImpl(
const std::string& payment_method,
const std::vector<std::string>& app_package_names,
WebDatabase* db);
std::unique_ptr<WDTypedResult> AddSecurePaymentConfirmationCredentialImpl(
std::unique_ptr<SecurePaymentConfirmationCredential> credential,
WebDatabase* db);
std::unique_ptr<WDTypedResult> GetPaymentWebAppManifestImpl(
const std::string& web_app,
WebDatabase* db);
std::unique_ptr<WDTypedResult> GetPaymentMethodManifestImpl(
const std::string& payment_method,
WebDatabase* db);
std::unique_ptr<WDTypedResult> GetSecurePaymentConfirmationCredentialsImpl(
std::vector<std::vector<uint8_t>> credential_ids,
const std::string& relying_party_id,
WebDatabase* db);
std::unique_ptr<WDTypedResult> SetBrowserBoundKeyImpl(
std::vector<uint8_t> credential_id,
std::string relying_party_id,
std::vector<uint8_t> browser_bound_key_id,
WebDatabase* db);
std::unique_ptr<WDTypedResult> GetBrowserBoundKeyImpl(
std::vector<uint8_t> credential_id,
std::string relying_party_id,
WebDatabase* db);
std::unique_ptr<WDTypedResult> GetAllBrowserBoundKeysImpl(WebDatabase* db);
WebDatabase::State DeleteBrowserBoundKeysImpl(
std::vector<BrowserBoundKeyMetadata::RelyingPartyAndCredentialId>
passkeys,
base::OnceClosure callback,
WebDatabase* db);
std::map<WebDataServiceBase::Handle, base::OnceClosure>
clearing_credentials_requests_;
};
} // namespace payments
#endif // COMPONENTS_PAYMENTS_CONTENT_PAYMENT_MANIFEST_WEB_DATA_SERVICE_H_
|