| Index: third_party/WebKit/Source/modules/payments/OnPaymentResponseTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/payments/OnPaymentResponseTest.cpp b/third_party/WebKit/Source/modules/payments/OnPaymentResponseTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6f004f122f6dd030c15db02b953809923f6cb9c7
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/modules/payments/OnPaymentResponseTest.cpp
|
| @@ -0,0 +1,458 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Tests for PaymentRequest::OnPaymentResponse().
|
| +
|
| +#include "bindings/core/v8/ScriptFunction.h"
|
| +#include "bindings/core/v8/V8BindingForTesting.h"
|
| +#include "bindings/modules/v8/V8PaymentResponse.h"
|
| +#include "modules/payments/PaymentAddress.h"
|
| +#include "modules/payments/PaymentRequest.h"
|
| +#include "modules/payments/PaymentTestHelper.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include <utility>
|
| +
|
| +namespace blink {
|
| +namespace {
|
| +
|
| +// If the merchant requests shipping information, but the browser does not
|
| +// provide the shipping option, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectMissingShippingOption)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| + response->shipping_address->country = "US";
|
| + response->shipping_address->language_code = "en";
|
| + response->shipping_address->script_code = "Latn";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests shipping information, but the browser does not
|
| +// provide a shipping address, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectMissingAddress)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_option = "standardShipping";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests an email address, but the browser does not provide
|
| +// it, reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectMissingEmail)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerEmail(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests a phone number, but the browser does not provide it,
|
| +// reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectMissingPhone)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerPhone(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests shipping information, but the browser provides an
|
| +// empty string for shipping option, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectEmptyShippingOption)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_option = "";
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| + response->shipping_address->country = "US";
|
| + response->shipping_address->language_code = "en";
|
| + response->shipping_address->script_code = "Latn";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests shipping information, but the browser provides an
|
| +// empty shipping address, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectEmptyAddress)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_option = "standardShipping";
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests an email, but the browser provides an empty string
|
| +// for email, reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectEmptyEmail)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerEmail(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_email = "";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests a phone number, but the browser provides an empty
|
| +// string for the phone number, reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectEmptyPhone)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerPhone(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_phone = "";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant does not request shipping information, but the browser
|
| +// provides a shipping address, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectNotRequestedAddress)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| + response->shipping_address->country = "US";
|
| + response->shipping_address->language_code = "en";
|
| + response->shipping_address->script_code = "Latn";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant does not request shipping information, but the browser
|
| +// provides a shipping option, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectNotRequestedShippingOption)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->shipping_option = "";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant does not request an email, but the browser provides it,
|
| +// reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectNotRequestedEmail)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerEmail(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_email = "";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant does not request a phone number, but the browser provides it,
|
| +// reject the show() promise.
|
| +TEST(PaymentRequestTest, RejectNotRequestedPhone)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerPhone(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_phone = "";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +// If the merchant requests shipping information, but the browser provides an
|
| +// invalid shipping address, reject the show() promise.
|
| +TEST(OnPaymentResponseTest, RejectInvalidAddress)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_option = "standardShipping";
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| + response->shipping_address->country = "Atlantis";
|
| +
|
| + request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expectCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +}
|
| +
|
| +class PaymentResponseFunction : public ScriptFunction {
|
| +public:
|
| + static v8::Local<v8::Function> create(ScriptState* scriptState, ScriptValue* outValue)
|
| + {
|
| + PaymentResponseFunction* self = new PaymentResponseFunction(scriptState, outValue);
|
| + return self->bindToV8Function();
|
| + }
|
| +
|
| +private:
|
| + PaymentResponseFunction(ScriptState* scriptState, ScriptValue* outValue)
|
| + : ScriptFunction(scriptState)
|
| + , m_value(outValue)
|
| + {
|
| + DCHECK(m_value);
|
| + }
|
| +
|
| + ScriptValue call(ScriptValue value) override
|
| + {
|
| + DCHECK(!value.isEmpty());
|
| + *m_value = value;
|
| + return value;
|
| + }
|
| +
|
| + ScriptValue* const m_value;
|
| +};
|
| +
|
| +// If the merchant requests shipping information, the resolved show() promise
|
| +// should contain a shipping option and an address.
|
| +TEST(OnPaymentResponseTest, CanRequestShippingInformation)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
|
| + response->shipping_option = "standardShipping";
|
| + response->shipping_address = mojom::blink::PaymentAddress::New();
|
| + response->shipping_address->country = "US";
|
| + response->shipping_address->language_code = "en";
|
| + response->shipping_address->script_code = "Latn";
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* resp = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| + EXPECT_EQ("standardShipping", resp->shippingOption());
|
| + EXPECT_EQ("US", resp->shippingAddress()->country());
|
| + EXPECT_EQ("en-Latn", resp->shippingAddress()->languageCode());
|
| +}
|
| +
|
| +// If the merchant requests an email address, the resolved show() promise should
|
| +// contain an email address.
|
| +TEST(PaymentRequestTest, CanRequestEmail)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerEmail(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_email = "abc@gmail.com";
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| + EXPECT_EQ("abc@gmail.com", pr->payerEmail());
|
| +}
|
| +
|
| +// If the merchant requests a phone number, the resolved show() promise should
|
| +// contain a phone number.
|
| +TEST(PaymentRequestTest, CanRequestPhone)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerPhone(true);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_phone = "0123";
|
| +
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| +
|
| + EXPECT_EQ("0123", pr->payerPhone());
|
| +}
|
| +
|
| +// If the merchant does not request shipping information, the resolved show()
|
| +// promise should contain null shipping option and address.
|
| +TEST(OnPaymentResponseTest, ShippingInformationNotRequired)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestShipping(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + ASSERT_FALSE(scope.getExceptionState().hadException());
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(buildPaymentResponseForTest());
|
| +
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* resp = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| + EXPECT_TRUE(resp->shippingOption().isNull());
|
| + EXPECT_EQ(nullptr, resp->shippingAddress());
|
| +}
|
| +
|
| +// If the merchant does not request a phone number, the resolved show() promise
|
| +// should contain null phone number.
|
| +TEST(PaymentRequestTest, PhoneNotRequred)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerPhone(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_phone = String();
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| + EXPECT_TRUE(pr->payerPhone().isNull());
|
| +}
|
| +
|
| +// If the merchant does not request an email address, the resolved show()
|
| +// promise should contain null email address.
|
| +TEST(PaymentRequestTest, EmailNotRequired)
|
| +{
|
| + V8TestingScope scope;
|
| + PaymentRequestMockFunctionScope funcs(scope.getScriptState());
|
| + makePaymentRequestOriginSecure(scope.document());
|
| + PaymentOptions options;
|
| + options.setRequestPayerEmail(false);
|
| + PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), buildPaymentMethodDataForTest(), buildPaymentDetailsForTest(), options, scope.getExceptionState());
|
| + EXPECT_FALSE(scope.getExceptionState().hadException());
|
| + mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New();
|
| + response->total_amount = mojom::blink::PaymentCurrencyAmount::New();
|
| + response->payer_email = String();
|
| + ScriptValue outValue;
|
| + request->show(scope.getScriptState()).then(PaymentResponseFunction::create(scope.getScriptState(), &outValue), funcs.expectNoCall());
|
| +
|
| + static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response));
|
| +
|
| + v8::MicrotasksScope::PerformCheckpoint(scope.isolate());
|
| + PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(scope.isolate(), outValue.v8Value());
|
| + EXPECT_TRUE(pr->payerEmail().isNull());
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace blink
|
|
|