| Index: third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| diff --git a/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp b/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| index d75482de914574dc476b13b81807800c0f38bfd8..55cb50b243b700954c1968125248c838c1095a7c 100644
|
| --- a/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| +++ b/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| @@ -48,6 +48,37 @@ struct TypeConverter<PaymentAppManifestPtr, blink::PaymentAppManifest> {
|
| }
|
| };
|
|
|
| +template <>
|
| +struct TypeConverter<blink::PaymentAppManifest, PaymentAppManifestPtr> {
|
| + static blink::PaymentAppManifest Convert(const PaymentAppManifestPtr& input) {
|
| + blink::PaymentAppManifest output;
|
| + output.setLabel(input->label);
|
| + output.setIcon(input->icon);
|
| + blink::HeapVector<blink::PaymentAppOption> options;
|
| + for (const auto& option : input->options) {
|
| + options.append(mojo::ConvertTo<blink::PaymentAppOption>(option));
|
| + }
|
| + output.setOptions(options);
|
| + return output;
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct TypeConverter<blink::PaymentAppOption, PaymentAppOptionPtr> {
|
| + static blink::PaymentAppOption Convert(const PaymentAppOptionPtr& input) {
|
| + blink::PaymentAppOption output;
|
| + output.setLabel(input->label);
|
| + output.setIcon(input->icon);
|
| + output.setId(input->id);
|
| + Vector<WTF::String> enabledMethods;
|
| + for (const auto& method : input->enabled_methods) {
|
| + enabledMethods.append(method);
|
| + }
|
| + output.setEnabledMethods(enabledMethods);
|
| + return output;
|
| + }
|
| +};
|
| +
|
| } // namespace mojo
|
|
|
| namespace blink {
|
| @@ -58,9 +89,8 @@ PaymentAppManager* PaymentAppManager::create(
|
| return new PaymentAppManager(scriptState, registration);
|
| }
|
|
|
| -ScriptPromise PaymentAppManager::getManifest(ScriptState* scriptState) {
|
| - NOTIMPLEMENTED();
|
| - return ScriptPromise();
|
| +void PaymentAppManager::contextDestroyed() {
|
| + m_manager.reset();
|
| }
|
|
|
| ScriptPromise PaymentAppManager::setManifest(
|
| @@ -85,6 +115,41 @@ ScriptPromise PaymentAppManager::setManifest(
|
| return promise;
|
| }
|
|
|
| +ScriptPromise PaymentAppManager::getManifest(ScriptState* scriptState) {
|
| + if (!m_manager) {
|
| + return ScriptPromise::rejectWithDOMException(
|
| + scriptState, DOMException::create(InvalidStateError,
|
| + "Payment app manager unavailable."));
|
| + }
|
| +
|
| + ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
|
| + ScriptPromise promise = resolver->promise();
|
| +
|
| + m_manager->GetManifest(m_registration->scope(),
|
| + convertToBaseCallback(WTF::bind(
|
| + &PaymentAppManager::onGetManifest,
|
| + wrapPersistent(this), wrapPersistent(resolver))));
|
| +
|
| + return promise;
|
| +}
|
| +
|
| +DEFINE_TRACE(PaymentAppManager) {
|
| + visitor->trace(m_registration);
|
| + ContextLifecycleObserver::trace(visitor);
|
| +}
|
| +
|
| +PaymentAppManager::PaymentAppManager(ScriptState* scriptState,
|
| + ServiceWorkerRegistration* registration)
|
| + : ContextLifecycleObserver(scriptState->getExecutionContext()),
|
| + m_registration(registration) {
|
| + DCHECK(registration);
|
| + Platform::current()->interfaceProvider()->getInterface(
|
| + mojo::GetProxy(&m_manager));
|
| +
|
| + m_manager.set_connection_error_handler(convertToBaseCallback(WTF::bind(
|
| + &PaymentAppManager::onServiceConnectionError, wrapWeakPersistent(this))));
|
| +}
|
| +
|
| void PaymentAppManager::onSetManifest(
|
| ScriptPromiseResolver* resolver,
|
| payments::mojom::blink::PaymentAppManifestError error) {
|
| @@ -101,28 +166,36 @@ void PaymentAppManager::onSetManifest(
|
| resolver->reject(
|
| DOMException::create(InvalidStateError, "No active service worker."));
|
| break;
|
| - case payments::mojom::blink::PaymentAppManifestError::STORE_MANIFEST_FAILED:
|
| + case payments::mojom::blink::PaymentAppManifestError::
|
| + MANIFEST_STORAGE_OPERATION_FAILED:
|
| resolver->reject(DOMException::create(
|
| InvalidStateError, "Storing manifest data is failed."));
|
| break;
|
| }
|
| }
|
|
|
| -DEFINE_TRACE(PaymentAppManager) {
|
| - visitor->trace(m_registration);
|
| - ContextLifecycleObserver::trace(visitor);
|
| -}
|
| -
|
| -PaymentAppManager::PaymentAppManager(ScriptState* scriptState,
|
| - ServiceWorkerRegistration* registration)
|
| - : ContextLifecycleObserver(scriptState->getExecutionContext()),
|
| - m_registration(registration) {
|
| - DCHECK(registration);
|
| - Platform::current()->interfaceProvider()->getInterface(
|
| - mojo::GetProxy(&m_manager));
|
| -
|
| - m_manager.set_connection_error_handler(convertToBaseCallback(WTF::bind(
|
| - &PaymentAppManager::onServiceConnectionError, wrapWeakPersistent(this))));
|
| +void PaymentAppManager::onGetManifest(
|
| + ScriptPromiseResolver* resolver,
|
| + payments::mojom::blink::PaymentAppManifestPtr manifest,
|
| + payments::mojom::blink::PaymentAppManifestError error) {
|
| + DCHECK(resolver);
|
| + switch (error) {
|
| + case payments::mojom::blink::PaymentAppManifestError::NONE:
|
| + resolver->resolve(
|
| + mojo::ConvertTo<PaymentAppManifest>(std::move(manifest)));
|
| + break;
|
| + case payments::mojom::blink::PaymentAppManifestError::NOT_IMPLEMENTED:
|
| + resolver->reject(
|
| + DOMException::create(NotSupportedError, "Not implemented yet."));
|
| + break;
|
| + case payments::mojom::blink::PaymentAppManifestError::NO_ACTIVE_WORKER:
|
| + case payments::mojom::blink::PaymentAppManifestError::
|
| + MANIFEST_STORAGE_OPERATION_FAILED:
|
| + resolver->reject(DOMException::create(
|
| + AbortError,
|
| + "No payment app manifest associated with the service worker."));
|
| + break;
|
| + }
|
| }
|
|
|
| void PaymentAppManager::onServiceConnectionError() {
|
| @@ -133,8 +206,4 @@ void PaymentAppManager::onServiceConnectionError() {
|
| m_manager.reset();
|
| }
|
|
|
| -void PaymentAppManager::contextDestroyed() {
|
| - m_manager.reset();
|
| -}
|
| -
|
| } // namespace blink
|
|
|