| 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/JSONValuesForV8.h" | 8 #include "bindings/core/v8/JSONValuesForV8.h" |
| 9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 10 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include <utility> | 28 #include <utility> |
| 29 | 29 |
| 30 namespace mojo { | 30 namespace mojo { |
| 31 | 31 |
| 32 using blink::mojom::blink::PaymentCurrencyAmount; | 32 using blink::mojom::blink::PaymentCurrencyAmount; |
| 33 using blink::mojom::blink::PaymentCurrencyAmountPtr; | 33 using blink::mojom::blink::PaymentCurrencyAmountPtr; |
| 34 using blink::mojom::blink::PaymentDetails; | 34 using blink::mojom::blink::PaymentDetails; |
| 35 using blink::mojom::blink::PaymentDetailsModifier; | 35 using blink::mojom::blink::PaymentDetailsModifier; |
| 36 using blink::mojom::blink::PaymentDetailsModifierPtr; | 36 using blink::mojom::blink::PaymentDetailsModifierPtr; |
| 37 using blink::mojom::blink::PaymentDetailsPtr; | 37 using blink::mojom::blink::PaymentDetailsPtr; |
| 38 using blink::mojom::blink::PaymentErrorReason; |
| 38 using blink::mojom::blink::PaymentItem; | 39 using blink::mojom::blink::PaymentItem; |
| 39 using blink::mojom::blink::PaymentItemPtr; | 40 using blink::mojom::blink::PaymentItemPtr; |
| 40 using blink::mojom::blink::PaymentMethodData; | 41 using blink::mojom::blink::PaymentMethodData; |
| 41 using blink::mojom::blink::PaymentMethodDataPtr; | 42 using blink::mojom::blink::PaymentMethodDataPtr; |
| 42 using blink::mojom::blink::PaymentOptions; | 43 using blink::mojom::blink::PaymentOptions; |
| 43 using blink::mojom::blink::PaymentOptionsPtr; | 44 using blink::mojom::blink::PaymentOptionsPtr; |
| 44 using blink::mojom::blink::PaymentShippingOption; | 45 using blink::mojom::blink::PaymentShippingOption; |
| 45 using blink::mojom::blink::PaymentShippingOptionPtr; | 46 using blink::mojom::blink::PaymentShippingOptionPtr; |
| 46 | 47 |
| 47 template <> | 48 template <> |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 ScriptPromise PaymentRequest::show(ScriptState* scriptState) | 349 ScriptPromise PaymentRequest::show(ScriptState* scriptState) |
| 349 { | 350 { |
| 350 if (m_showResolver) | 351 if (m_showResolver) |
| 351 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Already called show() once")); | 352 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Already called show() once")); |
| 352 | 353 |
| 353 if (!scriptState->domWindow() || !scriptState->domWindow()->frame()) | 354 if (!scriptState->domWindow() || !scriptState->domWindow()->frame()) |
| 354 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Cannot show the payment request")); | 355 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "Cannot show the payment request")); |
| 355 | 356 |
| 356 DCHECK(!m_paymentProvider.is_bound()); | 357 DCHECK(!m_paymentProvider.is_bound()); |
| 357 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService
(mojo::GetProxy(&m_paymentProvider)); | 358 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService
(mojo::GetProxy(&m_paymentProvider)); |
| 358 m_paymentProvider.set_connection_error_handler(createBaseCallback(WTF::bind(
&PaymentRequest::OnError, wrapWeakPersistent(this)))); | 359 m_paymentProvider.set_connection_error_handler(createBaseCallback(WTF::bind(
&PaymentRequest::OnError, wrapWeakPersistent(this), mojom::blink::PaymentErrorRe
ason::UNKNOWN))); |
| 359 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); | 360 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); |
| 360 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>::
From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink:
:PaymentOptions::From(m_options)); | 361 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>::
From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink:
:PaymentOptions::From(m_options)); |
| 361 | 362 |
| 362 m_showResolver = ScriptPromiseResolver::create(scriptState); | 363 m_showResolver = ScriptPromiseResolver::create(scriptState); |
| 363 return m_showResolver->promise(); | 364 return m_showResolver->promise(); |
| 364 } | 365 } |
| 365 | 366 |
| 366 ScriptPromise PaymentRequest::abort(ScriptState* scriptState) | 367 ScriptPromise PaymentRequest::abort(ScriptState* scriptState) |
| 367 { | 368 { |
| 368 if (m_abortResolver) | 369 if (m_abortResolver) |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 } | 563 } |
| 563 | 564 |
| 564 m_showResolver->resolve(new PaymentResponse(std::move(response), this)); | 565 m_showResolver->resolve(new PaymentResponse(std::move(response), this)); |
| 565 | 566 |
| 566 // Do not close the mojo connection here. The merchant website should call | 567 // Do not close the mojo connection here. The merchant website should call |
| 567 // PaymentResponse::complete(boolean), which will be forwarded over the mojo | 568 // PaymentResponse::complete(boolean), which will be forwarded over the mojo |
| 568 // connection to display a success or failure message to the user. | 569 // connection to display a success or failure message to the user. |
| 569 m_showResolver.clear(); | 570 m_showResolver.clear(); |
| 570 } | 571 } |
| 571 | 572 |
| 572 void PaymentRequest::OnError() | 573 void PaymentRequest::OnError(mojo::PaymentErrorReason error) |
| 573 { | 574 { |
| 574 if (m_completeResolver) | 575 bool isError = false; |
| 575 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca
ncelled")); | 576 ExceptionCode ec = UnknownError; |
| 576 if (m_showResolver) | 577 String message; |
| 577 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel
led")); | 578 |
| 578 if (m_abortResolver) | 579 switch (error) { |
| 579 m_abortResolver->reject(DOMException::create(SyntaxError, "Request cance
lled")); | 580 case mojom::blink::PaymentErrorReason::USER_CANCEL: |
| 581 message = "Request cancelled"; |
| 582 break; |
| 583 case mojom::blink::PaymentErrorReason::NOT_SUPPORTED: |
| 584 isError = true; |
| 585 ec = NotSupportedError; |
| 586 message = "The payment method is not supported"; |
| 587 break; |
| 588 case mojom::blink::PaymentErrorReason::UNKNOWN: |
| 589 isError = true; |
| 590 ec = UnknownError; |
| 591 message = "Request failed"; |
| 592 break; |
| 593 } |
| 594 |
| 595 DCHECK(!message.isEmpty()); |
| 596 |
| 597 if (isError) { |
| 598 if (m_completeResolver) |
| 599 m_completeResolver->reject(DOMException::create(ec, message)); |
| 600 |
| 601 if (m_showResolver) |
| 602 m_showResolver->reject(DOMException::create(ec, message)); |
| 603 |
| 604 if (m_abortResolver) |
| 605 m_abortResolver->reject(DOMException::create(ec, message)); |
| 606 } else { |
| 607 if (m_completeResolver) |
| 608 m_completeResolver->reject(message); |
| 609 |
| 610 if (m_showResolver) |
| 611 m_showResolver->reject(message); |
| 612 |
| 613 if (m_abortResolver) |
| 614 m_abortResolver->reject(message); |
| 615 } |
| 616 |
| 580 clearResolversAndCloseMojoConnection(); | 617 clearResolversAndCloseMojoConnection(); |
| 581 } | 618 } |
| 582 | 619 |
| 583 void PaymentRequest::OnComplete() | 620 void PaymentRequest::OnComplete() |
| 584 { | 621 { |
| 585 DCHECK(m_completeResolver); | 622 DCHECK(m_completeResolver); |
| 586 m_completeResolver->resolve(); | 623 m_completeResolver->resolve(); |
| 587 clearResolversAndCloseMojoConnection(); | 624 clearResolversAndCloseMojoConnection(); |
| 588 } | 625 } |
| 589 | 626 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 607 { | 644 { |
| 608 m_completeResolver.clear(); | 645 m_completeResolver.clear(); |
| 609 m_showResolver.clear(); | 646 m_showResolver.clear(); |
| 610 m_abortResolver.clear(); | 647 m_abortResolver.clear(); |
| 611 if (m_clientBinding.is_bound()) | 648 if (m_clientBinding.is_bound()) |
| 612 m_clientBinding.Close(); | 649 m_clientBinding.Close(); |
| 613 m_paymentProvider.reset(); | 650 m_paymentProvider.reset(); |
| 614 } | 651 } |
| 615 | 652 |
| 616 } // namespace blink | 653 } // namespace blink |
| OLD | NEW |