| 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 18277b1f121a1d2aa4c7f7581838f6f267fee1b5..795abcb097a38db20ad4264b61b2bc6af633a8a4 100644
|
| --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
|
| @@ -35,6 +35,8 @@
|
| #include "components/autofill/core/common/autofill_util.h"
|
| #include "components/autofill/core/common/form_field_data.h"
|
| #include "components/os_crypt/os_crypt_mocker.h"
|
| +#include "components/sync/protocol/entity_metadata.pb.h"
|
| +#include "components/sync/protocol/model_type_state.pb.h"
|
| #include "components/webdata/common/web_database.h"
|
| #include "sql/statement.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -2016,4 +2018,101 @@ TEST_F(AutofillTableTest, GetFormValuesForElementName_SubstringMatchEnabled) {
|
| }
|
| }
|
|
|
| +TEST_F(AutofillTableTest, GetAllSyncMetadata) {
|
| + sync_pb::EntityMetadata metadata;
|
| + std::string storage_key = "storage_key";
|
| + std::string storage_key2 = "storage_key2";
|
| + metadata.set_sequence_number(1);
|
| +
|
| + EXPECT_TRUE(
|
| + table_->UpdateSyncMetadata(syncer::AUTOFILL, storage_key, metadata));
|
| +
|
| + metadata.set_sequence_number(2);
|
| + EXPECT_TRUE(
|
| + table_->UpdateSyncMetadata(syncer::AUTOFILL, storage_key2, metadata));
|
| +
|
| + syncer::EntityMetadataMap metadata_records;
|
| + EXPECT_TRUE(table_->GetAllSyncMetadata(syncer::AUTOFILL, &metadata_records));
|
| +
|
| + EXPECT_EQ(metadata_records.size(), 2u);
|
| + EXPECT_EQ(metadata_records[storage_key].sequence_number(), 1);
|
| + EXPECT_EQ(metadata_records[storage_key2].sequence_number(), 2);
|
| +}
|
| +
|
| +TEST_F(AutofillTableTest, WriteThenReadModelTypeState) {
|
| + sync_pb::ModelTypeState model_type_state;
|
| + sync_pb::ModelTypeState returned_state;
|
| +
|
| + EXPECT_FALSE(table_->GetModelTypeState(syncer::AUTOFILL, &returned_state));
|
| +
|
| + model_type_state.set_initial_sync_done(true);
|
| +
|
| + EXPECT_TRUE(table_->UpdateModelTypeState(syncer::AUTOFILL, model_type_state));
|
| + EXPECT_TRUE(table_->GetModelTypeState(syncer::AUTOFILL, &returned_state));
|
| +
|
| + EXPECT_TRUE(returned_state.initial_sync_done());
|
| +
|
| + // Test that updates replace the existing row.
|
| + model_type_state.set_initial_sync_done(false);
|
| + table_->UpdateModelTypeState(syncer::AUTOFILL, model_type_state);
|
| +
|
| + EXPECT_TRUE(table_->GetModelTypeState(syncer::AUTOFILL, &returned_state));
|
| + EXPECT_FALSE(returned_state.initial_sync_done());
|
| +}
|
| +
|
| +TEST_F(AutofillTableTest, WriteThenDeleteSyncMetadata) {
|
| + sync_pb::EntityMetadata metadata;
|
| + syncer::EntityMetadataMap returned_metadata;
|
| + std::string storage_key = "storage_key";
|
| + sync_pb::ModelTypeState model_type_state;
|
| +
|
| + model_type_state.set_initial_sync_done(true);
|
| +
|
| + metadata.set_client_tag_hash("client_hash");
|
| +
|
| + // Write the data into the store.
|
| + EXPECT_TRUE(
|
| + table_->UpdateSyncMetadata(syncer::AUTOFILL, storage_key, metadata));
|
| + EXPECT_TRUE(table_->UpdateModelTypeState(syncer::AUTOFILL, model_type_state));
|
| + // Delete the data we just wrote.
|
| + EXPECT_TRUE(table_->ClearSyncMetadata(syncer::AUTOFILL, storage_key));
|
| + EXPECT_TRUE(table_->ClearModelTypeState(syncer::AUTOFILL));
|
| + // It shouldn't be there any more.
|
| + EXPECT_TRUE(table_->GetAllSyncMetadata(syncer::AUTOFILL, &returned_metadata));
|
| + EXPECT_EQ(returned_metadata.size(), 0u);
|
| + EXPECT_FALSE(table_->GetModelTypeState(syncer::AUTOFILL, &model_type_state));
|
| +}
|
| +
|
| +TEST_F(AutofillTableTest, ReadEmptySyncMetadata) {
|
| + syncer::EntityMetadataMap returned_metadata;
|
| + sync_pb::ModelTypeState state;
|
| + std::string storage_key = "storage_key";
|
| +
|
| + EXPECT_TRUE(table_->GetAllSyncMetadata(syncer::AUTOFILL, &returned_metadata));
|
| + EXPECT_EQ(returned_metadata.size(), 0u);
|
| +}
|
| +
|
| +TEST_F(AutofillTableTest, CorruptSyncMetadata) {
|
| + syncer::EntityMetadataMap metadata;
|
| + sync_pb::ModelTypeState state;
|
| + std::string storage_key = "storage_key";
|
| +
|
| + sql::Statement s(db_->GetSQLConnection()->GetUniqueStatement(
|
| + "INSERT OR REPLACE INTO autofill_sync_metadata "
|
| + "(storage_key, value) VALUES(?, ?)"));
|
| + s.BindString(0, storage_key);
|
| + s.BindString(1, "unparseable");
|
| +
|
| + sql::Statement s2(db_->GetSQLConnection()->GetUniqueStatement(
|
| + "INSERT OR REPLACE INTO autofill_model_type_state "
|
| + "(rowid, value) VALUES(1, ?)"));
|
| + s2.BindString(0, "unparseable");
|
| +
|
| + EXPECT_TRUE(s.Run());
|
| + EXPECT_TRUE(s2.Run());
|
| +
|
| + EXPECT_FALSE(table_->GetAllSyncMetadata(syncer::AUTOFILL, &metadata));
|
| + EXPECT_FALSE(table_->GetModelTypeState(syncer::AUTOFILL, &state));
|
| +}
|
| +
|
| } // namespace autofill
|
|
|