blob: 1cd0d2d02ed5c9b4b456549982df784421df103b [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/payments/content/payment_manifest_web_data_service.h"
#include "base/bind.h"
#include "base/location.h"
#include "components/payments/content/payment_method_manifest_table.h"
#include "components/payments/content/web_app_manifest_section_table.h"
#include "components/webdata/common/web_data_results.h"
#include "components/webdata/common/web_database_service.h"
namespace payments {
PaymentManifestWebDataService::PaymentManifestWebDataService(
scoped_refptr<WebDatabaseService> wdbs,
const ProfileErrorCallback& callback,
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner)
: WebDataServiceBase(wdbs, callback, ui_task_runner) {}
PaymentManifestWebDataService::~PaymentManifestWebDataService() {}
void PaymentManifestWebDataService::AddPaymentWebAppManifest(
std::vector<WebAppManifestSection> manifest) {
wdbs_->ScheduleDBTask(
FROM_HERE,
base::Bind(&PaymentManifestWebDataService::AddPaymentWebAppManifestImpl,
this, std::move(manifest)));
}
WebDatabase::State PaymentManifestWebDataService::AddPaymentWebAppManifestImpl(
const std::vector<WebAppManifestSection>& manifest,
WebDatabase* db) {
if (WebAppManifestSectionTable::FromWebDatabase(db)->AddWebAppManifest(
manifest)) {
return WebDatabase::COMMIT_NEEDED;
}
return WebDatabase::COMMIT_NOT_NEEDED;
}
void PaymentManifestWebDataService::AddPaymentMethodManifest(
const std::string& payment_method,
std::vector<std::string> app_package_names) {
wdbs_->ScheduleDBTask(
FROM_HERE,
base::Bind(&PaymentManifestWebDataService::AddPaymentMethodManifestImpl,
this, payment_method, std::move(app_package_names)));
}
WebDatabase::State PaymentManifestWebDataService::AddPaymentMethodManifestImpl(
const std::string& payment_method,
const std::vector<std::string>& app_package_names,
WebDatabase* db) {
if (PaymentMethodManifestTable::FromWebDatabase(db)->AddManifest(
payment_method, app_package_names)) {
return WebDatabase::COMMIT_NEEDED;
}
return WebDatabase::COMMIT_NOT_NEEDED;
}
WebDataServiceBase::Handle
PaymentManifestWebDataService::GetPaymentWebAppManifest(
const std::string& web_app,
WebDataServiceConsumer* consumer) {
return wdbs_->ScheduleDBTaskWithResult(
FROM_HERE,
base::Bind(&PaymentManifestWebDataService::GetPaymentWebAppManifestImpl,
this, web_app),
consumer);
}
std::unique_ptr<WDTypedResult>
PaymentManifestWebDataService::GetPaymentWebAppManifestImpl(
const std::string& web_app,
WebDatabase* db) {
RemoveExpiredData(db);
return std::make_unique<WDResult<std::vector<WebAppManifestSection>>>(
PAYMENT_WEB_APP_MANIFEST,
WebAppManifestSectionTable::FromWebDatabase(db)->GetWebAppManifest(
web_app));
}
WebDataServiceBase::Handle
PaymentManifestWebDataService::GetPaymentMethodManifest(
const std::string& payment_method,
WebDataServiceConsumer* consumer) {
return wdbs_->ScheduleDBTaskWithResult(
FROM_HERE,
base::Bind(&PaymentManifestWebDataService::GetPaymentMethodManifestImpl,
this, payment_method),
consumer);
}
std::unique_ptr<WDTypedResult>
PaymentManifestWebDataService::GetPaymentMethodManifestImpl(
const std::string& payment_method,
WebDatabase* db) {
RemoveExpiredData(db);
return std::make_unique<WDResult<std::vector<std::string>>>(
PAYMENT_METHOD_MANIFEST,
PaymentMethodManifestTable::FromWebDatabase(db)->GetManifest(
payment_method));
}
void PaymentManifestWebDataService::RemoveExpiredData(WebDatabase* db) {
PaymentMethodManifestTable::FromWebDatabase(db)->RemoveExpiredData();
WebAppManifestSectionTable::FromWebDatabase(db)->RemoveExpiredData();
}
} // namespace payments