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

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

Issue 2048823004: PaymentRequest.abort() should return a promise. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove DummyPageHolder and TrackExceptionState for haraken@ comment. Created 4 years, 6 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 DCHECK(!m_paymentProvider.is_bound()); 288 DCHECK(!m_paymentProvider.is_bound());
289 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService (mojo::GetProxy(&m_paymentProvider)); 289 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService (mojo::GetProxy(&m_paymentProvider));
290 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this)))); 290 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this))));
291 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); 291 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind());
292 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>:: From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink: :PaymentOptions::From(m_options)); 292 m_paymentProvider->Show(mojo::WTFArray<mojom::blink::PaymentMethodDataPtr>:: From(m_methodData), mojom::blink::PaymentDetails::From(m_details), mojom::blink: :PaymentOptions::From(m_options));
293 293
294 m_showResolver = ScriptPromiseResolver::create(scriptState); 294 m_showResolver = ScriptPromiseResolver::create(scriptState);
295 return m_showResolver->promise(); 295 return m_showResolver->promise();
296 } 296 }
297 297
298 void PaymentRequest::abort(ExceptionState& exceptionState) 298 ScriptPromise PaymentRequest::abort(ScriptState* scriptState)
299 { 299 {
300 if (!m_showResolver) { 300 if (m_abortResolver)
301 exceptionState.throwDOMException(InvalidStateError, "Never called show() , so nothing to abort"); 301 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Cannot abort() again until the previous abort() has r esolved or rejected"));
302 return;
303 }
304 302
303 if (!m_showResolver)
304 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Never called show(), so nothing to abort"));
305
306 m_abortResolver = ScriptPromiseResolver::create(scriptState);
305 m_paymentProvider->Abort(); 307 m_paymentProvider->Abort();
308 return m_abortResolver->promise();
306 } 309 }
307 310
308 const AtomicString& PaymentRequest::interfaceName() const 311 const AtomicString& PaymentRequest::interfaceName() const
309 { 312 {
310 return EventTargetNames::PaymentRequest; 313 return EventTargetNames::PaymentRequest;
311 } 314 }
312 315
313 ExecutionContext* PaymentRequest::getExecutionContext() const 316 ExecutionContext* PaymentRequest::getExecutionContext() const
314 { 317 {
315 return ContextLifecycleObserver::getExecutionContext(); 318 return ContextLifecycleObserver::getExecutionContext();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 clearResolversAndCloseMojoConnection(); 366 clearResolversAndCloseMojoConnection();
364 } 367 }
365 368
366 DEFINE_TRACE(PaymentRequest) 369 DEFINE_TRACE(PaymentRequest)
367 { 370 {
368 visitor->trace(m_details); 371 visitor->trace(m_details);
369 visitor->trace(m_options); 372 visitor->trace(m_options);
370 visitor->trace(m_shippingAddress); 373 visitor->trace(m_shippingAddress);
371 visitor->trace(m_showResolver); 374 visitor->trace(m_showResolver);
372 visitor->trace(m_completeResolver); 375 visitor->trace(m_completeResolver);
376 visitor->trace(m_abortResolver);
373 EventTargetWithInlineData::trace(visitor); 377 EventTargetWithInlineData::trace(visitor);
374 ContextLifecycleObserver::trace(visitor); 378 ContextLifecycleObserver::trace(visitor);
375 } 379 }
376 380
377 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o ptions, ExceptionState& exceptionState) 381 PaymentRequest::PaymentRequest(ScriptState* scriptState, const HeapVector<Paymen tMethodData>& methodData, const PaymentDetails& details, const PaymentOptions& o ptions, ExceptionState& exceptionState)
378 : ContextLifecycleObserver(scriptState->getExecutionContext()) 382 : ContextLifecycleObserver(scriptState->getExecutionContext())
379 , ActiveScriptWrappable(this) 383 , ActiveScriptWrappable(this)
380 , m_options(options) 384 , m_options(options)
381 , m_clientBinding(this) 385 , m_clientBinding(this)
382 { 386 {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 // connection to display a success or failure message to the user. 487 // connection to display a success or failure message to the user.
484 m_showResolver.clear(); 488 m_showResolver.clear();
485 } 489 }
486 490
487 void PaymentRequest::OnError() 491 void PaymentRequest::OnError()
488 { 492 {
489 if (m_completeResolver) 493 if (m_completeResolver)
490 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca ncelled")); 494 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca ncelled"));
491 if (m_showResolver) 495 if (m_showResolver)
492 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel led")); 496 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel led"));
497 if (m_abortResolver)
498 m_abortResolver->reject(DOMException::create(SyntaxError, "Request cance lled"));
493 clearResolversAndCloseMojoConnection(); 499 clearResolversAndCloseMojoConnection();
494 } 500 }
495 501
496 void PaymentRequest::OnComplete() 502 void PaymentRequest::OnComplete()
497 { 503 {
498 DCHECK(m_completeResolver); 504 DCHECK(m_completeResolver);
499 m_completeResolver->resolve(); 505 m_completeResolver->resolve();
500 clearResolversAndCloseMojoConnection(); 506 clearResolversAndCloseMojoConnection();
501 } 507 }
502 508
509 void PaymentRequest::OnAbort(bool abortedSuccessfully)
510 {
511 DCHECK(m_abortResolver);
512 DCHECK(m_showResolver);
513
514 if (!abortedSuccessfully) {
515 m_abortResolver->reject(DOMException::create(InvalidStateError));
516 m_abortResolver.clear();
517 return;
518 }
519
520 m_showResolver->reject(DOMException::create(AbortError));
521 m_abortResolver->resolve();
522 clearResolversAndCloseMojoConnection();
523 }
524
503 void PaymentRequest::clearResolversAndCloseMojoConnection() 525 void PaymentRequest::clearResolversAndCloseMojoConnection()
504 { 526 {
505 m_completeResolver.clear(); 527 m_completeResolver.clear();
506 m_showResolver.clear(); 528 m_showResolver.clear();
529 m_abortResolver.clear();
507 if (m_clientBinding.is_bound()) 530 if (m_clientBinding.is_bound())
508 m_clientBinding.Close(); 531 m_clientBinding.Close();
509 m_paymentProvider.reset(); 532 m_paymentProvider.reset();
510 } 533 }
511 534
512 } // namespace blink 535 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698