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

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

Issue 2250793003: Separate PaymentRequest initialization and display. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update payment-request-mock.js Created 4 years, 3 months 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/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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 { 372 {
373 return new PaymentRequest(scriptState, methodData, details, options, excepti onState); 373 return new PaymentRequest(scriptState, methodData, details, options, excepti onState);
374 } 374 }
375 375
376 PaymentRequest::~PaymentRequest() 376 PaymentRequest::~PaymentRequest()
377 { 377 {
378 } 378 }
379 379
380 ScriptPromise PaymentRequest::show(ScriptState* scriptState) 380 ScriptPromise PaymentRequest::show(ScriptState* scriptState)
381 { 381 {
382 if (m_showResolver) 382 if (!m_paymentProvider.is_bound() || m_showResolver)
383 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Already called show() once")); 383 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Already called show() once"));
384 384
385 if (!scriptState->domWindow() || !scriptState->domWindow()->frame()) 385 if (!scriptState->domWindow() || !scriptState->domWindow()->frame())
386 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Cannot show the payment request")); 386 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Cannot show the payment request"));
387 387
388 DCHECK(!m_paymentProvider.is_bound()); 388 m_paymentProvider->Show();
389 scriptState->domWindow()->frame()->interfaceProvider()->getInterface(mojo::G etProxy(&m_paymentProvider));
390 m_paymentProvider.set_connection_error_handler(convertToBaseCallback(WTF::bi nd(&PaymentRequest::OnError, wrapWeakPersistent(this), mojom::blink::PaymentErro rReason::UNKNOWN)));
391 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind());
392 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>:: From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink: :PaymentOptions::From(m_options));
393 389
394 m_showResolver = ScriptPromiseResolver::create(scriptState); 390 m_showResolver = ScriptPromiseResolver::create(scriptState);
395 return m_showResolver->promise(); 391 return m_showResolver->promise();
396 } 392 }
397 393
398 ScriptPromise PaymentRequest::abort(ScriptState* scriptState) 394 ScriptPromise PaymentRequest::abort(ScriptState* scriptState)
399 { 395 {
400 if (m_abortResolver) 396 if (m_abortResolver)
401 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Cannot abort() again until the previous abort() has r esolved or rejected")); 397 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Cannot abort() again until the previous abort() has r esolved or rejected"));
402 398
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 { 466 {
471 if (m_showResolver) 467 if (m_showResolver)
472 m_showResolver->reject(DOMException::create(AbortError, error)); 468 m_showResolver->reject(DOMException::create(AbortError, error));
473 if (m_completeResolver) 469 if (m_completeResolver)
474 m_completeResolver->reject(DOMException::create(AbortError, error)); 470 m_completeResolver->reject(DOMException::create(AbortError, error));
475 clearResolversAndCloseMojoConnection(); 471 clearResolversAndCloseMojoConnection();
476 } 472 }
477 473
478 DEFINE_TRACE(PaymentRequest) 474 DEFINE_TRACE(PaymentRequest)
479 { 475 {
480 visitor->trace(m_details);
481 visitor->trace(m_options); 476 visitor->trace(m_options);
482 visitor->trace(m_shippingAddress); 477 visitor->trace(m_shippingAddress);
483 visitor->trace(m_showResolver); 478 visitor->trace(m_showResolver);
484 visitor->trace(m_completeResolver); 479 visitor->trace(m_completeResolver);
485 visitor->trace(m_abortResolver); 480 visitor->trace(m_abortResolver);
486 EventTargetWithInlineData::trace(visitor); 481 EventTargetWithInlineData::trace(visitor);
487 ContextLifecycleObserver::trace(visitor); 482 ContextLifecycleObserver::trace(visitor);
488 } 483 }
489 484
490 void PaymentRequest::onCompleteTimeoutForTesting() 485 void PaymentRequest::onCompleteTimeoutForTesting()
491 { 486 {
492 m_completeTimer.stop(); 487 m_completeTimer.stop();
493 onCompleteTimeout(0); 488 onCompleteTimeout(0);
494 } 489 }
495 490
496 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o ptions, ExceptionState& exceptionState) 491 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o ptions, ExceptionState& exceptionState)
497 : ContextLifecycleObserver(scriptState->getExecutionContext()) 492 : ContextLifecycleObserver(scriptState->getExecutionContext())
498 , ActiveScriptWrappable(this) 493 , ActiveScriptWrappable(this)
499 , m_options(options) 494 , m_options(options)
500 , m_clientBinding(this) 495 , m_clientBinding(this)
501 , m_completeTimer(this, &PaymentRequest::onCompleteTimeout) 496 , m_completeTimer(this, &PaymentRequest::onCompleteTimeout)
502 { 497 {
503 validateAndConvertPaymentMethodData(methodData, &m_methodData, exceptionStat e); 498 Vector<MethodData> validatedMethodData;
499 validateAndConvertPaymentMethodData(methodData, &validatedMethodData, except ionState);
504 if (exceptionState.hadException()) 500 if (exceptionState.hadException())
505 return; 501 return;
506 502
507 if (!scriptState->getExecutionContext()->isSecureContext()) { 503 if (!scriptState->getExecutionContext()->isSecureContext()) {
508 exceptionState.throwSecurityError("Must be in a secure context"); 504 exceptionState.throwSecurityError("Must be in a secure context");
509 return; 505 return;
510 } 506 }
511 507
512 if (!scriptState->domWindow()->frame() || !scriptState->domWindow()->frame() ->isMainFrame()) { 508 if (!scriptState->domWindow()->frame() || !scriptState->domWindow()->frame() ->isMainFrame()) {
513 exceptionState.throwSecurityError("Must be in a top-level browsing conte xt"); 509 exceptionState.throwSecurityError("Must be in a top-level browsing conte xt");
514 return; 510 return;
515 } 511 }
516 512
517 validatePaymentDetails(details, exceptionState); 513 validatePaymentDetails(details, exceptionState);
518 if (exceptionState.hadException()) 514 if (exceptionState.hadException())
519 return; 515 return;
520 m_details = details;
521 516
522 if (m_options.requestShipping()) 517 if (m_options.requestShipping())
523 m_shippingOption = getSelectedShippingOption(details); 518 m_shippingOption = getSelectedShippingOption(details);
519
520 scriptState->domWindow()->frame()->interfaceProvider()->getInterface(mojo::G etProxy(&m_paymentProvider));
521 m_paymentProvider.set_connection_error_handler(convertToBaseCallback(WTF::bi nd(&PaymentRequest::OnError, wrapWeakPersistent(this), mojom::blink::PaymentErro rReason::UNKNOWN)));
522 m_paymentProvider->Init(m_clientBinding.CreateInterfacePtrAndBind(), mojo::W TFArray<mojom::blink::PaymentMethodDataPtr>::From(validatedMethodData), mojom::b link::PaymentDetails::From(details), mojom::blink::PaymentOptions::From(m_option s));
524 } 523 }
525 524
526 void PaymentRequest::contextDestroyed() 525 void PaymentRequest::contextDestroyed()
527 { 526 {
528 clearResolversAndCloseMojoConnection(); 527 clearResolversAndCloseMojoConnection();
529 } 528 }
530 529
531 bool PaymentRequest::hasPendingActivity() const 530 bool PaymentRequest::hasPendingActivity() const
532 { 531 {
533 return m_showResolver || m_completeResolver; 532 return m_showResolver || m_completeResolver;
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 m_completeTimer.stop(); 696 m_completeTimer.stop();
698 m_completeResolver.clear(); 697 m_completeResolver.clear();
699 m_showResolver.clear(); 698 m_showResolver.clear();
700 m_abortResolver.clear(); 699 m_abortResolver.clear();
701 if (m_clientBinding.is_bound()) 700 if (m_clientBinding.is_bound())
702 m_clientBinding.Close(); 701 m_clientBinding.Close();
703 m_paymentProvider.reset(); 702 m_paymentProvider.reset();
704 } 703 }
705 704
706 } // namespace blink 705 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698