Index: third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
index 44a9373fbbb401d6188579acaf0c3a692523ea3b..41c09b9c97da9c4ec7be037cc4085949ddeef2c1 100644 |
--- a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
@@ -527,6 +527,20 @@ ScriptPromise PaymentRequest::abort(ScriptState* scriptState) { |
return m_abortResolver->promise(); |
} |
+ScriptPromise PaymentRequest::canMakeActivePayment(ScriptState* scriptState) { |
+ if (!m_paymentProvider.is_bound() || m_canMakeActivePaymentResolver || |
+ !scriptState->contextIsValid()) { |
+ return ScriptPromise::rejectWithDOMException( |
+ scriptState, DOMException::create(InvalidStateError, |
+ "Cannot query payment request")); |
+ } |
+ |
+ m_paymentProvider->CanMakeActivePayment(); |
+ |
+ m_canMakeActivePaymentResolver = ScriptPromiseResolver::create(scriptState); |
+ return m_canMakeActivePaymentResolver->promise(); |
+} |
+ |
bool PaymentRequest::hasPendingActivity() const { |
return m_showResolver || m_completeResolver; |
} |
@@ -618,6 +632,7 @@ DEFINE_TRACE(PaymentRequest) { |
visitor->trace(m_showResolver); |
visitor->trace(m_completeResolver); |
visitor->trace(m_abortResolver); |
+ visitor->trace(m_canMakeActivePaymentResolver); |
EventTargetWithInlineData::trace(visitor); |
ContextLifecycleObserver::trace(visitor); |
} |
@@ -812,6 +827,9 @@ void PaymentRequest::OnError(mojo::PaymentErrorReason error) { |
if (m_abortResolver) |
m_abortResolver->reject(DOMException::create(ec, message)); |
+ |
+ if (m_canMakeActivePaymentResolver) |
+ m_canMakeActivePaymentResolver->reject(DOMException::create(ec, message)); |
} else { |
if (m_completeResolver) |
m_completeResolver->reject(message); |
@@ -821,6 +839,9 @@ void PaymentRequest::OnError(mojo::PaymentErrorReason error) { |
if (m_abortResolver) |
m_abortResolver->reject(message); |
+ |
+ if (m_canMakeActivePaymentResolver) |
+ m_canMakeActivePaymentResolver->reject(message); |
} |
clearResolversAndCloseMojoConnection(); |
@@ -847,6 +868,25 @@ void PaymentRequest::OnAbort(bool abortedSuccessfully) { |
clearResolversAndCloseMojoConnection(); |
} |
+void PaymentRequest::OnCanMakeActivePayment( |
+ mojom::blink::ActivePaymentQueryResult result) { |
+ DCHECK(m_canMakeActivePaymentResolver); |
+ |
+ switch (result) { |
+ case mojom::blink::ActivePaymentQueryResult::CAN_MAKE_ACTIVE_PAYMENT: |
+ m_canMakeActivePaymentResolver->resolve(true); |
+ break; |
+ case mojom::blink::ActivePaymentQueryResult::CANNOT_MAKE_ACTIVE_PAYMENT: |
+ m_canMakeActivePaymentResolver->resolve(false); |
+ break; |
+ case mojom::blink::ActivePaymentQueryResult::QUERY_QUOTA_EXCEEDED: |
+ m_canMakeActivePaymentResolver->reject("Query quota exceeded"); |
+ break; |
+ } |
+ |
+ m_canMakeActivePaymentResolver.clear(); |
+} |
+ |
void PaymentRequest::onCompleteTimeout(TimerBase*) { |
m_paymentProvider->Complete(mojom::blink::PaymentComplete(Fail)); |
clearResolversAndCloseMojoConnection(); |
@@ -857,6 +897,7 @@ void PaymentRequest::clearResolversAndCloseMojoConnection() { |
m_completeResolver.clear(); |
m_showResolver.clear(); |
m_abortResolver.clear(); |
+ m_canMakeActivePaymentResolver.clear(); |
if (m_clientBinding.is_bound()) |
m_clientBinding.Close(); |
m_paymentProvider.reset(); |