1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Keep this file in sync with the .proto files in this directory. 6 7#ifndef SYNC_PROTOCOL_PROTO_VALUE_CONVERSIONS_H_ 8#define SYNC_PROTOCOL_PROTO_VALUE_CONVERSIONS_H_ 9 10#include "sync/base/sync_export.h" 11 12namespace base { 13class DictionaryValue; 14} 15 16namespace sync_pb { 17class AppNotification; 18class AppNotificationSettings; 19class AppSettingSpecifics; 20class AppSpecifics; 21class AutofillProfileSpecifics; 22class AutofillSpecifics; 23class BookmarkSpecifics; 24class ClientConfigParams; 25class ClientToServerMessage; 26class ClientToServerResponse; 27class CoalescedSyncedNotification; 28class CollapsedInfo; 29class DatatypeAssociationStats; 30class DebugEventInfo; 31class DebugInfo; 32class DeviceInfoSpecifics; 33class DeviceInformation; 34class DictionarySpecifics; 35class EncryptedData; 36class EntitySpecifics; 37class EverythingDirective; 38class ExperimentsSpecifics; 39class ExtensionSettingSpecifics; 40class ExtensionSpecifics; 41class FaviconImageSpecifics; 42class FaviconTrackingSpecifics; 43class GlobalIdDirective; 44class HistoryDeleteDirectiveSpecifics; 45class KeystoreEncryptionFlagsSpecifics; 46class ManagedUserSettingSpecifics; 47class ManagedUserSpecifics; 48class NigoriSpecifics; 49class PasswordSpecifics; 50class PasswordSpecificsData; 51class PreferenceSpecifics; 52class PriorityPreferenceSpecifics; 53class SearchEngineSpecifics; 54class SessionHeader; 55class SessionSpecifics; 56class SessionTab; 57class SessionWindow; 58class SimpleCollapsedLayout; 59class SyncCycleCompletedEventInfo; 60class SyncedNotificationRenderInfo; 61class SyncedNotificationSpecifics; 62class TabNavigation; 63class ThemeSpecifics; 64class TimeRangeDirective; 65class TypedUrlSpecifics; 66} // namespace sync_pb 67 68// Utility functions to convert sync protocol buffers to dictionaries. 69// Each protocol field is mapped to a key of the same name. Repeated 70// fields are mapped to array values and sub-messages are mapped to 71// sub-dictionary values. 72// 73// TODO(akalin): Add has_* information. 74// 75// TODO(akalin): Improve enum support. 76 77namespace syncer { 78 79// Ownership of all returned DictionaryValues are transferred to the 80// caller. 81 82// TODO(akalin): Perhaps extend this to decrypt? 83SYNC_EXPORT_PRIVATE base::DictionaryValue* EncryptedDataToValue( 84 const sync_pb::EncryptedData& encrypted_data); 85 86// Sub-protocol of AppSpecifics. 87SYNC_EXPORT_PRIVATE base::DictionaryValue* AppSettingsToValue( 88 const sync_pb::AppNotificationSettings& app_notification_settings); 89 90// Sub-protocols of SessionSpecifics. 91 92SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionHeaderToValue( 93 const sync_pb::SessionHeader& session_header); 94 95SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionTabToValue( 96 const sync_pb::SessionTab& session_tab); 97 98SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionWindowToValue( 99 const sync_pb::SessionWindow& session_window); 100 101SYNC_EXPORT_PRIVATE base::DictionaryValue* TabNavigationToValue( 102 const sync_pb::TabNavigation& tab_navigation); 103 104// Sub-protocol of PasswordSpecifics. 105 106SYNC_EXPORT_PRIVATE base::DictionaryValue* PasswordSpecificsDataToValue( 107 const sync_pb::PasswordSpecificsData& password_specifics_data); 108 109// Sub-protocol of NigoriSpecifics. 110 111base::DictionaryValue* DeviceInformationToValue( 112 const sync_pb::DeviceInformation& device_information); 113 114// Sub-protocol of HistoryDeleteDirectiveSpecifics. 115 116base::DictionaryValue* GlobalIdDirectiveToValue( 117 const sync_pb::GlobalIdDirective& global_id_directive); 118 119base::DictionaryValue* TimeRangeDirectiveToValue( 120 const sync_pb::TimeRangeDirective& time_range_directive); 121 122// Sub-protocol of Experiments. 123 124base::DictionaryValue* KeystoreEncryptionToValue( 125 const sync_pb::KeystoreEncryptionFlagsSpecifics& proto); 126 127// Sub protocols of SyncedNotifications. 128 129base::DictionaryValue* SimpleCollapsedLayoutToValue( 130 const sync_pb::SimpleCollapsedLayout& proto); 131 132base::DictionaryValue* CollapsedInfoToValue( 133 const sync_pb::CollapsedInfo& proto); 134 135base::DictionaryValue* RenderInfoToValue( 136 const sync_pb::SyncedNotificationRenderInfo& proto); 137 138base::DictionaryValue* CoalescedNotificationToValue( 139 const sync_pb::CoalescedSyncedNotification& proto); 140 141// Main *SpecificsToValue functions. 142 143SYNC_EXPORT_PRIVATE base::DictionaryValue* AppNotificationToValue( 144 const sync_pb::AppNotification& app_notification_specifics); 145 146base::DictionaryValue* AppSettingSpecificsToValue( 147 const sync_pb::AppSettingSpecifics& app_setting_specifics); 148 149SYNC_EXPORT_PRIVATE base::DictionaryValue* AppSpecificsToValue( 150 const sync_pb::AppSpecifics& app_specifics); 151 152SYNC_EXPORT_PRIVATE base::DictionaryValue* AutofillSpecificsToValue( 153 const sync_pb::AutofillSpecifics& autofill_specifics); 154 155SYNC_EXPORT_PRIVATE base::DictionaryValue* AutofillProfileSpecificsToValue( 156 const sync_pb::AutofillProfileSpecifics& autofill_profile_specifics); 157 158SYNC_EXPORT_PRIVATE base::DictionaryValue* BookmarkSpecificsToValue( 159 const sync_pb::BookmarkSpecifics& bookmark_specifics); 160 161SYNC_EXPORT_PRIVATE base::DictionaryValue* DeviceInfoSpecificsToValue( 162 const sync_pb::DeviceInfoSpecifics& device_info_specifics); 163 164SYNC_EXPORT_PRIVATE base::DictionaryValue* DictionarySpecificsToValue( 165 const sync_pb::DictionarySpecifics& dictionary_specifics); 166 167SYNC_EXPORT_PRIVATE base::DictionaryValue* ExperimentsSpecificsToValue( 168 const sync_pb::ExperimentsSpecifics& proto); 169 170SYNC_EXPORT_PRIVATE base::DictionaryValue* PriorityPreferenceSpecificsToValue( 171 const sync_pb::PriorityPreferenceSpecifics& proto); 172 173SYNC_EXPORT_PRIVATE base::DictionaryValue* ExtensionSettingSpecificsToValue( 174 const sync_pb::ExtensionSettingSpecifics& extension_setting_specifics); 175 176SYNC_EXPORT_PRIVATE base::DictionaryValue* ExtensionSpecificsToValue( 177 const sync_pb::ExtensionSpecifics& extension_specifics); 178 179SYNC_EXPORT_PRIVATE base::DictionaryValue* FaviconImageSpecificsToValue( 180 const sync_pb::FaviconImageSpecifics& favicon_image_specifics); 181 182SYNC_EXPORT_PRIVATE base::DictionaryValue* FaviconTrackingSpecificsToValue( 183 const sync_pb::FaviconTrackingSpecifics& favicon_tracking_specifics); 184 185SYNC_EXPORT base::DictionaryValue* HistoryDeleteDirectiveSpecificsToValue( 186 const sync_pb::HistoryDeleteDirectiveSpecifics& 187 history_delete_directive_specifics); 188 189SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSettingSpecificsToValue( 190 const sync_pb::ManagedUserSettingSpecifics& managed_user_setting_specifics); 191 192SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSpecificsToValue( 193 const sync_pb::ManagedUserSpecifics& managed_user_specifics); 194 195SYNC_EXPORT_PRIVATE base::DictionaryValue* NigoriSpecificsToValue( 196 const sync_pb::NigoriSpecifics& nigori_specifics); 197 198SYNC_EXPORT_PRIVATE base::DictionaryValue* PasswordSpecificsToValue( 199 const sync_pb::PasswordSpecifics& password_specifics); 200 201SYNC_EXPORT_PRIVATE base::DictionaryValue* PreferenceSpecificsToValue( 202 const sync_pb::PreferenceSpecifics& password_specifics); 203 204SYNC_EXPORT_PRIVATE base::DictionaryValue* SyncedNotificationSpecificsToValue( 205 const sync_pb::SyncedNotificationSpecifics& 206 synced_notification_specifics); 207 208SYNC_EXPORT_PRIVATE base::DictionaryValue* SearchEngineSpecificsToValue( 209 const sync_pb::SearchEngineSpecifics& search_engine_specifics); 210 211SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionSpecificsToValue( 212 const sync_pb::SessionSpecifics& session_specifics); 213 214SYNC_EXPORT_PRIVATE base::DictionaryValue* ThemeSpecificsToValue( 215 const sync_pb::ThemeSpecifics& theme_specifics); 216 217SYNC_EXPORT_PRIVATE base::DictionaryValue* TypedUrlSpecificsToValue( 218 const sync_pb::TypedUrlSpecifics& typed_url_specifics); 219 220// Any present extensions are mapped to sub-dictionary values with the 221// key equal to the extension name. 222SYNC_EXPORT_PRIVATE base::DictionaryValue* EntitySpecificsToValue( 223 const sync_pb::EntitySpecifics& specifics); 224 225SYNC_EXPORT_PRIVATE base::DictionaryValue* ClientToServerMessageToValue( 226 const sync_pb::ClientToServerMessage& proto, 227 bool include_specifics); 228 229SYNC_EXPORT_PRIVATE base::DictionaryValue* ClientToServerResponseToValue( 230 const sync_pb::ClientToServerResponse& proto, 231 bool include_specifics); 232 233base::DictionaryValue* DatatypeAssociationStatsToValue( 234 const sync_pb::DatatypeAssociationStats& proto); 235 236base::DictionaryValue* DebugEventInfoToValue( 237 const sync_pb::DebugEventInfo& proto); 238 239base::DictionaryValue* DebugInfoToValue( 240 const sync_pb::DebugInfo& proto); 241 242base::DictionaryValue* SyncCycleCompletedEventInfoToValue( 243 const sync_pb::SyncCycleCompletedEventInfo& proto); 244 245base::DictionaryValue* ClientConfigParamsToValue( 246 const sync_pb::ClientConfigParams& proto); 247 248} // namespace syncer 249 250#endif // SYNC_PROTOCOL_PROTO_VALUE_CONVERSIONS_H_ 251