172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Keep this file in sync with the .proto files in this directory. 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/proto_value_conversions.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/base64.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/basictypes.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/logging.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/string_number_conversions.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/app_specifics.pb.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/bookmark_specifics.pb.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/encryption.pb.h" 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/extension_specifics.pb.h" 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/nigori_specifics.pb.h" 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/password_specifics.pb.h" 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/preference_specifics.pb.h" 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/proto_enum_conversions.h" 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/session_specifics.pb.h" 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/sync.pb.h" 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/theme_specifics.pb.h" 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace browser_sync { 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace { 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Basic Type -> Value functions. 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenStringValue* MakeInt64Value(int64 x) { 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return Value::CreateStringValue(base::Int64ToString(x)); 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TODO(akalin): Perhaps make JSONWriter support BinaryValue and use 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// that instead of a StringValue. 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenStringValue* MakeBytesValue(const std::string& bytes) { 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string bytes_base64; 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!base::Base64Encode(bytes, &bytes_base64)) { 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED(); 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return Value::CreateStringValue(bytes_base64); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// T is the enum type. 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsentemplate <class T> 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenStringValue* MakeEnumValue(T t, const char* (*converter_fn)(T)) { 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return Value::CreateStringValue(converter_fn(t)); 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// T is the field type, F is either RepeatedField or RepeatedPtrField, 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// and V is a subclass of Value. 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsentemplate <class T, class F, class V> 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenListValue* MakeRepeatedValue(const F& fields, V* (*converter_fn)(T)) { 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ListValue* list = new ListValue(); 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (typename F::const_iterator it = fields.begin(); it != fields.end(); 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ++it) { 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen list->Append(converter_fn(*it)); 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return list; 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Helper macros to reduce the amount of boilerplate. 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET(field, fn) value->Set(#field, fn(proto.field())) 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_REP(field, fn) \ 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->Set(#field, MakeRepeatedValue(proto.field(), fn)) 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_ENUM(field, fn) \ 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->Set(#field, MakeEnumValue(proto.field(), fn)) 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_BOOL(field) SET(field, Value::CreateBooleanValue) 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_BYTES(field) SET(field, MakeBytesValue) 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_INT32(field) SET(field, MakeInt64Value) 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_INT32_REP(field) SET_REP(field, MakeInt64Value) 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_INT64(field) SET(field, MakeInt64Value) 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_INT64_REP(field) SET_REP(field, MakeInt64Value) 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_STR(field) SET(field, Value::CreateStringValue) 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define SET_EXTENSION(ns, field, fn) \ 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen do { \ 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (specifics.HasExtension(ns::field)) { \ 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->Set(#field, fn(specifics.GetExtension(ns::field))); \ 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } \ 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } while (0) 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// If you add another macro, don't forget to add an #undef at the end 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// of this file, too. 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* EncryptedDataToValue(const sync_pb::EncryptedData& proto) { 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(key_name); 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TODO(akalin): Shouldn't blob be of type bytes instead of string? 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BYTES(blob); 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* SessionHeaderToValue( 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::SessionHeader& proto) { 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_REP(window, SessionWindowToValue); 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* SessionTabToValue( 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::SessionTab& proto) { 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(tab_id); 11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(window_id); 11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(tab_visual_index); 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(current_navigation_index); 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(pinned); 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(extension_app_id); 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_REP(navigation, TabNavigationToValue); 11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* SessionWindowToValue( 12372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::SessionWindow& proto) { 12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 12572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(window_id); 12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(selected_tab_index); 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32_REP(tab); 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_ENUM(browser_type, GetBrowserTypeString); 12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* TabNavigationToValue( 13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::TabNavigation& proto) { 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(index); 13672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(virtual_url); 13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(referrer); 13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(title); 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(state); 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_ENUM(page_transition, GetPageTransitionString); 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_ENUM(navigation_qualifier, GetPageTransitionQualifierString); 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* PasswordSpecificsDataToValue( 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::PasswordSpecificsData& proto) { 14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(scheme); 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(signon_realm); 15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(origin); 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(action); 15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(username_element); 15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(username_value); 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(password_element); 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->SetString("password_value", "<redacted>"); 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(ssl_valid); 15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(preferred); 15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT64(date_created); 15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(blacklisted); 16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* AppSpecificsToValue( 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::AppSpecifics& proto) { 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(extension, ExtensionSpecificsToValue); 16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* AutofillSpecificsToValue( 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::AutofillSpecifics& proto) { 17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name); 17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(value); 17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT64_REP(usage_timestamp); 17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(profile, AutofillProfileSpecificsToValue); 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BYTES(encrypted_credit_card); 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(credit_card, AutofillCreditCardSpecificsToValue); 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* AutofillCreditCardSpecificsToValue( 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::AutofillCreditCardSpecifics& proto) { 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(label); 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name_on_card); 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(type); 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(card_number); 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(expiration_month); 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(expiration_year); 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(verification_code); 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(billing_address); 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(shipping_address); 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* AutofillProfileSpecificsToValue( 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::AutofillProfileSpecifics& proto) { 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(label); 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(guid); 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name_first); 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name_middle); 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name_last); 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(email_address); 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(company_name); 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_line1); 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_line2); 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_city); 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_state); 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_zip); 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(address_home_country); 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(phone_home_whole_number); 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(phone_fax_whole_number); 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* BookmarkSpecificsToValue( 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::BookmarkSpecifics& proto) { 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(url); 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BYTES(favicon); 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 22772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ExtensionSpecificsToValue( 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::ExtensionSpecifics& proto) { 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(id); 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(version); 23472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(update_url); 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(enabled); 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(incognito_enabled); 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name); 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* NigoriSpecificsToValue( 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::NigoriSpecifics& proto) { 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(encrypted, EncryptedDataToValue); 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(using_explicit_passphrase); 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* PasswordSpecificsToValue( 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::PasswordSpecifics& proto) { 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(encrypted, EncryptedDataToValue); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* PreferenceSpecificsToValue( 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::PreferenceSpecifics& proto) { 25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(name); 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(value); 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* SessionSpecificsToValue( 26572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::SessionSpecifics& proto) { 26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 26772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(session_tag); 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(header, SessionHeaderToValue); 26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET(tab, SessionTabToValue); 27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* ThemeSpecificsToValue( 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::ThemeSpecifics& proto) { 27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(use_custom_theme); 27772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(use_system_theme_by_default); 27872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(custom_theme_name); 27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(custom_theme_id); 28072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(custom_theme_update_url); 28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 28272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 28372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 28472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* TypedUrlSpecificsToValue( 28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::TypedUrlSpecifics& proto) { 28672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(url); 28872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_STR(title); 28972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT32(typed_count); 29072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_BOOL(hidden); 29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_INT64_REP(visit); 29272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 29372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 29572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* EntitySpecificsToValue( 29672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const sync_pb::EntitySpecifics& specifics) { 29772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 29872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, app, AppSpecificsToValue); 29972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, autofill, AutofillSpecificsToValue); 30072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, autofill_profile, AutofillProfileSpecificsToValue); 30172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, bookmark, BookmarkSpecificsToValue); 30272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, extension, ExtensionSpecificsToValue); 30372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, nigori, NigoriSpecificsToValue); 30472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, password, PasswordSpecificsToValue); 30572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, preference, PreferenceSpecificsToValue); 30672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, session, SessionSpecificsToValue); 30772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, theme, ThemeSpecificsToValue); 30872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SET_EXTENSION(sync_pb, typed_url, TypedUrlSpecificsToValue); 30972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 31072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 31172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 31272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET 31372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_REP 31472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 31572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_BOOL 31672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_BYTES 31772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_INT32 31872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_INT64 31972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_INT64_REP 32072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_STR 32172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef SET_EXTENSION 32372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace browser_sync 325