Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: components/sync/base/model_type.h

Issue 2240613002: [Sync] Convert sync to a static library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Try getting rid of sync_core source set. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/sync/base/invalidation_interface.h ('k') | components/sync/base/nigori.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 // Enumerate the various item subtypes that are supported by sync. 5 // Enumerate the various item subtypes that are supported by sync.
6 // Each sync object is expected to have an immutable object type. 6 // Each sync object is expected to have an immutable object type.
7 // An object's type is inferred from the type of data it holds. 7 // An object's type is inferred from the type of data it holds.
8 8
9 #ifndef COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ 9 #ifndef COMPONENTS_SYNC_BASE_MODEL_TYPE_H_
10 #define COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ 10 #define COMPONENTS_SYNC_BASE_MODEL_TYPE_H_
11 11
12 #include <map> 12 #include <map>
13 #include <memory> 13 #include <memory>
14 #include <ostream> 14 #include <ostream>
15 #include <set> 15 #include <set>
16 #include <string> 16 #include <string>
17 17
18 #include "base/logging.h" 18 #include "base/logging.h"
19 #include "components/sync/base/enum_set.h" 19 #include "components/sync/base/enum_set.h"
20 #include "components/sync/base/sync_export.h"
21 20
22 namespace base { 21 namespace base {
23 class ListValue; 22 class ListValue;
24 class StringValue; 23 class StringValue;
25 class Value; 24 class Value;
26 } 25 }
27 26
28 namespace sync_pb { 27 namespace sync_pb {
29 class EntitySpecifics; 28 class EntitySpecifics;
30 class SyncEntity; 29 class SyncEntity;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 typedef EnumSet<ModelType, UNSPECIFIED, LAST_REAL_MODEL_TYPE> FullModelTypeSet; 168 typedef EnumSet<ModelType, UNSPECIFIED, LAST_REAL_MODEL_TYPE> FullModelTypeSet;
170 typedef std::map<syncer::ModelType, const char*> ModelTypeNameMap; 169 typedef std::map<syncer::ModelType, const char*> ModelTypeNameMap;
171 170
172 inline ModelType ModelTypeFromInt(int i) { 171 inline ModelType ModelTypeFromInt(int i) {
173 DCHECK_GE(i, 0); 172 DCHECK_GE(i, 0);
174 DCHECK_LT(i, MODEL_TYPE_COUNT); 173 DCHECK_LT(i, MODEL_TYPE_COUNT);
175 return static_cast<ModelType>(i); 174 return static_cast<ModelType>(i);
176 } 175 }
177 176
178 // Used by tests outside of sync/. 177 // Used by tests outside of sync/.
179 SYNC_EXPORT void AddDefaultFieldValue(ModelType datatype, 178 void AddDefaultFieldValue(ModelType datatype,
180 sync_pb::EntitySpecifics* specifics); 179 sync_pb::EntitySpecifics* specifics);
181 180
182 // Extract the model type of a SyncEntity protocol buffer. ModelType is a 181 // Extract the model type of a SyncEntity protocol buffer. ModelType is a
183 // local concept: the enum is not in the protocol. The SyncEntity's ModelType 182 // local concept: the enum is not in the protocol. The SyncEntity's ModelType
184 // is inferred from the presence of particular datatype field in the 183 // is inferred from the presence of particular datatype field in the
185 // entity specifics. 184 // entity specifics.
186 SYNC_EXPORT ModelType GetModelType(const sync_pb::SyncEntity& sync_entity); 185 ModelType GetModelType(const sync_pb::SyncEntity& sync_entity);
187 186
188 // Extract the model type from an EntitySpecifics field. Note that there 187 // Extract the model type from an EntitySpecifics field. Note that there
189 // are some ModelTypes (like TOP_LEVEL_FOLDER) that can't be inferred this way; 188 // are some ModelTypes (like TOP_LEVEL_FOLDER) that can't be inferred this way;
190 // prefer using GetModelType where possible. 189 // prefer using GetModelType where possible.
191 SYNC_EXPORT ModelType 190 ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics);
192 GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics);
193 191
194 // Protocol types are those types that have actual protocol buffer 192 // Protocol types are those types that have actual protocol buffer
195 // representations. This distinguishes them from Proxy types, which have no 193 // representations. This distinguishes them from Proxy types, which have no
196 // protocol representation and are never sent to the server. 194 // protocol representation and are never sent to the server.
197 SYNC_EXPORT ModelTypeSet ProtocolTypes(); 195 ModelTypeSet ProtocolTypes();
198 196
199 // These are the normal user-controlled types. This is to distinguish from 197 // These are the normal user-controlled types. This is to distinguish from
200 // ControlTypes which are always enabled. Note that some of these share a 198 // ControlTypes which are always enabled. Note that some of these share a
201 // preference flag, so not all of them are individually user-selectable. 199 // preference flag, so not all of them are individually user-selectable.
202 SYNC_EXPORT ModelTypeSet UserTypes(); 200 ModelTypeSet UserTypes();
203 201
204 // These are the user-selectable data types. 202 // These are the user-selectable data types.
205 SYNC_EXPORT ModelTypeSet UserSelectableTypes(); 203 ModelTypeSet UserSelectableTypes();
206 SYNC_EXPORT bool IsUserSelectableType(ModelType model_type); 204 bool IsUserSelectableType(ModelType model_type);
207 SYNC_EXPORT ModelTypeNameMap GetUserSelectableTypeNameMap(); 205 ModelTypeNameMap GetUserSelectableTypeNameMap();
208 206
209 // This is the subset of UserTypes() that can be encrypted. 207 // This is the subset of UserTypes() that can be encrypted.
210 SYNC_EXPORT ModelTypeSet EncryptableUserTypes(); 208 ModelTypeSet EncryptableUserTypes();
211 209
212 // This is the subset of UserTypes() that have priority over other types. These 210 // This is the subset of UserTypes() that have priority over other types. These
213 // types are synced before other user types and are never encrypted. 211 // types are synced before other user types and are never encrypted.
214 SYNC_EXPORT ModelTypeSet PriorityUserTypes(); 212 ModelTypeSet PriorityUserTypes();
215 213
216 // Proxy types are placeholder types for handling implicitly enabling real 214 // Proxy types are placeholder types for handling implicitly enabling real
217 // types. They do not exist at the server, and are simply used for 215 // types. They do not exist at the server, and are simply used for
218 // UI/Configuration logic. 216 // UI/Configuration logic.
219 SYNC_EXPORT ModelTypeSet ProxyTypes(); 217 ModelTypeSet ProxyTypes();
220 218
221 // Returns a list of all control types. 219 // Returns a list of all control types.
222 // 220 //
223 // The control types are intended to contain metadata nodes that are essential 221 // The control types are intended to contain metadata nodes that are essential
224 // for the normal operation of the syncer. As such, they have the following 222 // for the normal operation of the syncer. As such, they have the following
225 // special properties: 223 // special properties:
226 // - They are downloaded early during SyncBackend initialization. 224 // - They are downloaded early during SyncBackend initialization.
227 // - They are always enabled. Users may not disable these types. 225 // - They are always enabled. Users may not disable these types.
228 // - Their contents are not encrypted automatically. 226 // - Their contents are not encrypted automatically.
229 // - They support custom update application and conflict resolution logic. 227 // - They support custom update application and conflict resolution logic.
230 // - All change processing occurs on the sync thread (GROUP_PASSIVE). 228 // - All change processing occurs on the sync thread (GROUP_PASSIVE).
231 SYNC_EXPORT ModelTypeSet ControlTypes(); 229 ModelTypeSet ControlTypes();
232 230
233 // Returns true if this is a control type. 231 // Returns true if this is a control type.
234 // 232 //
235 // See comment above for more information on what makes these types special. 233 // See comment above for more information on what makes these types special.
236 SYNC_EXPORT bool IsControlType(ModelType model_type); 234 bool IsControlType(ModelType model_type);
237 235
238 // Core types are those data types used by sync's core functionality (i.e. not 236 // Core types are those data types used by sync's core functionality (i.e. not
239 // user data types). These types are always enabled, and include ControlTypes(). 237 // user data types). These types are always enabled, and include ControlTypes().
240 // 238 //
241 // The set of all core types. 239 // The set of all core types.
242 SYNC_EXPORT ModelTypeSet CoreTypes(); 240 ModelTypeSet CoreTypes();
243 // Those core types that have high priority (includes ControlTypes()). 241 // Those core types that have high priority (includes ControlTypes()).
244 SYNC_EXPORT ModelTypeSet PriorityCoreTypes(); 242 ModelTypeSet PriorityCoreTypes();
245 243
246 // Determine a model type from the field number of its associated 244 // Determine a model type from the field number of its associated
247 // EntitySpecifics field. Returns UNSPECIFIED if the field number is 245 // EntitySpecifics field. Returns UNSPECIFIED if the field number is
248 // not recognized. 246 // not recognized.
249 // 247 //
250 // If you're putting the result in a ModelTypeSet, you should use the 248 // If you're putting the result in a ModelTypeSet, you should use the
251 // following pattern: 249 // following pattern:
252 // 250 //
253 // ModelTypeSet model_types; 251 // ModelTypeSet model_types;
254 // // Say we're looping through a list of items, each of which has a 252 // // Say we're looping through a list of items, each of which has a
255 // // field number. 253 // // field number.
256 // for (...) { 254 // for (...) {
257 // int field_number = ...; 255 // int field_number = ...;
258 // ModelType model_type = 256 // ModelType model_type =
259 // GetModelTypeFromSpecificsFieldNumber(field_number); 257 // GetModelTypeFromSpecificsFieldNumber(field_number);
260 // if (!IsRealDataType(model_type)) { 258 // if (!IsRealDataType(model_type)) {
261 // DLOG(WARNING) << "Unknown field number " << field_number; 259 // DLOG(WARNING) << "Unknown field number " << field_number;
262 // continue; 260 // continue;
263 // } 261 // }
264 // model_types.Put(model_type); 262 // model_types.Put(model_type);
265 // } 263 // }
266 SYNC_EXPORT ModelType GetModelTypeFromSpecificsFieldNumber(int field_number); 264 ModelType GetModelTypeFromSpecificsFieldNumber(int field_number);
267 265
268 // Return the field number of the EntitySpecifics field associated with 266 // Return the field number of the EntitySpecifics field associated with
269 // a model type. 267 // a model type.
270 SYNC_EXPORT int GetSpecificsFieldNumberFromModelType(ModelType model_type); 268 int GetSpecificsFieldNumberFromModelType(ModelType model_type);
271 269
272 FullModelTypeSet ToFullModelTypeSet(ModelTypeSet in); 270 FullModelTypeSet ToFullModelTypeSet(ModelTypeSet in);
273 271
274 // TODO(sync): The functions below badly need some cleanup. 272 // TODO(sync): The functions below badly need some cleanup.
275 273
276 // Returns a pointer to a string with application lifetime that represents 274 // Returns a pointer to a string with application lifetime that represents
277 // the name of |model_type|. 275 // the name of |model_type|.
278 SYNC_EXPORT const char* ModelTypeToString(ModelType model_type); 276 const char* ModelTypeToString(ModelType model_type);
279 277
280 // Some histograms take an integer parameter that represents a model type. 278 // Some histograms take an integer parameter that represents a model type.
281 // The mapping from ModelType to integer is defined here. It should match 279 // The mapping from ModelType to integer is defined here. It should match
282 // the mapping from integer to labels defined in histograms.xml. 280 // the mapping from integer to labels defined in histograms.xml.
283 SYNC_EXPORT int ModelTypeToHistogramInt(ModelType model_type); 281 int ModelTypeToHistogramInt(ModelType model_type);
284 282
285 // Handles all model types, and not just real ones. 283 // Handles all model types, and not just real ones.
286 // 284 //
287 // Caller takes ownership of returned value. 285 // Caller takes ownership of returned value.
288 SYNC_EXPORT base::StringValue* ModelTypeToValue(ModelType model_type); 286 base::StringValue* ModelTypeToValue(ModelType model_type);
289 287
290 // Converts a Value into a ModelType - complement to ModelTypeToValue(). 288 // Converts a Value into a ModelType - complement to ModelTypeToValue().
291 SYNC_EXPORT ModelType ModelTypeFromValue(const base::Value& value); 289 ModelType ModelTypeFromValue(const base::Value& value);
292 290
293 // Returns the ModelType corresponding to the name |model_type_string|. 291 // Returns the ModelType corresponding to the name |model_type_string|.
294 SYNC_EXPORT ModelType ModelTypeFromString(const std::string& model_type_string); 292 ModelType ModelTypeFromString(const std::string& model_type_string);
295 293
296 // Returns the comma-separated string representation of |model_types|. 294 // Returns the comma-separated string representation of |model_types|.
297 SYNC_EXPORT std::string ModelTypeSetToString(ModelTypeSet model_types); 295 std::string ModelTypeSetToString(ModelTypeSet model_types);
298 296
299 // Necessary for compatibility with EXPECT_EQ and the like. 297 // Necessary for compatibility with EXPECT_EQ and the like.
300 SYNC_EXPORT std::ostream& operator<<(std::ostream& out, 298 std::ostream& operator<<(std::ostream& out, ModelTypeSet model_type_set);
301 ModelTypeSet model_type_set);
302 299
303 // Returns the set of comma-separated model types from |model_type_string|. 300 // Returns the set of comma-separated model types from |model_type_string|.
304 SYNC_EXPORT ModelTypeSet 301 ModelTypeSet ModelTypeSetFromString(const std::string& model_type_string);
305 ModelTypeSetFromString(const std::string& model_type_string);
306 302
307 SYNC_EXPORT std::unique_ptr<base::ListValue> ModelTypeSetToValue( 303 std::unique_ptr<base::ListValue> ModelTypeSetToValue(ModelTypeSet model_types);
308 ModelTypeSet model_types);
309 304
310 SYNC_EXPORT ModelTypeSet ModelTypeSetFromValue(const base::ListValue& value); 305 ModelTypeSet ModelTypeSetFromValue(const base::ListValue& value);
311 306
312 // Returns a string corresponding to the syncable tag for this datatype. 307 // Returns a string corresponding to the syncable tag for this datatype.
313 SYNC_EXPORT std::string ModelTypeToRootTag(ModelType type); 308 std::string ModelTypeToRootTag(ModelType type);
314 309
315 // Returns root_tag for |model_type| in ModelTypeInfo. 310 // Returns root_tag for |model_type| in ModelTypeInfo.
316 // Difference with ModelTypeToRootTag(), this just simply return toor_tag in 311 // Difference with ModelTypeToRootTag(), this just simply return toor_tag in
317 // ModelTypeInfo. 312 // ModelTypeInfo.
318 SYNC_EXPORT const char* GetModelTypeRootTag(ModelType model_type); 313 const char* GetModelTypeRootTag(ModelType model_type);
319 314
320 // Convert a real model type to a notification type (used for 315 // Convert a real model type to a notification type (used for
321 // subscribing to server-issued notifications). Returns true iff 316 // subscribing to server-issued notifications). Returns true iff
322 // |model_type| was a real model type and |notification_type| was 317 // |model_type| was a real model type and |notification_type| was
323 // filled in. 318 // filled in.
324 SYNC_EXPORT bool RealModelTypeToNotificationType( 319 bool RealModelTypeToNotificationType(ModelType model_type,
325 ModelType model_type, 320 std::string* notification_type);
326 std::string* notification_type);
327 321
328 // Converts a notification type to a real model type. Returns true 322 // Converts a notification type to a real model type. Returns true
329 // iff |notification_type| was the notification type of a real model 323 // iff |notification_type| was the notification type of a real model
330 // type and |model_type| was filled in. 324 // type and |model_type| was filled in.
331 SYNC_EXPORT bool NotificationTypeToRealModelType( 325 bool NotificationTypeToRealModelType(const std::string& notification_type,
332 const std::string& notification_type, 326 ModelType* model_type);
333 ModelType* model_type);
334 327
335 // Returns true if |model_type| is a real datatype 328 // Returns true if |model_type| is a real datatype
336 SYNC_EXPORT bool IsRealDataType(ModelType model_type); 329 bool IsRealDataType(ModelType model_type);
337 330
338 // Returns true if |model_type| is a proxy type 331 // Returns true if |model_type| is a proxy type
339 SYNC_EXPORT bool IsProxyType(ModelType model_type); 332 bool IsProxyType(ModelType model_type);
340 333
341 // Returns true if |model_type| is an act-once type. Act once types drop 334 // Returns true if |model_type| is an act-once type. Act once types drop
342 // entities after applying them. Drops are deletes that are not synced to other 335 // entities after applying them. Drops are deletes that are not synced to other
343 // clients. 336 // clients.
344 // TODO(haitaol): Make entries of act-once data types immutable. 337 // TODO(haitaol): Make entries of act-once data types immutable.
345 SYNC_EXPORT bool IsActOnceDataType(ModelType model_type); 338 bool IsActOnceDataType(ModelType model_type);
346 339
347 // Returns true if |model_type| requires its root folder to be explicitly 340 // Returns true if |model_type| requires its root folder to be explicitly
348 // created on the server during initial sync. 341 // created on the server during initial sync.
349 SYNC_EXPORT bool IsTypeWithServerGeneratedRoot(ModelType model_type); 342 bool IsTypeWithServerGeneratedRoot(ModelType model_type);
350 343
351 // Returns true if root folder for |model_type| is created on the client when 344 // Returns true if root folder for |model_type| is created on the client when
352 // that type is initially synced. 345 // that type is initially synced.
353 SYNC_EXPORT bool IsTypeWithClientGeneratedRoot(ModelType model_type); 346 bool IsTypeWithClientGeneratedRoot(ModelType model_type);
354 347
355 // Returns true if |model_type| supports parent-child hierarchy or entries. 348 // Returns true if |model_type| supports parent-child hierarchy or entries.
356 SYNC_EXPORT bool TypeSupportsHierarchy(ModelType model_type); 349 bool TypeSupportsHierarchy(ModelType model_type);
357 350
358 // Returns true if |model_type| supports ordering of sibling entries. 351 // Returns true if |model_type| supports ordering of sibling entries.
359 SYNC_EXPORT bool TypeSupportsOrdering(ModelType model_type); 352 bool TypeSupportsOrdering(ModelType model_type);
360 353
361 } // namespace syncer 354 } // namespace syncer
362 355
363 #endif // COMPONENTS_SYNC_BASE_MODEL_TYPE_H_ 356 #endif // COMPONENTS_SYNC_BASE_MODEL_TYPE_H_
OLDNEW
« no previous file with comments | « components/sync/base/invalidation_interface.h ('k') | components/sync/base/nigori.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698