15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keep this file in sync with the .proto files in this directory.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/proto_value_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <string>
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base64.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/i18n/time_formatting.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/time/time.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "sync/internal_api/public/base/unique_position.h"
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/protocol/app_list_specifics.pb.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_notification_specifics.pb.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_setting_specifics.pb.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_specifics.pb.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/autofill_specifics.pb.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/bookmark_specifics.pb.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/dictionary_specifics.pb.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/encryption.pb.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/experiments_specifics.pb.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/extension_setting_specifics.pb.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/extension_specifics.pb.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/favicon_image_specifics.pb.h"
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/favicon_tracking_specifics.pb.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/history_delete_directive_specifics.pb.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/nigori_specifics.pb.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/password_specifics.pb.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/preference_specifics.pb.h"
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/priority_preference_specifics.pb.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/proto_enum_conversions.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/search_engine_specifics.pb.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/session_specifics.pb.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h"
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/protocol/synced_notification_app_info_specifics.pb.h"
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/synced_notification_specifics.pb.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/theme_specifics.pb.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/typed_url_specifics.pb.h"
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "sync/protocol/unique_position.pb.h"
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "sync/util/time.h"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Basic Type -> Value functions.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeInt64Value(int64 x) {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(base::Int64ToString(x));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(akalin): Perhaps make JSONWriter support BinaryValue and use
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that instead of a StringValue.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeBytesValue(const std::string& bytes) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bytes_base64;
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::Base64Encode(bytes, &bytes_base64);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(bytes_base64);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeStringValue(const std::string& str) {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(str);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the enum type.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeEnumValue(T t, const char* (*converter_fn)(T)) {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(converter_fn(t));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the field type, F is either RepeatedField or RepeatedPtrField,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and V is a subclass of Value.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T, class F, class V>
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* MakeRepeatedValue(const F& fields, V* (*converter_fn)(T)) {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (typename F::const_iterator it = fields.begin(); it != fields.end();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++it) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(converter_fn(*it));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::StringValue* MakeTimestampValue(int64 tm) {
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return new base::StringValue(
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      base::TimeFormatShortDateAndTime(syncer::ProtoTimeToTime(tm)));
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macros to reduce the amount of boilerplate.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET(field, fn) \
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_##field()) { \
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set(#field, fn(proto.field())); \
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_REP(field, fn) \
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeRepeatedValue(proto.field(), fn))
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_ENUM(field, fn) \
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeEnumValue(proto.field(), fn))
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_BOOL(field) SET(field, new base::FundamentalValue)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_BYTES(field) SET(field, MakeBytesValue)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32(field) SET(field, MakeInt64Value)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32_REP(field) SET_REP(field, MakeInt64Value)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64(field) SET(field, MakeInt64Value)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64_REP(field) SET_REP(field, MakeInt64Value)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_STR(field) SET(field, new base::StringValue)
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define SET_TIME_STR(field) SET(field, MakeTimestampValue)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_STR_REP(field) \
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, \
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             MakeRepeatedValue<const std::string&, \
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               google::protobuf::RepeatedPtrField< \
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   std::string >, \
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               base::StringValue>(proto.field(), \
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            MakeStringValue))
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_EXPERIMENT_ENABLED_FIELD(field)          \
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  do {                                               \
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (proto.has_##field() &&                       \
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        proto.field().has_enabled()) {               \
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      value->Set(#field,                             \
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 new base::FundamentalValue(         \
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     proto.field().enabled()));      \
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }                                                \
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } while (0)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_FIELD(field, fn)                         \
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do {                                               \
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (specifics.has_##field()) {                   \
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value->Set(#field, fn(specifics.field()));     \
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }                                                \
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } while (0)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you add another macro, don't forget to add an #undef at the end
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of this file, too.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EncryptedDataToValue(
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::EncryptedData& proto) {
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key_name);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(akalin): Shouldn't blob be of type bytes instead of string?
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(blob);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingsToValue(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotificationSettings& proto) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(initial_setup_done);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(disabled);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(oauth_client_id);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionHeaderToValue(
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionHeader& proto) {
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(window, SessionWindowToValue);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionTabToValue(const sync_pb::SessionTab& proto) {
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_id);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_visual_index);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(current_navigation_index);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(pinned);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_app_id);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(navigation, TabNavigationToValue);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(favicon_type, GetFaviconTypeString);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_source);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionWindowToValue(
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionWindow& proto) {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(selected_tab_index);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(tab);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(browser_type, GetBrowserTypeString);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TabNavigationToValue(
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TabNavigation& proto) {
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(virtual_url);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(referrer);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(state);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(page_transition, GetPageTransitionString);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(redirect_type, GetPageTransitionRedirectTypeString);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(unique_id);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(timestamp_msec);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_forward_back);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_from_address_bar);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_home_page);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_start);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_end);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(global_id);
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_ENUM(blocked_state, GetBlockedStateString);
21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR_REP(content_pack_categories);
214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(http_status_code);
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_INT32(referrer_policy);
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(is_restored);
2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_REP(navigation_redirect, NavigationRedirectToValue);
2180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(last_navigation_redirect_url);
2190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return value;
2200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
2210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
2220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbase::DictionaryValue* NavigationRedirectToValue(
2230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const sync_pb::NavigationRedirect& proto) {
2240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
2250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(url);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsDataToValue(
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecificsData& proto) {
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(scheme);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(signon_realm);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(origin);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(action);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_element);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_value);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(password_element);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("password_value", "<redacted>");
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(ssl_valid);
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(preferred);
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(blacklisted);
2440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_INT32(type);
2450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_INT32(times_used);
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SET_STR(display_name);
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SET_STR(avatar_url);
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SET_STR(federation_url);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* GlobalIdDirectiveToValue(
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GlobalIdDirective& proto) {
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(global_id);
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(start_time_usec);
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(end_time_usec);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* TimeRangeDirectiveToValue(
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TimeRangeDirective& proto) {
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(start_time_usec);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(end_time_usec);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* SyncedNotificationAppInfoToValue(
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::SyncedNotificationAppInfo& proto) {
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR_REP(app_id);
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(settings_display_name);
2740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(app_name);
2750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(settings_url);
2760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(info_url);
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(petewil): Add fields for the monochrome icon when it is available.
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationImageToValue(
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationImage& proto) {
284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(url);
2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(alt_text);
2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_width);
2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_height);
289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationProfileImageToValue(
293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationProfileImage& proto) {
294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(image_url);
2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(oid);
2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(display_name);
298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
300424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* MediaToValue(
302424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::Media& proto) {
303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET(image, SyncedNotificationImageToValue);
305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
306424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
307424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationActionToValue(
3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationAction& proto) {
3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(request_data);
3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationDestiationToValue(
3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationDestination& proto) {
3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* TargetToValue(
3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::Target& proto) {
3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(destination, SyncedNotificationDestiationToValue);
3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(action, SyncedNotificationActionToValue);
3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(target_key);
3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
338ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* SimpleCollapsedLayoutToValue(
339ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SimpleCollapsedLayout& proto) {
340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(app_icon, SyncedNotificationImageToValue);
3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(profile_image, SyncedNotificationProfileImageToValue);
343ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(heading);
344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(description);
345424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(annotation);
346424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_REP(media, MediaToValue);
347ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
348ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
349ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
350ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CollapsedInfoToValue(
351ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CollapsedInfo& proto) {
352ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
353ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(simple_collapsed_layout, SimpleCollapsedLayoutToValue);
3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT64(creation_timestamp_usec);
3554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(default_destination, SyncedNotificationDestiationToValue);
3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(target, TargetToValue);
3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationToValue(
3614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotification& proto) {
3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(type);
3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(external_id);
3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil) Add SyncedNotificationCreator here if we ever need it.
366ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
367ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
369ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* RenderInfoToValue(
370ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SyncedNotificationRenderInfo& proto) {
371ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil): Add the expanded info values once we start using them.
373ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(collapsed_info, CollapsedInfoToValue);
374ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
375ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
377ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CoalescedNotificationToValue(
378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CoalescedSyncedNotification& proto) {
379ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
380ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(key);
3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(app_id);
3824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(notification, SyncedNotificationToValue);
3834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(render_info, RenderInfoToValue);
384ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_INT32(read_state);
385424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT64(creation_time_msec);
386424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(priority);
387ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
388ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* AppListSpecificsToValue(
3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::AppListSpecifics& proto) {
3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_id);
3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_ENUM(item_type, GetAppListItemTypeString);
3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_name);
3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(parent_id);
3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(page_ordinal);
3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_ordinal);
3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppNotificationToValue(
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotification& proto) {
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_id);
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_timestamp_ms);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(body_text);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_url);
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_text);
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingSpecificsToValue(
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSettingSpecifics& proto) {
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension_setting, ExtensionSettingSpecificsToValue);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSpecificsToValue(
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSpecifics& proto) {
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension, ExtensionSpecificsToValue);
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(notification_settings, AppSettingsToValue);
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_launch_ordinal);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(page_ordinal);
4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_ENUM(launch_type, GetLaunchTypeString);
4315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SET_STR(bookmark_app_url);
4325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SET_STR(bookmark_app_description);
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillSpecificsToValue(
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillSpecifics& proto) {
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(usage_timestamp);
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(profile, AutofillProfileSpecificsToValue);
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillProfileSpecificsToValue(
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillProfileSpecifics& proto) {
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SET_STR(origin);
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_first);
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_middle);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_last);
4566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  SET_STR_REP(name_full);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(email_address);
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(company_name);
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line1);
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line2);
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_city);
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_state);
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_zip);
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_country);
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_street_address);
4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_sorting_code);
4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_dependent_locality);
470a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  SET_STR(address_home_language_code);
4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(phone_home_whole_number);
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
476a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::DictionaryValue* MetaInfoToValue(
477a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const sync_pb::MetaInfo& proto) {
478a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(key);
480a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(value);
481a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return value;
482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* BookmarkSpecificsToValue(
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::BookmarkSpecifics& proto) {
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_time_us);
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(icon_url);
492a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_REP(meta_info, &MetaInfoToValue);
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DeviceInfoSpecificsToValue(
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DeviceInfoSpecifics& proto) {
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_user_agent);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(chrome_version);
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SET_TIME_STR(backup_timestamp);
5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SET_STR(signin_scoped_device_id);
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DictionarySpecificsToValue(
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DictionarySpecifics& proto) {
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(word);
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconSyncFlagsToValue(
519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::FaviconSyncFlags& proto) {
520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(enabled);
522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT32(favicon_sync_limit);
523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
526010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)base::DictionaryValue* EnhancedBookmarksFlagsToValue(
527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const sync_pb::EnhancedBookmarksFlags& proto) {
528010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SET_BOOL(enabled);
530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SET_STR(extension_id);
531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return value;
532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
533010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
534a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExperimentsSpecificsToValue(
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExperimentsSpecifics& proto) {
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(keystore_encryption);
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(history_delete_directives);
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(autofill_culling);
542ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  SET_EXPERIMENT_ENABLED_FIELD(pre_commit_update_avoidance);
5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET(favicon_sync, FaviconSyncFlagsToValue);
5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(gcm_channel);
545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SET(enhanced_bookmarks, EnhancedBookmarksFlagsToValue);
546effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SET_EXPERIMENT_ENABLED_FIELD(gcm_invalidations);
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSettingSpecificsToValue(
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSettingSpecifics& proto) {
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key);
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSpecificsToValue(
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSpecifics& proto) {
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id);
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(version);
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(update_url);
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(enabled);
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(incognito_enabled);
567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SET_BOOL(remote_install);
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SET_BOOL(installed_by_custodian);
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconDataToValue(
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconData& proto) {
576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BYTES(favicon);
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(width);
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(height);
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconImageSpecificsToValue(
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconImageSpecifics& proto) {
586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web, FaviconDataToValue);
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web_32, FaviconDataToValue);
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_64, FaviconDataToValue);
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_precomposed_64, FaviconDataToValue);
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconTrackingSpecificsToValue(
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconTrackingSpecifics& proto) {
597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(last_visit_time_ms)
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(is_bookmarked);
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* HistoryDeleteDirectiveSpecificsToValue(
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::HistoryDeleteDirectiveSpecifics& proto) {
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(global_id_directive, GlobalIdDirectiveToValue);
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(time_range_directive, TimeRangeDirectiveToValue);
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* ManagedUserSettingSpecificsToValue(
613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::ManagedUserSettingSpecifics& proto) {
614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(name);
616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(value);
617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
62090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)base::DictionaryValue* ManagedUserSpecificsToValue(
62190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const sync_pb::ManagedUserSpecifics& proto) {
62290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
62390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(id);
62490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(name);
62590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_BOOL(acknowledged);
6263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(master_key);
62758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chrome_avatar);
62858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chromeos_avatar);
62990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return value;
63090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
63190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* ManagedUserSharedSettingSpecificsToValue(
6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::ManagedUserSharedSettingSpecifics& proto) {
6345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(mu_id);
6365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(key);
6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(value);
6385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(acknowledged);
6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
6405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* NigoriSpecificsToValue(
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::NigoriSpecifics& proto) {
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encryption_keybag, EncryptedDataToValue);
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(keybag_is_frozen);
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_bookmarks);
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_preferences);
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill_profile);
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill);
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_themes);
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_typed_urls);
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extension_settings);
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extensions);
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_sessions);
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_app_settings);
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_apps);
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_search_engines);
6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(encrypt_dictionary);
6604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_BOOL(encrypt_articles);
6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(encrypt_app_list);
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_everything);
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_tab_favicons);
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(passphrase_type, PassphraseTypeString);
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(keystore_decryptor_token, EncryptedDataToValue);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(keystore_migration_time);
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(custom_passphrase_time);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticlePageToValue(
6724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticlePage& proto) {
6734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
6754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticleSpecificsToValue(
6794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticleSpecifics& proto) {
6804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(entry_id);
6824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(title);
6834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(pages, ArticlePageToValue);
6844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsToValue(
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecifics& proto) {
6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encrypted, EncryptedDataToValue);
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PreferenceSpecificsToValue(
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PreferenceSpecifics& proto) {
6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* PriorityPreferenceSpecificsToValue(
703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::PriorityPreferenceSpecifics& specifics) {
704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* SyncedNotificationAppInfoSpecificsToValue(
7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::SyncedNotificationAppInfoSpecifics& proto) {
7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_REP(synced_notification_app_info, SyncedNotificationAppInfoToValue);
7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
7145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
7155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncedNotificationSpecificsToValue(
7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncedNotificationSpecifics& proto) {
718ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // There is a lot of data, for now just use heading, description, key, and
719ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // the read state.
720ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // TODO(petewil): Eventually add more data here.
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
722ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(coalesced_notification, CoalescedNotificationToValue);
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SearchEngineSpecificsToValue(
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SearchEngineSpecifics& proto) {
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(short_name);
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(keyword);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_url);
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(safe_for_autoreplace);
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originating_url);
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(input_encodings);
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(show_in_default_list);
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(suggestions_url);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(prepopulate_id);
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(autogenerate_keyword);
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(instant_url);
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(last_modified);
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_guid);
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(alternate_urls);
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms_replacement_key);
746a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url);
747a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(search_url_post_params);
748a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(suggestions_url_post_params);
749a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(instant_url_post_params);
750a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url_post_params);
7513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(new_tab_url);
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionSpecificsToValue(
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionSpecifics& proto) {
7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(session_tag);
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(header, SessionHeaderToValue);
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(tab, SessionTabToValue);
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_node_id);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ThemeSpecificsToValue(
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ThemeSpecifics& proto) {
7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_custom_theme);
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_system_theme_by_default);
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_name);
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_id);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_update_url);
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TypedUrlSpecificsToValue(
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TypedUrlSpecifics& proto) {
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hidden);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(visits);
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(visit_transitions);
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntitySpecificsToValue(
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::EntitySpecifics& specifics) {
7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app, AppSpecificsToValue);
7915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(app_list, AppListSpecificsToValue);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_notification, AppNotificationToValue);
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_setting, AppSettingSpecificsToValue);
7944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_FIELD(article, ArticleSpecificsToValue);
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill, AutofillSpecificsToValue);
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill_profile, AutofillProfileSpecificsToValue);
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(bookmark, BookmarkSpecificsToValue);
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(device_info, DeviceInfoSpecificsToValue);
7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(dictionary, DictionarySpecificsToValue);
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(experiments, ExperimentsSpecificsToValue);
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension, ExtensionSpecificsToValue);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension_setting, ExtensionSettingSpecificsToValue);
8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_image, FaviconImageSpecificsToValue);
8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue);
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue);
806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue);
8075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(managed_user_shared_setting,
8085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            ManagedUserSharedSettingSpecificsToValue);
80990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_FIELD(managed_user, ManagedUserSpecificsToValue);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(nigori, NigoriSpecificsToValue);
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(password, PasswordSpecificsToValue);
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue);
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(search_engine, SearchEngineSpecificsToValue);
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(session, SessionSpecificsToValue);
8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue);
8175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(synced_notification_app_info,
8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            SyncedNotificationAppInfoSpecificsToValue);
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(theme, ThemeSpecificsToValue);
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(typed_url, TypedUrlSpecificsToValue);
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
826eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::StringValue* UniquePositionToStringValue(
827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::UniquePosition& proto) {
828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  UniquePosition pos = UniquePosition::FromProto(proto);
829eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return new base::StringValue(pos.ToDebugString());
830c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
83246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace
83346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncEntityToValue(const sync_pb::SyncEntity& proto,
8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         bool include_specifics) {
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(old_parent_id);
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(ctime);
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(non_unique_name);
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(sync_timestamp);
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(server_defined_unique_tag);
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(unique_position, UniquePositionToStringValue);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(insert_after_item_id);
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(deleted);
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_cache_guid);
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_client_item_id);
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_specifics)
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SET(specifics, EntitySpecificsToValue);
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(folder);
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_defined_unique_tag);
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SET_REP(attachment_id, AttachmentIdProtoToValue);
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
86146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace {
86246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* SyncEntitiesToValue(
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities,
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it;
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = entities.begin(); it != entities.end(); ++it) {
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(SyncEntityToValue(*it, include_specifics));
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ChromiumExtensionActivityToValue(
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ChromiumExtensionsActivity& proto) {
8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(bookmark_writes_since_last_commit);
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitMessageToValue(
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitMessage& proto,
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(extensions_activity, ChromiumExtensionActivityToValue);
8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(config_params, ClientConfigParamsToValue);
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* GetUpdateTriggersToValue(
896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::GetUpdateTriggers& proto) {
897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR_REP(notification_hint);
899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(client_dropped_hints);
900c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(invalidations_out_of_sync);
901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(local_modification_nudges);
902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(datatype_refresh_nudges);
903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DataTypeProgressMarkerToValue(
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DataTypeProgressMarker& proto) {
9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(data_type_id);
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(token);
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(timestamp_token_for_migration);
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(notification_hint);
913c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(get_update_triggers, GetUpdateTriggersToValue);
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
917c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbase::DictionaryValue* DataTypeContextToValue(
918c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const sync_pb::DataTypeContext& proto) {
919c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
920c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_INT32(data_type_id);
921c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_STR(context);
922c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_INT64(version);
923c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return value;
924c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
925c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesCallerInfoToValue(
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesCallerInfo& proto) {
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(source, GetUpdatesSourceString);
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(notifications_enabled);
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesMessageToValue(
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesMessage& proto) {
9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(fetch_folders);
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(batch_size);
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(from_progress_marker, DataTypeProgressMarkerToValue);
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(streaming);
9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(need_encryption_key);
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(create_mobile_bookmarks_folder);
944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_ENUM(get_updates_origin, GetUpdatesOriginString);
945c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_REP(client_contexts, DataTypeContextToValue);
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientStatusToValue(const sync_pb::ClientStatus& proto) {
9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hierarchy_conflict_detected);
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntryResponseToValue(
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitResponse::EntryResponse& proto) {
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(response_type, GetResponseTypeString);
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitResponseToValue(
9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::CommitResponse& proto) {
9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(entryresponse, EntryResponseToValue);
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesResponseToValue(
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesResponse& proto,
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(changes_remaining);
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(new_progress_marker, DataTypeProgressMarkerToValue);
984c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_REP(context_mutations, DataTypeContextToValue);
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientCommandToValue(
9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientCommand& proto) {
9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_poll_interval);
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_long_poll_interval);
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(max_commit_batch_size);
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(sessions_commit_delay_seconds);
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(throttle_delay_seconds);
996b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  SET_INT32(client_invalidation_hint_buffer_size);
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ErrorToValue(
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse::Error& proto) {
10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_type, GetErrorTypeString);
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_description);
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(action, GetActionString);
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerResponseToValue(
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse& proto,
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(commit, CommitResponseToValue);
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_get_updates()) {
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("get_updates", GetUpdatesResponseToValue(proto.get_updates(),
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        include_specifics));
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(error, ErrorToValue);
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_code, GetErrorTypeString);
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_command, ClientCommandToValue);
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(migrated_data_type_id);
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerMessageToValue(
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerMessage& proto,
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
10342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(share);
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(protocol_version);
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_commit()) {
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("commit",
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               CommitMessageToValue(proto.commit(), include_specifics));
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(get_updates, GetUpdatesMessageToValue);
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_problem_detected);
10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(debug_info, DebugInfoToValue);
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_status, ClientStatusToValue);
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DatatypeAssociationStatsToValue(
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DatatypeAssociationStats& proto) {
10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(data_type_id);
10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_before_association);
10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_before_association);
10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_after_association);
10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_after_association);
10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_added);
10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_deleted);
10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_modified);
10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_added);
10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_deleted);
10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_modified);
10647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(local_version_pre_association);
10657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(sync_version_pre_association)
10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(had_error);
1067868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_wait_time_us);
1068868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_time_us);
1069868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_high_priority_us);
1070868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_same_priority_us);
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugEventInfoToValue(
10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DebugEventInfo& proto) {
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
107723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SET_ENUM(singleton_event, SingletonDebugEventTypeString);
10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoToValue);
10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(nudging_datatype);
10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(datatypes_notified_from_server);
10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(datatype_association_stats, DatatypeAssociationStatsToValue);
10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugInfoToValue(const sync_pb::DebugInfo& proto) {
10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_REP(events, DebugEventInfoToValue);
10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_ready);
10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_has_pending_keys);
10902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(events_dropped);
10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncCycleCompletedEventInfoToValue(
10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncCycleCompletedEventInfo& proto) {
10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_encryption_conflicts);
10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_hierarchy_conflicts);
10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_server_conflicts);
11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_updates_downloaded);
11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_reflected_updates_downloaded);
11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientConfigParamsToValue(
11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientConfigParams& proto) {
11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(enabled_type_ids);
11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(tabs_datatype_enabled);
11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1114e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbase::DictionaryValue* AttachmentIdProtoToValue(
1115e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    const sync_pb::AttachmentIdProto& proto) {
1116e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
1117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  SET_STR(unique_id);
1118e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return value;
1119e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
1120e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_REP
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BOOL
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BYTES
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT32
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64_REP
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR_REP
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_FIELD
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
1135