Commit 4007304a authored by Clemens Arbesser's avatar Clemens Arbesser Committed by Commit Bot

[Autofill Assistant] Added missing required fields to UseCreditCard action.

Bug: b/142864606
Change-Id: I9e21c4f42e55ae6c5cdd84621da73bc6bd6bf590
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1871555Reviewed-by: default avatarMathias Carlen <mcarlen@chromium.org>
Commit-Queue: Clemens Arbesser <arbesser@google.com>
Cr-Commit-Position: refs/heads/master@{#708171}
parent 161dd699
......@@ -21,6 +21,7 @@
#include "components/autofill_assistant/browser/client_status.h"
namespace autofill_assistant {
UseCreditCardAction::FallbackData::FallbackData() {}
UseCreditCardAction::UseCreditCardAction(ActionDelegate* delegate,
const ActionProto& proto)
......@@ -98,6 +99,10 @@ void UseCreditCardAction::OnGetFullCard(
fallback_data->cvc = base::UTF16ToUTF8(cvc);
fallback_data->expiration_month = card->expiration_month();
fallback_data->expiration_year = card->expiration_year();
fallback_data->card_holder_name =
base::UTF16ToUTF8(card->GetRawInfo(autofill::CREDIT_CARD_NAME_FULL));
fallback_data->card_number =
base::UTF16ToUTF8(card->GetRawInfo(autofill::CREDIT_CARD_NUMBER));
delegate_->FillCardForm(
std::move(card), cvc, selector_,
......@@ -280,6 +285,14 @@ std::string UseCreditCardAction::GetCreditCardFieldValue(
return base::NumberToString(fallback_data.expiration_year);
break;
case UseCreditCardProto::RequiredField::CREDIT_CARD_CARD_HOLDER_NAME:
return fallback_data.card_holder_name;
break;
case UseCreditCardProto::RequiredField::CREDIT_CARD_NUMBER:
return fallback_data.card_number;
break;
case UseCreditCardProto::RequiredField::UNDEFINED:
NOTREACHED();
return "";
......
......@@ -52,11 +52,13 @@ class UseCreditCardAction : public Action {
// separate struct to make sure we don't keep it for longer than strictly
// necessary.
struct FallbackData {
FallbackData() = default;
FallbackData();
~FallbackData() = default;
// Card information for UseCreditCard fallback.
std::string cvc;
std::string card_holder_name;
std::string card_number;
int expiration_year = 0;
int expiration_month = 0;
......
......@@ -171,6 +171,12 @@ TEST_F(UseCreditCardActionTest, FillCreditCardWithFallback) {
AddRequiredField(
&action, UseCreditCardProto::RequiredField::CREDIT_CARD_EXP_4_DIGIT_YEAR,
"#expyear4");
AddRequiredField(
&action, UseCreditCardProto::RequiredField::CREDIT_CARD_CARD_HOLDER_NAME,
"#card_name");
AddRequiredField(&action,
UseCreditCardProto::RequiredField::CREDIT_CARD_NUMBER,
"#card_number");
// First validation fails.
EXPECT_CALL(mock_web_controller_, OnGetFieldValue(Selector({"#cvc"}), _))
......@@ -181,6 +187,12 @@ TEST_F(UseCreditCardActionTest, FillCreditCardWithFallback) {
.WillOnce(RunOnceCallback<1>(OkClientStatus(), ""));
EXPECT_CALL(mock_web_controller_, OnGetFieldValue(Selector({"#expyear4"}), _))
.WillOnce(RunOnceCallback<1>(OkClientStatus(), ""));
EXPECT_CALL(mock_web_controller_,
OnGetFieldValue(Selector({"#card_name"}), _))
.WillOnce(RunOnceCallback<1>(OkClientStatus(), ""));
EXPECT_CALL(mock_web_controller_,
OnGetFieldValue(Selector({"#card_number"}), _))
.WillOnce(RunOnceCallback<1>(OkClientStatus(), ""));
// Expect fields to be filled
Expectation set_cvc =
......@@ -199,6 +211,15 @@ TEST_F(UseCreditCardActionTest, FillCreditCardWithFallback) {
EXPECT_CALL(mock_action_delegate_,
OnSetFieldValue(Selector({"#expyear4"}), "2024", _))
.WillOnce(RunOnceCallback<2>(OkClientStatus()));
Expectation set_cardholder_name =
EXPECT_CALL(mock_action_delegate_,
OnSetFieldValue(Selector({"#card_name"}), "Jon Doe", _))
.WillOnce(RunOnceCallback<2>(OkClientStatus()));
Expectation set_card_number =
EXPECT_CALL(
mock_action_delegate_,
OnSetFieldValue(Selector({"#card_number"}), "4111111111111111", _))
.WillOnce(RunOnceCallback<2>(OkClientStatus()));
// After fallback, second validation succeeds.
EXPECT_CALL(mock_web_controller_, OnGetFieldValue(Selector({"#cvc"}), _))
......@@ -213,10 +234,22 @@ TEST_F(UseCreditCardActionTest, FillCreditCardWithFallback) {
EXPECT_CALL(mock_web_controller_, OnGetFieldValue(Selector({"#expyear4"}), _))
.After(set_expyear4)
.WillOnce(RunOnceCallback<1>(OkClientStatus(), "not empty"));
EXPECT_CALL(mock_web_controller_,
OnGetFieldValue(Selector({"#card_name"}), _))
.After(set_expyear4)
.WillOnce(RunOnceCallback<1>(OkClientStatus(), "not empty"));
EXPECT_CALL(mock_web_controller_,
OnGetFieldValue(Selector({"#card_number"}), _))
.After(set_expyear4)
.WillOnce(RunOnceCallback<1>(OkClientStatus(), "not empty"));
autofill::CreditCard credit_card;
credit_card.SetExpirationMonth(9);
credit_card.SetExpirationYear(2024);
credit_card.SetRawInfo(autofill::CREDIT_CARD_NAME_FULL,
base::UTF8ToUTF16("Jon Doe"));
credit_card.SetRawInfo(autofill::CREDIT_CARD_NUMBER,
base::UTF8ToUTF16("4111111111111111"));
client_memory_.set_selected_card(
std::make_unique<autofill::CreditCard>(credit_card));
EXPECT_CALL(mock_action_delegate_, OnGetFullCard(_))
......
......@@ -908,6 +908,8 @@ message UseCreditCardProto {
CREDIT_CARD_EXP_MONTH = 2;
CREDIT_CARD_EXP_2_DIGIT_YEAR = 3;
CREDIT_CARD_EXP_4_DIGIT_YEAR = 4;
CREDIT_CARD_CARD_HOLDER_NAME = 5;
CREDIT_CARD_NUMBER = 6;
}
optional CardField card_field = 1;
......
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