Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentRequest.cpp

Issue 2467393002: Add canMakeActivePayment() method to web payments. (Closed)
Patch Set: contextIsValid and global-interface-listing Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698