Skip to content

Commit

Permalink
Add new virtual card enrollment type data member and column
Browse files Browse the repository at this point in the history
This CL adds a `virtual_card_enrollment_type_` data member to the
CreditCard object, and the corresponding column to the autofill table.

Bug: 1411881
Change-Id: I0764b8a4819bb29aa8777873df76d7e21adb5803
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4229201
Commit-Queue: Vinny Persky <vinnypersky@google.com>
Reviewed-by: Florian Leimgruber <fleimgruber@google.com>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Reviewed-by: Siyu An <siyua@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1104818}
  • Loading branch information
Vinny Persky authored and Chromium LUCI CQ committed Feb 14, 2023
1 parent 50efe8a commit 730e013
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 16 deletions.
10 changes: 10 additions & 0 deletions components/autofill/core/browser/data_model/credit_card.cc
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,7 @@ void CreditCard::operator=(const CreditCard& credit_card) {
issuer_id_ = credit_card.issuer_id_;
instrument_id_ = credit_card.instrument_id_;
virtual_card_enrollment_state_ = credit_card.virtual_card_enrollment_state_;
virtual_card_enrollment_type_ = credit_card.virtual_card_enrollment_type_;
card_art_url_ = GURL(credit_card.card_art_url_);
product_description_ = credit_card.product_description_;

Expand Down Expand Up @@ -735,6 +736,15 @@ int CreditCard::Compare(const CreditCard& credit_card) const {
return 1;
}

if (virtual_card_enrollment_type_ <
credit_card.virtual_card_enrollment_type_) {
return -1;
}
if (virtual_card_enrollment_type_ >
credit_card.virtual_card_enrollment_type_) {
return 1;
}

comparison = card_art_url_.spec().compare(credit_card.card_art_url_.spec());
if (comparison != 0)
return comparison;
Expand Down
28 changes: 28 additions & 0 deletions components/autofill/core/browser/data_model/credit_card.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,19 @@ class CreditCard : public AutofillDataModel {
UNENROLLED_AND_ELIGIBLE = 4,
};

// The enrollment type of the virtual card attached to this card, if one is
// present. This must stay in sync with the proto enum in
// autofill_specifics.proto.
enum VirtualCardEnrollmentType {
// Type unspecified. This is the default value of this enum. Should not be
// used with cards that have a virtual card enrolled.
TYPE_UNSPECIFIED = 0,
// Issuer-level enrollment.
ISSUER = 1,
// Network-level enrollment.
NETWORK = 2,
};

CreditCard(const std::string& guid, const std::string& origin);

// Creates a server card. The type must be MASKED_SERVER_CARD or
Expand Down Expand Up @@ -377,6 +390,14 @@ class CreditCard : public AutofillDataModel {
virtual_card_enrollment_state_ = virtual_card_enrollment_state;
}

VirtualCardEnrollmentType virtual_card_enrollment_type() const {
return virtual_card_enrollment_type_;
}
void set_virtual_card_enrollment_type(
VirtualCardEnrollmentType virtual_card_enrollment_type) {
virtual_card_enrollment_type_ = virtual_card_enrollment_type;
}

const GURL& card_art_url() const { return card_art_url_; }
void set_card_art_url(const GURL& card_art_url) {
card_art_url_ = card_art_url;
Expand Down Expand Up @@ -473,6 +494,13 @@ class CreditCard : public AutofillDataModel {
// this card has virtual cards linked to it.
VirtualCardEnrollmentState virtual_card_enrollment_state_ = UNSPECIFIED;

// The virtual card enrollment type of this card. This will be used when the
// enrollment type can make a difference in the functionality we offer for
// virtual cards. An example of differing functionality is if this virtual
// card enrollment type is a network-level enrollment, and we are on a URL
// that is opted out of virtual cards with the network of this card.
VirtualCardEnrollmentType virtual_card_enrollment_type_ = TYPE_UNSPECIFIED;

// The url to fetch the rich card art image.
GURL card_art_url_;

Expand Down
43 changes: 31 additions & 12 deletions components/autofill/core/browser/webdata/autofill_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,8 @@ constexpr base::StringPiece kCardIssuerId = "card_issuer_id";
constexpr base::StringPiece kInstrumentId = "instrument_id";
constexpr base::StringPiece kVirtualCardEnrollmentState =
"virtual_card_enrollment_state";
constexpr base::StringPiece kVirtualCardEnrollmentType =
"virtual_card_enrollment_type";
constexpr base::StringPiece kCardArtUrl = "card_art_url";
constexpr base::StringPiece kProductDescription = "product_description";

Expand Down Expand Up @@ -1272,6 +1274,9 @@ bool AutofillTable::MigrateToVersion(int version,
case 110:
*update_compatible_version = false;
return MigrateToVersion110AddInitialCreatorIdAndLastModifierId();
case 111:
*update_compatible_version = false;
return MigrateToVersion111AddVirtualCardEnrollmentTypeColumn();
}
return true;
}
Expand Down Expand Up @@ -2101,7 +2106,8 @@ bool AutofillTable::GetServerCreditCards(
base::StrCat({"metadata.", kUseDate}), kNetwork, kNameOnCard, kExpMonth,
kExpYear, base::StrCat({"metadata.", kBillingAddressId}), kBankName,
kNickname, kCardIssuer, kCardIssuerId, kInstrumentId,
kVirtualCardEnrollmentState, kCardArtUrl, kProductDescription},
kVirtualCardEnrollmentState, kVirtualCardEnrollmentType, kCardArtUrl,
kProductDescription},
"LEFT OUTER JOIN unmasked_credit_cards USING (id) "
"LEFT OUTER JOIN server_card_metadata AS metadata USING (id)");
while (s.Step()) {
Expand Down Expand Up @@ -2150,6 +2156,9 @@ bool AutofillTable::GetServerCreditCards(
card->set_virtual_card_enrollment_state(
static_cast<CreditCard::VirtualCardEnrollmentState>(
s.ColumnInt(index++)));
card->set_virtual_card_enrollment_type(
static_cast<CreditCard::VirtualCardEnrollmentType>(
s.ColumnInt(index++)));
card->set_card_art_url(GURL(s.ColumnString(index++)));
card->set_product_description(s.ColumnString16(index++));
credit_cards->push_back(std::move(card));
Expand Down Expand Up @@ -2376,11 +2385,11 @@ void AutofillTable::SetServerCardsData(

// Add all the masked cards.
sql::Statement masked_insert;
InsertBuilder(
db_, masked_insert, kMaskedCreditCardsTable,
{kId, kNetwork, kNameOnCard, kLastFour, kExpMonth, kExpYear, kBankName,
kNickname, kCardIssuer, kCardIssuerId, kInstrumentId,
kVirtualCardEnrollmentState, kCardArtUrl, kProductDescription});
InsertBuilder(db_, masked_insert, kMaskedCreditCardsTable,
{kId, kNetwork, kNameOnCard, kLastFour, kExpMonth, kExpYear,
kBankName, kNickname, kCardIssuer, kCardIssuerId,
kInstrumentId, kVirtualCardEnrollmentState,
kVirtualCardEnrollmentType, kCardArtUrl, kProductDescription});

int index;
for (const CreditCard& card : credit_cards) {
Expand All @@ -2400,6 +2409,8 @@ void AutofillTable::SetServerCardsData(
masked_insert.BindInt64(index++, card.instrument_id());
masked_insert.BindInt(
index++, static_cast<int>(card.virtual_card_enrollment_state()));
masked_insert.BindInt(
index++, static_cast<int>(card.virtual_card_enrollment_type()));
masked_insert.BindString(index++, card.card_art_url().spec());
masked_insert.BindString16(index++, card.product_description());
masked_insert.Run();
Expand Down Expand Up @@ -3415,6 +3426,12 @@ bool AutofillTable::MigrateToVersion110AddInitialCreatorIdAndLastModifierId() {
transaction.Commit();
}

bool AutofillTable::MigrateToVersion111AddVirtualCardEnrollmentTypeColumn() {
return db_->DoesTableExist(kMaskedCreditCardsTable) &&
AddColumnIfNotExists(db_, kMaskedCreditCardsTable,
kVirtualCardEnrollmentType, "INTEGER DEFAULT 0");
}

bool AutofillTable::AddFormFieldValuesTime(
const std::vector<FormFieldData>& elements,
std::vector<AutofillChange>* changes,
Expand Down Expand Up @@ -3561,11 +3578,11 @@ void AutofillTable::AddMaskedCreditCards(
const std::vector<CreditCard>& credit_cards) {
DCHECK_GT(db_->transaction_nesting(), 0);
sql::Statement masked_insert;
InsertBuilder(
db_, masked_insert, kMaskedCreditCardsTable,
{kId, kNetwork, kNameOnCard, kLastFour, kExpMonth, kExpYear, kBankName,
kNickname, kCardIssuer, kCardIssuerId, kInstrumentId,
kVirtualCardEnrollmentState, kCardArtUrl, kProductDescription});
InsertBuilder(db_, masked_insert, kMaskedCreditCardsTable,
{kId, kNetwork, kNameOnCard, kLastFour, kExpMonth, kExpYear,
kBankName, kNickname, kCardIssuer, kCardIssuerId,
kInstrumentId, kVirtualCardEnrollmentState,
kVirtualCardEnrollmentType, kCardArtUrl, kProductDescription});

int index;
for (const CreditCard& card : credit_cards) {
Expand All @@ -3584,6 +3601,7 @@ void AutofillTable::AddMaskedCreditCards(
masked_insert.BindString(index++, card.issuer_id());
masked_insert.BindInt64(index++, card.instrument_id());
masked_insert.BindInt(index++, card.virtual_card_enrollment_state());
masked_insert.BindInt(index++, card.virtual_card_enrollment_type());
masked_insert.BindString(index++, card.card_art_url().spec());
masked_insert.BindString16(index++, card.product_description());
masked_insert.Run();
Expand Down Expand Up @@ -3776,7 +3794,8 @@ bool AutofillTable::InitMaskedCreditCardsTable() {
{kVirtualCardEnrollmentState, "INTEGER DEFAULT 0"},
{kCardArtUrl, "VARCHAR"},
{kProductDescription, "VARCHAR"},
{kCardIssuerId, "VARCHAR"}});
{kCardIssuerId, "VARCHAR"},
{kVirtualCardEnrollmentType, "INTEGER DEFAULT 0"}});
}

bool AutofillTable::InitUnmaskedCreditCardsTable() {
Expand Down
7 changes: 6 additions & 1 deletion components/autofill/core/browser/webdata/autofill_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,11 @@ class VirtualCardUsageData;
// The product description for the card. Used to be shown
// in the UI when card is presented. Added in version 102.
// card_issuer_id The id of the card's issuer.
//
// virtual_card_enrollment_type
// An enum indicating the type of virtual card enrollment
// of this card. TYPE_UNSPECIFIED is the default value.
// ISSUER denotes that it is an issuer-level enrollment.
// NETWORK denotes that it is a network-level enrollment.
// unmasked_credit_cards
// When a masked credit credit card is unmasked and the
// full number is downloaded or when the full number is
Expand Down Expand Up @@ -825,6 +829,7 @@ class AutofillTable : public WebDatabaseTable,
bool MigrateToVersion108AddCardIssuerIdColumn();
bool MigrateToVersion109AddVirtualCardUsageDataTable();
bool MigrateToVersion110AddInitialCreatorIdAndLastModifierId();
bool MigrateToVersion111AddVirtualCardEnrollmentTypeColumn();

// Max data length saved in the table, AKA the maximum length allowed for
// form data.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1905,6 +1905,8 @@ TEST_F(AutofillTableTest, SetGetServerCards) {
inputs[0].set_instrument_id(321);
inputs[0].set_virtual_card_enrollment_state(
CreditCard::VirtualCardEnrollmentState::UNENROLLED);
inputs[0].set_virtual_card_enrollment_type(
CreditCard::VirtualCardEnrollmentType::ISSUER);
inputs[0].set_product_description(u"Fake description");

inputs.push_back(CreditCard(CreditCard::MASKED_SERVER_CARD, "b456"));
Expand All @@ -1920,6 +1922,8 @@ TEST_F(AutofillTableTest, SetGetServerCards) {
inputs[1].set_instrument_id(123);
inputs[1].set_virtual_card_enrollment_state(
CreditCard::VirtualCardEnrollmentState::ENROLLED);
inputs[1].set_virtual_card_enrollment_type(
CreditCard::VirtualCardEnrollmentType::NETWORK);
inputs[1].set_card_art_url(GURL("https://www.example.com"));

test::SetServerCreditCards(table_.get(), inputs);
Expand Down Expand Up @@ -1959,6 +1963,11 @@ TEST_F(AutofillTableTest, SetGetServerCards) {
EXPECT_EQ(CreditCard::VirtualCardEnrollmentState::ENROLLED,
outputs[1]->virtual_card_enrollment_state());

EXPECT_EQ(CreditCard::VirtualCardEnrollmentType::ISSUER,
outputs[0]->virtual_card_enrollment_type());
EXPECT_EQ(CreditCard::VirtualCardEnrollmentType::NETWORK,
outputs[1]->virtual_card_enrollment_type());

EXPECT_EQ(GURL(), outputs[0]->card_art_url());
EXPECT_EQ(GURL("https://www.example.com"), outputs[1]->card_art_url());

Expand Down Expand Up @@ -2176,6 +2185,8 @@ TEST_F(AutofillTableTest, SetServerCardsData) {
inputs[0].set_instrument_id(1);
inputs[0].set_virtual_card_enrollment_state(
CreditCard::VirtualCardEnrollmentState::ENROLLED);
inputs[0].set_virtual_card_enrollment_type(
CreditCard::VirtualCardEnrollmentType::ISSUER);
inputs[0].set_card_art_url(GURL("https://www.example.com"));
inputs[0].set_product_description(u"Fake description");

Expand All @@ -2197,6 +2208,9 @@ TEST_F(AutofillTableTest, SetServerCardsData) {
EXPECT_EQ(CreditCard::VirtualCardEnrollmentState::ENROLLED,
outputs[0]->virtual_card_enrollment_state());

EXPECT_EQ(CreditCard::VirtualCardEnrollmentType::ISSUER,
outputs[0]->virtual_card_enrollment_type());

EXPECT_EQ(CreditCard::Issuer::EXTERNAL_ISSUER, outputs[0]->card_issuer());
EXPECT_EQ("amex", outputs[0]->issuer_id());

Expand Down
36 changes: 36 additions & 0 deletions components/test/data/web_database/version_110.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
INSERT INTO meta VALUES('mmap_status','-1');
INSERT INTO meta VALUES('version','110');
INSERT INTO meta VALUES('last_compatible_version','106');
INSERT INTO meta VALUES('Builtin Keyword Version','127');
CREATE TABLE token_service (service VARCHAR PRIMARY KEY NOT NULL,encrypted_token BLOB);
CREATE TABLE keywords (id INTEGER PRIMARY KEY,short_name VARCHAR NOT NULL,keyword VARCHAR NOT NULL,favicon_url VARCHAR NOT NULL,url VARCHAR NOT NULL,safe_for_autoreplace INTEGER,originating_url VARCHAR,date_created INTEGER DEFAULT 0,usage_count INTEGER DEFAULT 0,input_encodings VARCHAR,suggest_url VARCHAR,prepopulate_id INTEGER DEFAULT 0,created_by_policy INTEGER DEFAULT 0,last_modified INTEGER DEFAULT 0,sync_guid VARCHAR,alternate_urls VARCHAR,image_url VARCHAR,search_url_post_params VARCHAR,suggest_url_post_params VARCHAR,image_url_post_params VARCHAR,new_tab_url VARCHAR,last_visited INTEGER DEFAULT 0, created_from_play_api INTEGER DEFAULT 0, is_active INTEGER DEFAULT 0, starter_pack_id INTEGER DEFAULT 0);
CREATE TABLE autofill (name VARCHAR, value VARCHAR, value_lower VARCHAR, date_created INTEGER DEFAULT 0, date_last_used INTEGER DEFAULT 0, count INTEGER DEFAULT 1, PRIMARY KEY (name, value));
CREATE TABLE credit_cards ( guid VARCHAR PRIMARY KEY, name_on_card VARCHAR, expiration_month INTEGER, expiration_year INTEGER, card_number_encrypted BLOB, date_modified INTEGER NOT NULL DEFAULT 0, origin VARCHAR DEFAULT '', use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, billing_address_id VARCHAR, nickname VARCHAR);
CREATE TABLE ibans ( guid VARCHAR PRIMARY KEY, use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, value VARCHAR, nickname VARCHAR);
CREATE TABLE autofill_profiles ( guid VARCHAR PRIMARY KEY, company_name VARCHAR, street_address VARCHAR, dependent_locality VARCHAR, city VARCHAR, state VARCHAR, zipcode VARCHAR, sorting_code VARCHAR, country_code VARCHAR, date_modified INTEGER NOT NULL DEFAULT 0, origin VARCHAR DEFAULT '', language_code VARCHAR, use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, label VARCHAR, disallow_settings_visible_updates INTEGER NOT NULL DEFAULT 0);
CREATE TABLE autofill_profile_addresses ( guid VARCHAR, street_address VARCHAR, street_name VARCHAR, dependent_street_name VARCHAR, house_number VARCHAR, subpremise VARCHAR, premise_name VARCHAR, street_address_status INTEGER DEFAULT 0, street_name_status INTEGER DEFAULT 0, dependent_street_name_status INTEGER DEFAULT 0, house_number_status INTEGER DEFAULT 0, subpremise_status INTEGER DEFAULT 0, premise_name_status INTEGER DEFAULT 0, dependent_locality VARCHAR, city VARCHAR, state VARCHAR, zip_code VARCHAR, sorting_code VARCHAR, country_code VARCHAR, dependent_locality_status INTEGER DEFAULT 0, city_status INTEGER DEFAULT 0, state_status INTEGER DEFAULT 0, zip_code_status INTEGER DEFAULT 0, sorting_code_status INTEGER DEFAULT 0, country_code_status INTEGER DEFAULT 0, apartment_number VARCHAR, floor VARCHAR, apartment_number_status INTEGER DEFAULT 0, floor_status INTEGER DEFAULT 0);
CREATE TABLE autofill_profile_names ( guid VARCHAR, first_name VARCHAR, middle_name VARCHAR, last_name VARCHAR, full_name VARCHAR, honorific_prefix VARCHAR, first_last_name VARCHAR, conjunction_last_name VARCHAR, second_last_name VARCHAR, honorific_prefix_status INTEGER DEFAULT 0, first_name_status INTEGER DEFAULT 0, middle_name_status INTEGER DEFAULT 0, last_name_status INTEGER DEFAULT 0, first_last_name_status INTEGER DEFAULT 0, conjunction_last_name_status INTEGER DEFAULT 0, second_last_name_status INTEGER DEFAULT 0, full_name_status INTEGER DEFAULT 0, full_name_with_honorific_prefix VARCHAR, full_name_with_honorific_prefix_status INTEGER DEFAULT 0);
CREATE TABLE autofill_profile_emails ( guid VARCHAR, email VARCHAR);
CREATE TABLE autofill_profile_phones ( guid VARCHAR, number VARCHAR);
CREATE TABLE masked_credit_cards (id VARCHAR,name_on_card VARCHAR,network VARCHAR,last_four VARCHAR,exp_month INTEGER DEFAULT 0,exp_year INTEGER DEFAULT 0, bank_name VARCHAR, nickname VARCHAR, card_issuer INTEGER DEFAULT 0, instrument_id INTEGER DEFAULT 0, virtual_card_enrollment_state INTEGER DEFAULT 0, card_art_url VARCHAR, product_description VARCHAR, card_issuer_id VARCHAR);
CREATE TABLE unmasked_credit_cards (id VARCHAR,card_number_encrypted VARCHAR,unmask_date INTEGER NOT NULL DEFAULT 0);
CREATE TABLE virtual_card_usage_data (id VARCHAR PRIMARY KEY, instrument_id INTEGER DEFAULT 0, merchant_domain VARCHAR, last_four VARCHAR);
CREATE TABLE server_card_metadata (id VARCHAR NOT NULL,use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, billing_address_id VARCHAR);
CREATE TABLE server_addresses (id VARCHAR,company_name VARCHAR,street_address VARCHAR,address_1 VARCHAR,address_2 VARCHAR,address_3 VARCHAR,address_4 VARCHAR,postal_code VARCHAR,sorting_code VARCHAR,country_code VARCHAR,language_code VARCHAR, recipient_name VARCHAR, phone_number VARCHAR);
CREATE TABLE server_address_metadata (id VARCHAR NOT NULL,use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, has_converted BOOL NOT NULL DEFAULT FALSE);
CREATE TABLE autofill_sync_metadata (model_type INTEGER NOT NULL, storage_key VARCHAR NOT NULL, value BLOB, PRIMARY KEY (model_type, storage_key));
CREATE TABLE autofill_model_type_state (model_type INTEGER NOT NULL PRIMARY KEY, value BLOB);
CREATE TABLE payments_customer_data (customer_id VARCHAR);
CREATE TABLE payments_upi_vpa (vpa VARCHAR);
CREATE TABLE server_card_cloud_token_data ( id VARCHAR, suffix VARCHAR, exp_month INTEGER DEFAULT 0, exp_year INTEGER DEFAULT 0, card_art_url VARCHAR, instrument_token VARCHAR);
CREATE TABLE offer_data ( offer_id UNSIGNED LONG, offer_reward_amount VARCHAR, expiry UNSIGNED LONG, offer_details_url VARCHAR, merchant_domain VARCHAR, promo_code VARCHAR, value_prop_text VARCHAR, see_details_text VARCHAR, usage_instructions_text VARCHAR);
CREATE TABLE offer_eligible_instrument ( offer_id UNSIGNED LONG,instrument_id UNSIGNED LONG);
CREATE TABLE offer_merchant_domain ( offer_id UNSIGNED LONG,merchant_domain VARCHAR);
CREATE TABLE contact_info( guid VARCHAR PRIMARY KEY, use_count INTEGER NOT NULL DEFAULT 0, use_date INTEGER NOT NULL DEFAULT 0, date_modified INTEGER NOT NULL DEFAULT 0, language_code VARCHAR, label VARCHAR, initial_creator_id INTEGER DEFAULT 0, last_modifier_id INTEGER DEFAULT 0);
CREATE TABLE contact_info_type_tokens( guid VARCHAR, type INTEGER, value VARCHAR, verification_status INTEGER DEFAULT 0, PRIMARY KEY (guid, type));
CREATE INDEX autofill_name ON autofill (name);
CREATE INDEX autofill_name_value_lower ON autofill (name, value_lower);
COMMIT;
1 change: 1 addition & 0 deletions components/webdata/common/unit_tests_bundle_data.filelist
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
//components/test/data/web_database/version_107.sql
//components/test/data/web_database/version_108.sql
//components/test/data/web_database/version_109.sql
//components/test/data/web_database/version_110.sql
//components/test/data/web_database/version_82.sql
//components/test/data/web_database/version_83.sql
//components/test/data/web_database/version_84.sql
Expand Down
4 changes: 2 additions & 2 deletions components/webdata/common/web_database.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

// Current version number. Note: when changing the current version number,
// corresponding changes must happen in the unit tests, and new migration test
// added. See |WebDatabaseMigrationTest::kCurrentTestedVersionNumber|.
// added. See `WebDatabaseMigrationTest::kCurrentTestedVersionNumber`.
// static
const int WebDatabase::kCurrentVersionNumber = 110;
const int WebDatabase::kCurrentVersionNumber = 111;

const int WebDatabase::kDeprecatedVersionNumber = 82;

Expand Down

0 comments on commit 730e013

Please sign in to comment.