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"
17d57369da7c6519fef57db42085f7b42d4c8845c1Torne (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"
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/protocol/synced_notification_specifics.pb.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/theme_specifics.pb.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/typed_url_specifics.pb.h"
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "sync/protocol/unique_position.pb.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Basic Type -> Value functions.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeInt64Value(int64 x) {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(base::Int64ToString(x));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(akalin): Perhaps make JSONWriter support BinaryValue and use
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that instead of a StringValue.
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeBytesValue(const std::string& bytes) {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bytes_base64;
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::Base64Encode(bytes, &bytes_base64);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(bytes_base64);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeStringValue(const std::string& str) {
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(str);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the enum type.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::StringValue* MakeEnumValue(T t, const char* (*converter_fn)(T)) {
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return new base::StringValue(converter_fn(t));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// T is the field type, F is either RepeatedField or RepeatedPtrField,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and V is a subclass of Value.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T, class F, class V>
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* MakeRepeatedValue(const F& fields, V* (*converter_fn)(T)) {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (typename F::const_iterator it = fields.begin(); it != fields.end();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++it) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(converter_fn(*it));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper macros to reduce the amount of boilerplate.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET(field, fn) \
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_##field()) { \
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set(#field, fn(proto.field())); \
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_REP(field, fn) \
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeRepeatedValue(proto.field(), fn))
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_ENUM(field, fn) \
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, MakeEnumValue(proto.field(), fn))
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_BOOL(field) SET(field, new base::FundamentalValue)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_BYTES(field) SET(field, MakeBytesValue)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32(field) SET(field, MakeInt64Value)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT32_REP(field) SET_REP(field, MakeInt64Value)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64(field) SET(field, MakeInt64Value)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_INT64_REP(field) SET_REP(field, MakeInt64Value)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_STR(field) SET(field, new base::StringValue)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_STR_REP(field) \
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set(#field, \
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             MakeRepeatedValue<const std::string&, \
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               google::protobuf::RepeatedPtrField< \
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   std::string >, \
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               base::StringValue>(proto.field(), \
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            MakeStringValue))
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SET_EXPERIMENT_ENABLED_FIELD(field)          \
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  do {                                               \
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (proto.has_##field() &&                       \
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        proto.field().has_enabled()) {               \
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      value->Set(#field,                             \
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 new base::FundamentalValue(         \
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     proto.field().enabled()));      \
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }                                                \
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } while (0)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SET_FIELD(field, fn)                         \
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do {                                               \
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (specifics.has_##field()) {                   \
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      value->Set(#field, fn(specifics.field()));     \
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }                                                \
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } while (0)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you add another macro, don't forget to add an #undef at the end
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of this file, too.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EncryptedDataToValue(
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::EncryptedData& proto) {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key_name);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(akalin): Shouldn't blob be of type bytes instead of string?
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(blob);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingsToValue(
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotificationSettings& proto) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(initial_setup_done);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(disabled);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(oauth_client_id);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionHeaderToValue(
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionHeader& proto) {
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(window, SessionWindowToValue);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionTabToValue(const sync_pb::SessionTab& proto) {
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_id);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_visual_index);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(current_navigation_index);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(pinned);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_app_id);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(navigation, TabNavigationToValue);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(favicon_type, GetFaviconTypeString);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_source);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionWindowToValue(
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionWindow& proto) {
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(window_id);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(selected_tab_index);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(tab);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(browser_type, GetBrowserTypeString);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TabNavigationToValue(
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TabNavigation& proto) {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(virtual_url);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(referrer);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(state);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(page_transition, GetPageTransitionString);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(redirect_type, GetPageTransitionRedirectTypeString);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(unique_id);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(timestamp_msec);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_forward_back);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_from_address_bar);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_home_page);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_start);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(navigation_chain_end);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(global_id);
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms);
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_ENUM(blocked_state, GetBlockedStateString);
20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR_REP(content_pack_categories);
204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(http_status_code);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsDataToValue(
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecificsData& proto) {
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(scheme);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(signon_realm);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(origin);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(action);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_element);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(username_value);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(password_element);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("password_value", "<redacted>");
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(ssl_valid);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(preferred);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(blacklisted);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* GlobalIdDirectiveToValue(
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GlobalIdDirective& proto) {
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(global_id);
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(start_time_usec);
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(end_time_usec);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* TimeRangeDirectiveToValue(
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TimeRangeDirective& proto) {
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(start_time_usec);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(end_time_usec);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationImageToValue(
244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationImage& proto) {
245424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(url);
2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(alt_text);
2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_width);
2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT32(preferred_height);
250424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* SyncedNotificationProfileImageToValue(
254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::SyncedNotificationProfileImage& proto) {
255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(image_url);
2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(oid);
2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(display_name);
259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::DictionaryValue* MediaToValue(
263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const sync_pb::Media& proto) {
264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET(image, SyncedNotificationImageToValue);
266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return value;
267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
268424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationActionToValue(
2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationAction& proto) {
2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(request_data);
2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationDestiationToValue(
2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotificationDestination& proto) {
2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(text);
2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(icon, SyncedNotificationImageToValue);
2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(accessibility_label);
2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* TargetToValue(
2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::Target& proto) {
2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(destination, SyncedNotificationDestiationToValue);
2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(action, SyncedNotificationActionToValue);
2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(target_key);
2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* SimpleCollapsedLayoutToValue(
300ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SimpleCollapsedLayout& proto) {
301ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(app_icon, SyncedNotificationImageToValue);
3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(profile_image, SyncedNotificationProfileImageToValue);
304ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(heading);
305ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(description);
306424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_STR(annotation);
307424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_REP(media, MediaToValue);
308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
310ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
311ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CollapsedInfoToValue(
312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CollapsedInfo& proto) {
313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(simple_collapsed_layout, SimpleCollapsedLayoutToValue);
3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_INT64(creation_timestamp_usec);
3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(default_destination, SyncedNotificationDestiationToValue);
3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(target, TargetToValue);
3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* SyncedNotificationToValue(
3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::SyncedNotification& proto) {
3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(type);
3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(external_id);
3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil) Add SyncedNotificationCreator here if we ever need it.
327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
330ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* RenderInfoToValue(
331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::SyncedNotificationRenderInfo& proto) {
332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // TODO(petewil): Add the expanded info values once we start using them.
334ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(collapsed_info, CollapsedInfoToValue);
335ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
336ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
338ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbase::DictionaryValue* CoalescedNotificationToValue(
339ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const sync_pb::CoalescedSyncedNotification& proto) {
340ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
341ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_STR(key);
3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(app_id);
3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(notification, SyncedNotificationToValue);
3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET(render_info, RenderInfoToValue);
345ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET_INT32(read_state);
346424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT64(creation_time_msec);
347424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SET_INT32(priority);
348ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return value;
349ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
351d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::DictionaryValue* AppListSpecificsToValue(
352d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)    const sync_pb::AppListSpecifics& proto) {
353d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
354d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_STR(item_id);
355d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_ENUM(item_type, GetAppListItemTypeString);
356d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_STR(item_name);
357d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_STR(parent_id);
358d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_STR(page_ordinal);
359d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_STR(item_ordinal);
360d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
361d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  return value;
362d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)}
363d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppNotificationToValue(
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppNotification& proto) {
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_id);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_timestamp_ms);
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(body_text);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_url);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(link_text);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSettingSpecificsToValue(
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSettingSpecifics& proto) {
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension_setting, ExtensionSettingSpecificsToValue);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AppSpecificsToValue(
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AppSpecifics& proto) {
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(extension, ExtensionSpecificsToValue);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(notification_settings, AppSettingsToValue);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(app_launch_ordinal);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(page_ordinal);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillSpecificsToValue(
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillSpecifics& proto) {
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(usage_timestamp);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(profile, AutofillProfileSpecificsToValue);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* AutofillProfileSpecificsToValue(
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::AutofillProfileSpecifics& proto) {
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(guid);
409eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SET_STR(origin);
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_first);
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_middle);
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(name_last);
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(email_address);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(company_name);
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line1);
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_line2);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_city);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_state);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_zip);
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(address_home_country);
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(phone_home_whole_number);
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::DictionaryValue* MetaInfoToValue(
429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const sync_pb::MetaInfo& proto) {
430a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
431a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(key);
432a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_STR(value);
433a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return value;
434a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
435a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* BookmarkSpecificsToValue(
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::BookmarkSpecifics& proto) {
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(favicon);
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(creation_time_us);
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(icon_url);
444a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SET_REP(meta_info, &MetaInfoToValue);
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DeviceInfoSpecificsToValue(
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DeviceInfoSpecifics& proto) {
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_name);
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(device_type, GetDeviceTypeString);
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_user_agent);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(chrome_version);
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DictionarySpecificsToValue(
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DictionarySpecifics& proto) {
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(word);
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
468eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconSyncFlagsToValue(
469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::FaviconSyncFlags& proto) {
470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(enabled);
472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT32(favicon_sync_limit);
473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
476a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExperimentsSpecificsToValue(
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExperimentsSpecifics& proto) {
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(keystore_encryption);
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(history_delete_directives);
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_EXPERIMENT_ENABLED_FIELD(autofill_culling);
484ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  SET_EXPERIMENT_ENABLED_FIELD(pre_commit_update_avoidance);
485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (proto.has_favicon_sync())
486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SET(favicon_sync, FaviconSyncFlagsToValue);
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSettingSpecificsToValue(
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSettingSpecifics& proto) {
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(key);
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ExtensionSpecificsToValue(
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ExtensionSpecifics& proto) {
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(version);
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(update_url);
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(enabled);
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(incognito_enabled);
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconDataToValue(
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconData& proto) {
514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BYTES(favicon);
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(width);
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(height);
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconImageSpecificsToValue(
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconImageSpecifics& proto) {
524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web, FaviconDataToValue);
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_web_32, FaviconDataToValue);
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_64, FaviconDataToValue);
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(favicon_touch_precomposed_64, FaviconDataToValue);
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* FaviconTrackingSpecificsToValue(
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::FaviconTrackingSpecifics& proto) {
535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(favicon_url);
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT64(last_visit_time_ms)
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(is_bookmarked);
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::DictionaryValue* HistoryDeleteDirectiveSpecificsToValue(
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::HistoryDeleteDirectiveSpecifics& proto) {
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(global_id_directive, GlobalIdDirectiveToValue);
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(time_range_directive, TimeRangeDirectiveToValue);
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* ManagedUserSettingSpecificsToValue(
551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::ManagedUserSettingSpecifics& proto) {
552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(name);
554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR(value);
555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
55890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)base::DictionaryValue* ManagedUserSpecificsToValue(
55990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    const sync_pb::ManagedUserSpecifics& proto) {
56090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
56190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(id);
56290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_STR(name);
56390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_BOOL(acknowledged);
5643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(master_key);
56558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chrome_avatar);
56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  SET_STR(chromeos_avatar);
56790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return value;
56890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
56990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* NigoriSpecificsToValue(
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::NigoriSpecifics& proto) {
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encryption_keybag, EncryptedDataToValue);
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(keybag_is_frozen);
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_bookmarks);
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_preferences);
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill_profile);
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_autofill);
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_themes);
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_typed_urls);
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extension_settings);
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_extensions);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_sessions);
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_app_settings);
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_apps);
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_search_engines);
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(encrypt_dictionary);
5884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_BOOL(encrypt_articles);
589d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_BOOL(encrypt_app_list);
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(encrypt_everything);
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_tab_favicons);
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(passphrase_type, PassphraseTypeString);
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(keystore_decryptor_token, EncryptedDataToValue);
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(keystore_migration_time);
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(custom_passphrase_time);
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticlePageToValue(
6004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticlePage& proto) {
6014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(url);
6034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)base::DictionaryValue* ArticleSpecificsToValue(
6074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const sync_pb::ArticleSpecifics& proto) {
6084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(entry_id);
6104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_STR(title);
6114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_REP(pages, ArticlePageToValue);
6124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return value;
6134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
6144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PasswordSpecificsToValue(
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PasswordSpecifics& proto) {
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(encrypted, EncryptedDataToValue);
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* PreferenceSpecificsToValue(
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::PreferenceSpecifics& proto) {
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(value);
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* PriorityPreferenceSpecificsToValue(
631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::PriorityPreferenceSpecifics& specifics) {
632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncedNotificationSpecificsToValue(
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncedNotificationSpecifics& proto) {
639ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // There is a lot of data, for now just use heading, description, key, and
640ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // the read state.
641ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // TODO(petewil): Eventually add more data here.
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
643ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SET(coalesced_notification, CoalescedNotificationToValue);
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SearchEngineSpecificsToValue(
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SearchEngineSpecifics& proto) {
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(short_name);
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(keyword);
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(favicon_url);
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(safe_for_autoreplace);
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originating_url);
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(date_created);
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(input_encodings);
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(show_in_default_list);
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(suggestions_url);
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(prepopulate_id);
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(autogenerate_keyword);
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(instant_url);
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(last_modified);
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(sync_guid);
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR_REP(alternate_urls);
6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_STR(search_terms_replacement_key);
667a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url);
668a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(search_url_post_params);
669a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(suggestions_url_post_params);
670a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(instant_url_post_params);
671a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SET_STR(image_url_post_params);
6723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SET_STR(new_tab_url);
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SessionSpecificsToValue(
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::SessionSpecifics& proto) {
6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(session_tag);
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(header, SessionHeaderToValue);
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(tab, SessionTabToValue);
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(tab_node_id);
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ThemeSpecificsToValue(
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ThemeSpecifics& proto) {
6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_custom_theme);
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(use_system_theme_by_default);
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_name);
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_id);
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(custom_theme_update_url);
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* TypedUrlSpecificsToValue(
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::TypedUrlSpecifics& proto) {
6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(title);
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hidden);
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64_REP(visits);
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(visit_transitions);
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntitySpecificsToValue(
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::EntitySpecifics& specifics) {
7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app, AppSpecificsToValue);
712d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  SET_FIELD(app_list, AppListSpecificsToValue);
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_notification, AppNotificationToValue);
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(app_setting, AppSettingSpecificsToValue);
7154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SET_FIELD(article, ArticleSpecificsToValue);
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill, AutofillSpecificsToValue);
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(autofill_profile, AutofillProfileSpecificsToValue);
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(bookmark, BookmarkSpecificsToValue);
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(device_info, DeviceInfoSpecificsToValue);
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(dictionary, DictionarySpecificsToValue);
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(experiments, ExperimentsSpecificsToValue);
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension, ExtensionSpecificsToValue);
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(extension_setting, ExtensionSettingSpecificsToValue);
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_image, FaviconImageSpecificsToValue);
7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue);
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue);
727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue);
72890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  SET_FIELD(managed_user, ManagedUserSpecificsToValue);
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(nigori, NigoriSpecificsToValue);
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(password, PasswordSpecificsToValue);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(preference, PreferenceSpecificsToValue);
7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue);
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(search_engine, SearchEngineSpecificsToValue);
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(session, SessionSpecificsToValue);
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(theme, ThemeSpecificsToValue);
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_FIELD(typed_url, TypedUrlSpecificsToValue);
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::StringValue* UniquePositionToStringValue(
744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::UniquePosition& proto) {
745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  UniquePosition pos = UniquePosition::FromProto(proto);
746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return new base::StringValue(pos.ToDebugString());
747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncEntityToValue(const sync_pb::SyncEntity& proto,
7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         bool include_specifics) {
7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(old_parent_id);
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(ctime);
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(non_unique_name);
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(sync_timestamp);
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(server_defined_unique_tag);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(unique_position, UniquePositionToStringValue);
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(insert_after_item_id);
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(deleted);
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_cache_guid);
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(originator_client_item_id);
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (include_specifics)
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SET(specifics, EntitySpecificsToValue);
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(folder);
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(client_defined_unique_tag);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::ListValue* SyncEntitiesToValue(
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities,
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* list = new base::ListValue();
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it;
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (it = entities.begin(); it != entities.end(); ++it) {
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list->Append(SyncEntityToValue(*it, include_specifics));
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return list;
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ChromiumExtensionActivityToValue(
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ChromiumExtensionsActivity& proto) {
7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(extension_id);
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(bookmark_writes_since_last_commit);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitMessageToValue(
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitMessage& proto,
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(cache_guid);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(extensions_activity, ChromiumExtensionActivityToValue);
8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(config_params, ClientConfigParamsToValue);
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* GetUpdateTriggersToValue(
808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const sync_pb::GetUpdateTriggers& proto) {
809c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
810c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_STR_REP(notification_hint);
811c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(client_dropped_hints);
812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_BOOL(invalidations_out_of_sync);
813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(local_modification_nudges);
814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_INT64(datatype_refresh_nudges);
815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return value;
816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DataTypeProgressMarkerToValue(
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::DataTypeProgressMarker& proto) {
8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(data_type_id);
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BYTES(token);
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(timestamp_token_for_migration);
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(notification_hint);
825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET(get_update_triggers, GetUpdateTriggersToValue);
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesCallerInfoToValue(
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesCallerInfo& proto) {
8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(source, GetUpdatesSourceString);
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(notifications_enabled);
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesMessageToValue(
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesMessage& proto) {
8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(fetch_folders);
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(batch_size);
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(from_progress_marker, DataTypeProgressMarkerToValue);
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(streaming);
8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(need_encryption_key);
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(create_mobile_bookmarks_folder);
847c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SET_ENUM(get_updates_origin, GetUpdatesOriginString);
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientStatusToValue(const sync_pb::ClientStatus& proto) {
8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(hierarchy_conflict_detected);
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* EntryResponseToValue(
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::CommitResponse::EntryResponse& proto) {
8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(response_type, GetResponseTypeString);
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(id_string);
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(parent_id_string);
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(position_in_parent);
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(version);
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(name);
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(mtime);
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* CommitResponseToValue(
8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::CommitResponse& proto) {
8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(entryresponse, EntryResponseToValue);
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* GetUpdatesResponseToValue(
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::GetUpdatesResponse& proto,
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->Set("entries",
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             SyncEntitiesToValue(proto.entries(), include_specifics));
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT64(changes_remaining);
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_REP(new_progress_marker, DataTypeProgressMarkerToValue);
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientCommandToValue(
8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientCommand& proto) {
8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_poll_interval);
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(set_sync_long_poll_interval);
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(max_commit_batch_size);
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(sessions_commit_delay_seconds);
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(throttle_delay_seconds);
897b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  SET_INT32(client_invalidation_hint_buffer_size);
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ErrorToValue(
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse::Error& proto) {
9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_type, GetErrorTypeString);
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_description);
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(url);
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(action, GetActionString);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerResponseToValue(
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerResponse& proto,
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(commit, CommitResponseToValue);
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_get_updates()) {
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("get_updates", GetUpdatesResponseToValue(proto.get_updates(),
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                        include_specifics));
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(error, ErrorToValue);
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_ENUM(error_code, GetErrorTypeString);
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(error_message);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_command, ClientCommandToValue);
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32_REP(migrated_data_type_id);
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientToServerMessageToValue(
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const sync_pb::ClientToServerMessage& proto,
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool include_specifics) {
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(share);
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_INT32(protocol_version);
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (proto.has_commit()) {
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->Set("commit",
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               CommitMessageToValue(proto.commit(), include_specifics));
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(get_updates, GetUpdatesMessageToValue);
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_STR(store_birthday);
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET_BOOL(sync_problem_detected);
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(debug_info, DebugInfoToValue);
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SET(client_status, ClientStatusToValue);
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DatatypeAssociationStatsToValue(
9522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DatatypeAssociationStats& proto) {
9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(data_type_id);
9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_before_association);
9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_before_association);
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_after_association);
9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_after_association);
9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_added);
9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_deleted);
9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_local_items_modified);
9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_added);
9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_deleted);
9642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_sync_items_modified);
9657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(local_version_pre_association);
9667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SET_INT64(sync_version_pre_association)
9672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(had_error);
968868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_wait_time_us);
969868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(download_time_us);
970868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_high_priority_us);
971868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SET_INT64(association_wait_time_for_same_priority_us);
9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugEventInfoToValue(
9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::DebugEventInfo& proto) {
9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_ENUM(singleton_event, SingletonEventTypeString);
9792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoToValue);
9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(nudging_datatype);
9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(datatypes_notified_from_server);
9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(datatype_association_stats, DatatypeAssociationStatsToValue);
9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* DebugInfoToValue(const sync_pb::DebugInfo& proto) {
9872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_REP(events, DebugEventInfoToValue);
9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_ready);
9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(cryptographer_has_pending_keys);
9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(events_dropped);
9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
9942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* SyncCycleCompletedEventInfoToValue(
9962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::SyncCycleCompletedEventInfo& proto) {
9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
9982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_encryption_conflicts);
9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_hierarchy_conflicts);
10002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_server_conflicts);
10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_updates_downloaded);
10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32(num_reflected_updates_downloaded);
10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET(caller_info, GetUpdatesCallerInfoToValue);
10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::DictionaryValue* ClientConfigParamsToValue(
10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const sync_pb::ClientConfigParams& proto) {
10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue* value = new base::DictionaryValue();
10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_INT32_REP(enabled_type_ids);
10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SET_BOOL(tabs_datatype_enabled);
10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return value;
10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_REP
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BOOL
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_BYTES
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT32
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_INT64_REP
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_STR_REP
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SET_FIELD
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
1029