OLD | NEW |
| (Empty) |
1 // Copyright (c) 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 // Keep this file in sync with the .proto files in this directory. | |
6 | |
7 #include "sync/protocol/proto_value_conversions.h" | |
8 | |
9 #include <stdint.h> | |
10 | |
11 #include <algorithm> | |
12 #include <string> | |
13 | |
14 #include "base/base64.h" | |
15 #include "base/i18n/time_formatting.h" | |
16 #include "base/logging.h" | |
17 #include "base/memory/ptr_util.h" | |
18 #include "base/strings/string_number_conversions.h" | |
19 #include "base/time/time.h" | |
20 #include "base/values.h" | |
21 #include "sync/internal_api/public/base/unique_position.h" | |
22 #include "sync/protocol/app_list_specifics.pb.h" | |
23 #include "sync/protocol/app_notification_specifics.pb.h" | |
24 #include "sync/protocol/app_setting_specifics.pb.h" | |
25 #include "sync/protocol/app_specifics.pb.h" | |
26 #include "sync/protocol/arc_package_specifics.pb.h" | |
27 #include "sync/protocol/autofill_specifics.pb.h" | |
28 #include "sync/protocol/bookmark_specifics.pb.h" | |
29 #include "sync/protocol/dictionary_specifics.pb.h" | |
30 #include "sync/protocol/encryption.pb.h" | |
31 #include "sync/protocol/experiments_specifics.pb.h" | |
32 #include "sync/protocol/extension_setting_specifics.pb.h" | |
33 #include "sync/protocol/extension_specifics.pb.h" | |
34 #include "sync/protocol/favicon_image_specifics.pb.h" | |
35 #include "sync/protocol/favicon_tracking_specifics.pb.h" | |
36 #include "sync/protocol/history_delete_directive_specifics.pb.h" | |
37 #include "sync/protocol/nigori_specifics.pb.h" | |
38 #include "sync/protocol/password_specifics.pb.h" | |
39 #include "sync/protocol/preference_specifics.pb.h" | |
40 #include "sync/protocol/priority_preference_specifics.pb.h" | |
41 #include "sync/protocol/proto_enum_conversions.h" | |
42 #include "sync/protocol/search_engine_specifics.pb.h" | |
43 #include "sync/protocol/session_specifics.pb.h" | |
44 #include "sync/protocol/sync.pb.h" | |
45 #include "sync/protocol/theme_specifics.pb.h" | |
46 #include "sync/protocol/typed_url_specifics.pb.h" | |
47 #include "sync/protocol/unique_position.pb.h" | |
48 #include "sync/util/time.h" | |
49 | |
50 namespace syncer { | |
51 | |
52 namespace { | |
53 | |
54 // Basic Type -> Value functions. | |
55 | |
56 std::unique_ptr<base::StringValue> MakeInt64Value(int64_t x) { | |
57 return base::WrapUnique(new base::StringValue(base::Int64ToString(x))); | |
58 } | |
59 | |
60 // TODO(akalin): Perhaps make JSONWriter support BinaryValue and use | |
61 // that instead of a StringValue. | |
62 std::string Base64EncodeString(const std::string& bytes) { | |
63 std::string bytes_base64; | |
64 base::Base64Encode(bytes, &bytes_base64); | |
65 return bytes_base64; | |
66 } | |
67 | |
68 std::unique_ptr<base::StringValue> MakeStringValue(const std::string& str) { | |
69 return base::WrapUnique(new base::StringValue(str)); | |
70 } | |
71 | |
72 // T is the field type, F is either RepeatedField or RepeatedPtrField, | |
73 // and V is a subclass of Value. | |
74 template <class T, class F, class V> | |
75 std::unique_ptr<base::ListValue> MakeRepeatedValue(const F& fields, | |
76 V (*converter_fn)(T)) { | |
77 std::unique_ptr<base::ListValue> list(new base::ListValue()); | |
78 for (typename F::const_iterator it = fields.begin(); it != fields.end(); | |
79 ++it) { | |
80 list->Append(converter_fn(*it)); | |
81 } | |
82 return list; | |
83 } | |
84 | |
85 } // namespace | |
86 | |
87 // Helper macros to reduce the amount of boilerplate. | |
88 | |
89 #define SET_TYPE(field, set_fn, transform) \ | |
90 if (proto.has_##field()) { \ | |
91 value->set_fn(#field, transform(proto.field())); \ | |
92 } | |
93 #define SET(field, fn) SET_TYPE(field, Set, fn) | |
94 #define SET_REP(field, fn) \ | |
95 value->Set(#field, MakeRepeatedValue(proto.field(), fn)) | |
96 #define SET_ENUM(field, fn) SET_TYPE(field, SetString, fn) | |
97 | |
98 #define SET_BOOL(field) SET_TYPE(field, SetBoolean, ) | |
99 #define SET_BYTES(field) SET_TYPE(field, SetString, Base64EncodeString) | |
100 #define SET_INT32(field) SET_TYPE(field, SetString, base::Int64ToString) | |
101 #define SET_INT32_REP(field) SET_REP(field, MakeInt64Value) | |
102 #define SET_INT64(field) SET_TYPE(field, SetString, base::Int64ToString) | |
103 #define SET_INT64_REP(field) SET_REP(field, MakeInt64Value) | |
104 #define SET_STR(field) SET_TYPE(field, SetString, ) | |
105 #define SET_TIME_STR(field) SET_TYPE(field, SetString, TimestampToString) | |
106 #define SET_STR_REP(field) \ | |
107 value->Set( \ | |
108 #field, \ | |
109 MakeRepeatedValue<const std::string&, \ | |
110 google::protobuf::RepeatedPtrField<std::string>, \ | |
111 std::unique_ptr<base::StringValue>>(proto.field(), \ | |
112 MakeStringValue)) | |
113 #define SET_EXPERIMENT_ENABLED_FIELD(field) \ | |
114 do { \ | |
115 if (proto.has_##field() && \ | |
116 proto.field().has_enabled()) { \ | |
117 value->Set(#field, \ | |
118 new base::FundamentalValue( \ | |
119 proto.field().enabled())); \ | |
120 } \ | |
121 } while (0) | |
122 | |
123 #define SET_FIELD(field, fn) \ | |
124 do { \ | |
125 if (specifics.has_##field()) { \ | |
126 value->Set(#field, fn(specifics.field())); \ | |
127 } \ | |
128 } while (0) | |
129 | |
130 // If you add another macro, don't forget to add an #undef at the end | |
131 // of this file, too. | |
132 | |
133 std::unique_ptr<base::DictionaryValue> EncryptedDataToValue( | |
134 const sync_pb::EncryptedData& proto) { | |
135 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
136 SET_STR(key_name); | |
137 // TODO(akalin): Shouldn't blob be of type bytes instead of string? | |
138 SET_BYTES(blob); | |
139 return value; | |
140 } | |
141 | |
142 std::unique_ptr<base::DictionaryValue> AppSettingsToValue( | |
143 const sync_pb::AppNotificationSettings& proto) { | |
144 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
145 SET_BOOL(initial_setup_done); | |
146 SET_BOOL(disabled); | |
147 SET_STR(oauth_client_id); | |
148 return value; | |
149 } | |
150 | |
151 std::unique_ptr<base::DictionaryValue> SessionHeaderToValue( | |
152 const sync_pb::SessionHeader& proto) { | |
153 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
154 SET_REP(window, SessionWindowToValue); | |
155 SET_STR(client_name); | |
156 SET_ENUM(device_type, GetDeviceTypeString); | |
157 return value; | |
158 } | |
159 | |
160 std::unique_ptr<base::DictionaryValue> SessionTabToValue( | |
161 const sync_pb::SessionTab& proto) { | |
162 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
163 SET_INT32(tab_id); | |
164 SET_INT32(window_id); | |
165 SET_INT32(tab_visual_index); | |
166 SET_INT32(current_navigation_index); | |
167 SET_BOOL(pinned); | |
168 SET_STR(extension_app_id); | |
169 SET_REP(navigation, TabNavigationToValue); | |
170 SET_BYTES(favicon); | |
171 SET_ENUM(favicon_type, GetFaviconTypeString); | |
172 SET_STR(favicon_source); | |
173 SET_REP(variation_id, MakeInt64Value); | |
174 return value; | |
175 } | |
176 | |
177 std::unique_ptr<base::DictionaryValue> SessionWindowToValue( | |
178 const sync_pb::SessionWindow& proto) { | |
179 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
180 SET_INT32(window_id); | |
181 SET_INT32(selected_tab_index); | |
182 SET_INT32_REP(tab); | |
183 SET_ENUM(browser_type, GetBrowserTypeString); | |
184 return value; | |
185 } | |
186 | |
187 std::unique_ptr<base::DictionaryValue> TabNavigationToValue( | |
188 const sync_pb::TabNavigation& proto) { | |
189 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
190 SET_STR(virtual_url); | |
191 SET_STR(referrer); | |
192 SET_STR(title); | |
193 SET_ENUM(page_transition, GetPageTransitionString); | |
194 SET_ENUM(redirect_type, GetPageTransitionRedirectTypeString); | |
195 SET_INT32(unique_id); | |
196 SET_INT64(timestamp_msec); | |
197 SET_BOOL(navigation_forward_back); | |
198 SET_BOOL(navigation_from_address_bar); | |
199 SET_BOOL(navigation_home_page); | |
200 SET_BOOL(navigation_chain_start); | |
201 SET_BOOL(navigation_chain_end); | |
202 SET_INT64(global_id); | |
203 SET_STR(search_terms); | |
204 SET_STR(favicon_url); | |
205 SET_ENUM(blocked_state, GetBlockedStateString); | |
206 SET_STR_REP(content_pack_categories); | |
207 SET_INT32(http_status_code); | |
208 SET_INT32(obsolete_referrer_policy); | |
209 SET_BOOL(is_restored); | |
210 SET_REP(navigation_redirect, NavigationRedirectToValue); | |
211 SET_STR(last_navigation_redirect_url); | |
212 SET_INT32(correct_referrer_policy); | |
213 return value; | |
214 } | |
215 | |
216 std::unique_ptr<base::DictionaryValue> NavigationRedirectToValue( | |
217 const sync_pb::NavigationRedirect& proto) { | |
218 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
219 SET_STR(url); | |
220 return value; | |
221 } | |
222 | |
223 std::unique_ptr<base::DictionaryValue> PasswordSpecificsDataToValue( | |
224 const sync_pb::PasswordSpecificsData& proto) { | |
225 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
226 SET_INT32(scheme); | |
227 SET_STR(signon_realm); | |
228 SET_STR(origin); | |
229 SET_STR(action); | |
230 SET_STR(username_element); | |
231 SET_STR(username_value); | |
232 SET_STR(password_element); | |
233 value->SetString("password_value", "<redacted>"); | |
234 SET_BOOL(preferred); | |
235 SET_INT64(date_created); | |
236 SET_BOOL(blacklisted); | |
237 SET_INT32(type); | |
238 SET_INT32(times_used); | |
239 SET_STR(display_name); | |
240 SET_STR(avatar_url); | |
241 SET_STR(federation_url); | |
242 return value; | |
243 } | |
244 | |
245 std::unique_ptr<base::DictionaryValue> GlobalIdDirectiveToValue( | |
246 const sync_pb::GlobalIdDirective& proto) { | |
247 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
248 SET_INT64_REP(global_id); | |
249 SET_INT64(start_time_usec); | |
250 SET_INT64(end_time_usec); | |
251 return value; | |
252 } | |
253 | |
254 std::unique_ptr<base::DictionaryValue> TimeRangeDirectiveToValue( | |
255 const sync_pb::TimeRangeDirective& proto) { | |
256 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
257 SET_INT64(start_time_usec); | |
258 SET_INT64(end_time_usec); | |
259 return value; | |
260 } | |
261 | |
262 std::unique_ptr<base::DictionaryValue> AppListSpecificsToValue( | |
263 const sync_pb::AppListSpecifics& proto) { | |
264 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
265 SET_STR(item_id); | |
266 SET_ENUM(item_type, GetAppListItemTypeString); | |
267 SET_STR(item_name); | |
268 SET_STR(parent_id); | |
269 SET_STR(item_ordinal); | |
270 SET_STR(item_pin_ordinal); | |
271 | |
272 return value; | |
273 } | |
274 | |
275 std::unique_ptr<base::DictionaryValue> ArcPackageSpecificsToValue( | |
276 const sync_pb::ArcPackageSpecifics& proto) { | |
277 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
278 SET_STR(package_name); | |
279 SET_INT32(package_version); | |
280 SET_INT64(last_backup_android_id); | |
281 SET_INT64(last_backup_time); | |
282 | |
283 return value; | |
284 } | |
285 | |
286 std::unique_ptr<base::DictionaryValue> AppNotificationToValue( | |
287 const sync_pb::AppNotification& proto) { | |
288 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
289 SET_STR(guid); | |
290 SET_STR(app_id); | |
291 SET_INT64(creation_timestamp_ms); | |
292 SET_STR(title); | |
293 SET_STR(body_text); | |
294 SET_STR(link_url); | |
295 SET_STR(link_text); | |
296 return value; | |
297 } | |
298 | |
299 std::unique_ptr<base::DictionaryValue> AppSettingSpecificsToValue( | |
300 const sync_pb::AppSettingSpecifics& proto) { | |
301 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
302 SET(extension_setting, ExtensionSettingSpecificsToValue); | |
303 return value; | |
304 } | |
305 | |
306 std::unique_ptr<base::DictionaryValue> LinkedAppIconInfoToValue( | |
307 const sync_pb::LinkedAppIconInfo& proto) { | |
308 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
309 SET_STR(url); | |
310 SET_INT32(size); | |
311 return value; | |
312 } | |
313 | |
314 std::unique_ptr<base::DictionaryValue> AppSpecificsToValue( | |
315 const sync_pb::AppSpecifics& proto) { | |
316 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
317 SET(extension, ExtensionSpecificsToValue); | |
318 SET(notification_settings, AppSettingsToValue); | |
319 SET_STR(app_launch_ordinal); | |
320 SET_STR(page_ordinal); | |
321 SET_ENUM(launch_type, GetLaunchTypeString); | |
322 SET_STR(bookmark_app_url); | |
323 SET_STR(bookmark_app_description); | |
324 SET_STR(bookmark_app_icon_color); | |
325 SET_REP(linked_app_icons, LinkedAppIconInfoToValue); | |
326 | |
327 return value; | |
328 } | |
329 | |
330 std::unique_ptr<base::DictionaryValue> AutofillSpecificsToValue( | |
331 const sync_pb::AutofillSpecifics& proto) { | |
332 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
333 SET_STR(name); | |
334 SET_STR(value); | |
335 SET_INT64_REP(usage_timestamp); | |
336 SET(profile, AutofillProfileSpecificsToValue); | |
337 return value; | |
338 } | |
339 | |
340 std::unique_ptr<base::DictionaryValue> AutofillProfileSpecificsToValue( | |
341 const sync_pb::AutofillProfileSpecifics& proto) { | |
342 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
343 SET_STR(guid); | |
344 SET_STR(origin); | |
345 SET_INT64(use_count); | |
346 SET_INT64(use_date); | |
347 | |
348 SET_STR_REP(name_first); | |
349 SET_STR_REP(name_middle); | |
350 SET_STR_REP(name_last); | |
351 SET_STR_REP(name_full); | |
352 SET_STR_REP(email_address); | |
353 SET_STR(company_name); | |
354 | |
355 SET_STR(address_home_line1); | |
356 SET_STR(address_home_line2); | |
357 SET_STR(address_home_city); | |
358 SET_STR(address_home_state); | |
359 SET_STR(address_home_zip); | |
360 SET_STR(address_home_country); | |
361 | |
362 SET_STR(address_home_street_address); | |
363 SET_STR(address_home_sorting_code); | |
364 SET_STR(address_home_dependent_locality); | |
365 SET_STR(address_home_language_code); | |
366 | |
367 SET_STR_REP(phone_home_whole_number); | |
368 return value; | |
369 } | |
370 | |
371 std::unique_ptr<base::DictionaryValue> WalletMetadataSpecificsToValue( | |
372 const sync_pb::WalletMetadataSpecifics& proto) { | |
373 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
374 SET_ENUM(type, GetWalletMetadataTypeString); | |
375 SET_STR(id); | |
376 SET_INT64(use_count); | |
377 SET_INT64(use_date); | |
378 return value; | |
379 } | |
380 | |
381 std::unique_ptr<base::DictionaryValue> AutofillWalletSpecificsToValue( | |
382 const sync_pb::AutofillWalletSpecifics& proto) { | |
383 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
384 | |
385 SET_ENUM(type, GetWalletInfoTypeString); | |
386 if (proto.type() == sync_pb::AutofillWalletSpecifics::MASKED_CREDIT_CARD) { | |
387 value->Set("masked_card", | |
388 WalletMaskedCreditCardToValue(proto.masked_card())); | |
389 } else if (proto.type() == sync_pb::AutofillWalletSpecifics::POSTAL_ADDRESS) { | |
390 value->Set("address", | |
391 WalletPostalAddressToValue(proto.address())); | |
392 } | |
393 return value; | |
394 } | |
395 | |
396 std::unique_ptr<base::DictionaryValue> MetaInfoToValue( | |
397 const sync_pb::MetaInfo& proto) { | |
398 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
399 SET_STR(key); | |
400 SET_STR(value); | |
401 return value; | |
402 } | |
403 | |
404 std::unique_ptr<base::DictionaryValue> BookmarkSpecificsToValue( | |
405 const sync_pb::BookmarkSpecifics& proto) { | |
406 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
407 SET_STR(url); | |
408 SET_BYTES(favicon); | |
409 SET_STR(title); | |
410 SET_INT64(creation_time_us); | |
411 SET_STR(icon_url); | |
412 SET_REP(meta_info, &MetaInfoToValue); | |
413 return value; | |
414 } | |
415 | |
416 std::unique_ptr<base::DictionaryValue> DeviceInfoSpecificsToValue( | |
417 const sync_pb::DeviceInfoSpecifics& proto) { | |
418 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
419 SET_STR(cache_guid); | |
420 SET_STR(client_name); | |
421 SET_ENUM(device_type, GetDeviceTypeString); | |
422 SET_STR(sync_user_agent); | |
423 SET_STR(chrome_version); | |
424 SET_STR(signin_scoped_device_id); | |
425 return value; | |
426 } | |
427 | |
428 std::unique_ptr<base::DictionaryValue> DictionarySpecificsToValue( | |
429 const sync_pb::DictionarySpecifics& proto) { | |
430 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
431 SET_STR(word); | |
432 return value; | |
433 } | |
434 | |
435 namespace { | |
436 | |
437 std::unique_ptr<base::DictionaryValue> FaviconSyncFlagsToValue( | |
438 const sync_pb::FaviconSyncFlags& proto) { | |
439 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
440 SET_BOOL(enabled); | |
441 SET_INT32(favicon_sync_limit); | |
442 return value; | |
443 } | |
444 | |
445 } // namespace | |
446 | |
447 std::unique_ptr<base::DictionaryValue> ExperimentsSpecificsToValue( | |
448 const sync_pb::ExperimentsSpecifics& proto) { | |
449 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
450 SET_EXPERIMENT_ENABLED_FIELD(keystore_encryption); | |
451 SET_EXPERIMENT_ENABLED_FIELD(history_delete_directives); | |
452 SET_EXPERIMENT_ENABLED_FIELD(autofill_culling); | |
453 SET_EXPERIMENT_ENABLED_FIELD(pre_commit_update_avoidance); | |
454 SET(favicon_sync, FaviconSyncFlagsToValue); | |
455 SET_EXPERIMENT_ENABLED_FIELD(gcm_channel); | |
456 SET_EXPERIMENT_ENABLED_FIELD(gcm_invalidations); | |
457 return value; | |
458 } | |
459 | |
460 std::unique_ptr<base::DictionaryValue> ExtensionSettingSpecificsToValue( | |
461 const sync_pb::ExtensionSettingSpecifics& proto) { | |
462 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
463 SET_STR(extension_id); | |
464 SET_STR(key); | |
465 SET_STR(value); | |
466 return value; | |
467 } | |
468 | |
469 std::unique_ptr<base::DictionaryValue> ExtensionSpecificsToValue( | |
470 const sync_pb::ExtensionSpecifics& proto) { | |
471 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
472 SET_STR(id); | |
473 SET_STR(version); | |
474 SET_STR(update_url); | |
475 SET_BOOL(enabled); | |
476 SET_BOOL(incognito_enabled); | |
477 SET_STR(name); | |
478 SET_BOOL(remote_install); | |
479 SET_BOOL(installed_by_custodian); | |
480 SET_BOOL(all_urls_enabled); | |
481 SET_INT32(disable_reasons); | |
482 return value; | |
483 } | |
484 | |
485 namespace { | |
486 std::unique_ptr<base::DictionaryValue> FaviconDataToValue( | |
487 const sync_pb::FaviconData& proto) { | |
488 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
489 SET_BYTES(favicon); | |
490 SET_INT32(width); | |
491 SET_INT32(height); | |
492 return value; | |
493 } | |
494 } // namespace | |
495 | |
496 std::unique_ptr<base::DictionaryValue> FaviconImageSpecificsToValue( | |
497 const sync_pb::FaviconImageSpecifics& proto) { | |
498 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
499 SET_STR(favicon_url); | |
500 SET(favicon_web, FaviconDataToValue); | |
501 SET(favicon_web_32, FaviconDataToValue); | |
502 SET(favicon_touch_64, FaviconDataToValue); | |
503 SET(favicon_touch_precomposed_64, FaviconDataToValue); | |
504 return value; | |
505 } | |
506 | |
507 std::unique_ptr<base::DictionaryValue> FaviconTrackingSpecificsToValue( | |
508 const sync_pb::FaviconTrackingSpecifics& proto) { | |
509 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
510 SET_STR(favicon_url); | |
511 SET_INT64(last_visit_time_ms) | |
512 SET_BOOL(is_bookmarked); | |
513 return value; | |
514 } | |
515 | |
516 std::unique_ptr<base::DictionaryValue> HistoryDeleteDirectiveSpecificsToValue( | |
517 const sync_pb::HistoryDeleteDirectiveSpecifics& proto) { | |
518 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
519 SET(global_id_directive, GlobalIdDirectiveToValue); | |
520 SET(time_range_directive, TimeRangeDirectiveToValue); | |
521 return value; | |
522 } | |
523 | |
524 std::unique_ptr<base::DictionaryValue> ManagedUserSettingSpecificsToValue( | |
525 const sync_pb::ManagedUserSettingSpecifics& proto) { | |
526 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
527 SET_STR(name); | |
528 SET_STR(value); | |
529 return value; | |
530 } | |
531 | |
532 std::unique_ptr<base::DictionaryValue> ManagedUserSpecificsToValue( | |
533 const sync_pb::ManagedUserSpecifics& proto) { | |
534 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
535 SET_STR(id); | |
536 SET_STR(name); | |
537 SET_BOOL(acknowledged); | |
538 SET_STR(master_key); | |
539 SET_STR(chrome_avatar); | |
540 SET_STR(chromeos_avatar); | |
541 return value; | |
542 } | |
543 | |
544 std::unique_ptr<base::DictionaryValue> ManagedUserSharedSettingSpecificsToValue( | |
545 const sync_pb::ManagedUserSharedSettingSpecifics& proto) { | |
546 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
547 SET_STR(mu_id); | |
548 SET_STR(key); | |
549 SET_STR(value); | |
550 SET_BOOL(acknowledged); | |
551 return value; | |
552 } | |
553 | |
554 std::unique_ptr<base::DictionaryValue> ManagedUserWhitelistSpecificsToValue( | |
555 const sync_pb::ManagedUserWhitelistSpecifics& proto) { | |
556 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
557 SET_STR(id); | |
558 SET_STR(name); | |
559 return value; | |
560 } | |
561 | |
562 std::unique_ptr<base::DictionaryValue> NigoriSpecificsToValue( | |
563 const sync_pb::NigoriSpecifics& proto) { | |
564 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
565 SET(encryption_keybag, EncryptedDataToValue); | |
566 SET_BOOL(keybag_is_frozen); | |
567 SET_BOOL(encrypt_bookmarks); | |
568 SET_BOOL(encrypt_preferences); | |
569 SET_BOOL(encrypt_autofill_profile); | |
570 SET_BOOL(encrypt_autofill); | |
571 SET_BOOL(encrypt_themes); | |
572 SET_BOOL(encrypt_typed_urls); | |
573 SET_BOOL(encrypt_extension_settings); | |
574 SET_BOOL(encrypt_extensions); | |
575 SET_BOOL(encrypt_sessions); | |
576 SET_BOOL(encrypt_app_settings); | |
577 SET_BOOL(encrypt_apps); | |
578 SET_BOOL(encrypt_search_engines); | |
579 SET_BOOL(encrypt_dictionary); | |
580 SET_BOOL(encrypt_articles); | |
581 SET_BOOL(encrypt_app_list); | |
582 SET_BOOL(encrypt_arc_package); | |
583 SET_BOOL(encrypt_everything); | |
584 SET_BOOL(server_only_was_missing_keystore_migration_time); | |
585 SET_BOOL(sync_tab_favicons); | |
586 SET_ENUM(passphrase_type, PassphraseTypeString); | |
587 SET(keystore_decryptor_token, EncryptedDataToValue); | |
588 SET_INT64(keystore_migration_time); | |
589 SET_INT64(custom_passphrase_time); | |
590 return value; | |
591 } | |
592 | |
593 std::unique_ptr<base::DictionaryValue> ArticlePageToValue( | |
594 const sync_pb::ArticlePage& proto) { | |
595 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
596 SET_STR(url); | |
597 return value; | |
598 } | |
599 | |
600 std::unique_ptr<base::DictionaryValue> ArticleSpecificsToValue( | |
601 const sync_pb::ArticleSpecifics& proto) { | |
602 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
603 SET_STR(entry_id); | |
604 SET_STR(title); | |
605 SET_REP(pages, ArticlePageToValue); | |
606 return value; | |
607 } | |
608 | |
609 std::unique_ptr<base::DictionaryValue> PasswordSpecificsToValue( | |
610 const sync_pb::PasswordSpecifics& proto) { | |
611 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
612 SET(encrypted, EncryptedDataToValue); | |
613 return value; | |
614 } | |
615 | |
616 std::unique_ptr<base::DictionaryValue> PreferenceSpecificsToValue( | |
617 const sync_pb::PreferenceSpecifics& proto) { | |
618 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
619 SET_STR(name); | |
620 SET_STR(value); | |
621 return value; | |
622 } | |
623 | |
624 std::unique_ptr<base::DictionaryValue> PriorityPreferenceSpecificsToValue( | |
625 const sync_pb::PriorityPreferenceSpecifics& specifics) { | |
626 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
627 SET_FIELD(preference, PreferenceSpecificsToValue); | |
628 return value; | |
629 } | |
630 | |
631 std::unique_ptr<base::DictionaryValue> | |
632 SyncedNotificationAppInfoSpecificsToValue( | |
633 const sync_pb::SyncedNotificationAppInfoSpecifics& proto) { | |
634 return base::WrapUnique(new base::DictionaryValue()); | |
635 } | |
636 | |
637 std::unique_ptr<base::DictionaryValue> SyncedNotificationSpecificsToValue( | |
638 const sync_pb::SyncedNotificationSpecifics& proto) { | |
639 return base::WrapUnique(new base::DictionaryValue()); | |
640 } | |
641 | |
642 std::unique_ptr<base::DictionaryValue> SearchEngineSpecificsToValue( | |
643 const sync_pb::SearchEngineSpecifics& proto) { | |
644 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
645 SET_STR(short_name); | |
646 SET_STR(keyword); | |
647 SET_STR(favicon_url); | |
648 SET_STR(url); | |
649 SET_BOOL(safe_for_autoreplace); | |
650 SET_STR(originating_url); | |
651 SET_INT64(date_created); | |
652 SET_STR(input_encodings); | |
653 SET_BOOL(show_in_default_list); | |
654 SET_STR(suggestions_url); | |
655 SET_INT32(prepopulate_id); | |
656 SET_BOOL(autogenerate_keyword); | |
657 SET_STR(instant_url); | |
658 SET_INT64(last_modified); | |
659 SET_STR(sync_guid); | |
660 SET_STR_REP(alternate_urls); | |
661 SET_STR(search_terms_replacement_key); | |
662 SET_STR(image_url); | |
663 SET_STR(search_url_post_params); | |
664 SET_STR(suggestions_url_post_params); | |
665 SET_STR(instant_url_post_params); | |
666 SET_STR(image_url_post_params); | |
667 SET_STR(new_tab_url); | |
668 return value; | |
669 } | |
670 | |
671 std::unique_ptr<base::DictionaryValue> SessionSpecificsToValue( | |
672 const sync_pb::SessionSpecifics& proto) { | |
673 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
674 SET_STR(session_tag); | |
675 SET(header, SessionHeaderToValue); | |
676 SET(tab, SessionTabToValue); | |
677 SET_INT32(tab_node_id); | |
678 return value; | |
679 } | |
680 | |
681 std::unique_ptr<base::DictionaryValue> ThemeSpecificsToValue( | |
682 const sync_pb::ThemeSpecifics& proto) { | |
683 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
684 SET_BOOL(use_custom_theme); | |
685 SET_BOOL(use_system_theme_by_default); | |
686 SET_STR(custom_theme_name); | |
687 SET_STR(custom_theme_id); | |
688 SET_STR(custom_theme_update_url); | |
689 return value; | |
690 } | |
691 | |
692 std::unique_ptr<base::DictionaryValue> TypedUrlSpecificsToValue( | |
693 const sync_pb::TypedUrlSpecifics& proto) { | |
694 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
695 SET_STR(url); | |
696 SET_STR(title); | |
697 SET_BOOL(hidden); | |
698 SET_INT64_REP(visits); | |
699 SET_INT32_REP(visit_transitions); | |
700 return value; | |
701 } | |
702 | |
703 std::unique_ptr<base::DictionaryValue> WalletMaskedCreditCardToValue( | |
704 const sync_pb::WalletMaskedCreditCard& proto) { | |
705 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
706 SET_STR(id); | |
707 SET_ENUM(status, GetWalletCardStatusString); | |
708 SET_STR(name_on_card); | |
709 SET_ENUM(type, GetWalletCardTypeString); | |
710 SET_STR(last_four); | |
711 SET_INT32(exp_month); | |
712 SET_INT32(exp_year); | |
713 SET_STR(billing_address_id); | |
714 return value; | |
715 } | |
716 | |
717 std::unique_ptr<base::DictionaryValue> WalletPostalAddressToValue( | |
718 const sync_pb::WalletPostalAddress& proto) { | |
719 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
720 SET_STR(id); | |
721 SET_STR(recipient_name); | |
722 SET_STR(company_name); | |
723 SET_STR_REP(street_address); | |
724 SET_STR(address_1); | |
725 SET_STR(address_2); | |
726 SET_STR(address_3); | |
727 SET_STR(address_4); | |
728 SET_STR(postal_code); | |
729 SET_STR(sorting_code); | |
730 SET_STR(country_code); | |
731 SET_STR(phone_number); | |
732 SET_STR(language_code); | |
733 return value; | |
734 } | |
735 | |
736 std::unique_ptr<base::DictionaryValue> WifiCredentialSpecificsToValue( | |
737 const sync_pb::WifiCredentialSpecifics& proto) { | |
738 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
739 SET_BYTES(ssid); | |
740 SET_ENUM(security_class, GetWifiCredentialSecurityClassString); | |
741 SET_BYTES(passphrase); | |
742 return value; | |
743 } | |
744 | |
745 std::unique_ptr<base::DictionaryValue> EntitySpecificsToValue( | |
746 const sync_pb::EntitySpecifics& specifics) { | |
747 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
748 SET_FIELD(app, AppSpecificsToValue); | |
749 SET_FIELD(app_list, AppListSpecificsToValue); | |
750 SET_FIELD(app_notification, AppNotificationToValue); | |
751 SET_FIELD(app_setting, AppSettingSpecificsToValue); | |
752 SET_FIELD(arc_package, ArcPackageSpecificsToValue); | |
753 SET_FIELD(article, ArticleSpecificsToValue); | |
754 SET_FIELD(autofill, AutofillSpecificsToValue); | |
755 SET_FIELD(autofill_profile, AutofillProfileSpecificsToValue); | |
756 SET_FIELD(autofill_wallet, AutofillWalletSpecificsToValue); | |
757 SET_FIELD(wallet_metadata, WalletMetadataSpecificsToValue); | |
758 SET_FIELD(bookmark, BookmarkSpecificsToValue); | |
759 SET_FIELD(device_info, DeviceInfoSpecificsToValue); | |
760 SET_FIELD(dictionary, DictionarySpecificsToValue); | |
761 SET_FIELD(experiments, ExperimentsSpecificsToValue); | |
762 SET_FIELD(extension, ExtensionSpecificsToValue); | |
763 SET_FIELD(extension_setting, ExtensionSettingSpecificsToValue); | |
764 SET_FIELD(favicon_image, FaviconImageSpecificsToValue); | |
765 SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue); | |
766 SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue); | |
767 SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue); | |
768 SET_FIELD(managed_user_shared_setting, | |
769 ManagedUserSharedSettingSpecificsToValue); | |
770 SET_FIELD(managed_user, ManagedUserSpecificsToValue); | |
771 SET_FIELD(managed_user_whitelist, ManagedUserWhitelistSpecificsToValue); | |
772 SET_FIELD(nigori, NigoriSpecificsToValue); | |
773 SET_FIELD(password, PasswordSpecificsToValue); | |
774 SET_FIELD(preference, PreferenceSpecificsToValue); | |
775 SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue); | |
776 SET_FIELD(search_engine, SearchEngineSpecificsToValue); | |
777 SET_FIELD(session, SessionSpecificsToValue); | |
778 SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue); | |
779 SET_FIELD(synced_notification_app_info, | |
780 SyncedNotificationAppInfoSpecificsToValue); | |
781 SET_FIELD(theme, ThemeSpecificsToValue); | |
782 SET_FIELD(typed_url, TypedUrlSpecificsToValue); | |
783 SET_FIELD(wifi_credential, WifiCredentialSpecificsToValue); | |
784 return value; | |
785 } | |
786 | |
787 namespace { | |
788 | |
789 base::StringValue* UniquePositionToStringValue( | |
790 const sync_pb::UniquePosition& proto) { | |
791 UniquePosition pos = UniquePosition::FromProto(proto); | |
792 return new base::StringValue(pos.ToDebugString()); | |
793 } | |
794 | |
795 } // namespace | |
796 | |
797 std::unique_ptr<base::DictionaryValue> SyncEntityToValue( | |
798 const sync_pb::SyncEntity& proto, | |
799 bool include_specifics) { | |
800 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
801 SET_STR(id_string); | |
802 SET_STR(parent_id_string); | |
803 SET_STR(old_parent_id); | |
804 SET_INT64(version); | |
805 SET_INT64(mtime); | |
806 SET_INT64(ctime); | |
807 SET_STR(name); | |
808 SET_STR(non_unique_name); | |
809 SET_INT64(sync_timestamp); | |
810 SET_STR(server_defined_unique_tag); | |
811 SET_INT64(position_in_parent); | |
812 SET(unique_position, UniquePositionToStringValue); | |
813 SET_STR(insert_after_item_id); | |
814 SET_BOOL(deleted); | |
815 SET_STR(originator_cache_guid); | |
816 SET_STR(originator_client_item_id); | |
817 if (include_specifics) | |
818 SET(specifics, EntitySpecificsToValue); | |
819 SET_BOOL(folder); | |
820 SET_STR(client_defined_unique_tag); | |
821 SET_REP(attachment_id, AttachmentIdProtoToValue); | |
822 return value; | |
823 } | |
824 | |
825 namespace { | |
826 | |
827 base::ListValue* SyncEntitiesToValue( | |
828 const ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities, | |
829 bool include_specifics) { | |
830 base::ListValue* list = new base::ListValue(); | |
831 ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it; | |
832 for (it = entities.begin(); it != entities.end(); ++it) { | |
833 list->Append(SyncEntityToValue(*it, include_specifics)); | |
834 } | |
835 | |
836 return list; | |
837 } | |
838 | |
839 std::unique_ptr<base::DictionaryValue> ChromiumExtensionActivityToValue( | |
840 const sync_pb::ChromiumExtensionsActivity& proto) { | |
841 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
842 SET_STR(extension_id); | |
843 SET_INT32(bookmark_writes_since_last_commit); | |
844 return value; | |
845 } | |
846 | |
847 std::unique_ptr<base::DictionaryValue> CommitMessageToValue( | |
848 const sync_pb::CommitMessage& proto, | |
849 bool include_specifics) { | |
850 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
851 value->Set("entries", | |
852 SyncEntitiesToValue(proto.entries(), include_specifics)); | |
853 SET_STR(cache_guid); | |
854 SET_REP(extensions_activity, ChromiumExtensionActivityToValue); | |
855 SET(config_params, ClientConfigParamsToValue); | |
856 return value; | |
857 } | |
858 | |
859 std::unique_ptr<base::DictionaryValue> GetUpdateTriggersToValue( | |
860 const sync_pb::GetUpdateTriggers& proto) { | |
861 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
862 SET_STR_REP(notification_hint); | |
863 SET_BOOL(client_dropped_hints); | |
864 SET_BOOL(invalidations_out_of_sync); | |
865 SET_INT64(local_modification_nudges); | |
866 SET_INT64(datatype_refresh_nudges); | |
867 return value; | |
868 } | |
869 | |
870 std::unique_ptr<base::DictionaryValue> DataTypeProgressMarkerToValue( | |
871 const sync_pb::DataTypeProgressMarker& proto) { | |
872 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
873 SET_INT32(data_type_id); | |
874 SET_BYTES(token); | |
875 SET_INT64(timestamp_token_for_migration); | |
876 SET_STR(notification_hint); | |
877 SET(get_update_triggers, GetUpdateTriggersToValue); | |
878 return value; | |
879 } | |
880 | |
881 std::unique_ptr<base::DictionaryValue> DataTypeContextToValue( | |
882 const sync_pb::DataTypeContext& proto) { | |
883 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
884 SET_INT32(data_type_id); | |
885 SET_STR(context); | |
886 SET_INT64(version); | |
887 return value; | |
888 } | |
889 | |
890 std::unique_ptr<base::DictionaryValue> GetUpdatesCallerInfoToValue( | |
891 const sync_pb::GetUpdatesCallerInfo& proto) { | |
892 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
893 SET_ENUM(source, GetUpdatesSourceString); | |
894 SET_BOOL(notifications_enabled); | |
895 return value; | |
896 } | |
897 | |
898 std::unique_ptr<base::DictionaryValue> GetUpdatesMessageToValue( | |
899 const sync_pb::GetUpdatesMessage& proto) { | |
900 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
901 SET(caller_info, GetUpdatesCallerInfoToValue); | |
902 SET_BOOL(fetch_folders); | |
903 SET_INT32(batch_size); | |
904 SET_REP(from_progress_marker, DataTypeProgressMarkerToValue); | |
905 SET_BOOL(streaming); | |
906 SET_BOOL(need_encryption_key); | |
907 SET_BOOL(create_mobile_bookmarks_folder); | |
908 SET_ENUM(get_updates_origin, GetUpdatesOriginString); | |
909 SET_REP(client_contexts, DataTypeContextToValue); | |
910 return value; | |
911 } | |
912 | |
913 std::unique_ptr<base::DictionaryValue> ClientStatusToValue( | |
914 const sync_pb::ClientStatus& proto) { | |
915 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
916 SET_BOOL(hierarchy_conflict_detected); | |
917 return value; | |
918 } | |
919 | |
920 std::unique_ptr<base::DictionaryValue> EntryResponseToValue( | |
921 const sync_pb::CommitResponse::EntryResponse& proto) { | |
922 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
923 SET_ENUM(response_type, GetResponseTypeString); | |
924 SET_STR(id_string); | |
925 SET_STR(parent_id_string); | |
926 SET_INT64(position_in_parent); | |
927 SET_INT64(version); | |
928 SET_STR(name); | |
929 SET_STR(error_message); | |
930 SET_INT64(mtime); | |
931 return value; | |
932 } | |
933 | |
934 std::unique_ptr<base::DictionaryValue> CommitResponseToValue( | |
935 const sync_pb::CommitResponse& proto) { | |
936 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
937 SET_REP(entryresponse, EntryResponseToValue); | |
938 return value; | |
939 } | |
940 | |
941 std::unique_ptr<base::DictionaryValue> GetUpdatesResponseToValue( | |
942 const sync_pb::GetUpdatesResponse& proto, | |
943 bool include_specifics) { | |
944 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
945 value->Set("entries", | |
946 SyncEntitiesToValue(proto.entries(), include_specifics)); | |
947 SET_INT64(changes_remaining); | |
948 SET_REP(new_progress_marker, DataTypeProgressMarkerToValue); | |
949 SET_REP(context_mutations, DataTypeContextToValue); | |
950 return value; | |
951 } | |
952 | |
953 std::unique_ptr<base::DictionaryValue> ClientCommandToValue( | |
954 const sync_pb::ClientCommand& proto) { | |
955 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
956 SET_INT32(set_sync_poll_interval); | |
957 SET_INT32(set_sync_long_poll_interval); | |
958 SET_INT32(max_commit_batch_size); | |
959 SET_INT32(sessions_commit_delay_seconds); | |
960 SET_INT32(throttle_delay_seconds); | |
961 SET_INT32(client_invalidation_hint_buffer_size); | |
962 return value; | |
963 } | |
964 | |
965 std::unique_ptr<base::DictionaryValue> ErrorToValue( | |
966 const sync_pb::ClientToServerResponse::Error& proto) { | |
967 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
968 SET_ENUM(error_type, GetErrorTypeString); | |
969 SET_STR(error_description); | |
970 SET_STR(url); | |
971 SET_ENUM(action, GetActionString); | |
972 return value; | |
973 } | |
974 | |
975 } // namespace | |
976 | |
977 std::unique_ptr<base::DictionaryValue> ClientToServerResponseToValue( | |
978 const sync_pb::ClientToServerResponse& proto, | |
979 bool include_specifics) { | |
980 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
981 SET(commit, CommitResponseToValue); | |
982 if (proto.has_get_updates()) { | |
983 value->Set("get_updates", GetUpdatesResponseToValue(proto.get_updates(), | |
984 include_specifics)); | |
985 } | |
986 | |
987 SET(error, ErrorToValue); | |
988 SET_ENUM(error_code, GetErrorTypeString); | |
989 SET_STR(error_message); | |
990 SET_STR(store_birthday); | |
991 SET(client_command, ClientCommandToValue); | |
992 SET_INT32_REP(migrated_data_type_id); | |
993 return value; | |
994 } | |
995 | |
996 std::unique_ptr<base::DictionaryValue> ClientToServerMessageToValue( | |
997 const sync_pb::ClientToServerMessage& proto, | |
998 bool include_specifics) { | |
999 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1000 SET_STR(share); | |
1001 SET_INT32(protocol_version); | |
1002 if (proto.has_commit()) { | |
1003 value->Set("commit", | |
1004 CommitMessageToValue(proto.commit(), include_specifics)); | |
1005 } | |
1006 | |
1007 SET(get_updates, GetUpdatesMessageToValue); | |
1008 SET_STR(store_birthday); | |
1009 SET_BOOL(sync_problem_detected); | |
1010 SET(debug_info, DebugInfoToValue); | |
1011 SET(client_status, ClientStatusToValue); | |
1012 return value; | |
1013 } | |
1014 | |
1015 std::unique_ptr<base::DictionaryValue> DatatypeAssociationStatsToValue( | |
1016 const sync_pb::DatatypeAssociationStats& proto) { | |
1017 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1018 SET_INT32(data_type_id); | |
1019 SET_INT32(num_local_items_before_association); | |
1020 SET_INT32(num_sync_items_before_association); | |
1021 SET_INT32(num_local_items_after_association); | |
1022 SET_INT32(num_sync_items_after_association); | |
1023 SET_INT32(num_local_items_added); | |
1024 SET_INT32(num_local_items_deleted); | |
1025 SET_INT32(num_local_items_modified); | |
1026 SET_INT32(num_sync_items_added); | |
1027 SET_INT32(num_sync_items_deleted); | |
1028 SET_INT32(num_sync_items_modified); | |
1029 SET_INT64(local_version_pre_association); | |
1030 SET_INT64(sync_version_pre_association) | |
1031 SET_BOOL(had_error); | |
1032 SET_INT64(download_wait_time_us); | |
1033 SET_INT64(download_time_us); | |
1034 SET_INT64(association_wait_time_for_high_priority_us); | |
1035 SET_INT64(association_wait_time_for_same_priority_us); | |
1036 return value; | |
1037 } | |
1038 | |
1039 std::unique_ptr<base::DictionaryValue> DebugEventInfoToValue( | |
1040 const sync_pb::DebugEventInfo& proto) { | |
1041 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1042 SET_ENUM(singleton_event, SingletonDebugEventTypeString); | |
1043 SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoToValue); | |
1044 SET_INT32(nudging_datatype); | |
1045 SET_INT32_REP(datatypes_notified_from_server); | |
1046 SET(datatype_association_stats, DatatypeAssociationStatsToValue); | |
1047 return value; | |
1048 } | |
1049 | |
1050 std::unique_ptr<base::DictionaryValue> DebugInfoToValue( | |
1051 const sync_pb::DebugInfo& proto) { | |
1052 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1053 SET_REP(events, DebugEventInfoToValue); | |
1054 SET_BOOL(cryptographer_ready); | |
1055 SET_BOOL(cryptographer_has_pending_keys); | |
1056 SET_BOOL(events_dropped); | |
1057 return value; | |
1058 } | |
1059 | |
1060 std::unique_ptr<base::DictionaryValue> SyncCycleCompletedEventInfoToValue( | |
1061 const sync_pb::SyncCycleCompletedEventInfo& proto) { | |
1062 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1063 SET_INT32(num_encryption_conflicts); | |
1064 SET_INT32(num_hierarchy_conflicts); | |
1065 SET_INT32(num_server_conflicts); | |
1066 SET_INT32(num_updates_downloaded); | |
1067 SET_INT32(num_reflected_updates_downloaded); | |
1068 SET(caller_info, GetUpdatesCallerInfoToValue); | |
1069 return value; | |
1070 } | |
1071 | |
1072 std::unique_ptr<base::DictionaryValue> ClientConfigParamsToValue( | |
1073 const sync_pb::ClientConfigParams& proto) { | |
1074 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1075 SET_INT32_REP(enabled_type_ids); | |
1076 SET_BOOL(tabs_datatype_enabled); | |
1077 SET_BOOL(cookie_jar_mismatch); | |
1078 return value; | |
1079 } | |
1080 | |
1081 std::unique_ptr<base::DictionaryValue> AttachmentIdProtoToValue( | |
1082 const sync_pb::AttachmentIdProto& proto) { | |
1083 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | |
1084 SET_STR(unique_id); | |
1085 return value; | |
1086 } | |
1087 | |
1088 #undef SET_TYPE | |
1089 #undef SET | |
1090 #undef SET_REP | |
1091 | |
1092 #undef SET_BOOL | |
1093 #undef SET_BYTES | |
1094 #undef SET_INT32 | |
1095 #undef SET_INT64 | |
1096 #undef SET_INT64_REP | |
1097 #undef SET_STR | |
1098 #undef SET_STR_REP | |
1099 | |
1100 #undef SET_FIELD | |
1101 | |
1102 } // namespace syncer | |
OLD | NEW |