| 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 19 matching lines...) Expand all Loading... |
| 30 #include "mojo/public/cpp/bindings/interface_request.h" | 30 #include "mojo/public/cpp/bindings/interface_request.h" |
| 31 #include "mojo/public/cpp/bindings/wtf_array.h" | 31 #include "mojo/public/cpp/bindings/wtf_array.h" |
| 32 #include "platform/RuntimeEnabledFeatures.h" | 32 #include "platform/RuntimeEnabledFeatures.h" |
| 33 #include "platform/mojo/MojoHelper.h" | 33 #include "platform/mojo/MojoHelper.h" |
| 34 #include "public/platform/InterfaceProvider.h" | 34 #include "public/platform/InterfaceProvider.h" |
| 35 #include "public/platform/Platform.h" | 35 #include "public/platform/Platform.h" |
| 36 #include "public/platform/WebTraceLocation.h" | 36 #include "public/platform/WebTraceLocation.h" |
| 37 #include "wtf/HashSet.h" | 37 #include "wtf/HashSet.h" |
| 38 #include <utility> | 38 #include <utility> |
| 39 | 39 |
| 40 using payments::mojom::blink::ActivePaymentQueryResult; | 40 using payments::mojom::blink::CanMakePaymentQueryResult; |
| 41 using payments::mojom::blink::PaymentAddressPtr; | 41 using payments::mojom::blink::PaymentAddressPtr; |
| 42 using payments::mojom::blink::PaymentCurrencyAmount; | 42 using payments::mojom::blink::PaymentCurrencyAmount; |
| 43 using payments::mojom::blink::PaymentCurrencyAmountPtr; | 43 using payments::mojom::blink::PaymentCurrencyAmountPtr; |
| 44 using payments::mojom::blink::PaymentDetails; | 44 using payments::mojom::blink::PaymentDetails; |
| 45 using payments::mojom::blink::PaymentDetailsModifier; | 45 using payments::mojom::blink::PaymentDetailsModifier; |
| 46 using payments::mojom::blink::PaymentDetailsModifierPtr; | 46 using payments::mojom::blink::PaymentDetailsModifierPtr; |
| 47 using payments::mojom::blink::PaymentDetailsPtr; | 47 using payments::mojom::blink::PaymentDetailsPtr; |
| 48 using payments::mojom::blink::PaymentDetailsPtr; | 48 using payments::mojom::blink::PaymentDetailsPtr; |
| 49 using payments::mojom::blink::PaymentErrorReason; | 49 using payments::mojom::blink::PaymentErrorReason; |
| 50 using payments::mojom::blink::PaymentItem; | 50 using payments::mojom::blink::PaymentItem; |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 return ScriptPromise::rejectWithDOMException( | 587 return ScriptPromise::rejectWithDOMException( |
| 588 scriptState, | 588 scriptState, |
| 589 DOMException::create(InvalidStateError, | 589 DOMException::create(InvalidStateError, |
| 590 "Never called show(), so nothing to abort")); | 590 "Never called show(), so nothing to abort")); |
| 591 | 591 |
| 592 m_abortResolver = ScriptPromiseResolver::create(scriptState); | 592 m_abortResolver = ScriptPromiseResolver::create(scriptState); |
| 593 m_paymentProvider->Abort(); | 593 m_paymentProvider->Abort(); |
| 594 return m_abortResolver->promise(); | 594 return m_abortResolver->promise(); |
| 595 } | 595 } |
| 596 | 596 |
| 597 ScriptPromise PaymentRequest::canMakeActivePayment(ScriptState* scriptState) { | 597 ScriptPromise PaymentRequest::canMakePayment(ScriptState* scriptState) { |
| 598 if (!m_paymentProvider.is_bound() || m_canMakeActivePaymentResolver || | 598 if (!m_paymentProvider.is_bound() || m_canMakePaymentResolver || |
| 599 !scriptState->contextIsValid()) { | 599 !scriptState->contextIsValid()) { |
| 600 return ScriptPromise::rejectWithDOMException( | 600 return ScriptPromise::rejectWithDOMException( |
| 601 scriptState, DOMException::create(InvalidStateError, | 601 scriptState, DOMException::create(InvalidStateError, |
| 602 "Cannot query payment request")); | 602 "Cannot query payment request")); |
| 603 } | 603 } |
| 604 | 604 |
| 605 m_paymentProvider->CanMakeActivePayment(); | 605 m_paymentProvider->CanMakePayment(); |
| 606 | 606 |
| 607 m_canMakeActivePaymentResolver = ScriptPromiseResolver::create(scriptState); | 607 m_canMakePaymentResolver = ScriptPromiseResolver::create(scriptState); |
| 608 return m_canMakeActivePaymentResolver->promise(); | 608 return m_canMakePaymentResolver->promise(); |
| 609 } | 609 } |
| 610 | 610 |
| 611 bool PaymentRequest::hasPendingActivity() const { | 611 bool PaymentRequest::hasPendingActivity() const { |
| 612 return m_showResolver || m_completeResolver; | 612 return m_showResolver || m_completeResolver; |
| 613 } | 613 } |
| 614 | 614 |
| 615 const AtomicString& PaymentRequest::interfaceName() const { | 615 const AtomicString& PaymentRequest::interfaceName() const { |
| 616 return EventTargetNames::PaymentRequest; | 616 return EventTargetNames::PaymentRequest; |
| 617 } | 617 } |
| 618 | 618 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 m_completeResolver->reject(DOMException::create(AbortError, error)); | 693 m_completeResolver->reject(DOMException::create(AbortError, error)); |
| 694 clearResolversAndCloseMojoConnection(); | 694 clearResolversAndCloseMojoConnection(); |
| 695 } | 695 } |
| 696 | 696 |
| 697 DEFINE_TRACE(PaymentRequest) { | 697 DEFINE_TRACE(PaymentRequest) { |
| 698 visitor->trace(m_options); | 698 visitor->trace(m_options); |
| 699 visitor->trace(m_shippingAddress); | 699 visitor->trace(m_shippingAddress); |
| 700 visitor->trace(m_showResolver); | 700 visitor->trace(m_showResolver); |
| 701 visitor->trace(m_completeResolver); | 701 visitor->trace(m_completeResolver); |
| 702 visitor->trace(m_abortResolver); | 702 visitor->trace(m_abortResolver); |
| 703 visitor->trace(m_canMakeActivePaymentResolver); | 703 visitor->trace(m_canMakePaymentResolver); |
| 704 EventTargetWithInlineData::trace(visitor); | 704 EventTargetWithInlineData::trace(visitor); |
| 705 ContextLifecycleObserver::trace(visitor); | 705 ContextLifecycleObserver::trace(visitor); |
| 706 } | 706 } |
| 707 | 707 |
| 708 void PaymentRequest::onCompleteTimeoutForTesting() { | 708 void PaymentRequest::onCompleteTimeoutForTesting() { |
| 709 m_completeTimer.stop(); | 709 m_completeTimer.stop(); |
| 710 onCompleteTimeout(0); | 710 onCompleteTimeout(0); |
| 711 } | 711 } |
| 712 | 712 |
| 713 PaymentRequest::PaymentRequest(ScriptState* scriptState, | 713 PaymentRequest::PaymentRequest(ScriptState* scriptState, |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 if (isError) { | 890 if (isError) { |
| 891 if (m_completeResolver) | 891 if (m_completeResolver) |
| 892 m_completeResolver->reject(DOMException::create(ec, message)); | 892 m_completeResolver->reject(DOMException::create(ec, message)); |
| 893 | 893 |
| 894 if (m_showResolver) | 894 if (m_showResolver) |
| 895 m_showResolver->reject(DOMException::create(ec, message)); | 895 m_showResolver->reject(DOMException::create(ec, message)); |
| 896 | 896 |
| 897 if (m_abortResolver) | 897 if (m_abortResolver) |
| 898 m_abortResolver->reject(DOMException::create(ec, message)); | 898 m_abortResolver->reject(DOMException::create(ec, message)); |
| 899 | 899 |
| 900 if (m_canMakeActivePaymentResolver) | 900 if (m_canMakePaymentResolver) |
| 901 m_canMakeActivePaymentResolver->reject(DOMException::create(ec, message)); | 901 m_canMakePaymentResolver->reject(DOMException::create(ec, message)); |
| 902 } else { | 902 } else { |
| 903 if (m_completeResolver) | 903 if (m_completeResolver) |
| 904 m_completeResolver->reject(message); | 904 m_completeResolver->reject(message); |
| 905 | 905 |
| 906 if (m_showResolver) | 906 if (m_showResolver) |
| 907 m_showResolver->reject(message); | 907 m_showResolver->reject(message); |
| 908 | 908 |
| 909 if (m_abortResolver) | 909 if (m_abortResolver) |
| 910 m_abortResolver->reject(message); | 910 m_abortResolver->reject(message); |
| 911 | 911 |
| 912 if (m_canMakeActivePaymentResolver) | 912 if (m_canMakePaymentResolver) |
| 913 m_canMakeActivePaymentResolver->reject(message); | 913 m_canMakePaymentResolver->reject(message); |
| 914 } | 914 } |
| 915 | 915 |
| 916 clearResolversAndCloseMojoConnection(); | 916 clearResolversAndCloseMojoConnection(); |
| 917 } | 917 } |
| 918 | 918 |
| 919 void PaymentRequest::OnComplete() { | 919 void PaymentRequest::OnComplete() { |
| 920 DCHECK(m_completeResolver); | 920 DCHECK(m_completeResolver); |
| 921 m_completeResolver->resolve(); | 921 m_completeResolver->resolve(); |
| 922 clearResolversAndCloseMojoConnection(); | 922 clearResolversAndCloseMojoConnection(); |
| 923 } | 923 } |
| 924 | 924 |
| 925 void PaymentRequest::OnAbort(bool abortedSuccessfully) { | 925 void PaymentRequest::OnAbort(bool abortedSuccessfully) { |
| 926 DCHECK(m_abortResolver); | 926 DCHECK(m_abortResolver); |
| 927 DCHECK(m_showResolver); | 927 DCHECK(m_showResolver); |
| 928 | 928 |
| 929 if (!abortedSuccessfully) { | 929 if (!abortedSuccessfully) { |
| 930 m_abortResolver->reject(DOMException::create(InvalidStateError)); | 930 m_abortResolver->reject(DOMException::create(InvalidStateError)); |
| 931 m_abortResolver.clear(); | 931 m_abortResolver.clear(); |
| 932 return; | 932 return; |
| 933 } | 933 } |
| 934 | 934 |
| 935 m_showResolver->reject(DOMException::create(AbortError)); | 935 m_showResolver->reject(DOMException::create(AbortError)); |
| 936 m_abortResolver->resolve(); | 936 m_abortResolver->resolve(); |
| 937 clearResolversAndCloseMojoConnection(); | 937 clearResolversAndCloseMojoConnection(); |
| 938 } | 938 } |
| 939 | 939 |
| 940 void PaymentRequest::OnCanMakeActivePayment(ActivePaymentQueryResult result) { | 940 void PaymentRequest::OnCanMakePayment(CanMakePaymentQueryResult result) { |
| 941 DCHECK(m_canMakeActivePaymentResolver); | 941 DCHECK(m_canMakePaymentResolver); |
| 942 | 942 |
| 943 switch (result) { | 943 switch (result) { |
| 944 case ActivePaymentQueryResult::CAN_MAKE_ACTIVE_PAYMENT: | 944 case CanMakePaymentQueryResult::CAN_MAKE_PAYMENT: |
| 945 m_canMakeActivePaymentResolver->resolve(true); | 945 m_canMakePaymentResolver->resolve(true); |
| 946 break; | 946 break; |
| 947 case ActivePaymentQueryResult::CANNOT_MAKE_ACTIVE_PAYMENT: | 947 case CanMakePaymentQueryResult::CANNOT_MAKE_PAYMENT: |
| 948 m_canMakeActivePaymentResolver->resolve(false); | 948 m_canMakePaymentResolver->resolve(false); |
| 949 break; | 949 break; |
| 950 case ActivePaymentQueryResult::QUERY_QUOTA_EXCEEDED: | 950 case CanMakePaymentQueryResult::QUERY_QUOTA_EXCEEDED: |
| 951 m_canMakeActivePaymentResolver->reject( | 951 m_canMakePaymentResolver->reject( |
| 952 DOMException::create(QuotaExceededError, "Query quota exceeded")); | 952 DOMException::create(QuotaExceededError, "Query quota exceeded")); |
| 953 break; | 953 break; |
| 954 } | 954 } |
| 955 | 955 |
| 956 m_canMakeActivePaymentResolver.clear(); | 956 m_canMakePaymentResolver.clear(); |
| 957 } | 957 } |
| 958 | 958 |
| 959 void PaymentRequest::onCompleteTimeout(TimerBase*) { | 959 void PaymentRequest::onCompleteTimeout(TimerBase*) { |
| 960 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); | 960 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); |
| 961 clearResolversAndCloseMojoConnection(); | 961 clearResolversAndCloseMojoConnection(); |
| 962 } | 962 } |
| 963 | 963 |
| 964 void PaymentRequest::clearResolversAndCloseMojoConnection() { | 964 void PaymentRequest::clearResolversAndCloseMojoConnection() { |
| 965 m_completeTimer.stop(); | 965 m_completeTimer.stop(); |
| 966 m_completeResolver.clear(); | 966 m_completeResolver.clear(); |
| 967 m_showResolver.clear(); | 967 m_showResolver.clear(); |
| 968 m_abortResolver.clear(); | 968 m_abortResolver.clear(); |
| 969 m_canMakeActivePaymentResolver.clear(); | 969 m_canMakePaymentResolver.clear(); |
| 970 if (m_clientBinding.is_bound()) | 970 if (m_clientBinding.is_bound()) |
| 971 m_clientBinding.Close(); | 971 m_clientBinding.Close(); |
| 972 m_paymentProvider.reset(); | 972 m_paymentProvider.reset(); |
| 973 } | 973 } |
| 974 | 974 |
| 975 } // namespace blink | 975 } // namespace blink |
| OLD | NEW |