| Index: components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| index 2624daac5c348095d88a1cb41b8bda135a40c548..6fbc5a13fd4c4fdaed0e04f74ac79a700a4dfbdd 100644
|
| --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/files/file_util.h"
|
| #include "base/files/scoped_temp_dir.h"
|
| #include "base/guid.h"
|
| +#include "base/memory/scoped_vector.h"
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| @@ -1792,4 +1793,77 @@ TEST_F(AutofillTableTest, SetServerProfile) {
|
| outputs.clear();
|
| }
|
|
|
| +// Tests that deleting time ranges re-masks server credit cards that were
|
| +// unmasked in that time.
|
| +TEST_F(AutofillTableTest, DeleteUnmaskedCard) {
|
| + // This isn't the exact unmasked time, since the database will use the
|
| + // current time that it is called. The code below has to be approximate.
|
| + base::Time unmasked_time = base::Time::Now();
|
| +
|
| + // Add a masked card.
|
| + base::string16 masked_number = ASCIIToUTF16("1111");
|
| + CreditCard masked_card(CreditCard::MASKED_SERVER_CARD, "a123");
|
| + masked_card.SetRawInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Paul F. Tompkins"));
|
| + masked_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("1"));
|
| + masked_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2020"));
|
| + masked_card.SetRawInfo(CREDIT_CARD_NUMBER, masked_number);
|
| + masked_card.SetTypeForMaskedCard(kVisaCard);
|
| +
|
| + std::vector<CreditCard> inputs;
|
| + inputs.push_back(masked_card);
|
| + table_->SetServerCreditCards(inputs);
|
| +
|
| + // Unmask it.
|
| + base::string16 full_number = ASCIIToUTF16("4111111111111111");
|
| + table_->UnmaskServerCreditCard(masked_card.server_id(), full_number);
|
| +
|
| + // Delete data in a range a year in the future.
|
| + std::vector<std::string> profile_guids;
|
| + std::vector<std::string> credit_card_guids;
|
| + ASSERT_TRUE(table_->RemoveAutofillDataModifiedBetween(
|
| + unmasked_time + base::TimeDelta::FromDays(365),
|
| + unmasked_time + base::TimeDelta::FromDays(530),
|
| + &profile_guids, &credit_card_guids));
|
| +
|
| + // This should not affect the unmasked card (should be unmasked).
|
| + ScopedVector<CreditCard> outputs;
|
| + ASSERT_TRUE(table_->GetServerCreditCards(&outputs.get()));
|
| + ASSERT_EQ(1u, outputs.size());
|
| + EXPECT_EQ(CreditCard::FULL_SERVER_CARD, outputs[0]->record_type());
|
| + EXPECT_EQ(full_number, outputs[0]->GetRawInfo(CREDIT_CARD_NUMBER));
|
| + outputs.clear();
|
| +
|
| + // Delete data in the range of the last 24 hours.
|
| + base::Time now = base::Time::Now();
|
| + ASSERT_TRUE(table_->RemoveAutofillDataModifiedBetween(
|
| + now - base::TimeDelta::FromDays(1), now,
|
| + &profile_guids, &credit_card_guids));
|
| +
|
| + // This should re-mask.
|
| + ASSERT_TRUE(table_->GetServerCreditCards(&outputs.get()));
|
| + ASSERT_EQ(1u, outputs.size());
|
| + EXPECT_EQ(CreditCard::MASKED_SERVER_CARD, outputs[0]->record_type());
|
| + EXPECT_EQ(masked_number, outputs[0]->GetRawInfo(CREDIT_CARD_NUMBER));
|
| + outputs.clear();
|
| +
|
| + // Unmask again, the card should be back.
|
| + table_->UnmaskServerCreditCard(masked_card.server_id(), full_number);
|
| + ASSERT_TRUE(table_->GetServerCreditCards(&outputs.get()));
|
| + ASSERT_EQ(1u, outputs.size());
|
| + EXPECT_EQ(CreditCard::FULL_SERVER_CARD, outputs[0]->record_type());
|
| + EXPECT_EQ(full_number, outputs[0]->GetRawInfo(CREDIT_CARD_NUMBER));
|
| + outputs.clear();
|
| +
|
| + // Delete all data.
|
| + ASSERT_TRUE(table_->RemoveAutofillDataModifiedBetween(
|
| + base::Time(), base::Time::Max(), &profile_guids, &credit_card_guids));
|
| +
|
| + // Should be masked again.
|
| + ASSERT_TRUE(table_->GetServerCreditCards(&outputs.get()));
|
| + ASSERT_EQ(1u, outputs.size());
|
| + EXPECT_EQ(CreditCard::MASKED_SERVER_CARD, outputs[0]->record_type());
|
| + EXPECT_EQ(masked_number, outputs[0]->GetRawInfo(CREDIT_CARD_NUMBER));
|
| + outputs.clear();
|
| +}
|
| +
|
| } // namespace autofill
|
|
|