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

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: 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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 DCHECK(!m_paymentProvider.is_bound()); 245 DCHECK(!m_paymentProvider.is_bound());
246 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService (mojo::GetProxy(&m_paymentProvider)); 246 scriptState->domWindow()->frame()->serviceRegistry()->connectToRemoteService (mojo::GetProxy(&m_paymentProvider));
247 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this)))); 247 m_paymentProvider.set_connection_error_handler(createBaseCallback(bind(&Paym entRequest::OnError, WeakPersistentThisPointer<PaymentRequest>(this))));
248 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind()); 248 m_paymentProvider->SetClient(m_clientBinding.CreateInterfacePtrAndBind());
249 m_paymentProvider->Show(std::move(m_supportedMethods), mojom::blink::Payment Details::From(m_details), mojom::blink::PaymentOptions::From(m_options), m_strin gifiedData.isNull() ? "" : m_stringifiedData); 249 m_paymentProvider->Show(std::move(m_supportedMethods), mojom::blink::Payment Details::From(m_details), mojom::blink::PaymentOptions::From(m_options), m_strin gifiedData.isNull() ? "" : m_stringifiedData);
250 250
251 m_showResolver = ScriptPromiseResolver::create(scriptState); 251 m_showResolver = ScriptPromiseResolver::create(scriptState);
252 return m_showResolver->promise(); 252 return m_showResolver->promise();
253 } 253 }
254 254
255 void PaymentRequest::abort(ExceptionState& exceptionState) 255 ScriptPromise PaymentRequest::abort(ScriptState* scriptState)
256 { 256 {
257 if (!m_showResolver) { 257 if (!m_showResolver)
258 exceptionState.throwDOMException(InvalidStateError, "Never called show() , so nothing to abort"); 258 return ScriptPromise::rejectWithDOMException(scriptState, DOMException:: create(InvalidStateError, "Never called show(), so nothing to abort"));
259 return;
260 }
261 259
260 m_abortResolver = ScriptPromiseResolver::create(scriptState);
Marijn Kruisselbrink 2016/06/08 22:44:12 Presumably you want to do something special if m_a
please use gerrit instead 2016/06/09 22:36:14 Rejecting the second abort() promise is more consi
262 m_paymentProvider->Abort(); 261 m_paymentProvider->Abort();
262 return m_abortResolver->promise();
263 } 263 }
264 264
265 const AtomicString& PaymentRequest::interfaceName() const 265 const AtomicString& PaymentRequest::interfaceName() const
266 { 266 {
267 return EventTargetNames::PaymentRequest; 267 return EventTargetNames::PaymentRequest;
268 } 268 }
269 269
270 ExecutionContext* PaymentRequest::getExecutionContext() const 270 ExecutionContext* PaymentRequest::getExecutionContext() const
271 { 271 {
272 return ContextLifecycleObserver::getExecutionContext(); 272 return ContextLifecycleObserver::getExecutionContext();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 clearResolversAndCloseMojoConnection(); 320 clearResolversAndCloseMojoConnection();
321 } 321 }
322 322
323 DEFINE_TRACE(PaymentRequest) 323 DEFINE_TRACE(PaymentRequest)
324 { 324 {
325 visitor->trace(m_details); 325 visitor->trace(m_details);
326 visitor->trace(m_options); 326 visitor->trace(m_options);
327 visitor->trace(m_shippingAddress); 327 visitor->trace(m_shippingAddress);
328 visitor->trace(m_showResolver); 328 visitor->trace(m_showResolver);
329 visitor->trace(m_completeResolver); 329 visitor->trace(m_completeResolver);
330 visitor->trace(m_abortResolver);
330 EventTargetWithInlineData::trace(visitor); 331 EventTargetWithInlineData::trace(visitor);
331 ContextLifecycleObserver::trace(visitor); 332 ContextLifecycleObserver::trace(visitor);
332 } 333 }
333 334
334 PaymentRequest::PaymentRequest(ScriptState* scriptState, const Vector<String>& s upportedMethods, const PaymentDetails& details, const PaymentOptions& options, c onst ScriptValue& data, ExceptionState& exceptionState) 335 PaymentRequest::PaymentRequest(ScriptState* scriptState, const Vector<String>& s upportedMethods, const PaymentDetails& details, const PaymentOptions& options, c onst ScriptValue& data, ExceptionState& exceptionState)
335 : ContextLifecycleObserver(scriptState->getExecutionContext()) 336 : ContextLifecycleObserver(scriptState->getExecutionContext())
336 , ActiveScriptWrappable(this) 337 , ActiveScriptWrappable(this)
337 , m_options(options) 338 , m_options(options)
338 , m_clientBinding(this) 339 , m_clientBinding(this)
339 { 340 {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 // connection to display a success or failure message to the user. 471 // connection to display a success or failure message to the user.
471 m_showResolver.clear(); 472 m_showResolver.clear();
472 } 473 }
473 474
474 void PaymentRequest::OnError() 475 void PaymentRequest::OnError()
475 { 476 {
476 if (m_completeResolver) 477 if (m_completeResolver)
477 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca ncelled")); 478 m_completeResolver->reject(DOMException::create(SyntaxError, "Request ca ncelled"));
478 if (m_showResolver) 479 if (m_showResolver)
479 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel led")); 480 m_showResolver->reject(DOMException::create(SyntaxError, "Request cancel led"));
481 if (m_abortResolver)
482 m_abortResolver->reject(DOMException::create(SyntaxError, "Request cance lled"));
480 clearResolversAndCloseMojoConnection(); 483 clearResolversAndCloseMojoConnection();
481 } 484 }
482 485
483 void PaymentRequest::OnComplete() 486 void PaymentRequest::OnComplete()
484 { 487 {
485 DCHECK(m_completeResolver); 488 DCHECK(m_completeResolver);
486 m_completeResolver->resolve(); 489 m_completeResolver->resolve();
487 clearResolversAndCloseMojoConnection(); 490 clearResolversAndCloseMojoConnection();
488 } 491 }
489 492
493 void PaymentRequest::OnAbort(bool abortedSuccessfully)
haraken 2016/06/09 01:57:59 OnAbort => onAbort
please use gerrit instead 2016/06/09 22:36:14 This is an implementation of the interface defined
494 {
495 DCHECK(m_abortResolver);
496 DCHECK(m_showResolver);
497
498 if (!abortedSuccessfully) {
499 m_abortResolver->reject(DOMException::create(InvalidStateError));
500 return;
501 }
502
503 m_showResolver->reject(DOMException::create(AbortError));
504 m_abortResolver->resolve();
505 clearResolversAndCloseMojoConnection();
506 }
507
490 void PaymentRequest::clearResolversAndCloseMojoConnection() 508 void PaymentRequest::clearResolversAndCloseMojoConnection()
491 { 509 {
492 m_completeResolver.clear(); 510 m_completeResolver.clear();
493 m_showResolver.clear(); 511 m_showResolver.clear();
512 m_abortResolver.clear();
494 if (m_clientBinding.is_bound()) 513 if (m_clientBinding.is_bound())
495 m_clientBinding.Close(); 514 m_clientBinding.Close();
496 m_paymentProvider.reset(); 515 m_paymentProvider.reset();
497 } 516 }
498 517
499 } // namespace blink 518 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698