| Index: components/autofill/core/browser/webdata/autofill_table.cc
|
| diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
|
| index 59929d2019b1f3efd3dd259a55a342d82e900d24..a3533efceb7c61f505461ee319148aac56ddb0d3 100644
|
| --- a/components/autofill/core/browser/webdata/autofill_table.cc
|
| +++ b/components/autofill/core/browser/webdata/autofill_table.cc
|
| @@ -472,6 +472,9 @@ bool AutofillTable::MigrateToVersion(int version,
|
| case 63:
|
| *update_compatible_version = false;
|
| return MigrateToVersion63AddServerRecipientName();
|
| + case 64:
|
| + *update_compatible_version = false;
|
| + return MigrateToVersion64AddUnmaskDate();
|
| }
|
| return true;
|
| }
|
| @@ -1194,6 +1197,10 @@ bool AutofillTable::GetServerCreditCards(
|
|
|
| void AutofillTable::SetServerCreditCards(
|
| const std::vector<CreditCard>& credit_cards) {
|
| + sql::Transaction transaction(db_);
|
| + if (!transaction.Begin())
|
| + return;
|
| +
|
| // Delete all old values.
|
| sql::Statement masked_delete(db_->GetUniqueStatement(
|
| "DELETE FROM masked_credit_cards"));
|
| @@ -1250,6 +1257,8 @@ void AutofillTable::SetServerCreditCards(
|
| masked_insert.Run();
|
| masked_insert.Reset(true);
|
| }
|
| +
|
| + transaction.Commit();
|
| }
|
|
|
| bool AutofillTable::UnmaskServerCreditCard(const std::string& id,
|
| @@ -1257,9 +1266,13 @@ bool AutofillTable::UnmaskServerCreditCard(const std::string& id,
|
| // Make sure there aren't duplicates for this card.
|
| MaskServerCreditCard(id);
|
| sql::Statement s(db_->GetUniqueStatement(
|
| - "INSERT INTO unmasked_credit_cards(id, card_number_encrypted,"
|
| - " use_count, use_date) "
|
| - "VALUES (?,?,?,?)"));
|
| + "INSERT INTO unmasked_credit_cards("
|
| + "id,"
|
| + "card_number_encrypted,"
|
| + "use_count,"
|
| + "use_date,"
|
| + "unmask_date)"
|
| + "VALUES (?,?,?,?,?)"));
|
| s.BindString(0, id);
|
|
|
| std::string encrypted_data;
|
| @@ -1268,8 +1281,11 @@ bool AutofillTable::UnmaskServerCreditCard(const std::string& id,
|
| static_cast<int>(encrypted_data.length()));
|
|
|
| // Unmasking counts as a usage, so set the stats accordingly.
|
| - s.BindInt64(2, 1);
|
| - s.BindInt64(3, base::Time::Now().ToInternalValue());
|
| + base::Time now = base::Time::Now();
|
| + s.BindInt64(2, 1); // use_count
|
| + s.BindInt64(3, now.ToInternalValue()); // use_date
|
| +
|
| + s.BindInt64(4, now.ToInternalValue()); // unmask_date
|
|
|
| s.Run();
|
| return db_->GetLastChangeCount() > 0;
|
| @@ -1311,8 +1327,8 @@ bool AutofillTable::UpdateCreditCard(const CreditCard& credit_card) {
|
| sql::Statement s(db_->GetUniqueStatement(
|
| "UPDATE credit_cards "
|
| "SET guid=?, name_on_card=?, expiration_month=?,"
|
| - " expiration_year=?, card_number_encrypted=?, use_count=?, use_date=?,"
|
| - " date_modified=?, origin=?"
|
| + "expiration_year=?, card_number_encrypted=?, use_count=?, use_date=?,"
|
| + "date_modified=?, origin=?"
|
| "WHERE guid=?"));
|
| BindCreditCardToStatement(
|
| credit_card,
|
| @@ -1391,8 +1407,16 @@ bool AutofillTable::RemoveAutofillDataModifiedBetween(
|
| "WHERE date_modified >= ? AND date_modified < ?"));
|
| s_credit_cards.BindInt64(0, delete_begin_t);
|
| s_credit_cards.BindInt64(1, delete_end_t);
|
| + if (!s_credit_cards.Run())
|
| + return false;
|
|
|
| - return s_credit_cards.Run();
|
| + // Remove unmasked credit cards in the time range.
|
| + sql::Statement s_unmasked_cards(db_->GetUniqueStatement(
|
| + "DELETE FROM unmasked_credit_cards "
|
| + "WHERE unmask_date >= ? AND unmask_date < ?"));
|
| + s_unmasked_cards.BindInt64(0, delete_begin.ToInternalValue());
|
| + s_unmasked_cards.BindInt64(1, delete_end.ToInternalValue());
|
| + return s_unmasked_cards.Run();
|
| }
|
|
|
| bool AutofillTable::RemoveOriginURLsModifiedBetween(
|
| @@ -1656,7 +1680,8 @@ bool AutofillTable::InitUnmaskedCreditCardsTable() {
|
| "id VARCHAR,"
|
| "card_number_encrypted VARCHAR, "
|
| "use_count INTEGER NOT NULL DEFAULT 0, "
|
| - "use_date INTEGER NOT NULL DEFAULT 0)")) {
|
| + "use_date INTEGER NOT NULL DEFAULT 0, "
|
| + "unmask_date INTEGER NOT NULL DEFAULT 0)")) {
|
| NOTREACHED();
|
| return false;
|
| }
|
| @@ -1680,7 +1705,8 @@ bool AutofillTable::InitServerAddressesTable() {
|
| "sorting_code VARCHAR,"
|
| "country_code VARCHAR,"
|
| "language_code VARCHAR, " // Space required.
|
| - "recipient_name VARCHAR)")) {
|
| + "recipient_name VARCHAR, " // Ditto.
|
| + "phone_number VARCHAR)")) {
|
| NOTREACHED();
|
| return false;
|
| }
|
| @@ -1973,4 +1999,23 @@ bool AutofillTable::MigrateToVersion63AddServerRecipientName() {
|
| return true;
|
| }
|
|
|
| +bool AutofillTable::MigrateToVersion64AddUnmaskDate() {
|
| + sql::Transaction transaction(db_);
|
| + if (!transaction.Begin())
|
| + return false;
|
| +
|
| + if (!db_->DoesColumnExist("unmasked_credit_cards", "unmask_date") &&
|
| + !db_->Execute("ALTER TABLE unmasked_credit_cards ADD COLUMN "
|
| + "unmask_date INTEGER NOT NULL DEFAULT 0")) {
|
| + return false;
|
| + }
|
| + if (!db_->DoesColumnExist("server_addresses", "phone_number") &&
|
| + !db_->Execute("ALTER TABLE server_addresses ADD COLUMN "
|
| + "phone_number VARCHAR")) {
|
| + return false;
|
| + }
|
| +
|
| + return transaction.Commit();
|
| +}
|
| +
|
| } // namespace autofill
|
|
|