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 AppListSpecifics;
18class AppNotification;
19class AppNotificationSettings;
20class AppSettingSpecifics;
21class AppSpecifics;
22class ArticleSpecifics;
23class AttachmentIdProto;
24class AutofillProfileSpecifics;
25class AutofillSpecifics;
26class BookmarkSpecifics;
27class ClientConfigParams;
28class ClientToServerMessage;
29class ClientToServerResponse;
30class CoalescedSyncedNotification;
31class CollapsedInfo;
32class DatatypeAssociationStats;
33class DebugEventInfo;
34class DebugInfo;
35class DeviceInfoSpecifics;
36class DeviceInformation;
37class DictionarySpecifics;
38class EncryptedData;
39class EntitySpecifics;
40class EverythingDirective;
41class ExperimentsSpecifics;
42class ExtensionSettingSpecifics;
43class ExtensionSpecifics;
44class FaviconImageSpecifics;
45class FaviconTrackingSpecifics;
46class GlobalIdDirective;
47class HistoryDeleteDirectiveSpecifics;
48class KeystoreEncryptionFlagsSpecifics;
49class Media;
50class ManagedUserSettingSpecifics;
51class ManagedUserSharedSettingSpecifics;
52class ManagedUserSpecifics;
53class NavigationRedirect;
54class NigoriSpecifics;
55class PasswordSpecifics;
56class PasswordSpecificsData;
57class PreferenceSpecifics;
58class PriorityPreferenceSpecifics;
59class SearchEngineSpecifics;
60class SessionHeader;
61class SessionSpecifics;
62class SessionTab;
63class SessionWindow;
64class SimpleCollapsedLayout;
65class SyncCycleCompletedEventInfo;
66class SyncEntity;
67class SyncedNotification;
68class SyncedNotificationAction;
69class SyncedNotificationAppInfo;
70class SyncedNotificationAppInfoSpecifics;
71class SyncedNotificationDestination;
72class SyncedNotificationImage;
73class SyncedNotificationProfileImage;
74class SyncedNotificationRenderInfo;
75class SyncedNotificationSpecifics;
76class TabNavigation;
77class Target;
78class ThemeSpecifics;
79class TimeRangeDirective;
80class TypedUrlSpecifics;
81}  // namespace sync_pb
82
83// Utility functions to convert sync protocol buffers to dictionaries.
84// Each protocol field is mapped to a key of the same name.  Repeated
85// fields are mapped to array values and sub-messages are mapped to
86// sub-dictionary values.
87//
88// TODO(akalin): Add has_* information.
89//
90// TODO(akalin): Improve enum support.
91
92namespace syncer {
93
94// Ownership of all returned DictionaryValues are transferred to the
95// caller.
96
97// TODO(akalin): Perhaps extend this to decrypt?
98SYNC_EXPORT_PRIVATE base::DictionaryValue* EncryptedDataToValue(
99    const sync_pb::EncryptedData& encrypted_data);
100
101// Sub-protocol of AppListSpecifics.
102SYNC_EXPORT_PRIVATE base::DictionaryValue* AppListSpecificsToValue(
103    const sync_pb::AppListSpecifics& proto);
104
105// Sub-protocol of AppSpecifics.
106SYNC_EXPORT_PRIVATE base::DictionaryValue* AppSettingsToValue(
107    const sync_pb::AppNotificationSettings& app_notification_settings);
108
109// Sub-protocols of SessionSpecifics.
110
111SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionHeaderToValue(
112    const sync_pb::SessionHeader& session_header);
113
114SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionTabToValue(
115    const sync_pb::SessionTab& session_tab);
116
117SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionWindowToValue(
118    const sync_pb::SessionWindow& session_window);
119
120SYNC_EXPORT_PRIVATE base::DictionaryValue* TabNavigationToValue(
121    const sync_pb::TabNavigation& tab_navigation);
122
123SYNC_EXPORT_PRIVATE base::DictionaryValue* NavigationRedirectToValue(
124    const sync_pb::NavigationRedirect& navigation_redirect);
125
126// Sub-protocol of PasswordSpecifics.
127
128SYNC_EXPORT_PRIVATE base::DictionaryValue* PasswordSpecificsDataToValue(
129    const sync_pb::PasswordSpecificsData& password_specifics_data);
130
131// Sub-protocol of NigoriSpecifics.
132
133base::DictionaryValue* DeviceInformationToValue(
134    const sync_pb::DeviceInformation& device_information);
135
136// Sub-protocol of HistoryDeleteDirectiveSpecifics.
137
138base::DictionaryValue* GlobalIdDirectiveToValue(
139    const sync_pb::GlobalIdDirective& global_id_directive);
140
141base::DictionaryValue* TimeRangeDirectiveToValue(
142    const sync_pb::TimeRangeDirective& time_range_directive);
143
144// Sub-protocol of Experiments.
145
146base::DictionaryValue* KeystoreEncryptionToValue(
147    const sync_pb::KeystoreEncryptionFlagsSpecifics& proto);
148
149// Sub protocols of SyncedNotifications.
150
151base::DictionaryValue* SimpleCollapsedLayoutToValue(
152    const sync_pb::SimpleCollapsedLayout& proto);
153
154base::DictionaryValue* CollapsedInfoToValue(
155    const sync_pb::CollapsedInfo& proto);
156
157base::DictionaryValue* RenderInfoToValue(
158    const sync_pb::SyncedNotificationRenderInfo& proto);
159
160base::DictionaryValue* CoalescedNotificationToValue(
161    const sync_pb::CoalescedSyncedNotification& proto);
162
163base::DictionaryValue* SyncedNotificationActionToValue(
164    const sync_pb::SyncedNotificationAction& action);
165
166base::DictionaryValue* SyncedNotificationDestinationToValue(
167    const sync_pb::SyncedNotificationDestination& destination);
168
169base::DictionaryValue* SyncedNotificationToValue(
170    const sync_pb::SyncedNotification& notification);
171
172SYNC_EXPORT_PRIVATE base::DictionaryValue* SessionSpecificsToValue(
173    const sync_pb::SessionSpecifics& session_specifics);
174
175SYNC_EXPORT_PRIVATE base::DictionaryValue* SyncedNotificationImageToValue(
176    const sync_pb::SyncedNotificationImage& image);
177
178SYNC_EXPORT_PRIVATE base::DictionaryValue*
179    SyncedNotificationProfileImageToValue(
180        const sync_pb::SyncedNotificationProfileImage& image);
181
182SYNC_EXPORT_PRIVATE base::DictionaryValue* TargetToValue(
183    const sync_pb::Target& target);
184
185// Main *SpecificsToValue functions.
186
187SYNC_EXPORT_PRIVATE base::DictionaryValue* AppNotificationToValue(
188    const sync_pb::AppNotification& app_notification_specifics);
189
190base::DictionaryValue* AppSettingSpecificsToValue(
191    const sync_pb::AppSettingSpecifics& app_setting_specifics);
192
193SYNC_EXPORT_PRIVATE base::DictionaryValue* AppSpecificsToValue(
194    const sync_pb::AppSpecifics& app_specifics);
195
196SYNC_EXPORT_PRIVATE base::DictionaryValue* ArticleSpecificsToValue(
197    const sync_pb::ArticleSpecifics& article_specifics);
198
199SYNC_EXPORT_PRIVATE base::DictionaryValue* AutofillSpecificsToValue(
200    const sync_pb::AutofillSpecifics& autofill_specifics);
201
202SYNC_EXPORT_PRIVATE base::DictionaryValue* AutofillProfileSpecificsToValue(
203    const sync_pb::AutofillProfileSpecifics& autofill_profile_specifics);
204
205SYNC_EXPORT_PRIVATE base::DictionaryValue* BookmarkSpecificsToValue(
206    const sync_pb::BookmarkSpecifics& bookmark_specifics);
207
208SYNC_EXPORT_PRIVATE base::DictionaryValue* DeviceInfoSpecificsToValue(
209    const sync_pb::DeviceInfoSpecifics& device_info_specifics);
210
211SYNC_EXPORT_PRIVATE base::DictionaryValue* DictionarySpecificsToValue(
212    const sync_pb::DictionarySpecifics& dictionary_specifics);
213
214SYNC_EXPORT_PRIVATE base::DictionaryValue* ExperimentsSpecificsToValue(
215    const sync_pb::ExperimentsSpecifics& proto);
216
217SYNC_EXPORT_PRIVATE base::DictionaryValue* PriorityPreferenceSpecificsToValue(
218    const sync_pb::PriorityPreferenceSpecifics& proto);
219
220SYNC_EXPORT_PRIVATE base::DictionaryValue* ExtensionSettingSpecificsToValue(
221    const sync_pb::ExtensionSettingSpecifics& extension_setting_specifics);
222
223SYNC_EXPORT_PRIVATE base::DictionaryValue* ExtensionSpecificsToValue(
224    const sync_pb::ExtensionSpecifics& extension_specifics);
225
226SYNC_EXPORT_PRIVATE base::DictionaryValue* FaviconImageSpecificsToValue(
227    const sync_pb::FaviconImageSpecifics& favicon_image_specifics);
228
229SYNC_EXPORT_PRIVATE base::DictionaryValue* FaviconTrackingSpecificsToValue(
230    const sync_pb::FaviconTrackingSpecifics& favicon_tracking_specifics);
231
232SYNC_EXPORT base::DictionaryValue* HistoryDeleteDirectiveSpecificsToValue(
233    const sync_pb::HistoryDeleteDirectiveSpecifics&
234        history_delete_directive_specifics);
235
236SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSettingSpecificsToValue(
237    const sync_pb::ManagedUserSettingSpecifics& managed_user_setting_specifics);
238
239SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSpecificsToValue(
240    const sync_pb::ManagedUserSpecifics& managed_user_specifics);
241
242SYNC_EXPORT_PRIVATE base::DictionaryValue*
243    ManagedUserSharedSettingSpecificsToValue(
244        const sync_pb::ManagedUserSharedSettingSpecifics&
245            managed_user_shared_setting_specifics);
246
247SYNC_EXPORT_PRIVATE base::DictionaryValue* MediaToValue(
248    const sync_pb::Media& media);
249
250SYNC_EXPORT_PRIVATE base::DictionaryValue* NigoriSpecificsToValue(
251    const sync_pb::NigoriSpecifics& nigori_specifics);
252
253SYNC_EXPORT_PRIVATE base::DictionaryValue* PasswordSpecificsToValue(
254    const sync_pb::PasswordSpecifics& password_specifics);
255
256SYNC_EXPORT_PRIVATE base::DictionaryValue* PreferenceSpecificsToValue(
257    const sync_pb::PreferenceSpecifics& password_specifics);
258
259SYNC_EXPORT_PRIVATE base::DictionaryValue*
260    SyncedNotificationAppInfoSpecificsToValue(
261        const sync_pb::SyncedNotificationAppInfoSpecifics&
262        synced_notification_specifics);
263
264SYNC_EXPORT_PRIVATE base::DictionaryValue* SyncedNotificationSpecificsToValue(
265    const sync_pb::SyncedNotificationSpecifics&
266    synced_notification_specifics);
267
268SYNC_EXPORT_PRIVATE base::DictionaryValue* SearchEngineSpecificsToValue(
269    const sync_pb::SearchEngineSpecifics& search_engine_specifics);
270
271SYNC_EXPORT_PRIVATE base::DictionaryValue* ThemeSpecificsToValue(
272    const sync_pb::ThemeSpecifics& theme_specifics);
273
274SYNC_EXPORT_PRIVATE base::DictionaryValue* TypedUrlSpecificsToValue(
275    const sync_pb::TypedUrlSpecifics& typed_url_specifics);
276
277// Any present extensions are mapped to sub-dictionary values with the
278// key equal to the extension name.
279SYNC_EXPORT_PRIVATE base::DictionaryValue* EntitySpecificsToValue(
280    const sync_pb::EntitySpecifics& specifics);
281
282SYNC_EXPORT_PRIVATE base::DictionaryValue* SyncEntityToValue(
283    const sync_pb::SyncEntity& entity,
284    bool include_specifics);
285
286SYNC_EXPORT_PRIVATE base::DictionaryValue* ClientToServerMessageToValue(
287    const sync_pb::ClientToServerMessage& proto,
288    bool include_specifics);
289
290SYNC_EXPORT_PRIVATE base::DictionaryValue* ClientToServerResponseToValue(
291    const sync_pb::ClientToServerResponse& proto,
292    bool include_specifics);
293
294base::DictionaryValue* DatatypeAssociationStatsToValue(
295    const sync_pb::DatatypeAssociationStats& proto);
296
297base::DictionaryValue* DebugEventInfoToValue(
298    const sync_pb::DebugEventInfo& proto);
299
300base::DictionaryValue* DebugInfoToValue(
301    const sync_pb::DebugInfo& proto);
302
303base::DictionaryValue* SyncCycleCompletedEventInfoToValue(
304    const sync_pb::SyncCycleCompletedEventInfo& proto);
305
306base::DictionaryValue* ClientConfigParamsToValue(
307    const sync_pb::ClientConfigParams& proto);
308
309SYNC_EXPORT_PRIVATE base::DictionaryValue* AttachmentIdProtoToValue(
310    const sync_pb::AttachmentIdProto& proto);
311
312}  // namespace syncer
313
314#endif  // SYNC_PROTOCOL_PROTO_VALUE_CONVERSIONS_H_
315