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 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 return allowedToUsePaymentRequest(frame->tree().parent()); | 489 return allowedToUsePaymentRequest(frame->tree().parent()); |
490 } | 490 } |
491 | 491 |
492 // 4. Return false. | 492 // 4. Return false. |
493 return false; | 493 return false; |
494 } | 494 } |
495 | 495 |
496 } // namespace | 496 } // namespace |
497 | 497 |
498 PaymentRequest* PaymentRequest::create( | 498 PaymentRequest* PaymentRequest::create( |
499 ScriptState* scriptState, | 499 Document& document, |
500 const HeapVector<PaymentMethodData>& methodData, | 500 const HeapVector<PaymentMethodData>& methodData, |
501 const PaymentDetails& details, | 501 const PaymentDetails& details, |
502 ExceptionState& exceptionState) { | 502 ExceptionState& exceptionState) { |
503 return new PaymentRequest(scriptState, methodData, details, PaymentOptions(), | 503 return new PaymentRequest(document, methodData, details, PaymentOptions(), |
504 exceptionState); | 504 exceptionState); |
505 } | 505 } |
506 | 506 |
507 PaymentRequest* PaymentRequest::create( | 507 PaymentRequest* PaymentRequest::create( |
508 ScriptState* scriptState, | 508 Document& document, |
509 const HeapVector<PaymentMethodData>& methodData, | 509 const HeapVector<PaymentMethodData>& methodData, |
510 const PaymentDetails& details, | 510 const PaymentDetails& details, |
511 const PaymentOptions& options, | 511 const PaymentOptions& options, |
512 ExceptionState& exceptionState) { | 512 ExceptionState& exceptionState) { |
513 return new PaymentRequest(scriptState, methodData, details, options, | 513 return new PaymentRequest(document, methodData, details, options, |
514 exceptionState); | 514 exceptionState); |
515 } | 515 } |
516 | 516 |
517 PaymentRequest::~PaymentRequest() {} | 517 PaymentRequest::~PaymentRequest() {} |
518 | 518 |
519 ScriptPromise PaymentRequest::show(ScriptState* scriptState) { | 519 ScriptPromise PaymentRequest::show(ScriptState* scriptState) { |
520 if (!m_paymentProvider.is_bound() || m_showResolver) | 520 if (!m_paymentProvider.is_bound() || m_showResolver) |
521 return ScriptPromise::rejectWithDOMException( | 521 return ScriptPromise::rejectWithDOMException( |
522 scriptState, | 522 scriptState, |
523 DOMException::create(InvalidStateError, "Already called show() once")); | 523 DOMException::create(InvalidStateError, "Already called show() once")); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 visitor->trace(m_canMakeActivePaymentResolver); | 656 visitor->trace(m_canMakeActivePaymentResolver); |
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(ScriptState* scriptState, | 666 PaymentRequest::PaymentRequest(Document& document, |
667 const HeapVector<PaymentMethodData>& methodData, | 667 const HeapVector<PaymentMethodData>& methodData, |
668 const PaymentDetails& details, | 668 const PaymentDetails& details, |
669 const PaymentOptions& options, | 669 const PaymentOptions& options, |
670 ExceptionState& exceptionState) | 670 ExceptionState& exceptionState) |
671 : ContextLifecycleObserver(scriptState->getExecutionContext()), | 671 : ContextLifecycleObserver(&document), |
672 ActiveScriptWrappable(this), | 672 ActiveScriptWrappable(this), |
673 m_options(options), | 673 m_options(options), |
674 m_clientBinding(this), | 674 m_clientBinding(this), |
675 m_completeTimer(this, &PaymentRequest::onCompleteTimeout) { | 675 m_completeTimer(this, &PaymentRequest::onCompleteTimeout) { |
676 Vector<payments::mojom::blink::PaymentMethodDataPtr> validatedMethodData; | 676 Vector<payments::mojom::blink::PaymentMethodDataPtr> validatedMethodData; |
677 validateAndConvertPaymentMethodData(methodData, validatedMethodData, | 677 validateAndConvertPaymentMethodData(methodData, validatedMethodData, |
678 exceptionState); | 678 exceptionState); |
679 if (exceptionState.hadException()) | 679 if (exceptionState.hadException()) |
680 return; | 680 return; |
681 | 681 |
682 if (!scriptState->getExecutionContext()->isSecureContext()) { | 682 if (!document.isSecureContext()) { |
683 exceptionState.throwSecurityError("Must be in a secure context"); | 683 exceptionState.throwSecurityError("Must be in a secure context"); |
684 return; | 684 return; |
685 } | 685 } |
686 | 686 |
687 if (!allowedToUsePaymentRequest(scriptState->domWindow()->frame())) { | 687 if (!allowedToUsePaymentRequest(document.frame())) { |
688 exceptionState.throwSecurityError( | 688 exceptionState.throwSecurityError( |
689 RuntimeEnabledFeatures::paymentRequestIFrameEnabled() | 689 RuntimeEnabledFeatures::paymentRequestIFrameEnabled() |
690 ? "Must be in a top-level browsing context or an iframe needs to " | 690 ? "Must be in a top-level browsing context or an iframe needs to " |
691 "specify 'allowpaymentrequest' explicitly" | 691 "specify 'allowpaymentrequest' explicitly" |
692 : "Must be in a top-level browsing context"); | 692 : "Must be in a top-level browsing context"); |
693 return; | 693 return; |
694 } | 694 } |
695 | 695 |
696 PaymentDetailsPtr validatedDetails = | 696 PaymentDetailsPtr validatedDetails = |
697 payments::mojom::blink::PaymentDetails::New(); | 697 payments::mojom::blink::PaymentDetails::New(); |
698 validateAndConvertPaymentDetails(details, m_options.requestShipping(), | 698 validateAndConvertPaymentDetails(details, m_options.requestShipping(), |
699 validatedDetails, m_shippingOption, | 699 validatedDetails, m_shippingOption, |
700 exceptionState); | 700 exceptionState); |
701 if (exceptionState.hadException()) | 701 if (exceptionState.hadException()) |
702 return; | 702 return; |
703 | 703 |
704 if (details.hasError()) { | 704 if (details.hasError()) { |
705 exceptionState.throwTypeError("Error message not allowed in constructor"); | 705 exceptionState.throwTypeError("Error message not allowed in constructor"); |
706 return; | 706 return; |
707 } | 707 } |
708 | 708 |
709 if (m_options.requestShipping()) | 709 if (m_options.requestShipping()) |
710 m_shippingType = getValidShippingType(m_options.shippingType()); | 710 m_shippingType = getValidShippingType(m_options.shippingType()); |
711 | 711 |
712 scriptState->domWindow()->frame()->interfaceProvider()->getInterface( | 712 document.frame()->interfaceProvider()->getInterface( |
713 mojo::GetProxy(&m_paymentProvider)); | 713 mojo::GetProxy(&m_paymentProvider)); |
714 m_paymentProvider.set_connection_error_handler(convertToBaseCallback( | 714 m_paymentProvider.set_connection_error_handler(convertToBaseCallback( |
715 WTF::bind(&PaymentRequest::OnError, wrapWeakPersistent(this), | 715 WTF::bind(&PaymentRequest::OnError, wrapWeakPersistent(this), |
716 PaymentErrorReason::UNKNOWN))); | 716 PaymentErrorReason::UNKNOWN))); |
717 m_paymentProvider->Init( | 717 m_paymentProvider->Init( |
718 m_clientBinding.CreateInterfacePtrAndBind(), | 718 m_clientBinding.CreateInterfacePtrAndBind(), |
719 std::move(validatedMethodData), std::move(validatedDetails), | 719 std::move(validatedMethodData), std::move(validatedDetails), |
720 payments::mojom::blink::PaymentOptions::From(m_options)); | 720 payments::mojom::blink::PaymentOptions::From(m_options)); |
721 } | 721 } |
722 | 722 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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_canMakeActivePaymentResolver.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 |