| 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 20 matching lines...) Expand all Loading... |
| 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 <stddef.h> | 38 #include <stddef.h> |
| 39 #include <utility> | 39 #include <utility> |
| 40 | 40 |
| 41 using payments::mojom::blink::ActivePaymentQueryResult; | 41 using payments::mojom::blink::CanMakePaymentQueryResult; |
| 42 using payments::mojom::blink::PaymentAddressPtr; | 42 using payments::mojom::blink::PaymentAddressPtr; |
| 43 using payments::mojom::blink::PaymentCurrencyAmount; | 43 using payments::mojom::blink::PaymentCurrencyAmount; |
| 44 using payments::mojom::blink::PaymentCurrencyAmountPtr; | 44 using payments::mojom::blink::PaymentCurrencyAmountPtr; |
| 45 using payments::mojom::blink::PaymentDetailsModifierPtr; | 45 using payments::mojom::blink::PaymentDetailsModifierPtr; |
| 46 using payments::mojom::blink::PaymentDetailsPtr; | 46 using payments::mojom::blink::PaymentDetailsPtr; |
| 47 using payments::mojom::blink::PaymentErrorReason; | 47 using payments::mojom::blink::PaymentErrorReason; |
| 48 using payments::mojom::blink::PaymentItemPtr; | 48 using payments::mojom::blink::PaymentItemPtr; |
| 49 using payments::mojom::blink::PaymentMethodDataPtr; | 49 using payments::mojom::blink::PaymentMethodDataPtr; |
| 50 using payments::mojom::blink::PaymentOptionsPtr; | 50 using payments::mojom::blink::PaymentOptionsPtr; |
| 51 using payments::mojom::blink::PaymentResponsePtr; | 51 using payments::mojom::blink::PaymentResponsePtr; |
| (...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 return ScriptPromise::rejectWithDOMException( | 545 return ScriptPromise::rejectWithDOMException( |
| 546 scriptState, | 546 scriptState, |
| 547 DOMException::create(InvalidStateError, | 547 DOMException::create(InvalidStateError, |
| 548 "Never called show(), so nothing to abort")); | 548 "Never called show(), so nothing to abort")); |
| 549 | 549 |
| 550 m_abortResolver = ScriptPromiseResolver::create(scriptState); | 550 m_abortResolver = ScriptPromiseResolver::create(scriptState); |
| 551 m_paymentProvider->Abort(); | 551 m_paymentProvider->Abort(); |
| 552 return m_abortResolver->promise(); | 552 return m_abortResolver->promise(); |
| 553 } | 553 } |
| 554 | 554 |
| 555 ScriptPromise PaymentRequest::canMakeActivePayment(ScriptState* scriptState) { | 555 ScriptPromise PaymentRequest::canMakePayment(ScriptState* scriptState) { |
| 556 if (!m_paymentProvider.is_bound() || m_canMakeActivePaymentResolver || | 556 if (!m_paymentProvider.is_bound() || m_canMakePaymentResolver || |
| 557 !scriptState->contextIsValid()) { | 557 !scriptState->contextIsValid()) { |
| 558 return ScriptPromise::rejectWithDOMException( | 558 return ScriptPromise::rejectWithDOMException( |
| 559 scriptState, DOMException::create(InvalidStateError, | 559 scriptState, DOMException::create(InvalidStateError, |
| 560 "Cannot query payment request")); | 560 "Cannot query payment request")); |
| 561 } | 561 } |
| 562 | 562 |
| 563 m_paymentProvider->CanMakeActivePayment(); | 563 m_paymentProvider->CanMakePayment(); |
| 564 | 564 |
| 565 m_canMakeActivePaymentResolver = ScriptPromiseResolver::create(scriptState); | 565 m_canMakePaymentResolver = ScriptPromiseResolver::create(scriptState); |
| 566 return m_canMakeActivePaymentResolver->promise(); | 566 return m_canMakePaymentResolver->promise(); |
| 567 } | 567 } |
| 568 | 568 |
| 569 bool PaymentRequest::hasPendingActivity() const { | 569 bool PaymentRequest::hasPendingActivity() const { |
| 570 return m_showResolver || m_completeResolver; | 570 return m_showResolver || m_completeResolver; |
| 571 } | 571 } |
| 572 | 572 |
| 573 const AtomicString& PaymentRequest::interfaceName() const { | 573 const AtomicString& PaymentRequest::interfaceName() const { |
| 574 return EventTargetNames::PaymentRequest; | 574 return EventTargetNames::PaymentRequest; |
| 575 } | 575 } |
| 576 | 576 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 m_completeResolver->reject(DOMException::create(AbortError, error)); | 646 m_completeResolver->reject(DOMException::create(AbortError, error)); |
| 647 clearResolversAndCloseMojoConnection(); | 647 clearResolversAndCloseMojoConnection(); |
| 648 } | 648 } |
| 649 | 649 |
| 650 DEFINE_TRACE(PaymentRequest) { | 650 DEFINE_TRACE(PaymentRequest) { |
| 651 visitor->trace(m_options); | 651 visitor->trace(m_options); |
| 652 visitor->trace(m_shippingAddress); | 652 visitor->trace(m_shippingAddress); |
| 653 visitor->trace(m_showResolver); | 653 visitor->trace(m_showResolver); |
| 654 visitor->trace(m_completeResolver); | 654 visitor->trace(m_completeResolver); |
| 655 visitor->trace(m_abortResolver); | 655 visitor->trace(m_abortResolver); |
| 656 visitor->trace(m_canMakeActivePaymentResolver); | 656 visitor->trace(m_canMakePaymentResolver); |
| 657 EventTargetWithInlineData::trace(visitor); | 657 EventTargetWithInlineData::trace(visitor); |
| 658 ContextLifecycleObserver::trace(visitor); | 658 ContextLifecycleObserver::trace(visitor); |
| 659 } | 659 } |
| 660 | 660 |
| 661 void PaymentRequest::onCompleteTimeoutForTesting() { | 661 void PaymentRequest::onCompleteTimeoutForTesting() { |
| 662 m_completeTimer.stop(); | 662 m_completeTimer.stop(); |
| 663 onCompleteTimeout(0); | 663 onCompleteTimeout(0); |
| 664 } | 664 } |
| 665 | 665 |
| 666 PaymentRequest::PaymentRequest(Document& document, | 666 PaymentRequest::PaymentRequest(Document& document, |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 if (isError) { | 840 if (isError) { |
| 841 if (m_completeResolver) | 841 if (m_completeResolver) |
| 842 m_completeResolver->reject(DOMException::create(ec, message)); | 842 m_completeResolver->reject(DOMException::create(ec, message)); |
| 843 | 843 |
| 844 if (m_showResolver) | 844 if (m_showResolver) |
| 845 m_showResolver->reject(DOMException::create(ec, message)); | 845 m_showResolver->reject(DOMException::create(ec, message)); |
| 846 | 846 |
| 847 if (m_abortResolver) | 847 if (m_abortResolver) |
| 848 m_abortResolver->reject(DOMException::create(ec, message)); | 848 m_abortResolver->reject(DOMException::create(ec, message)); |
| 849 | 849 |
| 850 if (m_canMakeActivePaymentResolver) | 850 if (m_canMakePaymentResolver) |
| 851 m_canMakeActivePaymentResolver->reject(DOMException::create(ec, message)); | 851 m_canMakePaymentResolver->reject(DOMException::create(ec, message)); |
| 852 } else { | 852 } else { |
| 853 if (m_completeResolver) | 853 if (m_completeResolver) |
| 854 m_completeResolver->reject(message); | 854 m_completeResolver->reject(message); |
| 855 | 855 |
| 856 if (m_showResolver) | 856 if (m_showResolver) |
| 857 m_showResolver->reject(message); | 857 m_showResolver->reject(message); |
| 858 | 858 |
| 859 if (m_abortResolver) | 859 if (m_abortResolver) |
| 860 m_abortResolver->reject(message); | 860 m_abortResolver->reject(message); |
| 861 | 861 |
| 862 if (m_canMakeActivePaymentResolver) | 862 if (m_canMakePaymentResolver) |
| 863 m_canMakeActivePaymentResolver->reject(message); | 863 m_canMakePaymentResolver->reject(message); |
| 864 } | 864 } |
| 865 | 865 |
| 866 clearResolversAndCloseMojoConnection(); | 866 clearResolversAndCloseMojoConnection(); |
| 867 } | 867 } |
| 868 | 868 |
| 869 void PaymentRequest::OnComplete() { | 869 void PaymentRequest::OnComplete() { |
| 870 DCHECK(m_completeResolver); | 870 DCHECK(m_completeResolver); |
| 871 m_completeResolver->resolve(); | 871 m_completeResolver->resolve(); |
| 872 clearResolversAndCloseMojoConnection(); | 872 clearResolversAndCloseMojoConnection(); |
| 873 } | 873 } |
| 874 | 874 |
| 875 void PaymentRequest::OnAbort(bool abortedSuccessfully) { | 875 void PaymentRequest::OnAbort(bool abortedSuccessfully) { |
| 876 DCHECK(m_abortResolver); | 876 DCHECK(m_abortResolver); |
| 877 DCHECK(m_showResolver); | 877 DCHECK(m_showResolver); |
| 878 | 878 |
| 879 if (!abortedSuccessfully) { | 879 if (!abortedSuccessfully) { |
| 880 m_abortResolver->reject(DOMException::create(InvalidStateError)); | 880 m_abortResolver->reject(DOMException::create(InvalidStateError)); |
| 881 m_abortResolver.clear(); | 881 m_abortResolver.clear(); |
| 882 return; | 882 return; |
| 883 } | 883 } |
| 884 | 884 |
| 885 m_showResolver->reject(DOMException::create(AbortError)); | 885 m_showResolver->reject(DOMException::create(AbortError)); |
| 886 m_abortResolver->resolve(); | 886 m_abortResolver->resolve(); |
| 887 clearResolversAndCloseMojoConnection(); | 887 clearResolversAndCloseMojoConnection(); |
| 888 } | 888 } |
| 889 | 889 |
| 890 void PaymentRequest::OnCanMakeActivePayment(ActivePaymentQueryResult result) { | 890 void PaymentRequest::OnCanMakePayment(CanMakePaymentQueryResult result) { |
| 891 DCHECK(m_canMakeActivePaymentResolver); | 891 DCHECK(m_canMakePaymentResolver); |
| 892 | 892 |
| 893 switch (result) { | 893 switch (result) { |
| 894 case ActivePaymentQueryResult::CAN_MAKE_ACTIVE_PAYMENT: | 894 case CanMakePaymentQueryResult::CAN_MAKE_PAYMENT: |
| 895 m_canMakeActivePaymentResolver->resolve(true); | 895 m_canMakePaymentResolver->resolve(true); |
| 896 break; | 896 break; |
| 897 case ActivePaymentQueryResult::CANNOT_MAKE_ACTIVE_PAYMENT: | 897 case CanMakePaymentQueryResult::CANNOT_MAKE_PAYMENT: |
| 898 m_canMakeActivePaymentResolver->resolve(false); | 898 m_canMakePaymentResolver->resolve(false); |
| 899 break; | 899 break; |
| 900 case ActivePaymentQueryResult::QUERY_QUOTA_EXCEEDED: | 900 case CanMakePaymentQueryResult::QUERY_QUOTA_EXCEEDED: |
| 901 m_canMakeActivePaymentResolver->reject( | 901 m_canMakePaymentResolver->reject( |
| 902 DOMException::create(QuotaExceededError, "Query quota exceeded")); | 902 DOMException::create(QuotaExceededError, "Query quota exceeded")); |
| 903 break; | 903 break; |
| 904 } | 904 } |
| 905 | 905 |
| 906 m_canMakeActivePaymentResolver.clear(); | 906 m_canMakePaymentResolver.clear(); |
| 907 } | 907 } |
| 908 | 908 |
| 909 void PaymentRequest::onCompleteTimeout(TimerBase*) { | 909 void PaymentRequest::onCompleteTimeout(TimerBase*) { |
| 910 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); | 910 m_paymentProvider->Complete(payments::mojom::blink::PaymentComplete(Fail)); |
| 911 clearResolversAndCloseMojoConnection(); | 911 clearResolversAndCloseMojoConnection(); |
| 912 } | 912 } |
| 913 | 913 |
| 914 void PaymentRequest::clearResolversAndCloseMojoConnection() { | 914 void PaymentRequest::clearResolversAndCloseMojoConnection() { |
| 915 m_completeTimer.stop(); | 915 m_completeTimer.stop(); |
| 916 m_completeResolver.clear(); | 916 m_completeResolver.clear(); |
| 917 m_showResolver.clear(); | 917 m_showResolver.clear(); |
| 918 m_abortResolver.clear(); | 918 m_abortResolver.clear(); |
| 919 m_canMakeActivePaymentResolver.clear(); | 919 m_canMakePaymentResolver.clear(); |
| 920 if (m_clientBinding.is_bound()) | 920 if (m_clientBinding.is_bound()) |
| 921 m_clientBinding.Close(); | 921 m_clientBinding.Close(); |
| 922 m_paymentProvider.reset(); | 922 m_paymentProvider.reset(); |
| 923 } | 923 } |
| 924 | 924 |
| 925 } // namespace blink | 925 } // namespace blink |
| OLD | NEW |