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/ScriptPromiseResolver.h" | 8 #include "bindings/core/v8/ScriptPromiseResolver.h" |
9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
10 #include "bindings/core/v8/V8StringResource.h" | 10 #include "bindings/core/v8/V8StringResource.h" |
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 return ScriptPromise::rejectWithDOMException( | 520 return ScriptPromise::rejectWithDOMException( |
521 scriptState, | 521 scriptState, |
522 DOMException::create(InvalidStateError, | 522 DOMException::create(InvalidStateError, |
523 "Never called show(), so nothing to abort")); | 523 "Never called show(), so nothing to abort")); |
524 | 524 |
525 m_abortResolver = ScriptPromiseResolver::create(scriptState); | 525 m_abortResolver = ScriptPromiseResolver::create(scriptState); |
526 m_paymentProvider->Abort(); | 526 m_paymentProvider->Abort(); |
527 return m_abortResolver->promise(); | 527 return m_abortResolver->promise(); |
528 } | 528 } |
529 | 529 |
| 530 ScriptPromise PaymentRequest::canMakeActivePayment(ScriptState* scriptState) { |
| 531 if (!m_paymentProvider.is_bound() || m_canMakeActivePaymentResolver || |
| 532 !scriptState->contextIsValid()) { |
| 533 return ScriptPromise::rejectWithDOMException( |
| 534 scriptState, DOMException::create(InvalidStateError, |
| 535 "Cannot query payment request")); |
| 536 } |
| 537 |
| 538 m_paymentProvider->CanMakeActivePayment(); |
| 539 |
| 540 m_canMakeActivePaymentResolver = ScriptPromiseResolver::create(scriptState); |
| 541 return m_canMakeActivePaymentResolver->promise(); |
| 542 } |
| 543 |
530 bool PaymentRequest::hasPendingActivity() const { | 544 bool PaymentRequest::hasPendingActivity() const { |
531 return m_showResolver || m_completeResolver; | 545 return m_showResolver || m_completeResolver; |
532 } | 546 } |
533 | 547 |
534 const AtomicString& PaymentRequest::interfaceName() const { | 548 const AtomicString& PaymentRequest::interfaceName() const { |
535 return EventTargetNames::PaymentRequest; | 549 return EventTargetNames::PaymentRequest; |
536 } | 550 } |
537 | 551 |
538 ExecutionContext* PaymentRequest::getExecutionContext() const { | 552 ExecutionContext* PaymentRequest::getExecutionContext() const { |
539 return ContextLifecycleObserver::getExecutionContext(); | 553 return ContextLifecycleObserver::getExecutionContext(); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 m_completeResolver->reject(DOMException::create(AbortError, error)); | 625 m_completeResolver->reject(DOMException::create(AbortError, error)); |
612 clearResolversAndCloseMojoConnection(); | 626 clearResolversAndCloseMojoConnection(); |
613 } | 627 } |
614 | 628 |
615 DEFINE_TRACE(PaymentRequest) { | 629 DEFINE_TRACE(PaymentRequest) { |
616 visitor->trace(m_options); | 630 visitor->trace(m_options); |
617 visitor->trace(m_shippingAddress); | 631 visitor->trace(m_shippingAddress); |
618 visitor->trace(m_showResolver); | 632 visitor->trace(m_showResolver); |
619 visitor->trace(m_completeResolver); | 633 visitor->trace(m_completeResolver); |
620 visitor->trace(m_abortResolver); | 634 visitor->trace(m_abortResolver); |
| 635 visitor->trace(m_canMakeActivePaymentResolver); |
621 EventTargetWithInlineData::trace(visitor); | 636 EventTargetWithInlineData::trace(visitor); |
622 ContextLifecycleObserver::trace(visitor); | 637 ContextLifecycleObserver::trace(visitor); |
623 } | 638 } |
624 | 639 |
625 void PaymentRequest::onCompleteTimeoutForTesting() { | 640 void PaymentRequest::onCompleteTimeoutForTesting() { |
626 m_completeTimer.stop(); | 641 m_completeTimer.stop(); |
627 onCompleteTimeout(0); | 642 onCompleteTimeout(0); |
628 } | 643 } |
629 | 644 |
630 PaymentRequest::PaymentRequest(ScriptState* scriptState, | 645 PaymentRequest::PaymentRequest(ScriptState* scriptState, |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 | 820 |
806 if (isError) { | 821 if (isError) { |
807 if (m_completeResolver) | 822 if (m_completeResolver) |
808 m_completeResolver->reject(DOMException::create(ec, message)); | 823 m_completeResolver->reject(DOMException::create(ec, message)); |
809 | 824 |
810 if (m_showResolver) | 825 if (m_showResolver) |
811 m_showResolver->reject(DOMException::create(ec, message)); | 826 m_showResolver->reject(DOMException::create(ec, message)); |
812 | 827 |
813 if (m_abortResolver) | 828 if (m_abortResolver) |
814 m_abortResolver->reject(DOMException::create(ec, message)); | 829 m_abortResolver->reject(DOMException::create(ec, message)); |
| 830 |
| 831 if (m_canMakeActivePaymentResolver) |
| 832 m_canMakeActivePaymentResolver->reject(DOMException::create(ec, message)); |
815 } else { | 833 } else { |
816 if (m_completeResolver) | 834 if (m_completeResolver) |
817 m_completeResolver->reject(message); | 835 m_completeResolver->reject(message); |
818 | 836 |
819 if (m_showResolver) | 837 if (m_showResolver) |
820 m_showResolver->reject(message); | 838 m_showResolver->reject(message); |
821 | 839 |
822 if (m_abortResolver) | 840 if (m_abortResolver) |
823 m_abortResolver->reject(message); | 841 m_abortResolver->reject(message); |
| 842 |
| 843 if (m_canMakeActivePaymentResolver) |
| 844 m_canMakeActivePaymentResolver->reject(message); |
824 } | 845 } |
825 | 846 |
826 clearResolversAndCloseMojoConnection(); | 847 clearResolversAndCloseMojoConnection(); |
827 } | 848 } |
828 | 849 |
829 void PaymentRequest::OnComplete() { | 850 void PaymentRequest::OnComplete() { |
830 DCHECK(m_completeResolver); | 851 DCHECK(m_completeResolver); |
831 m_completeResolver->resolve(); | 852 m_completeResolver->resolve(); |
832 clearResolversAndCloseMojoConnection(); | 853 clearResolversAndCloseMojoConnection(); |
833 } | 854 } |
834 | 855 |
835 void PaymentRequest::OnAbort(bool abortedSuccessfully) { | 856 void PaymentRequest::OnAbort(bool abortedSuccessfully) { |
836 DCHECK(m_abortResolver); | 857 DCHECK(m_abortResolver); |
837 DCHECK(m_showResolver); | 858 DCHECK(m_showResolver); |
838 | 859 |
839 if (!abortedSuccessfully) { | 860 if (!abortedSuccessfully) { |
840 m_abortResolver->reject(DOMException::create(InvalidStateError)); | 861 m_abortResolver->reject(DOMException::create(InvalidStateError)); |
841 m_abortResolver.clear(); | 862 m_abortResolver.clear(); |
842 return; | 863 return; |
843 } | 864 } |
844 | 865 |
845 m_showResolver->reject(DOMException::create(AbortError)); | 866 m_showResolver->reject(DOMException::create(AbortError)); |
846 m_abortResolver->resolve(); | 867 m_abortResolver->resolve(); |
847 clearResolversAndCloseMojoConnection(); | 868 clearResolversAndCloseMojoConnection(); |
848 } | 869 } |
849 | 870 |
| 871 void PaymentRequest::OnCanMakeActivePayment( |
| 872 mojom::blink::ActivePaymentQueryResult result) { |
| 873 DCHECK(m_canMakeActivePaymentResolver); |
| 874 |
| 875 switch (result) { |
| 876 case mojom::blink::ActivePaymentQueryResult::CAN_MAKE_ACTIVE_PAYMENT: |
| 877 m_canMakeActivePaymentResolver->resolve(true); |
| 878 break; |
| 879 case mojom::blink::ActivePaymentQueryResult::CANNOT_MAKE_ACTIVE_PAYMENT: |
| 880 m_canMakeActivePaymentResolver->resolve(false); |
| 881 break; |
| 882 case mojom::blink::ActivePaymentQueryResult::QUERY_QUOTA_EXCEEDED: |
| 883 m_canMakeActivePaymentResolver->reject("Query quota exceeded"); |
| 884 break; |
| 885 } |
| 886 |
| 887 m_canMakeActivePaymentResolver.clear(); |
| 888 } |
| 889 |
850 void PaymentRequest::onCompleteTimeout(TimerBase*) { | 890 void PaymentRequest::onCompleteTimeout(TimerBase*) { |
851 m_paymentProvider->Complete(mojom::blink::PaymentComplete(Fail)); | 891 m_paymentProvider->Complete(mojom::blink::PaymentComplete(Fail)); |
852 clearResolversAndCloseMojoConnection(); | 892 clearResolversAndCloseMojoConnection(); |
853 } | 893 } |
854 | 894 |
855 void PaymentRequest::clearResolversAndCloseMojoConnection() { | 895 void PaymentRequest::clearResolversAndCloseMojoConnection() { |
856 m_completeTimer.stop(); | 896 m_completeTimer.stop(); |
857 m_completeResolver.clear(); | 897 m_completeResolver.clear(); |
858 m_showResolver.clear(); | 898 m_showResolver.clear(); |
859 m_abortResolver.clear(); | 899 m_abortResolver.clear(); |
| 900 m_canMakeActivePaymentResolver.clear(); |
860 if (m_clientBinding.is_bound()) | 901 if (m_clientBinding.is_bound()) |
861 m_clientBinding.Close(); | 902 m_clientBinding.Close(); |
862 m_paymentProvider.reset(); | 903 m_paymentProvider.reset(); |
863 } | 904 } |
864 | 905 |
865 } // namespace blink | 906 } // namespace blink |
OLD | NEW |