| Index: content/browser/payments/payment_app_manager.cc
|
| diff --git a/content/browser/payments/payment_app_manager.cc b/content/browser/payments/payment_app_manager.cc
|
| index 9ea8dc32b1df8428ff6489b867d36c957a28efe5..bb75263c60052a26af04bdf97ad0ad75402766c1 100644
|
| --- a/content/browser/payments/payment_app_manager.cc
|
| +++ b/content/browser/payments/payment_app_manager.cc
|
| @@ -60,6 +60,17 @@ void PaymentAppManager::SetManifest(
|
| base::Passed(std::move(manifest)), callback));
|
| }
|
|
|
| +void PaymentAppManager::GetManifest(const std::string& scope,
|
| + const GetManifestCallback& callback) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| +
|
| + payment_app_context_->service_worker_context()
|
| + ->FindReadyRegistrationForPattern(
|
| + GURL(scope),
|
| + base::Bind(&PaymentAppManager::DidFindRegistrationToGetManifest,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| +}
|
| +
|
| void PaymentAppManager::DidFindRegistrationToSetManifest(
|
| payments::mojom::PaymentAppManifestPtr manifest,
|
| const SetManifestCallback& callback,
|
| @@ -101,10 +112,68 @@ void PaymentAppManager::DidFindRegistrationToSetManifest(
|
| void PaymentAppManager::DidSetManifest(const SetManifestCallback& callback,
|
| ServiceWorkerStatusCode status) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| - return callback.Run(
|
| - status == SERVICE_WORKER_OK
|
| - ? payments::mojom::PaymentAppManifestError::NONE
|
| - : payments::mojom::PaymentAppManifestError::STORE_MANIFEST_FAILED);
|
| + return callback.Run(status == SERVICE_WORKER_OK
|
| + ? payments::mojom::PaymentAppManifestError::NONE
|
| + : payments::mojom::PaymentAppManifestError::
|
| + MANIFEST_STORAGE_OPERATION_FAILED);
|
| +}
|
| +
|
| +void PaymentAppManager::DidFindRegistrationToGetManifest(
|
| + const GetManifestCallback& callback,
|
| + ServiceWorkerStatusCode status,
|
| + scoped_refptr<ServiceWorkerRegistration> registration) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + if (status != SERVICE_WORKER_OK) {
|
| + callback.Run(payments::mojom::PaymentAppManifest::New(),
|
| + payments::mojom::PaymentAppManifestError::NO_ACTIVE_WORKER);
|
| + return;
|
| + }
|
| +
|
| + payment_app_context_->service_worker_context()->GetRegistrationUserData(
|
| + registration->id(), {kPaymentAppManifestDataKey},
|
| + base::Bind(&PaymentAppManager::DidGetManifest,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| +}
|
| +
|
| +void PaymentAppManager::DidGetManifest(const GetManifestCallback& callback,
|
| + const std::vector<std::string>& data,
|
| + ServiceWorkerStatusCode status) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + if (status != SERVICE_WORKER_OK || data.size() != 1) {
|
| + callback.Run(payments::mojom::PaymentAppManifest::New(),
|
| + payments::mojom::PaymentAppManifestError::
|
| + MANIFEST_STORAGE_OPERATION_FAILED);
|
| + return;
|
| + }
|
| +
|
| + PaymentAppManifestProto manifest_proto;
|
| + bool success = manifest_proto.ParseFromString(data[0]);
|
| + if (!success) {
|
| + callback.Run(payments::mojom::PaymentAppManifest::New(),
|
| + payments::mojom::PaymentAppManifestError::
|
| + MANIFEST_STORAGE_OPERATION_FAILED);
|
| + return;
|
| + }
|
| +
|
| + payments::mojom::PaymentAppManifestPtr manifest =
|
| + payments::mojom::PaymentAppManifest::New();
|
| + manifest->label = manifest_proto.label();
|
| + if (manifest_proto.has_icon())
|
| + manifest->icon = manifest_proto.icon();
|
| + for (const auto& option_proto : manifest_proto.options()) {
|
| + payments::mojom::PaymentAppOptionPtr option =
|
| + payments::mojom::PaymentAppOption::New();
|
| + option->label = option_proto.label();
|
| + if (option_proto.has_icon())
|
| + option->icon = option_proto.icon();
|
| + option->id = option_proto.id();
|
| + for (const auto& method : option_proto.enabled_methods())
|
| + option->enabled_methods.push_back(method);
|
| + manifest->options.push_back(std::move(option));
|
| + }
|
| +
|
| + callback.Run(std::move(manifest),
|
| + payments::mojom::PaymentAppManifestError::NONE);
|
| }
|
|
|
| } // namespace content
|
|
|