| 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 c6488fa0b66c096a9259bcd065ec8a586ee46476..2ca6830c43ec8116ce190fa351b85eaf7e76e27b 100644
|
| --- a/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| +++ b/third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp
|
| @@ -4,34 +4,128 @@
|
|
|
| #include "modules/payments/PaymentAppManager.h"
|
|
|
| +#include "bindings/core/v8/ScriptPromise.h"
|
| +#include "bindings/core/v8/ScriptState.h"
|
| +#include "core/dom/DOMException.h"
|
| #include "modules/payments/PaymentAppManifest.h"
|
| +#include "modules/payments/PaymentAppOption.h"
|
| #include "modules/serviceworkers/ServiceWorkerRegistration.h"
|
| +#include "platform/mojo/MojoHelper.h"
|
| +#include "public/platform/InterfaceProvider.h"
|
| +#include "public/platform/Platform.h"
|
| +
|
| +namespace mojo {
|
| +
|
| +using payments::mojom::blink::PaymentAppManifest;
|
| +using payments::mojom::blink::PaymentAppManifestPtr;
|
| +using payments::mojom::blink::PaymentAppOption;
|
| +using payments::mojom::blink::PaymentAppOptionPtr;
|
| +
|
| +template <>
|
| +struct TypeConverter<PaymentAppOptionPtr, blink::PaymentAppOption> {
|
| + static PaymentAppOptionPtr Convert(const blink::PaymentAppOption& input) {
|
| + PaymentAppOptionPtr output = PaymentAppOption::New();
|
| + output->label = input.hasLabel() ? input.label() : WTF::emptyString();
|
| + output->icon = input.hasIcon() ? input.icon() : WTF::String();
|
| + output->id = input.hasId() ? input.id() : WTF::emptyString();
|
| + output->enabled_methods = WTF::Vector<WTF::String>(input.enabledMethods());
|
| + return output;
|
| + }
|
| +};
|
| +
|
| +template <>
|
| +struct TypeConverter<PaymentAppManifestPtr, blink::PaymentAppManifest> {
|
| + static PaymentAppManifestPtr Convert(const blink::PaymentAppManifest& input) {
|
| + PaymentAppManifestPtr output = PaymentAppManifest::New();
|
| + output->label = input.hasLabel() ? input.label() : WTF::emptyString();
|
| + output->icon = input.hasIcon() ? input.icon() : WTF::String();
|
| + if (input.hasOptions()) {
|
| + for (size_t i = 0; i < input.options().size(); ++i) {
|
| + output->options.append(PaymentAppOption::From(input.options()[i]));
|
| + }
|
| + }
|
| + return output;
|
| + }
|
| +};
|
| +
|
| +} // namespace mojo
|
|
|
| namespace blink {
|
|
|
| PaymentAppManager* PaymentAppManager::create(
|
| + ScriptState* scriptState,
|
| ServiceWorkerRegistration* registration) {
|
| - return new PaymentAppManager(registration);
|
| + return new PaymentAppManager(scriptState, registration);
|
| }
|
|
|
| -ScriptPromise PaymentAppManager::getManifest() {
|
| +ScriptPromise PaymentAppManager::getManifest(ScriptState* scriptState) {
|
| NOTIMPLEMENTED();
|
| return ScriptPromise();
|
| }
|
|
|
| ScriptPromise PaymentAppManager::setManifest(
|
| + ScriptState* scriptState,
|
| const PaymentAppManifest& manifest) {
|
| - NOTIMPLEMENTED();
|
| - return ScriptPromise();
|
| + 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->SetManifest(
|
| + m_registration->scope(),
|
| + payments::mojom::blink::PaymentAppManifest::From(manifest),
|
| + convertToBaseCallback(WTF::bind(&PaymentAppManager::onSetManifest,
|
| + wrapPersistent(this),
|
| + wrapPersistent(resolver))));
|
| +
|
| + return promise;
|
| +}
|
| +
|
| +void PaymentAppManager::onSetManifest(
|
| + ScriptPromiseResolver* resolver,
|
| + payments::mojom::blink::PaymentAppManifestError error) {
|
| + DCHECK(resolver);
|
| + switch (error) {
|
| + case payments::mojom::blink::PaymentAppManifestError::NOT_IMPLEMENTED:
|
| + resolver->reject(
|
| + DOMException::create(NotSupportedError, "Not implemented yet."));
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| DEFINE_TRACE(PaymentAppManager) {
|
| visitor->trace(m_registration);
|
| + ContextLifecycleObserver::trace(visitor);
|
| }
|
|
|
| -PaymentAppManager::PaymentAppManager(ServiceWorkerRegistration* registration)
|
| - : m_registration(registration) {
|
| +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::onServiceConnectionError() {
|
| + if (!Platform::current()) {
|
| + return;
|
| + }
|
| +
|
| + m_manager.reset();
|
| +}
|
| +
|
| +void PaymentAppManager::contextDestroyed() {
|
| + m_manager.reset();
|
| }
|
|
|
| } // namespace blink
|
|
|