proto_value_conversions.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "sync/internal_api/public/base/unique_position.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/protocol/app_list_specifics.pb.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_notification_specifics.pb.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_setting_specifics.pb.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/app_specifics.pb.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/autofill_specifics.pb.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/bookmark_specifics.pb.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/dictionary_specifics.pb.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/encryption.pb.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/experiments_specifics.pb.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/extension_setting_specifics.pb.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/extension_specifics.pb.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/favicon_image_specifics.pb.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/favicon_tracking_specifics.pb.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/history_delete_directive_specifics.pb.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/nigori_specifics.pb.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/password_specifics.pb.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/preference_specifics.pb.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/priority_preference_specifics.pb.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/proto_enum_conversions.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/search_engine_specifics.pb.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/session_specifics.pb.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync.pb.h"
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/protocol/synced_notification_app_info_specifics.pb.h"
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/synced_notification_specifics.pb.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/theme_specifics.pb.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/typed_url_specifics.pb.h"
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "sync/protocol/unique_position.pb.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Basic Type -> Value functions.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeInt64Value(int64 x) {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(base::Int64ToString(x));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(akalin): Perhaps make JSONWriter support BinaryValue and use
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that instead of a StringValue.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeBytesValue(const std::string& bytes) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bytes_base64;
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::Base64Encode(bytes, &bytes_base64);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(bytes_base64);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeStringValue(const std::string& str) {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(str);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the enum type.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeEnumValue(T t, const char* (*converter_fn)(T)) {
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(converter_fn(t));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the field type, F is either RepeatedField or RepeatedPtrField,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and V is a subclass of Value.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T, class F, class V>
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* MakeRepeatedValue(const F& fields, V* (*converter_fn)(T)) {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (typename F::const_iterator it = fields.begin(); it != fields.end();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++it) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(converter_fn(*it));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macros to reduce the amount of boilerplate.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET(field, fn) \
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_##field()) { \
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set(#field, fn(proto.field())); \
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_REP(field, fn) \
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeRepeatedValue(proto.field(), fn))
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_ENUM(field, fn) \
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeEnumValue(proto.field(), fn))
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_BOOL(field) SET(field, new base::FundamentalValue)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_BYTES(field) SET(field, MakeBytesValue)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32(field) SET(field, MakeInt64Value)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32_REP(field) SET_REP(field, MakeInt64Value)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64(field) SET(field, MakeInt64Value)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64_REP(field) SET_REP(field, MakeInt64Value)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_STR(field) SET(field, new base::StringValue)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_STR_REP(field) \
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, \
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             MakeRepeatedValue<const std::string&, \
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               google::protobuf::RepeatedPtrField< \
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   std::string >, \
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               base::StringValue>(proto.field(), \
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            MakeStringValue))
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_EXPERIMENT_ENABLED_FIELD(field)          \
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  do {                                               \
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (proto.has_##field() &&                       \
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        proto.field().has_enabled()) {               \
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      value->Set(#field,                             \
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 new base::FundamentalValue(         \
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     proto.field().enabled()));      \
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }                                                \
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } while (0)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_FIELD(field, fn)                         \
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do {                                               \
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (specifics.has_##field()) {                   \
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value->Set(#field, fn(specifics.field()));     \
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }                                                \
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } while (0)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you add another macro, don't forget to add an #undef at the end
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of this file, too.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EncryptedDataToValue(
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::EncryptedData& proto) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key_name);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(akalin): Shouldn't blob be of type bytes instead of string?
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(blob);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingsToValue(
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotificationSettings& proto) {
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(initial_setup_done);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(disabled);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(oauth_client_id);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionHeaderToValue(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionHeader& proto) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(window, SessionWindowToValue);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionTabToValue(const sync_pb::SessionTab& proto) {
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_id);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_visual_index);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(current_navigation_index);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(pinned);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_app_id);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(navigation, TabNavigationToValue);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(favicon_type, GetFaviconTypeString);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_source);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionWindowToValue(
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionWindow& proto) {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(selected_tab_index);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(tab);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(browser_type, GetBrowserTypeString);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TabNavigationToValue(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TabNavigation& proto) {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(virtual_url);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(referrer);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(state);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(page_transition, GetPageTransitionString);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(redirect_type, GetPageTransitionRedirectTypeString);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(unique_id);
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(timestamp_msec);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_forward_back);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_from_address_bar);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_home_page);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_start);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_end);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(global_id);
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_ENUM(blocked_state, GetBlockedStateString);
20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR_REP(content_pack_categories);
205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(http_status_code);
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_INT32(referrer_policy);
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(is_restored);
2080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_REP(navigation_redirect, NavigationRedirectToValue);
2090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(last_navigation_redirect_url);
2100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return value;
2110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
2120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
2130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbase::DictionaryValue* NavigationRedirectToValue(
2140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const sync_pb::NavigationRedirect& proto) {
2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
2160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(url);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsDataToValue(
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecificsData& proto) {
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(scheme);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(signon_realm);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(origin);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(action);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_element);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_value);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(password_element);
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("password_value", "<redacted>");
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(ssl_valid);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(preferred);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(blacklisted);
2350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_INT32(type);
2360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_INT32(times_used);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* GlobalIdDirectiveToValue(
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GlobalIdDirective& proto) {
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(global_id);
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(start_time_usec);
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(end_time_usec);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* TimeRangeDirectiveToValue(
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TimeRangeDirective& proto) {
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(start_time_usec);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(end_time_usec);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* SyncedNotificationAppInfoToValue(
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::SyncedNotificationAppInfo& proto) {
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR_REP(app_id);
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(settings_display_name);
2620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(app_name);
2630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(settings_url);
2640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  SET_STR(info_url);
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(petewil): Add fields for the monochrome icon when it is available.
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationImageToValue(
271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationImage& proto) {
272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(url);
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(alt_text);
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_width);
2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_height);
277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationProfileImageToValue(
281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationProfileImage& proto) {
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(image_url);
2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(oid);
2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(display_name);
286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* MediaToValue(
290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::Media& proto) {
291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET(image, SyncedNotificationImageToValue);
293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationActionToValue(
2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationAction& proto) {
2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(request_data);
3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationDestiationToValue(
3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationDestination& proto) {
3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* TargetToValue(
3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::Target& proto) {
3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(destination, SyncedNotificationDestiationToValue);
3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(action, SyncedNotificationActionToValue);
3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(target_key);
3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
326ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* SimpleCollapsedLayoutToValue(
327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SimpleCollapsedLayout& proto) {
328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(app_icon, SyncedNotificationImageToValue);
3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(profile_image, SyncedNotificationProfileImageToValue);
331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(heading);
332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(description);
333424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(annotation);
334424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_REP(media, MediaToValue);
335ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
338ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CollapsedInfoToValue(
339ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CollapsedInfo& proto) {
340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
341ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(simple_collapsed_layout, SimpleCollapsedLayoutToValue);
3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT64(creation_timestamp_usec);
3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(default_destination, SyncedNotificationDestiationToValue);
3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(target, TargetToValue);
3454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationToValue(
3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotification& proto) {
3504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(type);
3524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(external_id);
3534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil) Add SyncedNotificationCreator here if we ever need it.
354ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
355ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
356ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
357ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* RenderInfoToValue(
358ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SyncedNotificationRenderInfo& proto) {
359ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil): Add the expanded info values once we start using them.
361ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(collapsed_info, CollapsedInfoToValue);
362ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
363ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
364ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
365ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CoalescedNotificationToValue(
366ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CoalescedSyncedNotification& proto) {
367ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(key);
3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(app_id);
3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(notification, SyncedNotificationToValue);
3714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(render_info, RenderInfoToValue);
372ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_INT32(read_state);
373424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT64(creation_time_msec);
374424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(priority);
375ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* AppListSpecificsToValue(
3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::AppListSpecifics& proto) {
3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_id);
3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_ENUM(item_type, GetAppListItemTypeString);
3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_name);
3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(parent_id);
3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(page_ordinal);
3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(item_ordinal);
3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppNotificationToValue(
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotification& proto) {
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_id);
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_timestamp_ms);
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(body_text);
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_url);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_text);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingSpecificsToValue(
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSettingSpecifics& proto) {
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension_setting, ExtensionSettingSpecificsToValue);
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSpecificsToValue(
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSpecifics& proto) {
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension, ExtensionSpecificsToValue);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(notification_settings, AppSettingsToValue);
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_launch_ordinal);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(page_ordinal);
4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_ENUM(launch_type, GetLaunchTypeString);
4195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SET_STR(bookmark_app_url);
4205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SET_STR(bookmark_app_description);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillSpecificsToValue(
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillSpecifics& proto) {
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(usage_timestamp);
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(profile, AutofillProfileSpecificsToValue);
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillProfileSpecificsToValue(
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillProfileSpecifics& proto) {
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SET_STR(origin);
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_first);
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_middle);
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_last);
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(email_address);
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(company_name);
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line1);
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line2);
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_city);
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_state);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_zip);
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_country);
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_street_address);
4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_sorting_code);
4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(address_home_dependent_locality);
457a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  SET_STR(address_home_language_code);
4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(phone_home_whole_number);
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
463a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::DictionaryValue* MetaInfoToValue(
464a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const sync_pb::MetaInfo& proto) {
465a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
466a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(key);
467a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(value);
468a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return value;
469a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
470a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* BookmarkSpecificsToValue(
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::BookmarkSpecifics& proto) {
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_time_us);
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(icon_url);
479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_REP(meta_info, &MetaInfoToValue);
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DeviceInfoSpecificsToValue(
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DeviceInfoSpecifics& proto) {
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_user_agent);
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(chrome_version);
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DictionarySpecificsToValue(
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DictionarySpecifics& proto) {
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(word);
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconSyncFlagsToValue(
504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::FaviconSyncFlags& proto) {
505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(enabled);
507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT32(favicon_sync_limit);
508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
511a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExperimentsSpecificsToValue(
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExperimentsSpecifics& proto) {
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(keystore_encryption);
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(history_delete_directives);
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(autofill_culling);
519ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  SET_EXPERIMENT_ENABLED_FIELD(pre_commit_update_avoidance);
5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET(favicon_sync, FaviconSyncFlagsToValue);
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(gcm_channel);
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(enhanced_bookmarks);
523effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SET_EXPERIMENT_ENABLED_FIELD(gcm_invalidations);
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSettingSpecificsToValue(
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSettingSpecifics& proto) {
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key);
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSpecificsToValue(
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSpecifics& proto) {
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(version);
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(update_url);
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(enabled);
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(incognito_enabled);
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconDataToValue(
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconData& proto) {
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BYTES(favicon);
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(width);
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(height);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconImageSpecificsToValue(
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconImageSpecifics& proto) {
561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web, FaviconDataToValue);
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web_32, FaviconDataToValue);
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_64, FaviconDataToValue);
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_precomposed_64, FaviconDataToValue);
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconTrackingSpecificsToValue(
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconTrackingSpecifics& proto) {
572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(last_visit_time_ms)
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(is_bookmarked);
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* HistoryDeleteDirectiveSpecificsToValue(
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::HistoryDeleteDirectiveSpecifics& proto) {
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(global_id_directive, GlobalIdDirectiveToValue);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(time_range_directive, TimeRangeDirectiveToValue);
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* ManagedUserSettingSpecificsToValue(
588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::ManagedUserSettingSpecifics& proto) {
589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(name);
591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(value);
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)base::DictionaryValue* ManagedUserSpecificsToValue(
59690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const sync_pb::ManagedUserSpecifics& proto) {
59790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
59890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(id);
59990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(name);
60090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_BOOL(acknowledged);
6013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(master_key);
60258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chrome_avatar);
60358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chromeos_avatar);
60490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return value;
60590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
60690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* ManagedUserSharedSettingSpecificsToValue(
6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::ManagedUserSharedSettingSpecifics& proto) {
6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(mu_id);
6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(key);
6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_STR(value);
6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(acknowledged);
6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* NigoriSpecificsToValue(
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::NigoriSpecifics& proto) {
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encryption_keybag, EncryptedDataToValue);
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(keybag_is_frozen);
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_bookmarks);
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_preferences);
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill_profile);
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill);
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_themes);
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_typed_urls);
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extension_settings);
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extensions);
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_sessions);
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_app_settings);
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_apps);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_search_engines);
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(encrypt_dictionary);
6354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_BOOL(encrypt_articles);
6365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_BOOL(encrypt_app_list);
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_everything);
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_tab_favicons);
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(passphrase_type, PassphraseTypeString);
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(keystore_decryptor_token, EncryptedDataToValue);
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(keystore_migration_time);
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(custom_passphrase_time);
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticlePageToValue(
6474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticlePage& proto) {
6484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
6504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticleSpecificsToValue(
6544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticleSpecifics& proto) {
6554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(entry_id);
6574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(title);
6584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(pages, ArticlePageToValue);
6594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsToValue(
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecifics& proto) {
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encrypted, EncryptedDataToValue);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PreferenceSpecificsToValue(
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PreferenceSpecifics& proto) {
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* PriorityPreferenceSpecificsToValue(
678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::PriorityPreferenceSpecifics& specifics) {
679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* SyncedNotificationAppInfoSpecificsToValue(
6855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const sync_pb::SyncedNotificationAppInfoSpecifics& proto) {
6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_REP(synced_notification_app_info, SyncedNotificationAppInfoToValue);
6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return value;
6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncedNotificationSpecificsToValue(
6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncedNotificationSpecifics& proto) {
693ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // There is a lot of data, for now just use heading, description, key, and
694ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // the read state.
695ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // TODO(petewil): Eventually add more data here.
6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
697ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(coalesced_notification, CoalescedNotificationToValue);
6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SearchEngineSpecificsToValue(
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SearchEngineSpecifics& proto) {
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(short_name);
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(keyword);
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_url);
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(safe_for_autoreplace);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originating_url);
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(input_encodings);
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(show_in_default_list);
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(suggestions_url);
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(prepopulate_id);
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(autogenerate_keyword);
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(instant_url);
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(last_modified);
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_guid);
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(alternate_urls);
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms_replacement_key);
721a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url);
722a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(search_url_post_params);
723a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(suggestions_url_post_params);
724a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(instant_url_post_params);
725a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url_post_params);
7263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(new_tab_url);
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionSpecificsToValue(
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionSpecifics& proto) {
7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(session_tag);
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(header, SessionHeaderToValue);
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(tab, SessionTabToValue);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_node_id);
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ThemeSpecificsToValue(
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ThemeSpecifics& proto) {
7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_custom_theme);
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_system_theme_by_default);
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_name);
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_id);
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_update_url);
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TypedUrlSpecificsToValue(
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TypedUrlSpecifics& proto) {
7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hidden);
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(visits);
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(visit_transitions);
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntitySpecificsToValue(
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::EntitySpecifics& specifics) {
7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app, AppSpecificsToValue);
7665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(app_list, AppListSpecificsToValue);
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_notification, AppNotificationToValue);
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_setting, AppSettingSpecificsToValue);
7694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_FIELD(article, ArticleSpecificsToValue);
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill, AutofillSpecificsToValue);
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill_profile, AutofillProfileSpecificsToValue);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(bookmark, BookmarkSpecificsToValue);
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(device_info, DeviceInfoSpecificsToValue);
7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(dictionary, DictionarySpecificsToValue);
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(experiments, ExperimentsSpecificsToValue);
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension, ExtensionSpecificsToValue);
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension_setting, ExtensionSettingSpecificsToValue);
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_image, FaviconImageSpecificsToValue);
7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue);
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue);
781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue);
7825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(managed_user_shared_setting,
7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            ManagedUserSharedSettingSpecificsToValue);
78490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_FIELD(managed_user, ManagedUserSpecificsToValue);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(nigori, NigoriSpecificsToValue);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(password, PasswordSpecificsToValue);
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue);
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(search_engine, SearchEngineSpecificsToValue);
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(session, SessionSpecificsToValue);
7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue);
7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SET_FIELD(synced_notification_app_info,
7935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            SyncedNotificationAppInfoSpecificsToValue);
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(theme, ThemeSpecificsToValue);
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(typed_url, TypedUrlSpecificsToValue);
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
801eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::StringValue* UniquePositionToStringValue(
802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::UniquePosition& proto) {
803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  UniquePosition pos = UniquePosition::FromProto(proto);
804eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return new base::StringValue(pos.ToDebugString());
805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncEntityToValue(const sync_pb::SyncEntity& proto,
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         bool include_specifics) {
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(old_parent_id);
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(ctime);
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(non_unique_name);
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(sync_timestamp);
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(server_defined_unique_tag);
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(unique_position, UniquePositionToStringValue);
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(insert_after_item_id);
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(deleted);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_cache_guid);
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_client_item_id);
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_specifics)
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SET(specifics, EntitySpecificsToValue);
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(folder);
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_defined_unique_tag);
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* SyncEntitiesToValue(
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities,
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it;
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = entities.begin(); it != entities.end(); ++it) {
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(SyncEntityToValue(*it, include_specifics));
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ChromiumExtensionActivityToValue(
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ChromiumExtensionsActivity& proto) {
8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(bookmark_writes_since_last_commit);
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitMessageToValue(
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitMessage& proto,
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
8562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(extensions_activity, ChromiumExtensionActivityToValue);
8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(config_params, ClientConfigParamsToValue);
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* GetUpdateTriggersToValue(
866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::GetUpdateTriggers& proto) {
867c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR_REP(notification_hint);
869c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(client_dropped_hints);
870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(invalidations_out_of_sync);
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(local_modification_nudges);
872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(datatype_refresh_nudges);
873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DataTypeProgressMarkerToValue(
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DataTypeProgressMarker& proto) {
8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(data_type_id);
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(token);
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(timestamp_token_for_migration);
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(notification_hint);
883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(get_update_triggers, GetUpdateTriggersToValue);
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
887c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbase::DictionaryValue* DataTypeContextToValue(
888c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const sync_pb::DataTypeContext& proto) {
889c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
890c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_INT32(data_type_id);
891c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_STR(context);
892c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_INT64(version);
893c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return value;
894c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
895c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesCallerInfoToValue(
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesCallerInfo& proto) {
8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(source, GetUpdatesSourceString);
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(notifications_enabled);
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesMessageToValue(
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesMessage& proto) {
9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(fetch_folders);
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(batch_size);
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(from_progress_marker, DataTypeProgressMarkerToValue);
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(streaming);
9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(need_encryption_key);
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(create_mobile_bookmarks_folder);
914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_ENUM(get_updates_origin, GetUpdatesOriginString);
915c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_REP(client_contexts, DataTypeContextToValue);
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientStatusToValue(const sync_pb::ClientStatus& proto) {
9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hierarchy_conflict_detected);
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntryResponseToValue(
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitResponse::EntryResponse& proto) {
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(response_type, GetResponseTypeString);
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitResponseToValue(
9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::CommitResponse& proto) {
9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(entryresponse, EntryResponseToValue);
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesResponseToValue(
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesResponse& proto,
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(changes_remaining);
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(new_progress_marker, DataTypeProgressMarkerToValue);
954c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  SET_REP(context_mutations, DataTypeContextToValue);
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientCommandToValue(
9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientCommand& proto) {
9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_poll_interval);
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_long_poll_interval);
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(max_commit_batch_size);
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(sessions_commit_delay_seconds);
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(throttle_delay_seconds);
966b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  SET_INT32(client_invalidation_hint_buffer_size);
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ErrorToValue(
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse::Error& proto) {
9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_type, GetErrorTypeString);
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_description);
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(action, GetActionString);
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerResponseToValue(
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse& proto,
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(commit, CommitResponseToValue);
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_get_updates()) {
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("get_updates", GetUpdatesResponseToValue(proto.get_updates(),
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        include_specifics));
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(error, ErrorToValue);
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_code, GetErrorTypeString);
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_command, ClientCommandToValue);
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(migrated_data_type_id);
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerMessageToValue(
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerMessage& proto,
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(share);
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(protocol_version);
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_commit()) {
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("commit",
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               CommitMessageToValue(proto.commit(), include_specifics));
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(get_updates, GetUpdatesMessageToValue);
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_problem_detected);
10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(debug_info, DebugInfoToValue);
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_status, ClientStatusToValue);
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DatatypeAssociationStatsToValue(
10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DatatypeAssociationStats& proto) {
10222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(data_type_id);
10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_before_association);
10252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_before_association);
10262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_after_association);
10272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_after_association);
10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_added);
10292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_deleted);
10302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_modified);
10312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_added);
10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_deleted);
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_modified);
10347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(local_version_pre_association);
10357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(sync_version_pre_association)
10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(had_error);
1037868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_wait_time_us);
1038868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_time_us);
1039868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_high_priority_us);
1040868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_same_priority_us);
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugEventInfoToValue(
10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DebugEventInfo& proto) {
10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
104723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SET_ENUM(singleton_event, SingletonDebugEventTypeString);
10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoToValue);
10492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(nudging_datatype);
10502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(datatypes_notified_from_server);
10512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(datatype_association_stats, DatatypeAssociationStatsToValue);
10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugInfoToValue(const sync_pb::DebugInfo& proto) {
10562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_REP(events, DebugEventInfoToValue);
10582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_ready);
10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_has_pending_keys);
10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(events_dropped);
10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncCycleCompletedEventInfoToValue(
10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncCycleCompletedEventInfo& proto) {
10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_encryption_conflicts);
10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_hierarchy_conflicts);
10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_server_conflicts);
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_updates_downloaded);
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_reflected_updates_downloaded);
10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientConfigParamsToValue(
10772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientConfigParams& proto) {
10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(enabled_type_ids);
10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(tabs_datatype_enabled);
10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1084e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochbase::DictionaryValue* AttachmentIdProtoToValue(
1085e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    const sync_pb::AttachmentIdProto& proto) {
1086e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
1087e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  SET_STR(unique_id);
1088e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  return value;
1089e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
1090e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_REP
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BOOL
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BYTES
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT32
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64_REP
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR_REP
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_FIELD
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
1105