Commit 6647b5b4 authored by sanjoy.pal's avatar sanjoy.pal Committed by Commit bot

Reject payment request with AbortError if web page rejects promise from updateWith.

Specification:
https://www.w3.org/TR/payment-request/#updatewith

BUG=629461

Review-Url: https://codereview.chromium.org/2163193002
Cr-Commit-Position: refs/heads/master@{#406754}
parent 0be2d430
......@@ -458,10 +458,13 @@ void PaymentRequest::onUpdatePaymentDetails(const ScriptValue& detailsScriptValu
void PaymentRequest::onUpdatePaymentDetailsFailure(const ScriptValue& error)
{
String message;
error.toString(message);
if (m_showResolver)
m_showResolver->reject(error);
m_showResolver->reject(DOMException::create(AbortError, message));
if (m_completeResolver)
m_completeResolver->reject(error);
m_completeResolver->reject(DOMException::create(AbortError, message));
clearResolversAndCloseMojoConnection();
}
......
......@@ -329,9 +329,13 @@ TEST(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure)
PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionState());
EXPECT_FALSE(scope.getExceptionState().hadException());
request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
String errorMessage;
request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall(&errorMessage));
request->onUpdatePaymentDetailsFailure(ScriptValue::from(scope.getScriptState(), "oops"));
v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
EXPECT_EQ("AbortError: oops", errorMessage);
}
TEST(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
......@@ -344,9 +348,13 @@ TEST(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
request->show(scope.getScriptState()).then(funcs.expectCall(), funcs.expectNoCall());
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(buildPaymentResponseForTest());
request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall(), funcs.expectCall());
String errorMessage;
request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall(), funcs.expectCall(&errorMessage));
request->onUpdatePaymentDetailsFailure(ScriptValue::from(scope.getScriptState(), "oops"));
v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
EXPECT_EQ("AbortError: oops", errorMessage);
}
TEST(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment