Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Unified Diff: third_party/WebKit/Source/modules/payments/PaymentAppManager.cpp

Issue 2476343002: PaymentApp: Initial implementation for PaymentAppManager.setManifest(). (Closed)
Patch Set: fix lint error Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698