OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/payments/PaymentRequest.h" | 5 #include "modules/payments/PaymentRequest.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/JSONValuesForV8.h" | 8 #include "bindings/core/v8/JSONValuesForV8.h" |
9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
10 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 DCHECK(!m_paymentProvider.is_bound()); | 288 DCHECK(!m_paymentProvider.is_bound()); |
289 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService
(mojo::GetProxy(&m_paymentProvider)); | 289 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService
(mojo::GetProxy(&m_paymentProvider)); |
290 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym
entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this)))); | 290 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym
entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this)))); |
291 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); | 291 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); |
292 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>::
From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink:
:PaymentOptions::From(m_options)); | 292 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>::
From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink:
:PaymentOptions::From(m_options)); |
293 | 293 |
294 m_showResolver = ScriptPromiseResolver::create(scriptState); | 294 m_showResolver = ScriptPromiseResolver::create(scriptState); |
295 return m_showResolver->promise(); | 295 return m_showResolver->promise(); |
296 } | 296 } |
297 | 297 |
298 void PaymentRequest::abort(ExceptionState& exceptionState) | 298 ScriptPromise PaymentRequest::abort(ScriptState* scriptState) |
299 { | 299 { |
300 if (!m_showResolver) { | 300 if (m_abortResolver) |
301 exceptionState.throwDOMException(InvalidStateError, "Never called show()
, so nothing to abort"); | 301 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Cannot abort() again until the previous abort() has r
esolved or rejected")); |
302 return; | |
303 } | |
304 | 302 |
| 303 if (!m_showResolver) |
| 304 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Never called show(), so nothing to abort")); |
| 305 |
| 306 m_abortResolver = ScriptPromiseResolver::create(scriptState); |
305 m_paymentProvider->Abort(); | 307 m_paymentProvider->Abort(); |
| 308 return m_abortResolver->promise(); |
306 } | 309 } |
307 | 310 |
308 const AtomicString& PaymentRequest::interfaceName() const | 311 const AtomicString& PaymentRequest::interfaceName() const |
309 { | 312 { |
310 return EventTargetNames::PaymentRequest; | 313 return EventTargetNames::PaymentRequest; |
311 } | 314 } |
312 | 315 |
313 ExecutionContext* PaymentRequest::getExecutionContext() const | 316 ExecutionContext* PaymentRequest::getExecutionContext() const |
314 { | 317 { |
315 return ContextLifecycleObserver::getExecutionContext(); | 318 return ContextLifecycleObserver::getExecutionContext(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 clearResolversAndCloseMojoConnection(); | 366 clearResolversAndCloseMojoConnection(); |
364 } | 367 } |
365 | 368 |
366 DEFINE_TRACE(PaymentRequest) | 369 DEFINE_TRACE(PaymentRequest) |
367 { | 370 { |
368 visitor->trace(m_details); | 371 visitor->trace(m_details); |
369 visitor->trace(m_options); | 372 visitor->trace(m_options); |
370 visitor->trace(m_shippingAddress); | 373 visitor->trace(m_shippingAddress); |
371 visitor->trace(m_showResolver); | 374 visitor->trace(m_showResolver); |
372 visitor->trace(m_completeResolver); | 375 visitor->trace(m_completeResolver); |
| 376 visitor->trace(m_abortResolver); |
373 EventTargetWithInlineData::trace(visitor); | 377 EventTargetWithInlineData::trace(visitor); |
374 ContextLifecycleObserver::trace(visitor); | 378 ContextLifecycleObserver::trace(visitor); |
375 } | 379 } |
376 | 380 |
377 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen
tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o
ptions, ExceptionState& exceptionState) | 381 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen
tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o
ptions, ExceptionState& exceptionState) |
378 : ContextLifecycleObserver(scriptState->getExecutionContext()) | 382 : ContextLifecycleObserver(scriptState->getExecutionContext()) |
379 , ActiveScriptWrappable(this) | 383 , ActiveScriptWrappable(this) |
380 , m_options(options) | 384 , m_options(options) |
381 , m_clientBinding(this) | 385 , m_clientBinding(this) |
382 { | 386 { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 // connection to display a success or failure message to the user. | 487 // connection to display a success or failure message to the user. |
484 m_showResolver.clear(); | 488 m_showResolver.clear(); |
485 } | 489 } |
486 | 490 |
487 void PaymentRequest::OnError() | 491 void PaymentRequest::OnError() |
488 { | 492 { |
489 if (m_completeResolver) | 493 if (m_completeResolver) |
490 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca
ncelled")); | 494 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca
ncelled")); |
491 if (m_showResolver) | 495 if (m_showResolver) |
492 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel
led")); | 496 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel
led")); |
| 497 if (m_abortResolver) |
| 498 m_abortResolver->reject(DOMException::create(SyntaxError, "Request cance
lled")); |
493 clearResolversAndCloseMojoConnection(); | 499 clearResolversAndCloseMojoConnection(); |
494 } | 500 } |
495 | 501 |
496 void PaymentRequest::OnComplete() | 502 void PaymentRequest::OnComplete() |
497 { | 503 { |
498 DCHECK(m_completeResolver); | 504 DCHECK(m_completeResolver); |
499 m_completeResolver->resolve(); | 505 m_completeResolver->resolve(); |
500 clearResolversAndCloseMojoConnection(); | 506 clearResolversAndCloseMojoConnection(); |
501 } | 507 } |
502 | 508 |
| 509 void PaymentRequest::OnAbort(bool abortedSuccessfully) |
| 510 { |
| 511 DCHECK(m_abortResolver); |
| 512 DCHECK(m_showResolver); |
| 513 |
| 514 if (!abortedSuccessfully) { |
| 515 m_abortResolver->reject(DOMException::create(InvalidStateError)); |
| 516 m_abortResolver.clear(); |
| 517 return; |
| 518 } |
| 519 |
| 520 m_showResolver->reject(DOMException::create(AbortError)); |
| 521 m_abortResolver->resolve(); |
| 522 clearResolversAndCloseMojoConnection(); |
| 523 } |
| 524 |
503 void PaymentRequest::clearResolversAndCloseMojoConnection() | 525 void PaymentRequest::clearResolversAndCloseMojoConnection() |
504 { | 526 { |
505 m_completeResolver.clear(); | 527 m_completeResolver.clear(); |
506 m_showResolver.clear(); | 528 m_showResolver.clear(); |
| 529 m_abortResolver.clear(); |
507 if (m_clientBinding.is_bound()) | 530 if (m_clientBinding.is_bound()) |
508 m_clientBinding.Close(); | 531 m_clientBinding.Close(); |
509 m_paymentProvider.reset(); | 532 m_paymentProvider.reset(); |
510 } | 533 } |
511 | 534 |
512 } // namespace blink | 535 } // namespace blink |
OLD | NEW |