OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/syncable/model_type.h" | 5 #include "chrome/browser/sync/syncable/model_type.h" |
6 | 6 |
7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
8 #include "base/string_split.h" | 8 #include "base/string_split.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/sync/engine/syncproto.h" | 10 #include "chrome/browser/sync/engine/syncproto.h" |
11 #include "chrome/browser/sync/protocol/app_specifics.pb.h" | 11 #include "chrome/browser/sync/protocol/app_specifics.pb.h" |
12 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" | 12 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" |
13 #include "chrome/browser/sync/protocol/bookmark_specifics.pb.h" | 13 #include "chrome/browser/sync/protocol/bookmark_specifics.pb.h" |
| 14 #include "chrome/browser/sync/protocol/extension_setting_specifics.pb.h" |
14 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" | 15 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" |
15 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" | 16 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" |
16 #include "chrome/browser/sync/protocol/password_specifics.pb.h" | 17 #include "chrome/browser/sync/protocol/password_specifics.pb.h" |
17 #include "chrome/browser/sync/protocol/preference_specifics.pb.h" | 18 #include "chrome/browser/sync/protocol/preference_specifics.pb.h" |
18 #include "chrome/browser/sync/protocol/search_engine_specifics.pb.h" | 19 #include "chrome/browser/sync/protocol/search_engine_specifics.pb.h" |
19 #include "chrome/browser/sync/protocol/session_specifics.pb.h" | 20 #include "chrome/browser/sync/protocol/session_specifics.pb.h" |
20 #include "chrome/browser/sync/protocol/sync.pb.h" | 21 #include "chrome/browser/sync/protocol/sync.pb.h" |
21 #include "chrome/browser/sync/protocol/theme_specifics.pb.h" | 22 #include "chrome/browser/sync/protocol/theme_specifics.pb.h" |
22 #include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" | 23 #include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" |
23 | 24 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 break; | 56 break; |
56 case SEARCH_ENGINES: | 57 case SEARCH_ENGINES: |
57 specifics->MutableExtension(sync_pb::search_engine); | 58 specifics->MutableExtension(sync_pb::search_engine); |
58 break; | 59 break; |
59 case SESSIONS: | 60 case SESSIONS: |
60 specifics->MutableExtension(sync_pb::session); | 61 specifics->MutableExtension(sync_pb::session); |
61 break; | 62 break; |
62 case APPS: | 63 case APPS: |
63 specifics->MutableExtension(sync_pb::app); | 64 specifics->MutableExtension(sync_pb::app); |
64 break; | 65 break; |
| 66 case EXTENSION_SETTINGS: |
| 67 specifics->MutableExtension(sync_pb::extension_setting); |
| 68 break; |
65 default: | 69 default: |
66 NOTREACHED() << "No known extension for model type."; | 70 NOTREACHED() << "No known extension for model type."; |
67 } | 71 } |
68 } | 72 } |
69 | 73 |
70 ModelType GetModelTypeFromExtensionFieldNumber(int field_number) { | 74 ModelType GetModelTypeFromExtensionFieldNumber(int field_number) { |
71 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 75 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { |
72 ModelType model_type = ModelTypeFromInt(i); | 76 ModelType model_type = ModelTypeFromInt(i); |
73 if (GetExtensionFieldNumberFromModelType(model_type) == field_number) | 77 if (GetExtensionFieldNumberFromModelType(model_type) == field_number) |
74 return model_type; | 78 return model_type; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 break; | 112 break; |
109 case SEARCH_ENGINES: | 113 case SEARCH_ENGINES: |
110 return sync_pb::kSearchEngineFieldNumber; | 114 return sync_pb::kSearchEngineFieldNumber; |
111 break; | 115 break; |
112 case SESSIONS: | 116 case SESSIONS: |
113 return sync_pb::kSessionFieldNumber; | 117 return sync_pb::kSessionFieldNumber; |
114 break; | 118 break; |
115 case APPS: | 119 case APPS: |
116 return sync_pb::kAppFieldNumber; | 120 return sync_pb::kAppFieldNumber; |
117 break; | 121 break; |
| 122 case EXTENSION_SETTINGS: |
| 123 return sync_pb::kExtensionSettingFieldNumber; |
| 124 break; |
118 default: | 125 default: |
119 NOTREACHED() << "No known extension for model type."; | 126 NOTREACHED() << "No known extension for model type."; |
120 return 0; | 127 return 0; |
121 } | 128 } |
122 NOTREACHED() << "Needed for linux_keep_shadow_stacks because of " | 129 NOTREACHED() << "Needed for linux_keep_shadow_stacks because of " |
123 << "http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20681"; | 130 << "http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20681"; |
124 return 0; | 131 return 0; |
125 } | 132 } |
126 | 133 |
127 // Note: keep this consistent with GetModelType in syncable.cc! | 134 // Note: keep this consistent with GetModelType in syncable.cc! |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 | 192 |
186 if (specifics.HasExtension(sync_pb::app)) | 193 if (specifics.HasExtension(sync_pb::app)) |
187 return APPS; | 194 return APPS; |
188 | 195 |
189 if (specifics.HasExtension(sync_pb::search_engine)) | 196 if (specifics.HasExtension(sync_pb::search_engine)) |
190 return SEARCH_ENGINES; | 197 return SEARCH_ENGINES; |
191 | 198 |
192 if (specifics.HasExtension(sync_pb::session)) | 199 if (specifics.HasExtension(sync_pb::session)) |
193 return SESSIONS; | 200 return SESSIONS; |
194 | 201 |
| 202 if (specifics.HasExtension(sync_pb::extension_setting)) |
| 203 return EXTENSION_SETTINGS; |
| 204 |
195 return UNSPECIFIED; | 205 return UNSPECIFIED; |
196 } | 206 } |
197 | 207 |
198 bool ShouldMaintainPosition(ModelType model_type) { | 208 bool ShouldMaintainPosition(ModelType model_type) { |
199 return model_type == BOOKMARKS; | 209 return model_type == BOOKMARKS; |
200 } | 210 } |
201 | 211 |
202 std::string ModelTypeToString(ModelType model_type) { | 212 std::string ModelTypeToString(ModelType model_type) { |
203 switch (model_type) { | 213 switch (model_type) { |
204 case BOOKMARKS: | 214 case BOOKMARKS: |
(...skipping 13 matching lines...) Expand all Loading... |
218 case NIGORI: | 228 case NIGORI: |
219 return "Encryption keys"; | 229 return "Encryption keys"; |
220 case SEARCH_ENGINES: | 230 case SEARCH_ENGINES: |
221 return "Search Engines"; | 231 return "Search Engines"; |
222 case SESSIONS: | 232 case SESSIONS: |
223 return "Sessions"; | 233 return "Sessions"; |
224 case APPS: | 234 case APPS: |
225 return "Apps"; | 235 return "Apps"; |
226 case AUTOFILL_PROFILE: | 236 case AUTOFILL_PROFILE: |
227 return "Autofill Profiles"; | 237 return "Autofill Profiles"; |
| 238 case EXTENSION_SETTINGS: |
| 239 return "Extension settings"; |
228 default: | 240 default: |
229 break; | 241 break; |
230 } | 242 } |
231 NOTREACHED() << "No known extension for model type."; | 243 NOTREACHED() << "No known extension for model type."; |
232 return "INVALID"; | 244 return "INVALID"; |
233 } | 245 } |
234 | 246 |
235 StringValue* ModelTypeToValue(ModelType model_type) { | 247 StringValue* ModelTypeToValue(ModelType model_type) { |
236 if (model_type >= syncable::FIRST_REAL_MODEL_TYPE) { | 248 if (model_type >= syncable::FIRST_REAL_MODEL_TYPE) { |
237 return Value::CreateStringValue(ModelTypeToString(model_type)); | 249 return Value::CreateStringValue(ModelTypeToString(model_type)); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 else if (model_type_string == "Extensions") | 300 else if (model_type_string == "Extensions") |
289 return EXTENSIONS; | 301 return EXTENSIONS; |
290 else if (model_type_string == "Encryption keys") | 302 else if (model_type_string == "Encryption keys") |
291 return NIGORI; | 303 return NIGORI; |
292 else if (model_type_string == "Search Engines") | 304 else if (model_type_string == "Search Engines") |
293 return SEARCH_ENGINES; | 305 return SEARCH_ENGINES; |
294 else if (model_type_string == "Sessions") | 306 else if (model_type_string == "Sessions") |
295 return SESSIONS; | 307 return SESSIONS; |
296 else if (model_type_string == "Apps") | 308 else if (model_type_string == "Apps") |
297 return APPS; | 309 return APPS; |
| 310 else if (model_type_string == "Extension settings") |
| 311 return EXTENSION_SETTINGS; |
298 else | 312 else |
299 NOTREACHED() << "No known model type corresponding to " | 313 NOTREACHED() << "No known model type corresponding to " |
300 << model_type_string << "."; | 314 << model_type_string << "."; |
301 return UNSPECIFIED; | 315 return UNSPECIFIED; |
302 } | 316 } |
303 | 317 |
304 std::string ModelTypeBitSetToString(const ModelTypeBitSet& model_types) { | 318 std::string ModelTypeBitSetToString(const ModelTypeBitSet& model_types) { |
305 std::string result; | 319 std::string result; |
306 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 320 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { |
307 if (model_types[i]) { | 321 if (model_types[i]) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 case NIGORI: | 394 case NIGORI: |
381 return "google_chrome_nigori"; | 395 return "google_chrome_nigori"; |
382 case SEARCH_ENGINES: | 396 case SEARCH_ENGINES: |
383 return "google_chrome_search_engines"; | 397 return "google_chrome_search_engines"; |
384 case SESSIONS: | 398 case SESSIONS: |
385 return "google_chrome_sessions"; | 399 return "google_chrome_sessions"; |
386 case APPS: | 400 case APPS: |
387 return "google_chrome_apps"; | 401 return "google_chrome_apps"; |
388 case AUTOFILL_PROFILE: | 402 case AUTOFILL_PROFILE: |
389 return "google_chrome_autofill_profiles"; | 403 return "google_chrome_autofill_profiles"; |
| 404 case EXTENSION_SETTINGS: |
| 405 return "google_chrome_extension_settings"; |
390 default: | 406 default: |
391 break; | 407 break; |
392 } | 408 } |
393 NOTREACHED() << "No known extension for model type."; | 409 NOTREACHED() << "No known extension for model type."; |
394 return "INVALID"; | 410 return "INVALID"; |
395 } | 411 } |
396 | 412 |
397 // For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted | 413 // For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted |
398 // if we feel the min, max, or bucket count amount are not appropriate. | 414 // if we feel the min, max, or bucket count amount are not appropriate. |
399 #define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \ | 415 #define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \ |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 return; | 459 return; |
444 } | 460 } |
445 case SESSIONS: { | 461 case SESSIONS: { |
446 SYNC_FREQ_HISTOGRAM("Sync.FreqSessions", time); | 462 SYNC_FREQ_HISTOGRAM("Sync.FreqSessions", time); |
447 return; | 463 return; |
448 } | 464 } |
449 case APPS: { | 465 case APPS: { |
450 SYNC_FREQ_HISTOGRAM("Sync.FreqApps", time); | 466 SYNC_FREQ_HISTOGRAM("Sync.FreqApps", time); |
451 return; | 467 return; |
452 } | 468 } |
| 469 case EXTENSION_SETTINGS: { |
| 470 SYNC_FREQ_HISTOGRAM("Sync.FreqExtensionSettings", time); |
| 471 return; |
| 472 } |
453 default: | 473 default: |
454 LOG(ERROR) << "No known extension for model type."; | 474 LOG(ERROR) << "No known extension for model type."; |
455 } | 475 } |
456 } | 476 } |
457 | 477 |
458 #undef SYNC_FREQ_HISTOGRAM | 478 #undef SYNC_FREQ_HISTOGRAM |
459 | 479 |
460 // TODO(akalin): Figure out a better way to do these mappings. | 480 // TODO(akalin): Figure out a better way to do these mappings. |
461 | 481 |
462 namespace { | 482 namespace { |
463 const char kBookmarkNotificationType[] = "BOOKMARK"; | 483 const char kBookmarkNotificationType[] = "BOOKMARK"; |
464 const char kPreferenceNotificationType[] = "PREFERENCE"; | 484 const char kPreferenceNotificationType[] = "PREFERENCE"; |
465 const char kPasswordNotificationType[] = "PASSWORD"; | 485 const char kPasswordNotificationType[] = "PASSWORD"; |
466 const char kAutofillNotificationType[] = "AUTOFILL"; | 486 const char kAutofillNotificationType[] = "AUTOFILL"; |
467 const char kThemeNotificationType[] = "THEME"; | 487 const char kThemeNotificationType[] = "THEME"; |
468 const char kTypedUrlNotificationType[] = "TYPED_URL"; | 488 const char kTypedUrlNotificationType[] = "TYPED_URL"; |
469 const char kExtensionNotificationType[] = "EXTENSION"; | 489 const char kExtensionNotificationType[] = "EXTENSION"; |
| 490 const char kExtensionSettingNotificationType[] = "EXTENSION_SETTING"; |
470 const char kNigoriNotificationType[] = "NIGORI"; | 491 const char kNigoriNotificationType[] = "NIGORI"; |
471 const char kAppNotificationType[] = "APP"; | 492 const char kAppNotificationType[] = "APP"; |
472 const char kSearchEngineNotificationType[] = "SEARCH_ENGINE"; | 493 const char kSearchEngineNotificationType[] = "SEARCH_ENGINE"; |
473 const char kSessionNotificationType[] = "SESSION"; | 494 const char kSessionNotificationType[] = "SESSION"; |
474 const char kAutofillProfileNotificationType[] = "AUTOFILL_PROFILE"; | 495 const char kAutofillProfileNotificationType[] = "AUTOFILL_PROFILE"; |
475 } // namespace | 496 } // namespace |
476 | 497 |
477 bool RealModelTypeToNotificationType(ModelType model_type, | 498 bool RealModelTypeToNotificationType(ModelType model_type, |
478 std::string* notification_type) { | 499 std::string* notification_type) { |
479 switch (model_type) { | 500 switch (model_type) { |
(...skipping 26 matching lines...) Expand all Loading... |
506 return true; | 527 return true; |
507 case SEARCH_ENGINES: | 528 case SEARCH_ENGINES: |
508 *notification_type = kSearchEngineNotificationType; | 529 *notification_type = kSearchEngineNotificationType; |
509 return true; | 530 return true; |
510 case SESSIONS: | 531 case SESSIONS: |
511 *notification_type = kSessionNotificationType; | 532 *notification_type = kSessionNotificationType; |
512 return true; | 533 return true; |
513 case AUTOFILL_PROFILE: | 534 case AUTOFILL_PROFILE: |
514 *notification_type = kAutofillProfileNotificationType; | 535 *notification_type = kAutofillProfileNotificationType; |
515 return true; | 536 return true; |
| 537 case EXTENSION_SETTINGS: |
| 538 *notification_type = kExtensionSettingNotificationType; |
| 539 return true; |
516 default: | 540 default: |
517 break; | 541 break; |
518 } | 542 } |
519 notification_type->clear(); | 543 notification_type->clear(); |
520 return false; | 544 return false; |
521 } | 545 } |
522 | 546 |
523 bool NotificationTypeToRealModelType(const std::string& notification_type, | 547 bool NotificationTypeToRealModelType(const std::string& notification_type, |
524 ModelType* model_type) { | 548 ModelType* model_type) { |
525 if (notification_type == kBookmarkNotificationType) { | 549 if (notification_type == kBookmarkNotificationType) { |
(...skipping 25 matching lines...) Expand all Loading... |
551 return true; | 575 return true; |
552 } else if (notification_type == kSearchEngineNotificationType) { | 576 } else if (notification_type == kSearchEngineNotificationType) { |
553 *model_type = SEARCH_ENGINES; | 577 *model_type = SEARCH_ENGINES; |
554 return true; | 578 return true; |
555 } else if (notification_type == kSessionNotificationType) { | 579 } else if (notification_type == kSessionNotificationType) { |
556 *model_type = SESSIONS; | 580 *model_type = SESSIONS; |
557 return true; | 581 return true; |
558 } else if (notification_type == kAutofillProfileNotificationType) { | 582 } else if (notification_type == kAutofillProfileNotificationType) { |
559 *model_type = AUTOFILL_PROFILE; | 583 *model_type = AUTOFILL_PROFILE; |
560 return true; | 584 return true; |
| 585 } else if (notification_type == kExtensionSettingNotificationType) { |
| 586 *model_type = EXTENSION_SETTINGS; |
| 587 return true; |
561 } | 588 } |
562 *model_type = UNSPECIFIED; | 589 *model_type = UNSPECIFIED; |
563 return false; | 590 return false; |
564 } | 591 } |
565 | 592 |
566 ModelTypeSet GetAllRealModelTypes() { | 593 ModelTypeSet GetAllRealModelTypes() { |
567 ModelTypeSet all_types; | 594 ModelTypeSet all_types; |
568 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 595 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { |
569 all_types.insert(ModelTypeFromInt(i)); | 596 all_types.insert(ModelTypeFromInt(i)); |
570 } | 597 } |
571 return all_types; | 598 return all_types; |
572 } | 599 } |
573 | 600 |
574 bool IsRealDataType(ModelType model_type) { | 601 bool IsRealDataType(ModelType model_type) { |
575 return model_type >= FIRST_REAL_MODEL_TYPE && model_type < MODEL_TYPE_COUNT; | 602 return model_type >= FIRST_REAL_MODEL_TYPE && model_type < MODEL_TYPE_COUNT; |
576 } | 603 } |
577 | 604 |
578 } // namespace syncable | 605 } // namespace syncable |
OLD | NEW |