1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/model_type.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/metrics/histogram.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/engine/syncproto.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/sync/protocol/app_specifics.pb.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/bookmark_specifics.pb.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/extension_specifics.pb.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/nigori_specifics.pb.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/password_specifics.pb.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/preference_specifics.pb.h" 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/sync/protocol/session_specifics.pb.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/sync.pb.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/theme_specifics.pb.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace syncable { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AddDefaultExtensionValue(syncable::ModelType datatype, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_pb::EntitySpecifics* specifics) { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (datatype) { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case BOOKMARKS: 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::bookmark); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PASSWORDS: 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::password); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PREFERENCES: 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::preference); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case AUTOFILL: 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::autofill); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case AUTOFILL_PROFILE: 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch specifics->MutableExtension(sync_pb::autofill_profile); 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch break; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case THEMES: 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::theme); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case TYPED_URLS: 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::typed_url); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case EXTENSIONS: 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::extension); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NIGORI: 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch specifics->MutableExtension(sync_pb::nigori); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case SESSIONS: 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick specifics->MutableExtension(sync_pb::session); 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick break; 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case APPS: 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick specifics->MutableExtension(sync_pb::app); 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick break; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "No known extension for model type."; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenModelType GetModelTypeFromExtensionFieldNumber(int field_number) { 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ModelType model_type = ModelTypeFromInt(i); 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (GetExtensionFieldNumberFromModelType(model_type) == field_number) 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return model_type; 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED(); 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return UNSPECIFIED; 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenint GetExtensionFieldNumberFromModelType(ModelType model_type) { 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen switch (model_type) { 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case BOOKMARKS: 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kBookmarkFieldNumber; 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case PASSWORDS: 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kPasswordFieldNumber; 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case PREFERENCES: 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kPreferenceFieldNumber; 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case AUTOFILL: 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kAutofillFieldNumber; 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case AUTOFILL_PROFILE: 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kAutofillProfileFieldNumber; 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case THEMES: 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kThemeFieldNumber; 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case TYPED_URLS: 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kTypedUrlFieldNumber; 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case EXTENSIONS: 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kExtensionFieldNumber; 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case NIGORI: 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kNigoriFieldNumber; 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case SESSIONS: 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kSessionFieldNumber; 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case APPS: 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return sync_pb::kAppFieldNumber; 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default: 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED() << "No known extension for model type."; 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return 0; 11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NOTREACHED() << "Needed for linux_keep_shadow_stacks because of " 115dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen << "http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20681"; 116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return 0; 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Note: keep this consistent with GetModelType in syncable.cc! 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochModelType GetModelType(const sync_pb::SyncEntity& sync_pb_entity) { 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const browser_sync::SyncEntity& sync_entity = 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static_cast<const browser_sync::SyncEntity&>(sync_pb_entity); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(!sync_entity.id().IsRoot()); // Root shouldn't ever go over the wire. 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sync_entity.deleted()) 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return UNSPECIFIED; 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Backwards compatibility with old (pre-specifics) protocol. 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (sync_entity.has_bookmarkdata()) 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return BOOKMARKS; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ModelType specifics_type = GetModelTypeFromSpecifics(sync_entity.specifics()); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics_type != UNSPECIFIED) 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return specifics_type; 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Loose check for server-created top-level folders that aren't 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // bound to a particular model type. 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!sync_entity.server_defined_unique_tag().empty() && 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sync_entity.IsFolder()) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return TOP_LEVEL_FOLDER; 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is an item of a datatype we can't understand. Maybe it's 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // from the future? Either we mis-encoded the object, or the 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // server sent us entries it shouldn't have. 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED() << "Unknown datatype in sync proto."; 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return UNSPECIFIED; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) { 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::bookmark)) 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return BOOKMARKS; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::password)) 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return PASSWORDS; 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::preference)) 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return PREFERENCES; 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::autofill)) 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return AUTOFILL; 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (specifics.HasExtension(sync_pb::autofill_profile)) 164201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return AUTOFILL_PROFILE; 165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::theme)) 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return THEMES; 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::typed_url)) 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return TYPED_URLS; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::extension)) 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return EXTENSIONS; 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (specifics.HasExtension(sync_pb::nigori)) 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NIGORI; 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (specifics.HasExtension(sync_pb::app)) 1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return APPS; 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (specifics.HasExtension(sync_pb::session)) 1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return SESSIONS; 1833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return UNSPECIFIED; 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string ModelTypeToString(ModelType model_type) { 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (model_type) { 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case BOOKMARKS: 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Bookmarks"; 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PREFERENCES: 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Preferences"; 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PASSWORDS: 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Passwords"; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case AUTOFILL: 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Autofill"; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case THEMES: 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Themes"; 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case TYPED_URLS: 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Typed URLs"; 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case EXTENSIONS: 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Extensions"; 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NIGORI: 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return "Encryption keys"; 2053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case SESSIONS: 2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "Sessions"; 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case APPS: 2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return "Apps"; 20921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen case AUTOFILL_PROFILE: 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return "Autofill Profiles"; 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED() << "No known extension for model type."; 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return "INVALID"; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenStringValue* ModelTypeToValue(ModelType model_type) { 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (model_type >= syncable::FIRST_REAL_MODEL_TYPE) { 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Value::CreateStringValue(ModelTypeToString(model_type)); 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (model_type == syncable::TOP_LEVEL_FOLDER) { 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Value::CreateStringValue("Top-level folder"); 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (model_type == syncable::UNSPECIFIED) { 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Value::CreateStringValue("Unspecified"); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Value::CreateStringValue(""); 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 230dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::string ModelTypeSetToString(const ModelTypeSet& model_types) { 231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string result; 232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (ModelTypeSet::const_iterator iter = model_types.begin(); 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen iter != model_types.end();) { 234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen result += ModelTypeToString(*iter); 235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (++iter != model_types.end()) 236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen result += ", "; 237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return result; 239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 241513209b27ff55e2841eac0e4120199c23acce758Ben MurdochModelType ModelTypeFromString(const std::string& model_type_string) { 242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (model_type_string == "Bookmarks") 243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return BOOKMARKS; 244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Preferences") 245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return PREFERENCES; 246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Passwords") 247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return PASSWORDS; 248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Autofill") 249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return AUTOFILL; 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else if (model_type_string == "Autofill Profiles") 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return AUTOFILL_PROFILE; 252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Themes") 253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return THEMES; 254513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Typed URLs") 255513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return TYPED_URLS; 256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Extensions") 257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return EXTENSIONS; 258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Encryption keys") 259513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return NIGORI; 260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Sessions") 261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return SESSIONS; 262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else if (model_type_string == "Apps") 263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return APPS; 264513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch else 265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NOTREACHED() << "No known model type corresponding to " 266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch << model_type_string << "."; 267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return UNSPECIFIED; 268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 2704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochbool ModelTypeBitSetFromString( 2714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::string& model_type_bitset_string, 2724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ModelTypeBitSet* model_types) { 273dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(model_types); 274dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (model_type_bitset_string.length() != MODEL_TYPE_COUNT) 2754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return false; 276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (model_type_bitset_string.find_first_not_of("01") != std::string::npos) 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return false; 278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *model_types = ModelTypeBitSet(model_type_bitset_string); 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return true; 280dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 2814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 282dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenModelTypeBitSet ModelTypeBitSetFromSet(const ModelTypeSet& set) { 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ModelTypeBitSet bitset; 284dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (ModelTypeSet::const_iterator iter = set.begin(); iter != set.end(); 285dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ++iter) { 286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bitset.set(*iter); 287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 288dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return bitset; 2894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 2904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenListValue* ModelTypeBitSetToValue(const ModelTypeBitSet& model_types) { 29272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ListValue* value = new ListValue(); 29372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { 29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (model_types[i]) { 29572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->Append( 296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Value::CreateStringValue(ModelTypeToString(ModelTypeFromInt(i)))); 29772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 29872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 29972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 30072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 30172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 302dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenListValue* ModelTypeSetToValue(const ModelTypeSet& model_types) { 303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ListValue* value = new ListValue(); 304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (ModelTypeSet::const_iterator i = model_types.begin(); 305dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i != model_types.end(); ++i) { 306dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen value->Append(Value::CreateStringValue(ModelTypeToString(*i))); 307dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 308dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return value; 309dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 310dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 311dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// TODO(zea): remove all hardcoded tags in model associators and have them use 312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// this instead. 313dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::string ModelTypeToRootTag(ModelType type) { 314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switch (type) { 315dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case BOOKMARKS: 316dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_bookmarks"; 317dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case PREFERENCES: 318dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_preferences"; 319dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case PASSWORDS: 320dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_passwords"; 321dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case AUTOFILL: 322dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_autofill"; 323dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case THEMES: 324dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_themes"; 325dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case TYPED_URLS: 326dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_typed_urls"; 327dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case EXTENSIONS: 328dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_extensions"; 329dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case NIGORI: 330dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_nigori"; 331dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case SESSIONS: 332dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_sessions"; 333dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case APPS: 334dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_apps"; 335dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case AUTOFILL_PROFILE: 336dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "google_chrome_autofill_profiles"; 337dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen default: 338dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 339dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 340dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NOTREACHED() << "No known extension for model type."; 341dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "INVALID"; 342dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 343dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 3444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// For now, this just implements UMA_HISTOGRAM_LONG_TIMES. This can be adjusted 3454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// if we feel the min, max, or bucket count amount are not appropriate. 3464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define SYNC_FREQ_HISTOGRAM(name, time) UMA_HISTOGRAM_CUSTOM_TIMES( \ 3474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch name, time, base::TimeDelta::FromMilliseconds(1), \ 3484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch base::TimeDelta::FromHours(1), 50) 3494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid PostTimeToTypeHistogram(ModelType model_type, base::TimeDelta time) { 3514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch switch (model_type) { 3524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case BOOKMARKS: { 3534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqBookmarks", time); 3544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case PREFERENCES: { 3574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqPreferences", time); 3584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case PASSWORDS: { 3614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqPasswords", time); 3624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case AUTOFILL: { 3654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqAutofill", time); 3664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 36872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case AUTOFILL_PROFILE: { 36972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SYNC_FREQ_HISTOGRAM("Sync.FreqAutofillProfiles", time); 37072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 37172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 3724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case THEMES: { 3734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqThemes", time); 3744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case TYPED_URLS: { 3774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqTypedUrls", time); 3784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case EXTENSIONS: { 3814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqExtensions", time); 3824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case NIGORI: { 3854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqNigori", time); 3864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case SESSIONS: { 3894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqSessions", time); 3904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch case APPS: { 3934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SYNC_FREQ_HISTOGRAM("Sync.FreqApps", time); 3944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return; 3954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch default: 3974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch LOG(ERROR) << "No known extension for model type."; 3984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 3994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 4004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#undef SYNC_FREQ_HISTOGRAM 4024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(akalin): Figure out a better way to do these mappings. 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kBookmarkNotificationType[] = "BOOKMARK"; 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kPreferenceNotificationType[] = "PREFERENCE"; 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kPasswordNotificationType[] = "PASSWORD"; 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kAutofillNotificationType[] = "AUTOFILL"; 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kThemeNotificationType[] = "THEME"; 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kTypedUrlNotificationType[] = "TYPED_URL"; 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kExtensionNotificationType[] = "EXTENSION"; 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kNigoriNotificationType[] = "NIGORI"; 4143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char kAppNotificationType[] = "APP"; 4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char kSessionNotificationType[] = "SESSION"; 41621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kAutofillProfileNotificationType[] = "AUTOFILL_PROFILE"; 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool RealModelTypeToNotificationType(ModelType model_type, 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string* notification_type) { 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (model_type) { 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case BOOKMARKS: 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kBookmarkNotificationType; 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PREFERENCES: 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kPreferenceNotificationType; 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case PASSWORDS: 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kPasswordNotificationType; 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case AUTOFILL: 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kAutofillNotificationType; 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case THEMES: 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kThemeNotificationType; 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case TYPED_URLS: 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kTypedUrlNotificationType; 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case EXTENSIONS: 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kExtensionNotificationType; 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NIGORI: 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *notification_type = kNigoriNotificationType; 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 4463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case APPS: 4473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick *notification_type = kAppNotificationType; 4483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 4493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick case SESSIONS: 4503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick *notification_type = kSessionNotificationType; 4513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 452201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case AUTOFILL_PROFILE: 45321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *notification_type = kAutofillProfileNotificationType; 454201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return true; 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch notification_type->clear(); 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool NotificationTypeToRealModelType(const std::string& notification_type, 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ModelType* model_type) { 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (notification_type == kBookmarkNotificationType) { 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = BOOKMARKS; 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kPreferenceNotificationType) { 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = PREFERENCES; 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kPasswordNotificationType) { 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = PASSWORDS; 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kAutofillNotificationType) { 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = AUTOFILL; 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kThemeNotificationType) { 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = THEMES; 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kTypedUrlNotificationType) { 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = TYPED_URLS; 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kExtensionNotificationType) { 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = EXTENSIONS; 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else if (notification_type == kNigoriNotificationType) { 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = NIGORI; 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 4883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (notification_type == kAppNotificationType) { 4893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick *model_type = APPS; 4903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 4913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } else if (notification_type == kSessionNotificationType) { 4923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick *model_type = SESSIONS; 4933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 49421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else if (notification_type == kAutofillProfileNotificationType) { 49521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen *model_type = AUTOFILL_PROFILE; 49621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return true; 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *model_type = UNSPECIFIED; 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace syncable 503