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

Side by Side Diff: sync/internal_api/public/base/model_type.h

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 // Enumerate the various item subtypes that are supported by sync.
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.
8
9 #ifndef SYNC_INTERNAL_API_PUBLIC_BASE_MODEL_TYPE_H_
10 #define SYNC_INTERNAL_API_PUBLIC_BASE_MODEL_TYPE_H_
11
12 #include <map>
13 #include <memory>
14 #include <ostream>
15 #include <set>
16 #include <string>
17
18 #include "base/logging.h"
19 #include "sync/base/sync_export.h"
20 #include "sync/internal_api/public/base/enum_set.h"
21
22 namespace base {
23 class ListValue;
24 class StringValue;
25 class Value;
26 }
27
28 namespace sync_pb {
29 class EntitySpecifics;
30 class SyncEntity;
31 }
32
33 namespace syncer {
34
35 // TODO(akalin): Move the non-exported functions in this file to a
36 // private header.
37
38 // A Java counterpart will be generated for this enum.
39 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.sync
40
41 // |kModelTypeInfoMap| struct entries are in the same order as their definition
42 // in ModelType enum. Don't forget to update the |kModelTypeInfoMap| struct in
43 // model_type.cc when you make changes in ModelType enum.
44 enum ModelType {
45 // Object type unknown. Objects may transition through
46 // the unknown state during their initial creation, before
47 // their properties are set. After deletion, object types
48 // are generally preserved.
49 UNSPECIFIED,
50 // A permanent folder whose children may be of mixed
51 // datatypes (e.g. the "Google Chrome" folder).
52 TOP_LEVEL_FOLDER,
53
54 // ------------------------------------ Start of "real" model types.
55 // The model types declared before here are somewhat special, as they
56 // they do not correspond to any browser data model. The remaining types
57 // are bona fide model types; all have a related browser data model and
58 // can be represented in the protocol using a specific Message type in the
59 // EntitySpecifics protocol buffer.
60 //
61 // A bookmark folder or a bookmark URL object.
62 BOOKMARKS,
63 FIRST_USER_MODEL_TYPE = BOOKMARKS, // Declared 2nd, for debugger prettiness.
64 FIRST_REAL_MODEL_TYPE = FIRST_USER_MODEL_TYPE,
65
66 // A preference object.
67 PREFERENCES,
68 // A password object.
69 PASSWORDS,
70 // An AutofillProfile Object
71 AUTOFILL_PROFILE,
72 // An autofill object.
73 AUTOFILL,
74 // Credit cards and addresses synced from the user's account. These are
75 // read-only on the client.
76 AUTOFILL_WALLET_DATA,
77 // Usage counts and last use dates for Wallet cards and addresses. This data
78 // is both readable and writable.
79 AUTOFILL_WALLET_METADATA,
80 // A themes object.
81 THEMES,
82 // A typed_url object.
83 TYPED_URLS,
84 // An extension object.
85 EXTENSIONS,
86 // An object representing a custom search engine.
87 SEARCH_ENGINES,
88 // An object representing a browser session.
89 SESSIONS,
90 // An app object.
91 APPS,
92 // An app setting from the extension settings API.
93 APP_SETTINGS,
94 // An extension setting from the extension settings API.
95 EXTENSION_SETTINGS,
96 // App notifications.
97 APP_NOTIFICATIONS, // Deprecated.
98 // History delete directives.
99 HISTORY_DELETE_DIRECTIVES,
100 // Synced push notifications.
101 SYNCED_NOTIFICATIONS, // Deprecated.
102 // Synced Notification app info.
103 SYNCED_NOTIFICATION_APP_INFO, // Deprecated.
104 // Custom spelling dictionary.
105 DICTIONARY,
106 // Favicon images.
107 FAVICON_IMAGES,
108 // Favicon tracking information.
109 FAVICON_TRACKING,
110 // Client-specific metadata, synced before other user types.
111 DEVICE_INFO,
112 // These preferences are synced before other user types and are never
113 // encrypted.
114 PRIORITY_PREFERENCES,
115 // Supervised user settings.
116 SUPERVISED_USER_SETTINGS,
117 // Supervised users. Every supervised user is a profile that is configured
118 // remotely by this user and can have restrictions applied. SUPERVISED_USERS
119 // and SUPERVISED_USER_SETTINGS can not be encrypted.
120 SUPERVISED_USERS,
121 // Supervised user shared settings. Shared settings can be modified both by
122 // the manager and the supervised user.
123 SUPERVISED_USER_SHARED_SETTINGS,
124 // Distilled articles.
125 ARTICLES,
126 // App List items
127 APP_LIST,
128 // WiFi credentials. Each item contains the information for connecting to one
129 // WiFi network. This includes, e.g., network name and password.
130 WIFI_CREDENTIALS,
131 // Supervised user whitelists. Each item contains a CRX ID (like an extension
132 // ID) and a name.
133 SUPERVISED_USER_WHITELISTS,
134 // Arc Package items.
135 ARC_PACKAGE,
136
137 // ---- Proxy types ----
138 // Proxy types are excluded from the sync protocol, but are still considered
139 // real user types. By convention, we prefix them with 'PROXY_' to distinguish
140 // them from normal protocol types.
141
142 // Tab sync. This is a placeholder type, so that Sessions can be implicitly
143 // enabled for history sync and tabs sync.
144 PROXY_TABS,
145 FIRST_PROXY_TYPE = PROXY_TABS,
146 LAST_PROXY_TYPE = PROXY_TABS,
147 LAST_USER_MODEL_TYPE = PROXY_TABS,
148
149 // ---- Control Types ----
150 // An object representing a set of Nigori keys.
151 NIGORI,
152 FIRST_CONTROL_MODEL_TYPE = NIGORI,
153 // Flags to enable experimental features.
154 EXPERIMENTS,
155 LAST_CONTROL_MODEL_TYPE = EXPERIMENTS,
156 LAST_REAL_MODEL_TYPE = LAST_CONTROL_MODEL_TYPE,
157
158 // If you are adding a new sync datatype that is exposed to the user via the
159 // sync preferences UI, be sure to update the list in
160 // components/sync_driver/user_selectable_sync_type.h so that the UMA
161 // histograms for sync include your new type. In this case, be sure to also
162 // update the UserSelectableTypes() definition in
163 // sync/syncable/model_type.cc.
164 MODEL_TYPE_COUNT,
165 };
166
167 typedef EnumSet<ModelType, FIRST_REAL_MODEL_TYPE, LAST_REAL_MODEL_TYPE>
168 ModelTypeSet;
169 typedef EnumSet<ModelType, UNSPECIFIED, LAST_REAL_MODEL_TYPE>
170 FullModelTypeSet;
171 typedef std::map<syncer::ModelType, const char*> ModelTypeNameMap;
172
173 inline ModelType ModelTypeFromInt(int i) {
174 DCHECK_GE(i, 0);
175 DCHECK_LT(i, MODEL_TYPE_COUNT);
176 return static_cast<ModelType>(i);
177 }
178
179 // Used by tests outside of sync/.
180 SYNC_EXPORT void AddDefaultFieldValue(ModelType datatype,
181 sync_pb::EntitySpecifics* specifics);
182
183 // Extract the model type of a SyncEntity protocol buffer. ModelType is a
184 // local concept: the enum is not in the protocol. The SyncEntity's ModelType
185 // is inferred from the presence of particular datatype field in the
186 // entity specifics.
187 SYNC_EXPORT ModelType GetModelType(const sync_pb::SyncEntity& sync_entity);
188
189 // Extract the model type from an EntitySpecifics field. Note that there
190 // are some ModelTypes (like TOP_LEVEL_FOLDER) that can't be inferred this way;
191 // prefer using GetModelType where possible.
192 SYNC_EXPORT ModelType GetModelTypeFromSpecifics(
193 const sync_pb::EntitySpecifics& specifics);
194
195 // Protocol types are those types that have actual protocol buffer
196 // representations. This distinguishes them from Proxy types, which have no
197 // protocol representation and are never sent to the server.
198 SYNC_EXPORT ModelTypeSet ProtocolTypes();
199
200 // These are the normal user-controlled types. This is to distinguish from
201 // ControlTypes which are always enabled. Note that some of these share a
202 // preference flag, so not all of them are individually user-selectable.
203 SYNC_EXPORT ModelTypeSet UserTypes();
204
205 // These are the user-selectable data types.
206 SYNC_EXPORT ModelTypeSet UserSelectableTypes();
207 SYNC_EXPORT bool IsUserSelectableType(ModelType model_type);
208 SYNC_EXPORT ModelTypeNameMap GetUserSelectableTypeNameMap();
209
210 // This is the subset of UserTypes() that can be encrypted.
211 SYNC_EXPORT ModelTypeSet EncryptableUserTypes();
212
213 // This is the subset of UserTypes() that have priority over other types. These
214 // types are synced before other user types and are never encrypted.
215 SYNC_EXPORT ModelTypeSet PriorityUserTypes();
216
217 // Proxy types are placeholder types for handling implicitly enabling real
218 // types. They do not exist at the server, and are simply used for
219 // UI/Configuration logic.
220 SYNC_EXPORT ModelTypeSet ProxyTypes();
221
222 // Returns a list of all control types.
223 //
224 // The control types are intended to contain metadata nodes that are essential
225 // for the normal operation of the syncer. As such, they have the following
226 // special properties:
227 // - They are downloaded early during SyncBackend initialization.
228 // - They are always enabled. Users may not disable these types.
229 // - Their contents are not encrypted automatically.
230 // - They support custom update application and conflict resolution logic.
231 // - All change processing occurs on the sync thread (GROUP_PASSIVE).
232 SYNC_EXPORT ModelTypeSet ControlTypes();
233
234 // Returns true if this is a control type.
235 //
236 // See comment above for more information on what makes these types special.
237 SYNC_EXPORT bool IsControlType(ModelType model_type);
238
239 // Core types are those data types used by sync's core functionality (i.e. not
240 // user data types). These types are always enabled, and include ControlTypes().
241 //
242 // The set of all core types.
243 SYNC_EXPORT ModelTypeSet CoreTypes();
244 // Those core types that have high priority (includes ControlTypes()).
245 SYNC_EXPORT ModelTypeSet PriorityCoreTypes();
246
247 // Determine a model type from the field number of its associated
248 // EntitySpecifics field. Returns UNSPECIFIED if the field number is
249 // not recognized.
250 //
251 // If you're putting the result in a ModelTypeSet, you should use the
252 // following pattern:
253 //
254 // ModelTypeSet model_types;
255 // // Say we're looping through a list of items, each of which has a
256 // // field number.
257 // for (...) {
258 // int field_number = ...;
259 // ModelType model_type =
260 // GetModelTypeFromSpecificsFieldNumber(field_number);
261 // if (!IsRealDataType(model_type)) {
262 // DLOG(WARNING) << "Unknown field number " << field_number;
263 // continue;
264 // }
265 // model_types.Put(model_type);
266 // }
267 SYNC_EXPORT ModelType GetModelTypeFromSpecificsFieldNumber(int field_number);
268
269 // Return the field number of the EntitySpecifics field associated with
270 // a model type.
271 SYNC_EXPORT int GetSpecificsFieldNumberFromModelType(
272 ModelType model_type);
273
274 FullModelTypeSet ToFullModelTypeSet(ModelTypeSet in);
275
276 // TODO(sync): The functions below badly need some cleanup.
277
278 // Returns a pointer to a string with application lifetime that represents
279 // the name of |model_type|.
280 SYNC_EXPORT const char* ModelTypeToString(ModelType model_type);
281
282 // Some histograms take an integer parameter that represents a model type.
283 // The mapping from ModelType to integer is defined here. It should match
284 // the mapping from integer to labels defined in histograms.xml.
285 SYNC_EXPORT int ModelTypeToHistogramInt(ModelType model_type);
286
287 // Handles all model types, and not just real ones.
288 //
289 // Caller takes ownership of returned value.
290 SYNC_EXPORT base::StringValue* ModelTypeToValue(ModelType model_type);
291
292 // Converts a Value into a ModelType - complement to ModelTypeToValue().
293 SYNC_EXPORT ModelType ModelTypeFromValue(const base::Value& value);
294
295 // Returns the ModelType corresponding to the name |model_type_string|.
296 SYNC_EXPORT ModelType ModelTypeFromString(
297 const std::string& model_type_string);
298
299 // Returns the comma-separated string representation of |model_types|.
300 SYNC_EXPORT std::string ModelTypeSetToString(ModelTypeSet model_types);
301
302 // Necessary for compatibility with EXPECT_EQ and the like.
303 SYNC_EXPORT std::ostream& operator<<(std::ostream& out,
304 ModelTypeSet model_type_set);
305
306 // Returns the set of comma-separated model types from |model_type_string|.
307 SYNC_EXPORT ModelTypeSet ModelTypeSetFromString(
308 const std::string& model_type_string);
309
310 SYNC_EXPORT std::unique_ptr<base::ListValue> ModelTypeSetToValue(
311 ModelTypeSet model_types);
312
313 SYNC_EXPORT ModelTypeSet ModelTypeSetFromValue(const base::ListValue& value);
314
315 // Returns a string corresponding to the syncable tag for this datatype.
316 SYNC_EXPORT std::string ModelTypeToRootTag(ModelType type);
317
318 // Returns root_tag for |model_type| in ModelTypeInfo.
319 // Difference with ModelTypeToRootTag(), this just simply return toor_tag in
320 // ModelTypeInfo.
321 SYNC_EXPORT const char* GetModelTypeRootTag(ModelType model_type);
322
323 // Convert a real model type to a notification type (used for
324 // subscribing to server-issued notifications). Returns true iff
325 // |model_type| was a real model type and |notification_type| was
326 // filled in.
327 SYNC_EXPORT bool RealModelTypeToNotificationType(
328 ModelType model_type,
329 std::string* notification_type);
330
331 // Converts a notification type to a real model type. Returns true
332 // iff |notification_type| was the notification type of a real model
333 // type and |model_type| was filled in.
334 SYNC_EXPORT bool NotificationTypeToRealModelType(
335 const std::string& notification_type,
336 ModelType* model_type);
337
338 // Returns true if |model_type| is a real datatype
339 SYNC_EXPORT bool IsRealDataType(ModelType model_type);
340
341 // Returns true if |model_type| is a proxy type
342 SYNC_EXPORT bool IsProxyType(ModelType model_type);
343
344 // Returns true if |model_type| is an act-once type. Act once types drop
345 // entities after applying them. Drops are deletes that are not synced to other
346 // clients.
347 // TODO(haitaol): Make entries of act-once data types immutable.
348 SYNC_EXPORT bool IsActOnceDataType(ModelType model_type);
349
350 // Returns true if |model_type| requires its root folder to be explicitly
351 // created on the server during initial sync.
352 SYNC_EXPORT bool IsTypeWithServerGeneratedRoot(ModelType model_type);
353
354 // Returns true if root folder for |model_type| is created on the client when
355 // that type is initially synced.
356 SYNC_EXPORT bool IsTypeWithClientGeneratedRoot(ModelType model_type);
357
358 // Returns true if |model_type| supports parent-child hierarchy or entries.
359 SYNC_EXPORT bool TypeSupportsHierarchy(ModelType model_type);
360
361 // Returns true if |model_type| supports ordering of sibling entries.
362 SYNC_EXPORT bool TypeSupportsOrdering(ModelType model_type);
363
364 } // namespace syncer
365
366 #endif // SYNC_INTERNAL_API_PUBLIC_BASE_MODEL_TYPE_H_
OLDNEW
« no previous file with comments | « sync/internal_api/public/base/invalidation_interface.cc ('k') | sync/internal_api/public/base/model_type_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698