Chromium Code Reviews| 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 707eb4766aca5803da6bdd8f08b71ee0bfa6bb34..bfc2522e318339ce44866e6e1c0fcfb053bff007 100644 |
| --- a/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| +++ b/third_party/WebKit/Source/modules/payments/PaymentRequest.cpp |
| @@ -252,14 +252,14 @@ ScriptPromise PaymentRequest::show(ScriptState* scriptState) |
| return m_showResolver->promise(); |
| } |
| -void PaymentRequest::abort(ExceptionState& exceptionState) |
| +ScriptPromise PaymentRequest::abort(ScriptState* scriptState) |
| { |
| - if (!m_showResolver) { |
| - exceptionState.throwDOMException(InvalidStateError, "Never called show(), so nothing to abort"); |
| - return; |
| - } |
| + if (!m_showResolver) |
| + return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "Never called show(), so nothing to abort")); |
| + m_abortResolver = ScriptPromiseResolver::create(scriptState); |
|
Marijn Kruisselbrink
2016/06/08 22:44:12
Presumably you want to do something special if m_a
please use gerrit instead
2016/06/09 22:36:14
Rejecting the second abort() promise is more consi
|
| m_paymentProvider->Abort(); |
| + return m_abortResolver->promise(); |
| } |
| const AtomicString& PaymentRequest::interfaceName() const |
| @@ -327,6 +327,7 @@ DEFINE_TRACE(PaymentRequest) |
| visitor->trace(m_shippingAddress); |
| visitor->trace(m_showResolver); |
| visitor->trace(m_completeResolver); |
| + visitor->trace(m_abortResolver); |
| EventTargetWithInlineData::trace(visitor); |
| ContextLifecycleObserver::trace(visitor); |
| } |
| @@ -477,6 +478,8 @@ void PaymentRequest::OnError() |
| m_completeResolver->reject(DOMException::create(SyntaxError, "Request cancelled")); |
| if (m_showResolver) |
| m_showResolver->reject(DOMException::create(SyntaxError, "Request cancelled")); |
| + if (m_abortResolver) |
| + m_abortResolver->reject(DOMException::create(SyntaxError, "Request cancelled")); |
| clearResolversAndCloseMojoConnection(); |
| } |
| @@ -487,10 +490,26 @@ void PaymentRequest::OnComplete() |
| clearResolversAndCloseMojoConnection(); |
| } |
| +void PaymentRequest::OnAbort(bool abortedSuccessfully) |
|
haraken
2016/06/09 01:57:59
OnAbort => onAbort
please use gerrit instead
2016/06/09 22:36:14
This is an implementation of the interface defined
|
| +{ |
| + DCHECK(m_abortResolver); |
| + DCHECK(m_showResolver); |
| + |
| + if (!abortedSuccessfully) { |
| + m_abortResolver->reject(DOMException::create(InvalidStateError)); |
| + return; |
| + } |
| + |
| + m_showResolver->reject(DOMException::create(AbortError)); |
| + m_abortResolver->resolve(); |
| + clearResolversAndCloseMojoConnection(); |
| +} |
| + |
| void PaymentRequest::clearResolversAndCloseMojoConnection() |
| { |
| m_completeResolver.clear(); |
| m_showResolver.clear(); |
| + m_abortResolver.clear(); |
| if (m_clientBinding.is_bound()) |
| m_clientBinding.Close(); |
| m_paymentProvider.reset(); |