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