| 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
|
|
|