Chromium Code Reviews| Index: components/sync/syncable/model_type.cc |
| diff --git a/components/sync/syncable/model_type.cc b/components/sync/syncable/model_type.cc |
| index 363c848d728a4276d94e84e054389069a2190f54..9c404a57f3e4e3536ccf262135f232f714e10c94 100644 |
| --- a/components/sync/syncable/model_type.cc |
| +++ b/components/sync/syncable/model_type.cc |
| @@ -163,32 +163,27 @@ const char* kUserSelectableDataTypeNames[] = { |
| "tabs", |
| }; |
| -static_assert( |
| - 39 == MODEL_TYPE_COUNT, |
| - "update kUserSelectableDataTypeName to match UserSelectableTypes"); |
| - |
| -void AddDefaultFieldValue(ModelType datatype, |
| - sync_pb::EntitySpecifics* specifics) { |
| - if (!ProtocolTypes().Has(datatype)) { |
| - NOTREACHED() << "Only protocol types have field values."; |
| - return; |
| - } |
| - switch (datatype) { |
| +void AddDefaultFieldValue(ModelType type, sync_pb::EntitySpecifics* specifics) { |
| + switch (type) { |
| + case UNSPECIFIED: |
| + case TOP_LEVEL_FOLDER: |
| + NOTREACHED() << "No default field value for " << ModelTypeToString(type); |
| + break; |
| case BOOKMARKS: |
| specifics->mutable_bookmark(); |
| break; |
| - case PASSWORDS: |
| - specifics->mutable_password(); |
| - break; |
| case PREFERENCES: |
| specifics->mutable_preference(); |
| break; |
| - case AUTOFILL: |
| - specifics->mutable_autofill(); |
| + case PASSWORDS: |
| + specifics->mutable_password(); |
| break; |
| case AUTOFILL_PROFILE: |
| specifics->mutable_autofill_profile(); |
| break; |
| + case AUTOFILL: |
| + specifics->mutable_autofill(); |
| + break; |
| case AUTOFILL_WALLET_DATA: |
| specifics->mutable_autofill_wallet(); |
| break; |
| @@ -204,9 +199,6 @@ void AddDefaultFieldValue(ModelType datatype, |
| case EXTENSIONS: |
| specifics->mutable_extension(); |
| break; |
| - case NIGORI: |
| - specifics->mutable_nigori(); |
| - break; |
| case SEARCH_ENGINES: |
| specifics->mutable_search_engine(); |
| break; |
| @@ -216,15 +208,9 @@ void AddDefaultFieldValue(ModelType datatype, |
| case APPS: |
| specifics->mutable_app(); |
| break; |
| - case APP_LIST: |
| - specifics->mutable_app_list(); |
| - break; |
| case APP_SETTINGS: |
| specifics->mutable_app_setting(); |
| break; |
| - case ARC_PACKAGE: |
| - specifics->mutable_arc_package(); |
| - break; |
| case EXTENSION_SETTINGS: |
| specifics->mutable_extension_setting(); |
| break; |
| @@ -240,18 +226,6 @@ void AddDefaultFieldValue(ModelType datatype, |
| case SYNCED_NOTIFICATION_APP_INFO: |
| specifics->mutable_synced_notification_app_info(); |
| break; |
| - case DEVICE_INFO: |
| - specifics->mutable_device_info(); |
| - break; |
| - case EXPERIMENTS: |
| - specifics->mutable_experiments(); |
| - break; |
| - case PRINTERS: |
| - specifics->mutable_printer(); |
| - break; |
| - case PRIORITY_PREFERENCES: |
| - specifics->mutable_priority_preference(); |
| - break; |
| case DICTIONARY: |
| specifics->mutable_dictionary(); |
| break; |
| @@ -261,6 +235,12 @@ void AddDefaultFieldValue(ModelType datatype, |
| case FAVICON_TRACKING: |
| specifics->mutable_favicon_tracking(); |
| break; |
| + case DEVICE_INFO: |
| + specifics->mutable_device_info(); |
| + break; |
| + case PRIORITY_PREFERENCES: |
| + specifics->mutable_priority_preference(); |
| + break; |
| case SUPERVISED_USER_SETTINGS: |
| specifics->mutable_managed_user_setting(); |
| break; |
| @@ -269,21 +249,39 @@ void AddDefaultFieldValue(ModelType datatype, |
| break; |
| case SUPERVISED_USER_SHARED_SETTINGS: |
| specifics->mutable_managed_user_shared_setting(); |
| - break; |
| - case SUPERVISED_USER_WHITELISTS: |
| - specifics->mutable_managed_user_whitelist(); |
| - break; |
| case ARTICLES: |
| specifics->mutable_article(); |
| break; |
| + case APP_LIST: |
| + specifics->mutable_app_list(); |
| + break; |
| case WIFI_CREDENTIALS: |
| specifics->mutable_wifi_credential(); |
| break; |
| + case SUPERVISED_USER_WHITELISTS: |
| + specifics->mutable_managed_user_whitelist(); |
| + break; |
| + case ARC_PACKAGE: |
| + specifics->mutable_arc_package(); |
| + break; |
| + case PRINTERS: |
| + specifics->mutable_printer(); |
| + break; |
| case READING_LIST: |
| specifics->mutable_reading_list(); |
| break; |
| - default: |
| - NOTREACHED() << "No known extension for model type."; |
| + case PROXY_TABS: |
| + NOTREACHED() << "No default field value for " << ModelTypeToString(type); |
| + break; |
| + case NIGORI: |
| + specifics->mutable_nigori(); |
| + break; |
| + case EXPERIMENTS: |
| + specifics->mutable_experiments(); |
| + break; |
| + case MODEL_TYPE_COUNT: |
| + NOTREACHED() << "No default field value for " << ModelTypeToString(type); |
| + break; |
| } |
| } |
| @@ -341,151 +339,102 @@ ModelType GetModelType(const sync_pb::SyncEntity& sync_entity) { |
| } |
| ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) { |
| + static_assert(39 == MODEL_TYPE_COUNT, |
| + "When adding new protocol types, the following type lookup " |
| + "logic must be updated."); |
| if (specifics.has_bookmark()) |
| return BOOKMARKS; |
| - |
| - if (specifics.has_password()) |
| - return PASSWORDS; |
| - |
| if (specifics.has_preference()) |
| return PREFERENCES; |
| - |
| - if (specifics.has_autofill()) |
| - return AUTOFILL; |
| - |
| + if (specifics.has_password()) |
| + return PASSWORDS; |
| if (specifics.has_autofill_profile()) |
| return AUTOFILL_PROFILE; |
| - |
| + if (specifics.has_autofill()) |
| + return AUTOFILL; |
| if (specifics.has_autofill_wallet()) |
| return AUTOFILL_WALLET_DATA; |
| - |
| if (specifics.has_wallet_metadata()) |
| return AUTOFILL_WALLET_METADATA; |
| - |
| if (specifics.has_theme()) |
| return THEMES; |
| - |
| if (specifics.has_typed_url()) |
| return TYPED_URLS; |
| - |
| if (specifics.has_extension()) |
| return EXTENSIONS; |
| - |
| - if (specifics.has_nigori()) |
| - return NIGORI; |
| - |
| - if (specifics.has_app()) |
| - return APPS; |
| - |
| - if (specifics.has_app_list()) |
| - return APP_LIST; |
| - |
| - if (specifics.has_arc_package()) |
| - return ARC_PACKAGE; |
| - |
| if (specifics.has_search_engine()) |
| return SEARCH_ENGINES; |
| - |
| if (specifics.has_session()) |
| return SESSIONS; |
| - |
| + if (specifics.has_app()) |
| + return APPS; |
| if (specifics.has_app_setting()) |
| return APP_SETTINGS; |
| - |
| if (specifics.has_extension_setting()) |
| return EXTENSION_SETTINGS; |
| - |
| if (specifics.has_app_notification()) |
| return APP_NOTIFICATIONS; |
| - |
| - if (specifics.has_reading_list()) |
| - return READING_LIST; |
| - |
| if (specifics.has_history_delete_directive()) |
| return HISTORY_DELETE_DIRECTIVES; |
| - |
| if (specifics.has_synced_notification()) |
| return SYNCED_NOTIFICATIONS; |
| - |
| if (specifics.has_synced_notification_app_info()) |
| return SYNCED_NOTIFICATION_APP_INFO; |
| - |
| - if (specifics.has_device_info()) |
| - return DEVICE_INFO; |
| - |
| - if (specifics.has_experiments()) |
| - return EXPERIMENTS; |
| - |
| - if (specifics.has_priority_preference()) |
| - return PRIORITY_PREFERENCES; |
| - |
| - if (specifics.has_printer()) |
| - return PRINTERS; |
| - |
| if (specifics.has_dictionary()) |
| return DICTIONARY; |
| - |
| if (specifics.has_favicon_image()) |
| return FAVICON_IMAGES; |
| - |
| if (specifics.has_favicon_tracking()) |
| return FAVICON_TRACKING; |
| - |
| + if (specifics.has_device_info()) |
| + return DEVICE_INFO; |
| + if (specifics.has_priority_preference()) |
| + return PRIORITY_PREFERENCES; |
| if (specifics.has_managed_user_setting()) |
| return SUPERVISED_USER_SETTINGS; |
| - |
| if (specifics.has_managed_user()) |
| return SUPERVISED_USERS; |
| - |
| if (specifics.has_managed_user_shared_setting()) |
| return SUPERVISED_USER_SHARED_SETTINGS; |
| - |
| - if (specifics.has_managed_user_whitelist()) |
| - return SUPERVISED_USER_WHITELISTS; |
| - |
| if (specifics.has_article()) |
| return ARTICLES; |
| - |
| + if (specifics.has_app_list()) |
| + return APP_LIST; |
| if (specifics.has_wifi_credential()) |
| return WIFI_CREDENTIALS; |
| + if (specifics.has_managed_user_whitelist()) |
| + return SUPERVISED_USER_WHITELISTS; |
| + if (specifics.has_arc_package()) |
| + return ARC_PACKAGE; |
| + if (specifics.has_printer()) |
| + return PRINTERS; |
| + if (specifics.has_reading_list()) |
| + return READING_LIST; |
| + if (specifics.has_nigori()) |
| + return NIGORI; |
| + if (specifics.has_experiments()) |
| + return EXPERIMENTS; |
| return UNSPECIFIED; |
| } |
| ModelTypeSet ProtocolTypes() { |
| - ModelTypeSet set = ModelTypeSet::All(); |
| - set.RemoveAll(ProxyTypes()); |
| - return set; |
| + return Difference(ModelTypeSet::All(), ProxyTypes()); |
| } |
| ModelTypeSet UserTypes() { |
| - ModelTypeSet set; |
| // TODO(sync): We should be able to build the actual enumset's internal |
| - // bitset value here at compile time, rather than performing an iteration |
| - // every time. |
| - for (int i = FIRST_USER_MODEL_TYPE; i <= LAST_USER_MODEL_TYPE; ++i) { |
| - set.Put(ModelTypeFromInt(i)); |
| - } |
| - return set; |
| + // bitset value here at compile time, instead of makes a new one each time. |
| + return ModelTypeSet::FromRange(FIRST_USER_MODEL_TYPE, LAST_USER_MODEL_TYPE); |
| } |
| ModelTypeSet UserSelectableTypes() { |
| - ModelTypeSet set; |
| - // Although the order doesn't technically matter here, it's clearer to keep |
| - // these in the same order as their definition in the ModelType enum. |
| - set.Put(BOOKMARKS); |
| - set.Put(PREFERENCES); |
| - set.Put(PASSWORDS); |
| - set.Put(AUTOFILL); |
| - set.Put(THEMES); |
| - set.Put(TYPED_URLS); |
| - set.Put(EXTENSIONS); |
| - set.Put(APPS); |
| + return ModelTypeSet(BOOKMARKS, PREFERENCES, PASSWORDS, AUTOFILL, THEMES, |
|
pavely
2017/02/23 23:23:03
What if you put one type per line? Will it be more
skym
2017/02/24 18:59:07
Yeah, format wants them to look like this.
I real
|
| + TYPED_URLS, EXTENSIONS, APPS, |
| #if BUILDFLAG(ENABLE_READING_LIST) |
| - set.Put(READING_LIST); |
| + READING_LIST, |
| #endif |
| - set.Put(PROXY_TABS); |
| - return set; |
| + PROXY_TABS); |
| } |
| bool IsUserSelectableType(ModelType model_type) { |
| @@ -505,7 +454,12 @@ ModelTypeNameMap GetUserSelectableTypeNameMap() { |
| } |
| ModelTypeSet EncryptableUserTypes() { |
| + static_assert(39 == MODEL_TYPE_COUNT, |
| + "If adding an unencryptable type, remove from " |
| + "encryptable_user_types below."); |
| ModelTypeSet encryptable_user_types = UserTypes(); |
| + // Wallet data is not encrypted since it actually originates on the server. |
| + encryptable_user_types.Remove(AUTOFILL_WALLET_DATA); |
| // We never encrypt history delete directives. |
| encryptable_user_types.Remove(HISTORY_DELETE_DIRECTIVES); |
| // Synced notifications are not encrypted since the server must see changes. |
| @@ -533,8 +487,6 @@ ModelTypeSet EncryptableUserTypes() { |
| // Note however that proxy types map to one or more protocol types, which |
| // may or may not be encrypted themselves. |
| encryptable_user_types.RemoveAll(ProxyTypes()); |
| - // Wallet data is not encrypted since it actually originates on the server. |
| - encryptable_user_types.Remove(AUTOFILL_WALLET_DATA); |
| return encryptable_user_types; |
| } |
| @@ -543,21 +495,14 @@ ModelTypeSet PriorityUserTypes() { |
| } |
| ModelTypeSet ControlTypes() { |
| - ModelTypeSet set; |
| // TODO(sync): We should be able to build the actual enumset's internal |
| - // bitset value here at compile time, rather than performing an iteration |
| - // every time. |
| - for (int i = FIRST_CONTROL_MODEL_TYPE; i <= LAST_CONTROL_MODEL_TYPE; ++i) { |
| - set.Put(ModelTypeFromInt(i)); |
| - } |
| - |
| - return set; |
| + // bitset value here at compile time, instead of makes a new one each time. |
| + return ModelTypeSet::FromRange(FIRST_CONTROL_MODEL_TYPE, |
| + LAST_CONTROL_MODEL_TYPE); |
| } |
| ModelTypeSet ProxyTypes() { |
| - ModelTypeSet set; |
| - set.Put(PROXY_TABS); |
| - return set; |
| + return ModelTypeSet::FromRange(FIRST_PROXY_TYPE, LAST_PROXY_TYPE); |
| } |
| bool IsControlType(ModelType model_type) { |
| @@ -565,8 +510,7 @@ bool IsControlType(ModelType model_type) { |
| } |
| ModelTypeSet CoreTypes() { |
| - ModelTypeSet result; |
| - result.PutAll(PriorityCoreTypes()); |
| + ModelTypeSet result = PriorityCoreTypes(); |
| // The following are low priority core types. |
| result.Put(SYNCED_NOTIFICATIONS); |
| @@ -578,8 +522,7 @@ ModelTypeSet CoreTypes() { |
| } |
| ModelTypeSet PriorityCoreTypes() { |
| - ModelTypeSet result; |
| - result.PutAll(ControlTypes()); |
| + ModelTypeSet result = ControlTypes(); |
| // The following are non-control core types. |
| result.Put(SUPERVISED_USERS); |