Commit 52ca03bf authored by siashah's avatar siashah Committed by Commit Bot

Add card_issuer to CreditCard class and set/get from autofill_table

The default value for the card_issuer is set to ISSUER_UNKNOWN, which
is a no-op.

Please refer to bug for design doc.

Bug: 1063426
Change-Id: Iadfab36e31f48549216346278863d08d1e025513
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145970Reviewed-by: default avatarDominic Battré <battre@chromium.org>
Reviewed-by: default avatarJared Saul <jsaul@google.com>
Commit-Queue: Siddharth Shah <siashah@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758946}
parent d4887fb2
...@@ -114,7 +114,8 @@ CreditCard::CreditCard(const std::string& guid, const std::string& origin) ...@@ -114,7 +114,8 @@ CreditCard::CreditCard(const std::string& guid, const std::string& origin)
network_(kGenericCard), network_(kGenericCard),
expiration_month_(0), expiration_month_(0),
expiration_year_(0), expiration_year_(0),
server_status_(OK) {} server_status_(OK),
card_issuer_(ISSUER_UNKNOWN) {}
CreditCard::CreditCard(RecordType type, const std::string& server_id) CreditCard::CreditCard(RecordType type, const std::string& server_id)
: CreditCard() { : CreditCard() {
...@@ -515,6 +516,7 @@ void CreditCard::operator=(const CreditCard& credit_card) { ...@@ -515,6 +516,7 @@ void CreditCard::operator=(const CreditCard& credit_card) {
temp_card_first_name_ = credit_card.temp_card_first_name_; temp_card_first_name_ = credit_card.temp_card_first_name_;
temp_card_last_name_ = credit_card.temp_card_last_name_; temp_card_last_name_ = credit_card.temp_card_last_name_;
nickname_ = credit_card.nickname_; nickname_ = credit_card.nickname_;
card_issuer_ = credit_card.card_issuer_;
set_guid(credit_card.guid()); set_guid(credit_card.guid());
set_origin(credit_card.origin()); set_origin(credit_card.origin());
...@@ -592,11 +594,22 @@ int CreditCard::Compare(const CreditCard& credit_card) const { ...@@ -592,11 +594,22 @@ int CreditCard::Compare(const CreditCard& credit_card) const {
return comparison; return comparison;
if (static_cast<int>(server_status_) < if (static_cast<int>(server_status_) <
static_cast<int>(credit_card.server_status_)) static_cast<int>(credit_card.server_status_)) {
return -1; return -1;
}
if (static_cast<int>(server_status_) > if (static_cast<int>(server_status_) >
static_cast<int>(credit_card.server_status_)) static_cast<int>(credit_card.server_status_)) {
return 1; return 1;
}
if (static_cast<int>(card_issuer_) <
static_cast<int>(credit_card.card_issuer_)) {
return -1;
}
if (static_cast<int>(card_issuer_) >
static_cast<int>(credit_card.card_issuer_)) {
return 1;
}
// Do not distinguish masked server cards from full server cards as this is // Do not distinguish masked server cards from full server cards as this is
// not needed and not desired - we want to identify masked server card from // not needed and not desired - we want to identify masked server card from
...@@ -971,8 +984,8 @@ std::ostream& operator<<(std::ostream& os, const CreditCard& credit_card) { ...@@ -971,8 +984,8 @@ std::ostream& operator<<(std::ostream& os, const CreditCard& credit_card) {
<< " " << credit_card.bank_name() << " " << " " << credit_card.bank_name() << " "
<< " " << credit_card.record_type() << " " << " " << credit_card.record_type() << " "
<< credit_card.use_count() << " " << credit_card.use_date() << " " << credit_card.use_count() << " " << credit_card.use_date() << " "
<< credit_card.billing_address_id() << " " << credit_card.billing_address_id() << " " << credit_card.nickname()
<< credit_card.nickname(); << " " << credit_card.card_issuer();
} }
void CreditCard::SetNameOnCardFromSeparateParts() { void CreditCard::SetNameOnCardFromSeparateParts() {
......
...@@ -60,6 +60,12 @@ class CreditCard : public AutofillDataModel { ...@@ -60,6 +60,12 @@ class CreditCard : public AutofillDataModel {
OK, OK,
}; };
// The Issuer for the card.
enum Issuer {
ISSUER_UNKNOWN = 0,
GOOGLE = 1,
};
CreditCard(const std::string& guid, const std::string& origin); CreditCard(const std::string& guid, const std::string& origin);
// Creates a server card. The type must be MASKED_SERVER_CARD or // Creates a server card. The type must be MASKED_SERVER_CARD or
...@@ -138,6 +144,9 @@ class CreditCard : public AutofillDataModel { ...@@ -138,6 +144,9 @@ class CreditCard : public AutofillDataModel {
// with whitespaces, and trim leading/trailing whitespaces). // with whitespaces, and trim leading/trailing whitespaces).
void SetNickname(const base::string16& nickname); void SetNickname(const base::string16& nickname);
Issuer card_issuer() const { return card_issuer_; }
void set_card_issuer(Issuer card_issuer) { card_issuer_ = card_issuer; }
// For use in STL containers. // For use in STL containers.
void operator=(const CreditCard& credit_card); void operator=(const CreditCard& credit_card);
...@@ -343,6 +352,10 @@ class CreditCard : public AutofillDataModel { ...@@ -343,6 +352,10 @@ class CreditCard : public AutofillDataModel {
// The nickname of the card. May be empty when nickname is not set. // The nickname of the card. May be empty when nickname is not set.
base::string16 nickname_; base::string16 nickname_;
// The issuer for the card. This is populated from the sync response. It has a
// default value of CreditCard::ISSUER_UNKNOWN.
Issuer card_issuer_;
}; };
// So we can compare CreditCards with EXPECT_EQ(). // So we can compare CreditCards with EXPECT_EQ().
......
...@@ -676,6 +676,11 @@ TEST(CreditCardTest, Compare) { ...@@ -676,6 +676,11 @@ TEST(CreditCardTest, Compare) {
b.set_record_type(LOCAL_CARD); b.set_record_type(LOCAL_CARD);
EXPECT_LT(0, a.Compare(b)); EXPECT_LT(0, a.Compare(b));
// Card with UNKNOWN_ISSUER is different from GOOGLE issued card.
a.set_card_issuer(CreditCard::ISSUER_UNKNOWN);
b.set_card_issuer(CreditCard::GOOGLE);
EXPECT_GT(0, a.Compare(b));
// Different values produce non-zero results. // Different values produce non-zero results.
test::SetCreditCardInfo(&a, "Jimmy", nullptr, nullptr, nullptr, ""); test::SetCreditCardInfo(&a, "Jimmy", nullptr, nullptr, nullptr, "");
test::SetCreditCardInfo(&b, "Ringo", nullptr, nullptr, nullptr, ""); test::SetCreditCardInfo(&b, "Ringo", nullptr, nullptr, nullptr, "");
......
...@@ -1229,7 +1229,8 @@ bool AutofillTable::GetServerCreditCards( ...@@ -1229,7 +1229,8 @@ bool AutofillTable::GetServerCreditCards(
"exp_year," // 9 "exp_year," // 9
"metadata.billing_address_id," // 10 "metadata.billing_address_id," // 10
"bank_name," // 11 "bank_name," // 11
"nickname " // 12 "nickname," // 12
"card_issuer " // 13
"FROM masked_credit_cards masked " "FROM masked_credit_cards masked "
"LEFT OUTER JOIN unmasked_credit_cards USING (id) " "LEFT OUTER JOIN unmasked_credit_cards USING (id) "
"LEFT OUTER JOIN server_card_metadata metadata USING (id)")); "LEFT OUTER JOIN server_card_metadata metadata USING (id)"));
...@@ -1273,6 +1274,8 @@ bool AutofillTable::GetServerCreditCards( ...@@ -1273,6 +1274,8 @@ bool AutofillTable::GetServerCreditCards(
card->set_billing_address_id(s.ColumnString(index++)); card->set_billing_address_id(s.ColumnString(index++));
card->set_bank_name(s.ColumnString(index++)); card->set_bank_name(s.ColumnString(index++));
card->SetNickname(s.ColumnString16(index++)); card->SetNickname(s.ColumnString16(index++));
card->set_card_issuer(
static_cast<CreditCard::Issuer>(s.ColumnInt(index++)));
credit_cards->push_back(std::move(card)); credit_cards->push_back(std::move(card));
} }
return s.Succeeded(); return s.Succeeded();
...@@ -1531,8 +1534,9 @@ void AutofillTable::SetServerCardsData( ...@@ -1531,8 +1534,9 @@ void AutofillTable::SetServerCardsData(
"exp_month," // 5 "exp_month," // 5
"exp_year," // 6 "exp_year," // 6
"bank_name," // 7 "bank_name," // 7
"nickname)" // 8 "nickname," // 8
"VALUES (?,?,?,?,?,?,?,?,?)")); "card_issuer)" // 9
"VALUES (?,?,?,?,?,?,?,?,?,?)"));
int index; int index;
for (const CreditCard& card : credit_cards) { for (const CreditCard& card : credit_cards) {
DCHECK_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type()); DCHECK_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type());
...@@ -1548,6 +1552,7 @@ void AutofillTable::SetServerCardsData( ...@@ -1548,6 +1552,7 @@ void AutofillTable::SetServerCardsData(
card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR));
masked_insert.BindString(index++, card.bank_name()); masked_insert.BindString(index++, card.bank_name());
masked_insert.BindString16(index++, card.nickname()); masked_insert.BindString16(index++, card.nickname());
masked_insert.BindInt(index++, static_cast<int>(card.card_issuer()));
masked_insert.Run(); masked_insert.Run();
masked_insert.Reset(true); masked_insert.Reset(true);
} }
...@@ -2962,8 +2967,9 @@ void AutofillTable::AddMaskedCreditCards( ...@@ -2962,8 +2967,9 @@ void AutofillTable::AddMaskedCreditCards(
"exp_month," // 5 "exp_month," // 5
"exp_year," // 6 "exp_year," // 6
"bank_name," // 7 "bank_name," // 7
"nickname)" // 8 "nickname," // 8
"VALUES (?,?,?,?,?,?,?,?,?)")); "card_issuer)" // 9
"VALUES (?,?,?,?,?,?,?,?,?,?)"));
int index; int index;
for (const CreditCard& card : credit_cards) { for (const CreditCard& card : credit_cards) {
DCHECK_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type()); DCHECK_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type());
...@@ -2979,6 +2985,7 @@ void AutofillTable::AddMaskedCreditCards( ...@@ -2979,6 +2985,7 @@ void AutofillTable::AddMaskedCreditCards(
card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR)); card.GetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR));
masked_insert.BindString(index++, card.bank_name()); masked_insert.BindString(index++, card.bank_name());
masked_insert.BindString16(index++, card.nickname()); masked_insert.BindString16(index++, card.nickname());
masked_insert.BindInt(index++, static_cast<int>(card.card_issuer()));
masked_insert.Run(); masked_insert.Run();
masked_insert.Reset(true); masked_insert.Reset(true);
......
...@@ -1892,6 +1892,7 @@ TEST_F(AutofillTableTest, SetGetServerCards) { ...@@ -1892,6 +1892,7 @@ TEST_F(AutofillTableTest, SetGetServerCards) {
inputs[1].SetServerStatus(CreditCard::EXPIRED); inputs[1].SetServerStatus(CreditCard::EXPIRED);
base::string16 nickname = ASCIIToUTF16("Grocery card"); base::string16 nickname = ASCIIToUTF16("Grocery card");
inputs[1].SetNickname(nickname); inputs[1].SetNickname(nickname);
inputs[1].set_card_issuer(CreditCard::Issuer::GOOGLE);
test::SetServerCreditCards(table_.get(), inputs); test::SetServerCreditCards(table_.get(), inputs);
...@@ -1919,6 +1920,9 @@ TEST_F(AutofillTableTest, SetGetServerCards) { ...@@ -1919,6 +1920,9 @@ TEST_F(AutofillTableTest, SetGetServerCards) {
EXPECT_TRUE(outputs[0]->nickname().empty()); EXPECT_TRUE(outputs[0]->nickname().empty());
EXPECT_EQ(nickname, outputs[1]->nickname()); EXPECT_EQ(nickname, outputs[1]->nickname());
EXPECT_EQ(CreditCard::Issuer::ISSUER_UNKNOWN, outputs[0]->card_issuer());
EXPECT_EQ(CreditCard::Issuer::GOOGLE, outputs[1]->card_issuer());
} }
TEST_F(AutofillTableTest, SetGetRemoveServerCardMetadata) { TEST_F(AutofillTableTest, SetGetRemoveServerCardMetadata) {
......
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