Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Unified Diff: sync/protocol/proto_value_conversions.cc

Issue 2084243004: [WIP][tracing] Add memory dump provider for sync Directory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sync/protocol/proto_value_conversions.cc
diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc
index fc6192a7b1c36a63f5ce3fc9e5d2feaae81af80b..7d8dde4d839c77dcc08fd0f48f4bb1ea158d1b37 100644
--- a/sync/protocol/proto_value_conversions.cc
+++ b/sync/protocol/proto_value_conversions.cc
@@ -51,142 +51,437 @@ namespace syncer {
namespace {
-// Basic Type -> Value functions.
+enum ResultType {
+ MEMORY_USAGE, // Visitors return only the memory usage
+ CONVERT_TO_VALUE // Visitors return only the dictionary value.
+};
+
+struct VisitorResult {
+ VisitorResult(size_t usage) : memory_usage(usage) {}
+ VisitorResult(std::unique_ptr<base::Value> value)
+ : memory_usage(0), as_value(std::move(value)) {}
+
+ base::DictionaryValue* as_dict_value() {
+ DCHECK(as_value);
+ base::DictionaryValue* value;
+ as_value->GetAsDictionary(&value);
+ return value;
+ }
+ std::unique_ptr<base::DictionaryValue> TakeDictValue() {
+ base::DictionaryValue* value;
+ bool res = as_value.release()->GetAsDictionary(&value);
+ DCHECK(res);
+ return base::WrapUnique(value);
+ }
+
+ size_t memory_usage;
+ std::unique_ptr<base::Value> as_value;
+};
-std::unique_ptr<base::StringValue> MakeInt64Value(int64_t x) {
- return base::WrapUnique(new base::StringValue(base::Int64ToString(x)));
+VisitorResult MakeInt64Value(int64_t x, const ResultType result_type) {
+ if (result_type == MEMORY_USAGE) {
+ return VisitorResult(0);
+ }
+ return VisitorResult(
+ base::WrapUnique(new base::StringValue(base::Int64ToString(x))));
}
// TODO(akalin): Perhaps make JSONWriter support BinaryValue and use
// that instead of a StringValue.
-std::string Base64EncodeString(const std::string& bytes) {
+VisitorResult Base64EncodeString(const std::string& bytes,
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE)
+ return VisitorResult(bytes.capacity() + 1);
std::string bytes_base64;
base::Base64Encode(bytes, &bytes_base64);
- return bytes_base64;
+ return VisitorResult(base::WrapUnique(new base::StringValue(bytes_base64)));
}
-std::unique_ptr<base::StringValue> MakeStringValue(const std::string& str) {
- return base::WrapUnique(new base::StringValue(str));
+VisitorResult MakeStringValue(const std::string& str,
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE)
+ return VisitorResult(str.capacity() + 1);
+ return VisitorResult(base::WrapUnique(new base::StringValue(str)));
}
// T is the field type, F is either RepeatedField or RepeatedPtrField,
// and V is a subclass of Value.
-template <class T, class F, class V>
-std::unique_ptr<base::ListValue> MakeRepeatedValue(const F& fields,
- V (*converter_fn)(T)) {
+template <class T, class F>
+VisitorResult MakeRepeatedVisit(const F& fields,
+ VisitorResult (*converter_fn)(T,
+ const ResultType),
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE) {
+ size_t total = 0;
+ for (typename F::const_iterator it = fields.begin(); it != fields.end();
+ ++it) {
+ total += converter_fn(*it, result_type).memory_usage + sizeof(T);
+ }
+ return VisitorResult(total);
+ }
std::unique_ptr<base::ListValue> list(new base::ListValue());
for (typename F::const_iterator it = fields.begin(); it != fields.end();
++it) {
- list->Append(converter_fn(*it));
+ list->Append(converter_fn(*it, result_type).as_value);
}
- return list;
+ return VisitorResult(std::move(list));
}
} // namespace
// Helper macros to reduce the amount of boilerplate.
-#define SET_TYPE(field, set_fn, transform) \
- if (proto.has_##field()) { \
- value->set_fn(#field, transform(proto.field())); \
+#define SET_WITH_EXPR(field, visit_expr, excess_size) \
+ if (result_type == MEMORY_USAGE) { \
+ result.memory_usage += visit_expr.memory_usage + excess_size; \
+ } else { \
+ result.as_dict_value()->Set(#field, visit_expr.as_value); \
+ }
+
+#define SET_TYPE(field, set_fn, transform) \
+ if (result_type == CONVERT_TO_VALUE && proto.has_##field()) { \
+ result.as_dict_value()->set_fn(#field, transform(proto.field())); \
+ }
+#define SET(field, fn) \
+ if (proto.has_##field()) { \
+ SET_WITH_EXPR(field, fn(proto.field(), result_type), \
+ sizeof(proto.field())); \
}
-#define SET(field, fn) SET_TYPE(field, Set, fn)
#define SET_REP(field, fn) \
- value->Set(#field, MakeRepeatedValue(proto.field(), fn))
+ SET_WITH_EXPR(field, MakeRepeatedVisit(proto.field(), fn, result_type), 0)
#define SET_ENUM(field, fn) SET_TYPE(field, SetString, fn)
#define SET_BOOL(field) SET_TYPE(field, SetBoolean, )
-#define SET_BYTES(field) SET_TYPE(field, SetString, Base64EncodeString)
+#define SET_BYTES(field) \
+ SET_WITH_EXPR(field, Base64EncodeString(proto.field(), result_type), \
+ sizeof(proto.field()))
#define SET_INT32(field) SET_TYPE(field, SetString, base::Int64ToString)
#define SET_INT32_REP(field) SET_REP(field, MakeInt64Value)
#define SET_INT64(field) SET_TYPE(field, SetString, base::Int64ToString)
#define SET_INT64_REP(field) SET_REP(field, MakeInt64Value)
-#define SET_STR(field) SET_TYPE(field, SetString, )
+#define SET_STR(field) \
+ if (proto.has_##field()) { \
+ SET_WITH_EXPR(field, MakeStringValue(proto.field(), result_type), \
+ sizeof(std::string)); \
+ }
#define SET_TIME_STR(field) SET_TYPE(field, SetString, TimestampToString)
#define SET_STR_REP(field) \
- value->Set( \
- #field, \
- MakeRepeatedValue<const std::string&, \
- google::protobuf::RepeatedPtrField<std::string>, \
- std::unique_ptr<base::StringValue>>(proto.field(), \
- MakeStringValue))
-#define SET_EXPERIMENT_ENABLED_FIELD(field) \
- do { \
- if (proto.has_##field() && \
- proto.field().has_enabled()) { \
- value->Set(#field, \
- new base::FundamentalValue( \
- proto.field().enabled())); \
- } \
- } while (0)
-
-#define SET_FIELD(field, fn) \
- do { \
- if (specifics.has_##field()) { \
- value->Set(#field, fn(specifics.field())); \
- } \
- } while (0)
+ SET_WITH_EXPR( \
+ field, \
+ (MakeRepeatedVisit<const std::string&, \
+ google::protobuf::RepeatedPtrField<std::string>>( \
+ proto.field(), MakeStringValue, result_type)), \
+ 0);
+#define SET_EXPERIMENT_ENABLED_FIELD(field) \
+ if (proto.has_##field()) { \
+ if (result_type == MEMORY_USAGE) { \
+ result.memory_usage += sizeof(proto.field()); \
+ } else if (proto.field().has_enabled()) { \
+ result.as_dict_value()->Set( \
+ #field, new base::FundamentalValue(proto.field().enabled())); \
+ } \
+ }
+
+#define SET_FIELD(field, fn) \
+ if (specifics.has_##field()) { \
+ SET_WITH_EXPR(field, fn(specifics.field(), result_type), \
+ sizeof(specifics.field())); \
+ }
// If you add another macro, don't forget to add an #undef at the end
// of this file, too.
-std::unique_ptr<base::DictionaryValue> EncryptedDataToValue(
- const sync_pb::EncryptedData& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult EncryptedDataVisit(const sync_pb::EncryptedData& encrypted_data,
+ const ResultType result_type);
+
+VisitorResult AppListSpecificsVisit(const sync_pb::AppListSpecifics& proto,
+ const ResultType result_type);
+
+VisitorResult AppSettingsVisit(
+ const sync_pb::AppNotificationSettings& app_notification_settings,
+ const ResultType result_type);
+
+VisitorResult LinkedAppIconInfoVisit(
+ const sync_pb::LinkedAppIconInfo& linked_app_icon_info,
+ const ResultType result_type);
+
+VisitorResult SessionHeaderVisit(const sync_pb::SessionHeader& session_header,
+ const ResultType result_type);
+
+VisitorResult SessionTabVisit(const sync_pb::SessionTab& session_tab,
+ const ResultType result_type);
+
+VisitorResult SessionWindowVisit(const sync_pb::SessionWindow& session_window,
+ const ResultType result_type);
+
+VisitorResult TabNavigationVisit(const sync_pb::TabNavigation& tab_navigation,
+ const ResultType result_type);
+
+VisitorResult NavigationRedirectVisit(
+ const sync_pb::NavigationRedirect& navigation_redirect,
+ const ResultType result_type);
+
+VisitorResult PasswordSpecificsDataVisit(
+ const sync_pb::PasswordSpecificsData& password_specifics_data,
+ const ResultType result_type);
+
+VisitorResult GlobalIdDirectiveVisit(
+ const sync_pb::GlobalIdDirective& global_id_directive,
+ const ResultType result_type);
+
+VisitorResult TimeRangeDirectiveVisit(
+ const sync_pb::TimeRangeDirective& time_range_directive,
+ const ResultType result_type);
+
+VisitorResult SessionSpecificsVisit(
+ const sync_pb::SessionSpecifics& session_specifics,
+ const ResultType result_type);
+
+VisitorResult ArcPackageSpecificsVisit(
+ const sync_pb::ArcPackageSpecifics& proto,
+ const ResultType result_type);
+
+VisitorResult AppNotificationVisit(
+ const sync_pb::AppNotification& app_notification_specifics,
+ const ResultType result_type);
+
+VisitorResult AppSettingSpecificsVisit(
+ const sync_pb::AppSettingSpecifics& app_setting_specifics,
+ const ResultType result_type);
+
+VisitorResult AppSpecificsVisit(const sync_pb::AppSpecifics& app_specifics,
+ const ResultType result_type);
+
+VisitorResult ArticleSpecificsVisit(
+ const sync_pb::ArticleSpecifics& article_specifics,
+ const ResultType result_type);
+
+VisitorResult AutofillSpecificsVisit(
+ const sync_pb::AutofillSpecifics& autofill_specifics,
+ const ResultType result_type);
+
+VisitorResult AutofillProfileSpecificsVisit(
+ const sync_pb::AutofillProfileSpecifics& autofill_profile_specifics,
+ const ResultType result_type);
+
+VisitorResult WalletMetadataSpecificsVisit(
+ const sync_pb::WalletMetadataSpecifics& wallet_metadata_specifics,
+ const ResultType result_type);
+
+VisitorResult AutofillWalletSpecificsVisit(
+ const sync_pb::AutofillWalletSpecifics& autofill_wallet_specifics,
+ const ResultType result_type);
+
+VisitorResult BookmarkSpecificsVisit(
+ const sync_pb::BookmarkSpecifics& bookmark_specifics,
+ const ResultType result_type);
+
+VisitorResult DeviceInfoSpecificsVisit(
+ const sync_pb::DeviceInfoSpecifics& device_info_specifics,
+ const ResultType result_type);
+
+VisitorResult DictionarySpecificsVisit(
+ const sync_pb::DictionarySpecifics& dictionary_specifics,
+ const ResultType result_type);
+
+VisitorResult ExperimentsSpecificsVisit(
+ const sync_pb::ExperimentsSpecifics& proto,
+ const ResultType result_type);
+
+VisitorResult PriorityPreferenceSpecificsVisit(
+ const sync_pb::PriorityPreferenceSpecifics& proto,
+ const ResultType result_type);
+
+VisitorResult ExtensionSettingSpecificsVisit(
+ const sync_pb::ExtensionSettingSpecifics& extension_setting_specifics,
+ const ResultType result_type);
+
+VisitorResult ExtensionSpecificsVisit(
+ const sync_pb::ExtensionSpecifics& extension_specifics,
+ const ResultType result_type);
+
+VisitorResult FaviconImageSpecificsVisit(
+ const sync_pb::FaviconImageSpecifics& favicon_image_specifics,
+ const ResultType result_type);
+
+VisitorResult FaviconTrackingSpecificsVisit(
+ const sync_pb::FaviconTrackingSpecifics& favicon_tracking_specifics,
+ const ResultType result_type);
+
+VisitorResult HistoryDeleteDirectiveSpecificsVisit(
+ const sync_pb::HistoryDeleteDirectiveSpecifics&
+ history_delete_directive_specifics,
+ const ResultType result_type);
+
+VisitorResult ManagedUserSettingSpecificsVisit(
+ const sync_pb::ManagedUserSettingSpecifics& managed_user_setting_specifics,
+ const ResultType result_type);
+
+VisitorResult ManagedUserSpecificsVisit(
+ const sync_pb::ManagedUserSpecifics& managed_user_specifics,
+ const ResultType result_type);
+
+VisitorResult ManagedUserSharedSettingSpecificsVisit(
+ const sync_pb::ManagedUserSharedSettingSpecifics&
+ managed_user_shared_setting_specifics,
+ const ResultType result_type);
+
+VisitorResult ManagedUserWhitelistSpecificsVisit(
+ const sync_pb::ManagedUserWhitelistSpecifics&
+ managed_user_whitelist_specifics,
+ const ResultType result_type);
+
+VisitorResult NigoriSpecificsVisit(
+ const sync_pb::NigoriSpecifics& nigori_specifics,
+ const ResultType result_type);
+
+VisitorResult PasswordSpecificsVisit(
+ const sync_pb::PasswordSpecifics& password_specifics,
+ const ResultType result_type);
+
+VisitorResult PreferenceSpecificsVisit(
+ const sync_pb::PreferenceSpecifics& password_specifics,
+ const ResultType result_type);
+
+VisitorResult SyncedNotificationAppInfoSpecificsVisit(
+ const sync_pb::SyncedNotificationAppInfoSpecifics&
+ synced_notification_specifics,
+ const ResultType result_type);
+
+VisitorResult SyncedNotificationSpecificsVisit(
+ const sync_pb::SyncedNotificationSpecifics& synced_notification_specifics,
+ const ResultType result_type);
+
+VisitorResult SearchEngineSpecificsVisit(
+ const sync_pb::SearchEngineSpecifics& search_engine_specifics,
+ const ResultType result_type);
+
+VisitorResult ThemeSpecificsVisit(
+ const sync_pb::ThemeSpecifics& theme_specifics,
+ const ResultType result_type);
+
+VisitorResult TypedUrlSpecificsVisit(
+ const sync_pb::TypedUrlSpecifics& typed_url_specifics,
+ const ResultType result_type);
+
+VisitorResult WalletMaskedCreditCardVisit(
+ const sync_pb::WalletMaskedCreditCard& wallet_masked_card,
+ const ResultType result_type);
+
+VisitorResult WalletPostalAddressVisit(
+ const sync_pb::WalletPostalAddress& wallet_postal_address,
+ const ResultType result_type);
+
+VisitorResult WifiCredentialSpecificsVisit(
+ const sync_pb::WifiCredentialSpecifics& wifi_credential_specifics,
+ const ResultType result_type);
+
+VisitorResult EntitySpecificsVisit(const sync_pb::EntitySpecifics& specifics,
+ const ResultType result_type);
+
+VisitorResult SyncEntityVisit(const sync_pb::SyncEntity& entity,
+ bool include_specifics,
+ const ResultType result_type);
+
+VisitorResult ClientToServerMessageVisit(
+ const sync_pb::ClientToServerMessage& proto,
+ bool include_specifics,
+ const ResultType result_type);
+
+VisitorResult ClientToServerResponseVisit(
+ const sync_pb::ClientToServerResponse& proto,
+ bool include_specifics,
+ const ResultType result_type);
+
+VisitorResult DatatypeAssociationStatsVisit(
+ const sync_pb::DatatypeAssociationStats& proto,
+ const ResultType result_type);
+
+VisitorResult DebugEventInfoVisit(const sync_pb::DebugEventInfo& proto,
+ const ResultType result_type);
+
+VisitorResult DebugInfoVisit(const sync_pb::DebugInfo& proto,
+ const ResultType result_type);
+
+VisitorResult SyncCycleCompletedEventInfoVisit(
+ const sync_pb::SyncCycleCompletedEventInfo& proto,
+ const ResultType result_type);
+
+VisitorResult ClientConfigParamsVisit(const sync_pb::ClientConfigParams& proto,
+ const ResultType result_type);
+
+VisitorResult AttachmentIdProtoVisit(const sync_pb::AttachmentIdProto& proto,
+ const ResultType result_type);
+
+VisitorResult EncryptedDataVisit(const sync_pb::EncryptedData& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(key_name);
// TODO(akalin): Shouldn't blob be of type bytes instead of string?
SET_BYTES(blob);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AppSettingsToValue(
- const sync_pb::AppNotificationSettings& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AppSettingsVisit(const sync_pb::AppNotificationSettings& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BOOL(initial_setup_done);
SET_BOOL(disabled);
SET_STR(oauth_client_id);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> SessionHeaderToValue(
- const sync_pb::SessionHeader& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_REP(window, SessionWindowToValue);
+VisitorResult SessionHeaderVisit(const sync_pb::SessionHeader& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_REP(window, SessionWindowVisit);
SET_STR(client_name);
SET_ENUM(device_type, GetDeviceTypeString);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> SessionTabToValue(
- const sync_pb::SessionTab& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SessionTabVisit(const sync_pb::SessionTab& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(tab_id);
SET_INT32(window_id);
SET_INT32(tab_visual_index);
SET_INT32(current_navigation_index);
SET_BOOL(pinned);
SET_STR(extension_app_id);
- SET_REP(navigation, TabNavigationToValue);
+ SET_REP(navigation, TabNavigationVisit);
SET_BYTES(favicon);
SET_ENUM(favicon_type, GetFaviconTypeString);
SET_STR(favicon_source);
SET_REP(variation_id, MakeInt64Value);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> SessionWindowToValue(
- const sync_pb::SessionWindow& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SessionWindowVisit(const sync_pb::SessionWindow& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(window_id);
SET_INT32(selected_tab_index);
SET_INT32_REP(tab);
SET_ENUM(browser_type, GetBrowserTypeString);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> TabNavigationToValue(
- const sync_pb::TabNavigation& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult TabNavigationVisit(const sync_pb::TabNavigation& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(virtual_url);
SET_STR(referrer);
SET_STR(title);
@@ -207,22 +502,27 @@ std::unique_ptr<base::DictionaryValue> TabNavigationToValue(
SET_INT32(http_status_code);
SET_INT32(obsolete_referrer_policy);
SET_BOOL(is_restored);
- SET_REP(navigation_redirect, NavigationRedirectToValue);
+ SET_REP(navigation_redirect, NavigationRedirectVisit);
SET_STR(last_navigation_redirect_url);
SET_INT32(correct_referrer_policy);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> NavigationRedirectToValue(
- const sync_pb::NavigationRedirect& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult NavigationRedirectVisit(const sync_pb::NavigationRedirect& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(url);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> PasswordSpecificsDataToValue(
- const sync_pb::PasswordSpecificsData& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult PasswordSpecificsDataVisit(
+ const sync_pb::PasswordSpecificsData& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(scheme);
SET_STR(signon_realm);
SET_STR(origin);
@@ -230,7 +530,8 @@ std::unique_ptr<base::DictionaryValue> PasswordSpecificsDataToValue(
SET_STR(username_element);
SET_STR(username_value);
SET_STR(password_element);
- value->SetString("password_value", "<redacted>");
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_dict_value()->SetString("password_value", "<redacted>");
SET_BOOL(ssl_valid);
SET_BOOL(preferred);
SET_INT64(date_created);
@@ -240,29 +541,35 @@ std::unique_ptr<base::DictionaryValue> PasswordSpecificsDataToValue(
SET_STR(display_name);
SET_STR(avatar_url);
SET_STR(federation_url);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> GlobalIdDirectiveToValue(
- const sync_pb::GlobalIdDirective& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult GlobalIdDirectiveVisit(const sync_pb::GlobalIdDirective& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT64_REP(global_id);
SET_INT64(start_time_usec);
SET_INT64(end_time_usec);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> TimeRangeDirectiveToValue(
- const sync_pb::TimeRangeDirective& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult TimeRangeDirectiveVisit(const sync_pb::TimeRangeDirective& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT64(start_time_usec);
SET_INT64(end_time_usec);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AppListSpecificsToValue(
- const sync_pb::AppListSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AppListSpecificsVisit(const sync_pb::AppListSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(item_id);
SET_ENUM(item_type, GetAppListItemTypeString);
SET_STR(item_name);
@@ -270,23 +577,28 @@ std::unique_ptr<base::DictionaryValue> AppListSpecificsToValue(
SET_STR(item_ordinal);
SET_STR(item_pin_ordinal);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ArcPackageSpecificsToValue(
- const sync_pb::ArcPackageSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ArcPackageSpecificsVisit(
+ const sync_pb::ArcPackageSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(package_name);
SET_INT32(package_version);
SET_INT64(last_backup_android_id);
SET_INT64(last_backup_time);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AppNotificationToValue(
- const sync_pb::AppNotification& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AppNotificationVisit(const sync_pb::AppNotification& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(guid);
SET_STR(app_id);
SET_INT64(creation_timestamp_ms);
@@ -294,53 +606,65 @@ std::unique_ptr<base::DictionaryValue> AppNotificationToValue(
SET_STR(body_text);
SET_STR(link_url);
SET_STR(link_text);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AppSettingSpecificsToValue(
- const sync_pb::AppSettingSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(extension_setting, ExtensionSettingSpecificsToValue);
- return value;
+VisitorResult AppSettingSpecificsVisit(
+ const sync_pb::AppSettingSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(extension_setting, ExtensionSettingSpecificsVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> LinkedAppIconInfoToValue(
- const sync_pb::LinkedAppIconInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult LinkedAppIconInfoVisit(const sync_pb::LinkedAppIconInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(url);
SET_INT32(size);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AppSpecificsToValue(
- const sync_pb::AppSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(extension, ExtensionSpecificsToValue);
- SET(notification_settings, AppSettingsToValue);
+VisitorResult AppSpecificsVisit(const sync_pb::AppSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(extension, ExtensionSpecificsVisit);
+ SET(notification_settings, AppSettingsVisit);
SET_STR(app_launch_ordinal);
SET_STR(page_ordinal);
SET_ENUM(launch_type, GetLaunchTypeString);
SET_STR(bookmark_app_url);
SET_STR(bookmark_app_description);
SET_STR(bookmark_app_icon_color);
- SET_REP(linked_app_icons, LinkedAppIconInfoToValue);
+ SET_REP(linked_app_icons, LinkedAppIconInfoVisit);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AutofillSpecificsToValue(
- const sync_pb::AutofillSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AutofillSpecificsVisit(const sync_pb::AutofillSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(name);
SET_STR(value);
SET_INT64_REP(usage_timestamp);
- SET(profile, AutofillProfileSpecificsToValue);
- return value;
+ SET(profile, AutofillProfileSpecificsVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AutofillProfileSpecificsToValue(
- const sync_pb::AutofillProfileSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AutofillProfileSpecificsVisit(
+ const sync_pb::AutofillProfileSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(guid);
SET_STR(origin);
SET_INT64(use_count);
@@ -366,110 +690,138 @@ std::unique_ptr<base::DictionaryValue> AutofillProfileSpecificsToValue(
SET_STR(address_home_language_code);
SET_STR_REP(phone_home_whole_number);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> WalletMetadataSpecificsToValue(
- const sync_pb::WalletMetadataSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult WalletMetadataSpecificsVisit(
+ const sync_pb::WalletMetadataSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(type, GetWalletMetadataTypeString);
SET_STR(id);
SET_INT64(use_count);
SET_INT64(use_date);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> AutofillWalletSpecificsToValue(
- const sync_pb::AutofillWalletSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult AutofillWalletSpecificsVisit(
+ const sync_pb::AutofillWalletSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(type, GetWalletInfoTypeString);
if (proto.type() == sync_pb::AutofillWalletSpecifics::MASKED_CREDIT_CARD) {
- value->Set("masked_card",
- WalletMaskedCreditCardToValue(proto.masked_card()));
+ SET_WITH_EXPR(masked_card,
+ WalletMaskedCreditCardVisit(proto.masked_card(), result_type),
+ sizeof(sync_pb::WalletMaskedCreditCard));
} else if (proto.type() == sync_pb::AutofillWalletSpecifics::POSTAL_ADDRESS) {
- value->Set("address",
- WalletPostalAddressToValue(proto.address()));
+ SET_WITH_EXPR(address,
+ WalletPostalAddressVisit(proto.address(), result_type),
+ sizeof(sync_pb::WalletPostalAddress));
}
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> MetaInfoToValue(
- const sync_pb::MetaInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult MetaInfoVisit(const sync_pb::MetaInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(key);
SET_STR(value);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> BookmarkSpecificsToValue(
- const sync_pb::BookmarkSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult BookmarkSpecificsVisit(const sync_pb::BookmarkSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(url);
SET_BYTES(favicon);
SET_STR(title);
SET_INT64(creation_time_us);
SET_STR(icon_url);
- SET_REP(meta_info, &MetaInfoToValue);
- return value;
+ SET_REP(meta_info, &MetaInfoVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DeviceInfoSpecificsToValue(
- const sync_pb::DeviceInfoSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DeviceInfoSpecificsVisit(
+ const sync_pb::DeviceInfoSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(cache_guid);
SET_STR(client_name);
SET_ENUM(device_type, GetDeviceTypeString);
SET_STR(sync_user_agent);
SET_STR(chrome_version);
SET_STR(signin_scoped_device_id);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DictionarySpecificsToValue(
- const sync_pb::DictionarySpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DictionarySpecificsVisit(
+ const sync_pb::DictionarySpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(word);
- return value;
+ return result;
}
namespace {
-std::unique_ptr<base::DictionaryValue> FaviconSyncFlagsToValue(
- const sync_pb::FaviconSyncFlags& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult FaviconSyncFlagsVisit(const sync_pb::FaviconSyncFlags& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BOOL(enabled);
SET_INT32(favicon_sync_limit);
- return value;
+ return result;
}
} // namespace
-std::unique_ptr<base::DictionaryValue> ExperimentsSpecificsToValue(
- const sync_pb::ExperimentsSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ExperimentsSpecificsVisit(
+ const sync_pb::ExperimentsSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_EXPERIMENT_ENABLED_FIELD(keystore_encryption);
SET_EXPERIMENT_ENABLED_FIELD(history_delete_directives);
SET_EXPERIMENT_ENABLED_FIELD(autofill_culling);
SET_EXPERIMENT_ENABLED_FIELD(pre_commit_update_avoidance);
- SET(favicon_sync, FaviconSyncFlagsToValue);
+ SET(favicon_sync, FaviconSyncFlagsVisit);
SET_EXPERIMENT_ENABLED_FIELD(gcm_channel);
SET_EXPERIMENT_ENABLED_FIELD(gcm_invalidations);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ExtensionSettingSpecificsToValue(
- const sync_pb::ExtensionSettingSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ExtensionSettingSpecificsVisit(
+ const sync_pb::ExtensionSettingSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(extension_id);
SET_STR(key);
SET_STR(value);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ExtensionSpecificsToValue(
- const sync_pb::ExtensionSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ExtensionSpecificsVisit(const sync_pb::ExtensionSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id);
SET_STR(version);
SET_STR(update_url);
@@ -480,90 +832,115 @@ std::unique_ptr<base::DictionaryValue> ExtensionSpecificsToValue(
SET_BOOL(installed_by_custodian);
SET_BOOL(all_urls_enabled);
SET_INT32(disable_reasons);
- return value;
+ return result;
}
namespace {
-std::unique_ptr<base::DictionaryValue> FaviconDataToValue(
- const sync_pb::FaviconData& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult FaviconDataVisit(const sync_pb::FaviconData& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BYTES(favicon);
SET_INT32(width);
SET_INT32(height);
- return value;
+ return result;
}
} // namespace
-std::unique_ptr<base::DictionaryValue> FaviconImageSpecificsToValue(
- const sync_pb::FaviconImageSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult FaviconImageSpecificsVisit(
+ const sync_pb::FaviconImageSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(favicon_url);
- SET(favicon_web, FaviconDataToValue);
- SET(favicon_web_32, FaviconDataToValue);
- SET(favicon_touch_64, FaviconDataToValue);
- SET(favicon_touch_precomposed_64, FaviconDataToValue);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> FaviconTrackingSpecificsToValue(
- const sync_pb::FaviconTrackingSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+ SET(favicon_web, FaviconDataVisit);
+ SET(favicon_web_32, FaviconDataVisit);
+ SET(favicon_touch_64, FaviconDataVisit);
+ SET(favicon_touch_precomposed_64, FaviconDataVisit);
+ return result;
+}
+
+VisitorResult FaviconTrackingSpecificsVisit(
+ const sync_pb::FaviconTrackingSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(favicon_url);
SET_INT64(last_visit_time_ms)
SET_BOOL(is_bookmarked);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> HistoryDeleteDirectiveSpecificsToValue(
- const sync_pb::HistoryDeleteDirectiveSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(global_id_directive, GlobalIdDirectiveToValue);
- SET(time_range_directive, TimeRangeDirectiveToValue);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> ManagedUserSettingSpecificsToValue(
- const sync_pb::ManagedUserSettingSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+ return result;
+}
+
+VisitorResult HistoryDeleteDirectiveSpecificsVisit(
+ const sync_pb::HistoryDeleteDirectiveSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(global_id_directive, GlobalIdDirectiveVisit);
+ SET(time_range_directive, TimeRangeDirectiveVisit);
+ return result;
+}
+
+VisitorResult ManagedUserSettingSpecificsVisit(
+ const sync_pb::ManagedUserSettingSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(name);
SET_STR(value);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ManagedUserSpecificsToValue(
- const sync_pb::ManagedUserSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ManagedUserSpecificsVisit(
+ const sync_pb::ManagedUserSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id);
SET_STR(name);
SET_BOOL(acknowledged);
SET_STR(master_key);
SET_STR(chrome_avatar);
SET_STR(chromeos_avatar);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ManagedUserSharedSettingSpecificsToValue(
- const sync_pb::ManagedUserSharedSettingSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ManagedUserSharedSettingSpecificsVisit(
+ const sync_pb::ManagedUserSharedSettingSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(mu_id);
SET_STR(key);
SET_STR(value);
SET_BOOL(acknowledged);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ManagedUserWhitelistSpecificsToValue(
- const sync_pb::ManagedUserWhitelistSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ManagedUserWhitelistSpecificsVisit(
+ const sync_pb::ManagedUserWhitelistSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id);
SET_STR(name);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> NigoriSpecificsToValue(
- const sync_pb::NigoriSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(encryption_keybag, EncryptedDataToValue);
+VisitorResult NigoriSpecificsVisit(const sync_pb::NigoriSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(encryption_keybag, EncryptedDataVisit);
SET_BOOL(keybag_is_frozen);
SET_BOOL(encrypt_bookmarks);
SET_BOOL(encrypt_preferences);
@@ -574,75 +951,99 @@ std::unique_ptr<base::DictionaryValue> NigoriSpecificsToValue(
SET_BOOL(encrypt_extension_settings);
SET_BOOL(encrypt_extensions);
SET_BOOL(encrypt_sessions);
+ SET_BOOL(encrypt_app_notifications);
SET_BOOL(encrypt_app_settings);
SET_BOOL(encrypt_apps);
SET_BOOL(encrypt_search_engines);
SET_BOOL(encrypt_dictionary);
+ SET_BOOL(encrypt_favicon_images);
+ SET_BOOL(encrypt_favicon_tracking);
SET_BOOL(encrypt_articles);
SET_BOOL(encrypt_app_list);
+ SET_BOOL(encrypt_autofill_wallet_metadata);
SET_BOOL(encrypt_arc_package);
SET_BOOL(encrypt_everything);
SET_BOOL(server_only_was_missing_keystore_migration_time);
SET_BOOL(sync_tab_favicons);
SET_ENUM(passphrase_type, PassphraseTypeString);
- SET(keystore_decryptor_token, EncryptedDataToValue);
+ SET(keystore_decryptor_token, EncryptedDataVisit);
SET_INT64(keystore_migration_time);
SET_INT64(custom_passphrase_time);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ArticlePageToValue(
- const sync_pb::ArticlePage& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ArticlePageVisit(const sync_pb::ArticlePage& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(url);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ArticleSpecificsToValue(
- const sync_pb::ArticleSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ArticleSpecificsVisit(const sync_pb::ArticleSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(entry_id);
SET_STR(title);
- SET_REP(pages, ArticlePageToValue);
- return value;
+ SET_REP(pages, ArticlePageVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> PasswordSpecificsToValue(
- const sync_pb::PasswordSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(encrypted, EncryptedDataToValue);
- return value;
+VisitorResult PasswordSpecificsVisit(const sync_pb::PasswordSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(encrypted, EncryptedDataVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> PreferenceSpecificsToValue(
- const sync_pb::PreferenceSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult PreferenceSpecificsVisit(
+ const sync_pb::PreferenceSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(name);
SET_STR(value);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> PriorityPreferenceSpecificsToValue(
- const sync_pb::PriorityPreferenceSpecifics& specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_FIELD(preference, PreferenceSpecificsToValue);
- return value;
+VisitorResult PriorityPreferenceSpecificsVisit(
+ const sync_pb::PriorityPreferenceSpecifics& specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_FIELD(preference, PreferenceSpecificsVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue>
-SyncedNotificationAppInfoSpecificsToValue(
- const sync_pb::SyncedNotificationAppInfoSpecifics& proto) {
- return base::WrapUnique(new base::DictionaryValue());
+VisitorResult SyncedNotificationAppInfoSpecificsVisit(
+ const sync_pb::SyncedNotificationAppInfoSpecifics& proto,
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE)
+ return VisitorResult(sizeof(sync_pb::SyncedNotificationAppInfoSpecifics));
+ return VisitorResult(base::WrapUnique(new base::DictionaryValue()));
}
-std::unique_ptr<base::DictionaryValue> SyncedNotificationSpecificsToValue(
- const sync_pb::SyncedNotificationSpecifics& proto) {
- return base::WrapUnique(new base::DictionaryValue());
+VisitorResult SyncedNotificationSpecificsVisit(
+ const sync_pb::SyncedNotificationSpecifics& proto,
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE)
+ return VisitorResult(sizeof(sync_pb::SyncedNotificationSpecifics));
+ return VisitorResult(base::WrapUnique(new base::DictionaryValue()));
}
-std::unique_ptr<base::DictionaryValue> SearchEngineSpecificsToValue(
- const sync_pb::SearchEngineSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SearchEngineSpecificsVisit(
+ const sync_pb::SearchEngineSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(short_name);
SET_STR(keyword);
SET_STR(favicon_url);
@@ -666,44 +1067,53 @@ std::unique_ptr<base::DictionaryValue> SearchEngineSpecificsToValue(
SET_STR(instant_url_post_params);
SET_STR(image_url_post_params);
SET_STR(new_tab_url);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> SessionSpecificsToValue(
- const sync_pb::SessionSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SessionSpecificsVisit(const sync_pb::SessionSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(session_tag);
- SET(header, SessionHeaderToValue);
- SET(tab, SessionTabToValue);
+ SET(header, SessionHeaderVisit);
+ SET(tab, SessionTabVisit);
SET_INT32(tab_node_id);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ThemeSpecificsToValue(
- const sync_pb::ThemeSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ThemeSpecificsVisit(const sync_pb::ThemeSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BOOL(use_custom_theme);
SET_BOOL(use_system_theme_by_default);
SET_STR(custom_theme_name);
SET_STR(custom_theme_id);
SET_STR(custom_theme_update_url);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> TypedUrlSpecificsToValue(
- const sync_pb::TypedUrlSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult TypedUrlSpecificsVisit(const sync_pb::TypedUrlSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(url);
SET_STR(title);
SET_BOOL(hidden);
SET_INT64_REP(visits);
SET_INT32_REP(visit_transitions);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> WalletMaskedCreditCardToValue(
- const sync_pb::WalletMaskedCreditCard& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult WalletMaskedCreditCardVisit(
+ const sync_pb::WalletMaskedCreditCard& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id);
SET_ENUM(status, GetWalletCardStatusString);
SET_STR(name_on_card);
@@ -712,12 +1122,15 @@ std::unique_ptr<base::DictionaryValue> WalletMaskedCreditCardToValue(
SET_INT32(exp_month);
SET_INT32(exp_year);
SET_STR(billing_address_id);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> WalletPostalAddressToValue(
- const sync_pb::WalletPostalAddress& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult WalletPostalAddressVisit(
+ const sync_pb::WalletPostalAddress& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id);
SET_STR(recipient_name);
SET_STR(company_name);
@@ -731,74 +1144,88 @@ std::unique_ptr<base::DictionaryValue> WalletPostalAddressToValue(
SET_STR(country_code);
SET_STR(phone_number);
SET_STR(language_code);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> WifiCredentialSpecificsToValue(
- const sync_pb::WifiCredentialSpecifics& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult WifiCredentialSpecificsVisit(
+ const sync_pb::WifiCredentialSpecifics& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BYTES(ssid);
SET_ENUM(security_class, GetWifiCredentialSecurityClassString);
SET_BYTES(passphrase);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> EntitySpecificsToValue(
- const sync_pb::EntitySpecifics& specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_FIELD(app, AppSpecificsToValue);
- SET_FIELD(app_list, AppListSpecificsToValue);
- SET_FIELD(app_notification, AppNotificationToValue);
- SET_FIELD(app_setting, AppSettingSpecificsToValue);
- SET_FIELD(arc_package, ArcPackageSpecificsToValue);
- SET_FIELD(article, ArticleSpecificsToValue);
- SET_FIELD(autofill, AutofillSpecificsToValue);
- SET_FIELD(autofill_profile, AutofillProfileSpecificsToValue);
- SET_FIELD(autofill_wallet, AutofillWalletSpecificsToValue);
- SET_FIELD(wallet_metadata, WalletMetadataSpecificsToValue);
- SET_FIELD(bookmark, BookmarkSpecificsToValue);
- SET_FIELD(device_info, DeviceInfoSpecificsToValue);
- SET_FIELD(dictionary, DictionarySpecificsToValue);
- SET_FIELD(experiments, ExperimentsSpecificsToValue);
- SET_FIELD(extension, ExtensionSpecificsToValue);
- SET_FIELD(extension_setting, ExtensionSettingSpecificsToValue);
- SET_FIELD(favicon_image, FaviconImageSpecificsToValue);
- SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue);
- SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue);
- SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue);
+ return result;
+}
+
+VisitorResult EntitySpecificsVisit(const sync_pb::EntitySpecifics& specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_FIELD(app, AppSpecificsVisit);
+ SET_FIELD(app_list, AppListSpecificsVisit);
+ SET_FIELD(app_notification, AppNotificationVisit);
+ SET_FIELD(app_setting, AppSettingSpecificsVisit);
+ SET_FIELD(arc_package, ArcPackageSpecificsVisit);
+ SET_FIELD(article, ArticleSpecificsVisit);
+ SET_FIELD(autofill, AutofillSpecificsVisit);
+ SET_FIELD(autofill_profile, AutofillProfileSpecificsVisit);
+ SET_FIELD(autofill_wallet, AutofillWalletSpecificsVisit);
+ SET_FIELD(wallet_metadata, WalletMetadataSpecificsVisit);
+ SET_FIELD(bookmark, BookmarkSpecificsVisit);
+ SET_FIELD(device_info, DeviceInfoSpecificsVisit);
+ SET_FIELD(dictionary, DictionarySpecificsVisit);
+ SET_FIELD(experiments, ExperimentsSpecificsVisit);
+ SET_FIELD(extension, ExtensionSpecificsVisit);
+ SET_FIELD(extension_setting, ExtensionSettingSpecificsVisit);
+ SET_FIELD(favicon_image, FaviconImageSpecificsVisit);
+ SET_FIELD(favicon_tracking, FaviconTrackingSpecificsVisit);
+ SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsVisit);
+ SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsVisit);
SET_FIELD(managed_user_shared_setting,
- ManagedUserSharedSettingSpecificsToValue);
- SET_FIELD(managed_user, ManagedUserSpecificsToValue);
- SET_FIELD(managed_user_whitelist, ManagedUserWhitelistSpecificsToValue);
- SET_FIELD(nigori, NigoriSpecificsToValue);
- SET_FIELD(password, PasswordSpecificsToValue);
- SET_FIELD(preference, PreferenceSpecificsToValue);
- SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue);
- SET_FIELD(search_engine, SearchEngineSpecificsToValue);
- SET_FIELD(session, SessionSpecificsToValue);
- SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue);
+ ManagedUserSharedSettingSpecificsVisit);
+ SET_FIELD(managed_user, ManagedUserSpecificsVisit);
+ SET_FIELD(managed_user_whitelist, ManagedUserWhitelistSpecificsVisit);
+ SET_FIELD(nigori, NigoriSpecificsVisit);
+ SET_FIELD(password, PasswordSpecificsVisit);
+ SET_FIELD(preference, PreferenceSpecificsVisit);
+ SET_FIELD(priority_preference, PriorityPreferenceSpecificsVisit);
+ SET_FIELD(search_engine, SearchEngineSpecificsVisit);
+ SET_FIELD(session, SessionSpecificsVisit);
+ SET_FIELD(synced_notification, SyncedNotificationSpecificsVisit);
SET_FIELD(synced_notification_app_info,
- SyncedNotificationAppInfoSpecificsToValue);
- SET_FIELD(theme, ThemeSpecificsToValue);
- SET_FIELD(typed_url, TypedUrlSpecificsToValue);
- SET_FIELD(wifi_credential, WifiCredentialSpecificsToValue);
- return value;
+ SyncedNotificationAppInfoSpecificsVisit);
+ SET_FIELD(theme, ThemeSpecificsVisit);
+ SET_FIELD(typed_url, TypedUrlSpecificsVisit);
+ SET_FIELD(wifi_credential, WifiCredentialSpecificsVisit);
+ return result;
}
namespace {
-base::StringValue* UniquePositionToStringValue(
- const sync_pb::UniquePosition& proto) {
+VisitorResult UniquePositionToStringValue(const sync_pb::UniquePosition& proto,
+ const ResultType result_type) {
+ if (result_type == MEMORY_USAGE) {
+ VisitorResult result(0);
+ SET_STR(compressed_value);
+ SET_STR(custom_compressed_v1);
+ return result;
+ }
UniquePosition pos = UniquePosition::FromProto(proto);
- return new base::StringValue(pos.ToDebugString());
+ return VisitorResult(
+ base::WrapUnique(new base::StringValue(pos.ToDebugString())));
}
} // namespace
-std::unique_ptr<base::DictionaryValue> SyncEntityToValue(
- const sync_pb::SyncEntity& proto,
- bool include_specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SyncEntityVisit(const sync_pb::SyncEntity& proto,
+ bool include_specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(id_string);
SET_STR(parent_id_string);
SET_STR(old_parent_id);
@@ -816,111 +1243,143 @@ std::unique_ptr<base::DictionaryValue> SyncEntityToValue(
SET_STR(originator_cache_guid);
SET_STR(originator_client_item_id);
if (include_specifics)
- SET(specifics, EntitySpecificsToValue);
+ SET(specifics, EntitySpecificsVisit);
SET_BOOL(folder);
SET_STR(client_defined_unique_tag);
- SET_REP(attachment_id, AttachmentIdProtoToValue);
- return value;
+ SET_REP(attachment_id, AttachmentIdProtoVisit);
+ return result;
}
namespace {
-base::ListValue* SyncEntitiesToValue(
+VisitorResult SyncEntitiesVisit(
const ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities,
- bool include_specifics) {
- base::ListValue* list = new base::ListValue();
+ bool include_specifics,
+ const ResultType result_type) {
::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it;
+ if (result_type == MEMORY_USAGE) {
+ size_t total = 0;
+ for (it = entities.begin(); it != entities.end(); ++it) {
+ total +=
+ SyncEntityVisit(*it, include_specifics, result_type).memory_usage +
+ sizeof(sync_pb::SyncEntity);
+ }
+ return VisitorResult(total);
+ }
+ std::unique_ptr<base::ListValue> list(new base::ListValue());
for (it = entities.begin(); it != entities.end(); ++it) {
- list->Append(SyncEntityToValue(*it, include_specifics));
+ list->Append(SyncEntityVisit(*it, include_specifics, result_type).as_value);
}
-
- return list;
+ return VisitorResult(std::move(list));
}
-std::unique_ptr<base::DictionaryValue> ChromiumExtensionActivityToValue(
- const sync_pb::ChromiumExtensionsActivity& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ChromiumExtensionActivityVisit(
+ const sync_pb::ChromiumExtensionsActivity& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(extension_id);
SET_INT32(bookmark_writes_since_last_commit);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> CommitMessageToValue(
- const sync_pb::CommitMessage& proto,
- bool include_specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->Set("entries",
- SyncEntitiesToValue(proto.entries(), include_specifics));
+ return result;
+}
+
+VisitorResult CommitMessageVisit(const sync_pb::CommitMessage& proto,
+ bool include_specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_WITH_EXPR(
+ entries,
+ SyncEntitiesVisit(proto.entries(), include_specifics, result_type), 0);
SET_STR(cache_guid);
- SET_REP(extensions_activity, ChromiumExtensionActivityToValue);
- SET(config_params, ClientConfigParamsToValue);
- return value;
+ SET_REP(extensions_activity, ChromiumExtensionActivityVisit);
+ SET(config_params, ClientConfigParamsVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> GetUpdateTriggersToValue(
- const sync_pb::GetUpdateTriggers& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult GetUpdateTriggersVisit(const sync_pb::GetUpdateTriggers& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR_REP(notification_hint);
SET_BOOL(client_dropped_hints);
SET_BOOL(invalidations_out_of_sync);
SET_INT64(local_modification_nudges);
SET_INT64(datatype_refresh_nudges);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DataTypeProgressMarkerToValue(
- const sync_pb::DataTypeProgressMarker& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DataTypeProgressMarkerVisit(
+ const sync_pb::DataTypeProgressMarker& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(data_type_id);
SET_BYTES(token);
SET_INT64(timestamp_token_for_migration);
SET_STR(notification_hint);
- SET(get_update_triggers, GetUpdateTriggersToValue);
- return value;
+ SET(get_update_triggers, GetUpdateTriggersVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DataTypeContextToValue(
- const sync_pb::DataTypeContext& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DataTypeContextVisit(const sync_pb::DataTypeContext& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(data_type_id);
SET_STR(context);
SET_INT64(version);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> GetUpdatesCallerInfoToValue(
- const sync_pb::GetUpdatesCallerInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult GetUpdatesCallerInfoVisit(
+ const sync_pb::GetUpdatesCallerInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(source, GetUpdatesSourceString);
SET_BOOL(notifications_enabled);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> GetUpdatesMessageToValue(
- const sync_pb::GetUpdatesMessage& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(caller_info, GetUpdatesCallerInfoToValue);
+VisitorResult GetUpdatesMessageVisit(const sync_pb::GetUpdatesMessage& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(caller_info, GetUpdatesCallerInfoVisit);
SET_BOOL(fetch_folders);
SET_INT32(batch_size);
- SET_REP(from_progress_marker, DataTypeProgressMarkerToValue);
+ SET_REP(from_progress_marker, DataTypeProgressMarkerVisit);
SET_BOOL(streaming);
SET_BOOL(need_encryption_key);
SET_BOOL(create_mobile_bookmarks_folder);
SET_ENUM(get_updates_origin, GetUpdatesOriginString);
- SET_REP(client_contexts, DataTypeContextToValue);
- return value;
+ SET_REP(client_contexts, DataTypeContextVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ClientStatusToValue(
- const sync_pb::ClientStatus& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ClientStatusVisit(const sync_pb::ClientStatus& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_BOOL(hierarchy_conflict_detected);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> EntryResponseToValue(
- const sync_pb::CommitResponse::EntryResponse& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult EntryResponseVisit(
+ const sync_pb::CommitResponse::EntryResponse& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(response_type, GetResponseTypeString);
SET_STR(id_string);
SET_STR(parent_id_string);
@@ -929,93 +1388,114 @@ std::unique_ptr<base::DictionaryValue> EntryResponseToValue(
SET_STR(name);
SET_STR(error_message);
SET_INT64(mtime);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> CommitResponseToValue(
- const sync_pb::CommitResponse& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_REP(entryresponse, EntryResponseToValue);
- return value;
-}
-
-std::unique_ptr<base::DictionaryValue> GetUpdatesResponseToValue(
- const sync_pb::GetUpdatesResponse& proto,
- bool include_specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->Set("entries",
- SyncEntitiesToValue(proto.entries(), include_specifics));
+ return result;
+}
+
+VisitorResult CommitResponseVisit(const sync_pb::CommitResponse& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_REP(entryresponse, EntryResponseVisit);
+ return result;
+}
+
+VisitorResult GetUpdatesResponseVisit(const sync_pb::GetUpdatesResponse& proto,
+ bool include_specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_WITH_EXPR(
+ entries,
+ SyncEntitiesVisit(proto.entries(), include_specifics, result_type), 0);
SET_INT64(changes_remaining);
- SET_REP(new_progress_marker, DataTypeProgressMarkerToValue);
- SET_REP(context_mutations, DataTypeContextToValue);
- return value;
+ SET_REP(new_progress_marker, DataTypeProgressMarkerVisit);
+ SET_REP(context_mutations, DataTypeContextVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ClientCommandToValue(
- const sync_pb::ClientCommand& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ClientCommandVisit(const sync_pb::ClientCommand& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(set_sync_poll_interval);
SET_INT32(set_sync_long_poll_interval);
SET_INT32(max_commit_batch_size);
SET_INT32(sessions_commit_delay_seconds);
SET_INT32(throttle_delay_seconds);
SET_INT32(client_invalidation_hint_buffer_size);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ErrorToValue(
- const sync_pb::ClientToServerResponse::Error& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ErrorVisit(const sync_pb::ClientToServerResponse::Error& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(error_type, GetErrorTypeString);
SET_STR(error_description);
SET_STR(url);
SET_ENUM(action, GetActionString);
- return value;
+ return result;
}
} // namespace
-std::unique_ptr<base::DictionaryValue> ClientToServerResponseToValue(
+VisitorResult ClientToServerResponseVisit(
const sync_pb::ClientToServerResponse& proto,
- bool include_specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET(commit, CommitResponseToValue);
+ bool include_specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET(commit, CommitResponseVisit);
if (proto.has_get_updates()) {
- value->Set("get_updates", GetUpdatesResponseToValue(proto.get_updates(),
- include_specifics));
+ SET_WITH_EXPR(get_updates,
+ GetUpdatesResponseVisit(proto.get_updates(),
+ include_specifics, result_type),
+ sizeof(proto.get_updates()));
}
- SET(error, ErrorToValue);
+ SET(error, ErrorVisit);
SET_ENUM(error_code, GetErrorTypeString);
SET_STR(error_message);
SET_STR(store_birthday);
- SET(client_command, ClientCommandToValue);
+ SET(client_command, ClientCommandVisit);
SET_INT32_REP(migrated_data_type_id);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ClientToServerMessageToValue(
+VisitorResult ClientToServerMessageVisit(
const sync_pb::ClientToServerMessage& proto,
- bool include_specifics) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+ bool include_specifics,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_STR(share);
SET_INT32(protocol_version);
if (proto.has_commit()) {
- value->Set("commit",
- CommitMessageToValue(proto.commit(), include_specifics));
+ SET_WITH_EXPR(commit, CommitMessageVisit(proto.commit(), include_specifics,
+ result_type),
+ sizeof(proto.commit()));
}
- SET(get_updates, GetUpdatesMessageToValue);
+ SET(get_updates, GetUpdatesMessageVisit);
SET_STR(store_birthday);
SET_BOOL(sync_problem_detected);
- SET(debug_info, DebugInfoToValue);
- SET(client_status, ClientStatusToValue);
- return value;
+ SET(debug_info, DebugInfoVisit);
+ SET(client_status, ClientStatusVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DatatypeAssociationStatsToValue(
- const sync_pb::DatatypeAssociationStats& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DatatypeAssociationStatsVisit(
+ const sync_pb::DatatypeAssociationStats& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(data_type_id);
SET_INT32(num_local_items_before_association);
SET_INT32(num_sync_items_before_association);
@@ -1034,61 +1514,426 @@ std::unique_ptr<base::DictionaryValue> DatatypeAssociationStatsToValue(
SET_INT64(download_time_us);
SET_INT64(association_wait_time_for_high_priority_us);
SET_INT64(association_wait_time_for_same_priority_us);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DebugEventInfoToValue(
- const sync_pb::DebugEventInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult DebugEventInfoVisit(const sync_pb::DebugEventInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_ENUM(singleton_event, SingletonDebugEventTypeString);
- SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoToValue);
+ SET(sync_cycle_completed_event_info, SyncCycleCompletedEventInfoVisit);
SET_INT32(nudging_datatype);
SET_INT32_REP(datatypes_notified_from_server);
- SET(datatype_association_stats, DatatypeAssociationStatsToValue);
- return value;
+ SET(datatype_association_stats, DatatypeAssociationStatsVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> DebugInfoToValue(
- const sync_pb::DebugInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_REP(events, DebugEventInfoToValue);
+VisitorResult DebugInfoVisit(const sync_pb::DebugInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_REP(events, DebugEventInfoVisit);
SET_BOOL(cryptographer_ready);
SET_BOOL(cryptographer_has_pending_keys);
SET_BOOL(events_dropped);
- return value;
+ return result;
}
-std::unique_ptr<base::DictionaryValue> SyncCycleCompletedEventInfoToValue(
- const sync_pb::SyncCycleCompletedEventInfo& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult SyncCycleCompletedEventInfoVisit(
+ const sync_pb::SyncCycleCompletedEventInfo& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32(num_encryption_conflicts);
SET_INT32(num_hierarchy_conflicts);
SET_INT32(num_server_conflicts);
SET_INT32(num_updates_downloaded);
SET_INT32(num_reflected_updates_downloaded);
- SET(caller_info, GetUpdatesCallerInfoToValue);
- return value;
+ SET(caller_info, GetUpdatesCallerInfoVisit);
+ return result;
}
-std::unique_ptr<base::DictionaryValue> ClientConfigParamsToValue(
- const sync_pb::ClientConfigParams& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+VisitorResult ClientConfigParamsVisit(const sync_pb::ClientConfigParams& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
SET_INT32_REP(enabled_type_ids);
SET_BOOL(tabs_datatype_enabled);
SET_BOOL(cookie_jar_mismatch);
- return value;
+ return result;
+}
+
+VisitorResult AttachmentIdProtoVisit(const sync_pb::AttachmentIdProto& proto,
+ const ResultType result_type) {
+ VisitorResult result(0);
+ if (result_type == CONVERT_TO_VALUE)
+ result.as_value.reset(new base::DictionaryValue());
+ SET_STR(unique_id);
+ return result;
+}
+
+std::unique_ptr<base::DictionaryValue> EncryptedDataToValue(
+ const sync_pb::EncryptedData& encrypted_data) {
+ return EncryptedDataVisit(encrypted_data, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AppListSpecificsToValue(
+ const sync_pb::AppListSpecifics& proto) {
+ return AppListSpecificsVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AppSettingsToValue(
+ const sync_pb::AppNotificationSettings& app_notification_settings) {
+ return AppSettingsVisit(app_notification_settings, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> LinkedAppIconInfoToValue(
+ const sync_pb::LinkedAppIconInfo& linked_app_icon_info) {
+ return LinkedAppIconInfoVisit(linked_app_icon_info, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SessionHeaderToValue(
+ const sync_pb::SessionHeader& session_header) {
+ return SessionHeaderVisit(session_header, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SessionTabToValue(
+ const sync_pb::SessionTab& session_tab) {
+ return SessionTabVisit(session_tab, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SessionWindowToValue(
+ const sync_pb::SessionWindow& session_window) {
+ return SessionWindowVisit(session_window, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> TabNavigationToValue(
+ const sync_pb::TabNavigation& tab_navigation) {
+ return TabNavigationVisit(tab_navigation, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> NavigationRedirectToValue(
+ const sync_pb::NavigationRedirect& navigation_redirect) {
+ return NavigationRedirectVisit(navigation_redirect, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> PasswordSpecificsDataToValue(
+ const sync_pb::PasswordSpecificsData& password_specifics_data) {
+ return PasswordSpecificsDataVisit(password_specifics_data, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> GlobalIdDirectiveToValue(
+ const sync_pb::GlobalIdDirective& global_id_directive) {
+ return GlobalIdDirectiveVisit(global_id_directive, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> TimeRangeDirectiveToValue(
+ const sync_pb::TimeRangeDirective& time_range_directive) {
+ return TimeRangeDirectiveVisit(time_range_directive, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SessionSpecificsToValue(
+ const sync_pb::SessionSpecifics& session_specifics) {
+ return SessionSpecificsVisit(session_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ArcPackageSpecificsToValue(
+ const sync_pb::ArcPackageSpecifics& proto) {
+ return ArcPackageSpecificsVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AppNotificationToValue(
+ const sync_pb::AppNotification& app_notification_specifics) {
+ return AppNotificationVisit(app_notification_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AppSettingSpecificsToValue(
+ const sync_pb::AppSettingSpecifics& app_setting_specifics) {
+ return AppSettingSpecificsVisit(app_setting_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AppSpecificsToValue(
+ const sync_pb::AppSpecifics& app_specifics) {
+ return AppSpecificsVisit(app_specifics, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ArticleSpecificsToValue(
+ const sync_pb::ArticleSpecifics& article_specifics) {
+ return ArticleSpecificsVisit(article_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AutofillSpecificsToValue(
+ const sync_pb::AutofillSpecifics& autofill_specifics) {
+ return AutofillSpecificsVisit(autofill_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AutofillProfileSpecificsToValue(
+ const sync_pb::AutofillProfileSpecifics& autofill_profile_specifics) {
+ return AutofillProfileSpecificsVisit(autofill_profile_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> WalletMetadataSpecificsToValue(
+ const sync_pb::WalletMetadataSpecifics& wallet_metadata_specifics) {
+ return WalletMetadataSpecificsVisit(wallet_metadata_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> AutofillWalletSpecificsToValue(
+ const sync_pb::AutofillWalletSpecifics& autofill_wallet_specifics) {
+ return AutofillWalletSpecificsVisit(autofill_wallet_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> BookmarkSpecificsToValue(
+ const sync_pb::BookmarkSpecifics& bookmark_specifics) {
+ return BookmarkSpecificsVisit(bookmark_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> DeviceInfoSpecificsToValue(
+ const sync_pb::DeviceInfoSpecifics& device_info_specifics) {
+ return DeviceInfoSpecificsVisit(device_info_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> DictionarySpecificsToValue(
+ const sync_pb::DictionarySpecifics& dictionary_specifics) {
+ return DictionarySpecificsVisit(dictionary_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ExperimentsSpecificsToValue(
+ const sync_pb::ExperimentsSpecifics& proto) {
+ return ExperimentsSpecificsVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> PriorityPreferenceSpecificsToValue(
+ const sync_pb::PriorityPreferenceSpecifics& proto) {
+ return PriorityPreferenceSpecificsVisit(proto, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ExtensionSettingSpecificsToValue(
+ const sync_pb::ExtensionSettingSpecifics& extension_setting_specifics) {
+ return ExtensionSettingSpecificsVisit(extension_setting_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ExtensionSpecificsToValue(
+ const sync_pb::ExtensionSpecifics& extension_specifics) {
+ return ExtensionSpecificsVisit(extension_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> FaviconImageSpecificsToValue(
+ const sync_pb::FaviconImageSpecifics& favicon_image_specifics) {
+ return FaviconImageSpecificsVisit(favicon_image_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> FaviconTrackingSpecificsToValue(
+ const sync_pb::FaviconTrackingSpecifics& favicon_tracking_specifics) {
+ return FaviconTrackingSpecificsVisit(favicon_tracking_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> HistoryDeleteDirectiveSpecificsToValue(
+ const sync_pb::HistoryDeleteDirectiveSpecifics&
+ history_delete_directive_specifics) {
+ return HistoryDeleteDirectiveSpecificsVisit(
+ history_delete_directive_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ManagedUserSettingSpecificsToValue(
+ const sync_pb::ManagedUserSettingSpecifics&
+ managed_user_setting_specifics) {
+ return ManagedUserSettingSpecificsVisit(managed_user_setting_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ManagedUserSpecificsToValue(
+ const sync_pb::ManagedUserSpecifics& managed_user_specifics) {
+ return ManagedUserSpecificsVisit(managed_user_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ManagedUserSharedSettingSpecificsToValue(
+ const sync_pb::ManagedUserSharedSettingSpecifics&
+ managed_user_shared_setting_specifics) {
+ return ManagedUserSharedSettingSpecificsVisit(
+ managed_user_shared_setting_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ManagedUserWhitelistSpecificsToValue(
+ const sync_pb::ManagedUserWhitelistSpecifics&
+ managed_user_whitelist_specifics) {
+ return ManagedUserWhitelistSpecificsVisit(managed_user_whitelist_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> NigoriSpecificsToValue(
+ const sync_pb::NigoriSpecifics& nigori_specifics) {
+ return NigoriSpecificsVisit(nigori_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> PasswordSpecificsToValue(
+ const sync_pb::PasswordSpecifics& password_specifics) {
+ return PasswordSpecificsVisit(password_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> PreferenceSpecificsToValue(
+ const sync_pb::PreferenceSpecifics& password_specifics) {
+ return PreferenceSpecificsVisit(password_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue>
+SyncedNotificationAppInfoSpecificsToValue(
+ const sync_pb::SyncedNotificationAppInfoSpecifics&
+ synced_notification_specifics) {
+ return SyncedNotificationAppInfoSpecificsVisit(synced_notification_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SyncedNotificationSpecificsToValue(
+ const sync_pb::SyncedNotificationSpecifics& synced_notification_specifics) {
+ return SyncedNotificationSpecificsVisit(synced_notification_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SearchEngineSpecificsToValue(
+ const sync_pb::SearchEngineSpecifics& search_engine_specifics) {
+ return SearchEngineSpecificsVisit(search_engine_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ThemeSpecificsToValue(
+ const sync_pb::ThemeSpecifics& theme_specifics) {
+ return ThemeSpecificsVisit(theme_specifics, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> TypedUrlSpecificsToValue(
+ const sync_pb::TypedUrlSpecifics& typed_url_specifics) {
+ return TypedUrlSpecificsVisit(typed_url_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> WalletMaskedCreditCardToValue(
+ const sync_pb::WalletMaskedCreditCard& wallet_masked_card) {
+ return WalletMaskedCreditCardVisit(wallet_masked_card, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> WalletPostalAddressToValue(
+ const sync_pb::WalletPostalAddress& wallet_postal_address) {
+ return WalletPostalAddressVisit(wallet_postal_address, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> WifiCredentialSpecificsToValue(
+ const sync_pb::WifiCredentialSpecifics& wifi_credential_specifics) {
+ return WifiCredentialSpecificsVisit(wifi_credential_specifics,
+ CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> EntitySpecificsToValue(
+ const sync_pb::EntitySpecifics& specifics) {
+ return EntitySpecificsVisit(specifics, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SyncEntityToValue(
+ const sync_pb::SyncEntity& entity,
+ bool include_specifics) {
+ return SyncEntityVisit(entity, include_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ClientToServerMessageToValue(
+ const sync_pb::ClientToServerMessage& proto,
+ bool include_specifics) {
+ return ClientToServerMessageVisit(proto, include_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ClientToServerResponseToValue(
+ const sync_pb::ClientToServerResponse& proto,
+ bool include_specifics) {
+ return ClientToServerResponseVisit(proto, include_specifics, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> DatatypeAssociationStatsToValue(
+ const sync_pb::DatatypeAssociationStats& proto) {
+ return DatatypeAssociationStatsVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> DebugEventInfoToValue(
+ const sync_pb::DebugEventInfo& proto) {
+ return DebugEventInfoVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> DebugInfoToValue(
+ const sync_pb::DebugInfo& proto) {
+ return DebugInfoVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> SyncCycleCompletedEventInfoToValue(
+ const sync_pb::SyncCycleCompletedEventInfo& proto) {
+ return SyncCycleCompletedEventInfoVisit(proto, CONVERT_TO_VALUE)
+ .TakeDictValue();
+}
+
+std::unique_ptr<base::DictionaryValue> ClientConfigParamsToValue(
+ const sync_pb::ClientConfigParams& proto) {
+ return ClientConfigParamsVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
}
std::unique_ptr<base::DictionaryValue> AttachmentIdProtoToValue(
const sync_pb::AttachmentIdProto& proto) {
- std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- SET_STR(unique_id);
- return value;
+ return AttachmentIdProtoVisit(proto, CONVERT_TO_VALUE).TakeDictValue();
+}
+
+size_t GetEntitySpecificsSize(const sync_pb::EntitySpecifics& specifics) {
+ return EntitySpecificsVisit(specifics, MEMORY_USAGE).memory_usage +
+ sizeof(specifics);
}
+#undef SET_WITH_EXPR
#undef SET_TYPE
#undef SET
#undef SET_REP
+#undef SET_ENUM
#undef SET_BOOL
#undef SET_BYTES
@@ -1096,8 +1941,10 @@ std::unique_ptr<base::DictionaryValue> AttachmentIdProtoToValue(
#undef SET_INT64
#undef SET_INT64_REP
#undef SET_STR
+#undef SET_TIME_STR
#undef SET_STR_REP
+#undef SET_EXPERIMENT_ENABLED_FIELD
#undef SET_FIELD
} // namespace syncer

Powered by Google App Engine
This is Rietveld 408576698