diff options
author | maniscalco@chromium.org <maniscalco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-16 05:25:52 +0000 |
---|---|---|
committer | maniscalco@chromium.org <maniscalco@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-16 05:25:52 +0000 |
commit | b2e803e0bdd3a4b00d736282863960c1aaaad0a1 (patch) | |
tree | af7dc7b2b13decaaee215266db195b09f3e8d245 /sync/syncable | |
parent | 91d2128aa3070960c36c83c8b1c57ba458033e4c (diff) | |
download | chromium_src-b2e803e0bdd3a4b00d736282863960c1aaaad0a1.zip chromium_src-b2e803e0bdd3a4b00d736282863960c1aaaad0a1.tar.gz chromium_src-b2e803e0bdd3a4b00d736282863960c1aaaad0a1.tar.bz2 |
Add server_attachment_metadata field to EntryKernel and sync database.
The server_attachment_metadata field is where attachment metadata
received from the sync server is stored during the "process updates"
part of the sync cycle.
A subsequent CL will make use of this new field.
BUG=394023
Review URL: https://codereview.chromium.org/395913003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283355 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/syncable')
-rw-r--r-- | sync/syncable/directory_backing_store.cc | 20 | ||||
-rw-r--r-- | sync/syncable/directory_backing_store.h | 1 | ||||
-rw-r--r-- | sync/syncable/directory_backing_store_unittest.cc | 157 | ||||
-rw-r--r-- | sync/syncable/entry.h | 5 | ||||
-rw-r--r-- | sync/syncable/entry_kernel.h | 1 | ||||
-rw-r--r-- | sync/syncable/syncable_columns.h | 3 | ||||
-rw-r--r-- | sync/syncable/syncable_enum_conversions.cc | 3 |
7 files changed, 183 insertions, 7 deletions
diff --git a/sync/syncable/directory_backing_store.cc b/sync/syncable/directory_backing_store.cc index 55a01e6..6d08b75 100644 --- a/sync/syncable/directory_backing_store.cc +++ b/sync/syncable/directory_backing_store.cc @@ -35,7 +35,7 @@ namespace syncable { static const string::size_type kUpdateStatementBufferSize = 2048; // Increment this version whenever updating DB tables. -const int32 kCurrentDBVersion = 88; +const int32 kCurrentDBVersion = 89; // Iterate over the fields of |entry| and bind each to |statement| for // updating. Returns the number of args bound. @@ -443,6 +443,12 @@ bool DirectoryBackingStore::InitializeTables() { version_on_disk = 88; } + // Version 89 migration adds server attachment metadata to the metas table. + if (version_on_disk == 88) { + if (MigrateVersion88To89()) + version_on_disk = 89; + } + // If one of the migrations requested it, drop columns that aren't current. // It's only safe to do this after migrating all the way to the current // version. @@ -1326,6 +1332,18 @@ bool DirectoryBackingStore::MigrateVersion87To88() { return true; } +bool DirectoryBackingStore::MigrateVersion88To89() { + // Version 89 adds server_attachment_metadata. + if (!db_->Execute( + "ALTER TABLE metas ADD COLUMN " + "server_attachment_metadata BLOB")) { + return false; + } + SetVersion(89); + needs_column_refresh_ = true; + return true; +} + bool DirectoryBackingStore::CreateTables() { DVLOG(1) << "First run, creating tables"; // Create two little tables share_version and share_info diff --git a/sync/syncable/directory_backing_store.h b/sync/syncable/directory_backing_store.h index dfacebe..254fff4 100644 --- a/sync/syncable/directory_backing_store.h +++ b/sync/syncable/directory_backing_store.h @@ -173,6 +173,7 @@ class SYNC_EXPORT_PRIVATE DirectoryBackingStore : public base::NonThreadSafe { bool MigrateVersion85To86(); bool MigrateVersion86To87(); bool MigrateVersion87To88(); + bool MigrateVersion88To89(); scoped_ptr<sql::Connection> db_; sql::Statement save_meta_statment_; diff --git a/sync/syncable/directory_backing_store_unittest.cc b/sync/syncable/directory_backing_store_unittest.cc index 88e49cf..aad9523 100644 --- a/sync/syncable/directory_backing_store_unittest.cc +++ b/sync/syncable/directory_backing_store_unittest.cc @@ -76,9 +76,10 @@ class MigrationTest : public testing::TestWithParam<int> { void SetUpVersion86Database(sql::Connection* connection); void SetUpVersion87Database(sql::Connection* connection); void SetUpVersion88Database(sql::Connection* connection); + void SetUpVersion89Database(sql::Connection* connection); void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { - SetUpVersion88Database(connection); // Prepopulates data. + SetUpVersion89Database(connection); // Prepopulates data. scoped_ptr<TestDirectoryBackingStore> dbs( new TestDirectoryBackingStore(GetUsername(), connection)); ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); @@ -2766,6 +2767,121 @@ void MigrationTest::SetUpVersion88Database(sql::Connection* connection) { ASSERT_TRUE(connection->CommitTransaction()); } + +void MigrationTest::SetUpVersion89Database(sql::Connection* connection) { + ASSERT_TRUE(connection->is_open()); + ASSERT_TRUE(connection->BeginTransaction()); + ASSERT_TRUE(connection->Execute( + "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" + "INSERT INTO 'share_version' VALUES('nick@chromium.org',89);" + "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, tr" + "ansaction_version BIGINT default 0, context BLOB);" + "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1,NULL);" + "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" + "_version bigint default -1,server_version bigint default 0,local_exte" + "rnal_id bigint default 0,transaction_version bigint default 0,mtime b" + "igint default 0,server_mtime bigint default 0,ctime bigint default 0," + "server_ctime bigint default 0,id varchar(255) default 'r',parent_id v" + "archar(255) default 'r',server_parent_id varchar(255) default 'r',is_" + "unsynced bit default 0,is_unapplied_update bit default 0,is_del bit d" + "efault 0,is_dir bit default 0,server_is_dir bit default 0,server_is_d" + "el bit default 0,non_unique_name varchar,server_non_unique_name varch" + "ar(255),unique_server_tag varchar,unique_client_tag varchar,unique_bo" + "okmark_tag varchar,specifics blob,server_specifics blob,base_server_s" + "pecifics blob,server_unique_position blob,unique_position blob,attach" + "ment_metadata blob,server_attachment_metadata blob);" + "INSERT INTO 'metas' VALUES(1,-1,0,0,0," + META_PROTO_TIMES_VALS(1) + ",'r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',X'',NULL,X'2200'" + ",X'2200',NULL,NULL);" + "INSERT INTO 'metas' VALUES(6,694,694,6,0," + META_PROTO_TIMES_VALS(6) + ",'s_ID_6','s_ID_9','s_ID_9',0,0,0,1,1,0,'The Internet','The Internet'" + ",NULL,NULL,X'6754307476346749735A5734654D653273625336557753582F77673D" + "',X'C2881000',X'C2881000',NULL,X'22247FFFFFFFFFC000006754307476346749" + "735A5734654D653273625336557753582F77673D',X'22247FFFFFFFFFC0000067543" + "07476346749735A5734654D653273625336557753582F77673D',NULL,NULL);" + "INSERT INTO 'metas' VALUES(7,663,663,0,0," + META_PROTO_TIMES_VALS(7) + ",'s_ID_7','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google" + "_chrome',NULL,X'',NULL,NULL,NULL,X'2200',X'2200',NULL,NULL);" + "INSERT INTO 'metas' VALUES(8,664,664,0,0," + META_PROTO_TIMES_VALS(8) + ",'s_ID_8','s_ID_7','s_ID_7',0,0,0,1,1,0,'Bookmarks','Bookmarks','goog" + "le_chrome_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'" + "2200',NULL,NULL);" + "INSERT INTO 'metas' VALUES(9,665,665,1,0," + META_PROTO_TIMES_VALS(9) + ",'s_ID_9','s_ID_8','s_ID_8',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'" + ",'bookmark_bar',NULL,X'',X'C2881000',X'C2881000',NULL,X'2200',X'2200'" + ",NULL,NULL);" + "INSERT INTO 'metas' VALUES(10,666,666,2,0," + META_PROTO_TIMES_VALS(10) + ",'s_ID_10','s_ID_8','s_ID_8',0,0,0,1,1,0,'Other Bookmarks','Other Boo" + "kmarks','other_bookmarks',NULL,X'',X'C2881000',X'C2881000',NULL,X'220" + "0',X'2200',NULL,NULL);" + "INSERT INTO 'metas' VALUES(11,683,683,8,0," + META_PROTO_TIMES_VALS(11) + ",'s_ID_11','s_ID_6','s_ID_6',0,0,0,0,0,0,'Home (The Chromium Projects" + ")','Home (The Chromium Projects)',NULL,NULL,X'50514C784A456D623579366" + "267644237646A7A2B62314130346E493D',X'C28810220A18687474703A2F2F646576" + "2E6368726F6D69756D2E6F72672F1206414741545741',X'C28810290A1D687474703" + "A2F2F6465762E6368726F6D69756D2E6F72672F6F7468657212084146414756415346" + "',NULL,X'22247FFFFFFFFFF0000050514C784A456D623579366267644237646A7A2B" + "62314130346E493D',X'22247FFFFFFFFFF0000050514C784A456D623579366267644" + "237646A7A2B62314130346E493D',NULL,NULL);" + "INSERT INTO 'metas' VALUES(12,685,685,9,0," + META_PROTO_TIMES_VALS(12) + ",'s_ID_12','s_ID_6','s_ID_6',0,0,0,1,1,0,'Extra Bookmarks','Extra Boo" + "kmarks',NULL,NULL,X'7867626A704A646134635A6F616C376A49513338734B46324" + "837773D',X'C2881000',X'C2881000',NULL,X'222480000000000000007867626A7" + "04A646134635A6F616C376A49513338734B46324837773D',X'222480000000000000" + "007867626A704A646134635A6F616C376A49513338734B46324837773D',NULL,NULL" + ");" + "INSERT INTO 'metas' VALUES(13,687,687,10,0," + META_PROTO_TIMES_VALS(13) + ",'s_ID_13','s_ID_6','s_ID_6',0,0,0,0,0,0,'ICANN | Internet Corporatio" + "n for Assigned Names and Numbers','ICANN | Internet Corporation for A" + "ssigned Names and Numbers',NULL,NULL,X'3142756B572F774176695650417967" + "2B304A614A514B3452384A413D',X'C28810240A15687474703A2F2F7777772E69636" + "16E6E2E636F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F" + "2F7777772E6963616E6E2E636F6D2F120744414146415346',NULL,X'22247FFFFFFF" + "FFF200003142756B572F7741766956504179672B304A614A514B3452384A413D',X'2" + "2247FFFFFFFFFF200003142756B572F7741766956504179672B304A614A514B345238" + "4A413D',NULL,NULL);" + "INSERT INTO 'metas' VALUES(14,692,692,11,0," + META_PROTO_TIMES_VALS(14) + ",'s_ID_14','s_ID_6','s_ID_6',0,0,0,0,0,0,'The WebKit Open Source Proj" + "ect','The WebKit Open Source Project',NULL,NULL,X'5A5678314E797636457" + "9524D3177494F7236563159552F6E644C553D',X'C288101A0A12687474703A2F2F77" + "65626B69742E6F72672F1204504E4758',X'C288101C0A13687474703A2F2F7765626" + "B69742E6F72672F781205504E473259',NULL,X'222480000000001000005A5678314" + "E7976364579524D3177494F7236563159552F6E644C553D',X'222480000000001000" + "005A5678314E7976364579524D3177494F7236563159552F6E644C553D',NULL,NULL" + ");" + "CREATE TABLE deleted_metas (metahandle bigint primary key ON CONFLICT FA" + "IL,base_version bigint default -1,server_version bigint default 0,loc" + "al_external_id bigint default 0,transaction_version bigint default 0," + "mtime bigint default 0,server_mtime bigint default 0,ctime bigint def" + "ault 0,server_ctime bigint default 0,id varchar(255) default 'r',pare" + "nt_id varchar(255) default 'r',server_parent_id varchar(255) default " + "'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is_de" + "l bit default 0,is_dir bit default 0,server_is_dir bit default 0,serv" + "er_is_del bit default 0,non_unique_name varchar,server_non_unique_nam" + "e varchar(255),unique_server_tag varchar,unique_client_tag varchar,un" + "ique_bookmark_tag varchar,specifics blob,server_specifics blob,base_s" + "erver_specifics blob,server_unique_position blob,unique_position blob" + ",attachment_metadata blob,server_attachment_metadata blob);" + "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" + "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defau" + "lt -2, cache_guid TEXT, notification_state BLOB, bag_of_chips BLOB);" + "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," + "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-131078,'" + "9010788312004066376x-6609234393368420856x',NULL,NULL);")); + ASSERT_TRUE(connection->CommitTransaction()); +} + + TEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) { sql::Connection connection; ASSERT_TRUE(connection.OpenInMemory()); @@ -3256,6 +3372,22 @@ TEST_F(DirectoryBackingStoreTest, MigrateVersion87To88) { ASSERT_TRUE(connection.DoesColumnExist("models", "context")); } +TEST_F(DirectoryBackingStoreTest, MigrateVersion88To89) { + sql::Connection connection; + ASSERT_TRUE(connection.OpenInMemory()); + SetUpVersion88Database(&connection); + ASSERT_FALSE( + connection.DoesColumnExist("metas", "server_attachment_metadata")); + + scoped_ptr<TestDirectoryBackingStore> dbs( + new TestDirectoryBackingStore(GetUsername(), &connection)); + ASSERT_TRUE(dbs->MigrateVersion88To89()); + ASSERT_EQ(89, dbs->GetVersion()); + EXPECT_TRUE( + connection.DoesColumnExist("metas", "server_attachment_metadata")); + EXPECT_TRUE(dbs->needs_column_refresh_); +} + // The purpose of this test case is to make it easier to get a dump of the // database so you can implement a SetUpVersionYDatabase method. Here's what // you should do: @@ -3277,13 +3409,13 @@ TEST_F(DirectoryBackingStoreTest, MigrateToLatestAndDump) { { sql::Connection connection; ASSERT_TRUE(connection.Open(GetDatabasePath())); - SetUpVersion87Database(&connection); // Update this. + SetUpVersion88Database(&connection); // Update this. scoped_ptr<TestDirectoryBackingStore> dbs( new TestDirectoryBackingStore(GetUsername(), &connection)); - ASSERT_TRUE(dbs->MigrateVersion87To88()); // Update this. + ASSERT_TRUE(dbs->MigrateVersion88To89()); // Update this. ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); - EXPECT_EQ(88, dbs->GetVersion()); // Update this. + EXPECT_EQ(89, dbs->GetVersion()); // Update this. ASSERT_FALSE(dbs->needs_column_refresh_); } // Set breakpoint here. @@ -3385,6 +3517,9 @@ TEST_P(MigrationTest, ToCurrentVersion) { case 88: SetUpVersion88Database(&connection); break; + case 89: + SetUpVersion89Database(&connection); + break; default: // If you see this error, it may mean that you've increased the // database version number but you haven't finished adding unit tests @@ -3477,6 +3612,10 @@ TEST_P(MigrationTest, ToCurrentVersion) { // Column added in version 88. ASSERT_TRUE(connection.DoesColumnExist("models", "context")); + // Column added in version 89. + ASSERT_TRUE( + connection.DoesColumnExist("metas", "server_attachment_metadata")); + // Check download_progress state (v75 migration) ASSERT_EQ(694, dir_info.kernel_info.download_progress[BOOKMARKS] @@ -3513,6 +3652,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); // Items 2, 4, and 5 were deleted. it = handles_map.find(2); @@ -3535,6 +3675,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_EQ(UniquePosition::kSuffixLength, it->second->ref(UNIQUE_BOOKMARK_TAG).length()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(7); ASSERT_EQ(7, it->second->ref(META_HANDLE)); @@ -3546,6 +3687,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(8); ASSERT_EQ(8, it->second->ref(META_HANDLE)); @@ -3558,6 +3700,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(9); ASSERT_EQ(9, it->second->ref(META_HANDLE)); @@ -3569,6 +3712,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(10); ASSERT_EQ(10, it->second->ref(META_HANDLE)); @@ -3584,11 +3728,13 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_EQ("Other Bookmarks", it->second->ref(SERVER_NON_UNIQUE_NAME)); ASSERT_EQ(it->second->ref(ID).value(), "s_ID_10"); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); // Make sure we didn't assign positions to server-created folders, either. EXPECT_FALSE(it->second->ref(UNIQUE_POSITION).IsValid()); EXPECT_FALSE(it->second->ref(SERVER_UNIQUE_POSITION).IsValid()); EXPECT_TRUE(it->second->ref(UNIQUE_BOOKMARK_TAG).empty()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(11); ASSERT_EQ(11, it->second->ref(META_HANDLE)); @@ -3629,6 +3775,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_EQ(UniquePosition::kSuffixLength, it->second->ref(UNIQUE_BOOKMARK_TAG).length()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(13); ASSERT_EQ(13, it->second->ref(META_HANDLE)); @@ -3637,6 +3784,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_EQ(UniquePosition::kSuffixLength, it->second->ref(UNIQUE_BOOKMARK_TAG).length()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); it = handles_map.find(14); ASSERT_EQ(14, it->second->ref(META_HANDLE)); @@ -3645,6 +3793,7 @@ TEST_P(MigrationTest, ToCurrentVersion) { EXPECT_EQ(UniquePosition::kSuffixLength, it->second->ref(UNIQUE_BOOKMARK_TAG).length()); EXPECT_TRUE(it->second->ref(ATTACHMENT_METADATA).IsInitialized()); + EXPECT_TRUE(it->second->ref(SERVER_ATTACHMENT_METADATA).IsInitialized()); ASSERT_EQ(static_cast<size_t>(10), handles_map.size()); diff --git a/sync/syncable/entry.h b/sync/syncable/entry.h index 5faa6e8..184377a 100644 --- a/sync/syncable/entry.h +++ b/sync/syncable/entry.h @@ -210,6 +210,11 @@ class SYNC_EXPORT Entry { return kernel_->ref(ATTACHMENT_METADATA); } + const sync_pb::AttachmentMetadata& GetServerAttachmentMetadata() const { + DCHECK(kernel_); + return kernel_->ref(SERVER_ATTACHMENT_METADATA); + } + bool GetSyncing() const { DCHECK(kernel_); return kernel_->ref(SYNCING); diff --git a/sync/syncable/entry_kernel.h b/sync/syncable/entry_kernel.h index d270c4b..0c2f471 100644 --- a/sync/syncable/entry_kernel.h +++ b/sync/syncable/entry_kernel.h @@ -164,6 +164,7 @@ enum { enum AttachmentMetadataField { ATTACHMENT_METADATA = ATTACHMENT_METADATA_FIELDS_BEGIN, + SERVER_ATTACHMENT_METADATA, ATTACHMENT_METADATA_FIELDS_END }; diff --git a/sync/syncable/syncable_columns.h b/sync/syncable/syncable_columns.h index f923bc4..7d3a967 100644 --- a/sync/syncable/syncable_columns.h +++ b/sync/syncable/syncable_columns.h @@ -67,7 +67,8 @@ static const ColumnSpec g_metas_columns[] = { // proto. We store a single proto per entry (as opposed to one for each // attachment) because it simplifies the database schema and implementation of // DirectoryBackingStore. - {"attachment_metadata", "blob"} + {"attachment_metadata", "blob"}, + {"server_attachment_metadata", "blob"} }; // At least enforce that there are equal number of column names and fields. diff --git a/sync/syncable/syncable_enum_conversions.cc b/sync/syncable/syncable_enum_conversions.cc index 0fc2147..7e0a8c9 100644 --- a/sync/syncable/syncable_enum_conversions.cc +++ b/sync/syncable/syncable_enum_conversions.cc @@ -163,11 +163,12 @@ const char* GetUniquePositionFieldString(UniquePositionField position_field) { const char* GetAttachmentMetadataFieldString( AttachmentMetadataField attachment_metadata_field) { ASSERT_ENUM_BOUNDS(ATTACHMENT_METADATA, - ATTACHMENT_METADATA, + SERVER_ATTACHMENT_METADATA, ATTACHMENT_METADATA_FIELDS_BEGIN, ATTACHMENT_METADATA_FIELDS_END - 1); switch(attachment_metadata_field) { ENUM_CASE(ATTACHMENT_METADATA); + ENUM_CASE(SERVER_ATTACHMENT_METADATA); case ATTACHMENT_METADATA_FIELDS_END: break; } NOTREACHED(); |