| Index: sync/syncable/entry_kernel.cc
|
| diff --git a/sync/syncable/entry_kernel.cc b/sync/syncable/entry_kernel.cc
|
| deleted file mode 100644
|
| index 146bbc8e811e363a11f71a94718aa960a9c3c118..0000000000000000000000000000000000000000
|
| --- a/sync/syncable/entry_kernel.cc
|
| +++ /dev/null
|
| @@ -1,296 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "sync/syncable/entry_kernel.h"
|
| -
|
| -#include <stdint.h>
|
| -#include <utility>
|
| -
|
| -#include "base/json/string_escape.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "sync/protocol/proto_value_conversions.h"
|
| -#include "sync/syncable/syncable_columns.h"
|
| -#include "sync/syncable/syncable_enum_conversions.h"
|
| -#include "sync/util/cryptographer.h"
|
| -
|
| -namespace syncer {
|
| -namespace syncable {
|
| -
|
| -EntryKernel::EntryKernel() : dirty_(false) {
|
| - // Everything else should already be default-initialized.
|
| - for (int i = 0; i < INT64_FIELDS_COUNT; ++i) {
|
| - int64_fields[i] = 0;
|
| - }
|
| -}
|
| -
|
| -EntryKernel::EntryKernel(const EntryKernel& other) = default;
|
| -
|
| -EntryKernel::~EntryKernel() {}
|
| -
|
| -ModelType EntryKernel::GetModelType() const {
|
| - ModelType specifics_type = GetModelTypeFromSpecifics(ref(SPECIFICS));
|
| - if (specifics_type != UNSPECIFIED)
|
| - return specifics_type;
|
| - if (ref(ID).IsRoot())
|
| - return TOP_LEVEL_FOLDER;
|
| - // Loose check for server-created top-level folders that aren't
|
| - // bound to a particular model type.
|
| - if (!ref(UNIQUE_SERVER_TAG).empty() && ref(SERVER_IS_DIR))
|
| - return TOP_LEVEL_FOLDER;
|
| -
|
| - return UNSPECIFIED;
|
| -}
|
| -
|
| -ModelType EntryKernel::GetServerModelType() const {
|
| - ModelType specifics_type = GetModelTypeFromSpecifics(ref(SERVER_SPECIFICS));
|
| - if (specifics_type != UNSPECIFIED)
|
| - return specifics_type;
|
| - if (ref(ID).IsRoot())
|
| - return TOP_LEVEL_FOLDER;
|
| - // Loose check for server-created top-level folders that aren't
|
| - // bound to a particular model type.
|
| - if (!ref(UNIQUE_SERVER_TAG).empty() && ref(SERVER_IS_DIR))
|
| - return TOP_LEVEL_FOLDER;
|
| -
|
| - return UNSPECIFIED;
|
| -}
|
| -
|
| -bool EntryKernel::ShouldMaintainPosition() const {
|
| - // We maintain positions for all bookmarks, except those that are
|
| - // server-created top-level folders.
|
| - return TypeSupportsOrdering(GetModelTypeFromSpecifics(ref(SPECIFICS))) &&
|
| - !(!ref(UNIQUE_SERVER_TAG).empty() && ref(IS_DIR));
|
| -}
|
| -
|
| -bool EntryKernel::ShouldMaintainHierarchy() const {
|
| - // We maintain hierarchy for bookmarks and top-level folders,
|
| - // but no other types. Note that the Nigori node consists of a single
|
| - // top-level folder, so it's included in this set.
|
| - return TypeSupportsHierarchy(GetModelTypeFromSpecifics(ref(SPECIFICS))) ||
|
| - (!ref(UNIQUE_SERVER_TAG).empty());
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -// Utility function to loop through a set of enum values and add the
|
| -// field keys/values in the kernel to the given dictionary.
|
| -//
|
| -// V should be convertible to Value.
|
| -template <class T, class U, class V>
|
| -void SetFieldValues(const EntryKernel& kernel,
|
| - base::DictionaryValue* dictionary_value,
|
| - const char* (*enum_key_fn)(T),
|
| - V* (*enum_value_fn)(U),
|
| - int field_key_min, int field_key_max) {
|
| - DCHECK_LE(field_key_min, field_key_max);
|
| - for (int i = field_key_min; i <= field_key_max; ++i) {
|
| - T field = static_cast<T>(i);
|
| - const std::string& key = enum_key_fn(field);
|
| - V* value = enum_value_fn(kernel.ref(field));
|
| - dictionary_value->Set(key, value);
|
| - }
|
| -}
|
| -
|
| -void SetEncryptableProtoValues(
|
| - const EntryKernel& kernel,
|
| - Cryptographer* cryptographer,
|
| - base::DictionaryValue* dictionary_value,
|
| - int field_key_min, int field_key_max) {
|
| - DCHECK_LE(field_key_min, field_key_max);
|
| - for (int i = field_key_min; i <= field_key_max; ++i) {
|
| - ProtoField field = static_cast<ProtoField>(i);
|
| - const std::string& key = GetProtoFieldString(field);
|
| -
|
| - std::unique_ptr<base::DictionaryValue> value;
|
| - sync_pb::EntitySpecifics decrypted;
|
| - const sync_pb::EncryptedData& encrypted = kernel.ref(field).encrypted();
|
| - if (cryptographer &&
|
| - kernel.ref(field).has_encrypted() &&
|
| - cryptographer->CanDecrypt(encrypted) &&
|
| - cryptographer->Decrypt(encrypted, &decrypted)) {
|
| - value = EntitySpecificsToValue(decrypted);
|
| - value->SetBoolean("encrypted", true);
|
| - } else {
|
| - value = EntitySpecificsToValue(kernel.ref(field));
|
| - }
|
| - dictionary_value->Set(key, std::move(value));
|
| - }
|
| -}
|
| -
|
| -// Helper functions for SetFieldValues().
|
| -
|
| -base::StringValue* Int64ToValue(int64_t i) {
|
| - return new base::StringValue(base::Int64ToString(i));
|
| -}
|
| -
|
| -base::StringValue* TimeToValue(const base::Time& t) {
|
| - return new base::StringValue(GetTimeDebugString(t));
|
| -}
|
| -
|
| -base::StringValue* IdToValue(const Id& id) {
|
| - return id.ToValue();
|
| -}
|
| -
|
| -base::FundamentalValue* BooleanToValue(bool bool_val) {
|
| - return new base::FundamentalValue(bool_val);
|
| -}
|
| -
|
| -base::StringValue* StringToValue(const std::string& str) {
|
| - return new base::StringValue(str);
|
| -}
|
| -
|
| -base::StringValue* UniquePositionToValue(const UniquePosition& pos) {
|
| - return new base::StringValue(pos.ToDebugString());
|
| -}
|
| -
|
| -base::StringValue* AttachmentMetadataToValue(
|
| - const sync_pb::AttachmentMetadata& a) {
|
| - return new base::StringValue(a.SerializeAsString());
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -base::DictionaryValue* EntryKernel::ToValue(
|
| - Cryptographer* cryptographer) const {
|
| - base::DictionaryValue* kernel_info = new base::DictionaryValue();
|
| - kernel_info->SetBoolean("isDirty", is_dirty());
|
| - ModelType dataType = GetServerModelType();
|
| - if (!IsRealDataType(dataType))
|
| - dataType = GetModelType();
|
| - kernel_info->Set("modelType", ModelTypeToValue(dataType));
|
| -
|
| - // Int64 fields.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetMetahandleFieldString, &Int64ToValue,
|
| - INT64_FIELDS_BEGIN, META_HANDLE);
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetBaseVersionString, &Int64ToValue,
|
| - META_HANDLE + 1, BASE_VERSION);
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetInt64FieldString, &Int64ToValue,
|
| - BASE_VERSION + 1, INT64_FIELDS_END - 1);
|
| -
|
| - // Time fields.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetTimeFieldString, &TimeToValue,
|
| - TIME_FIELDS_BEGIN, TIME_FIELDS_END - 1);
|
| -
|
| - // ID fields.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetIdFieldString, &IdToValue,
|
| - ID_FIELDS_BEGIN, ID_FIELDS_END - 1);
|
| -
|
| - // Bit fields.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetIndexedBitFieldString, &BooleanToValue,
|
| - BIT_FIELDS_BEGIN, INDEXED_BIT_FIELDS_END - 1);
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetIsDelFieldString, &BooleanToValue,
|
| - INDEXED_BIT_FIELDS_END, IS_DEL);
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetBitFieldString, &BooleanToValue,
|
| - IS_DEL + 1, BIT_FIELDS_END - 1);
|
| -
|
| - // String fields.
|
| - {
|
| - // Pick out the function overload we want.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetStringFieldString, &StringToValue,
|
| - STRING_FIELDS_BEGIN, STRING_FIELDS_END - 1);
|
| - }
|
| -
|
| - // Proto fields.
|
| - SetEncryptableProtoValues(*this, cryptographer, kernel_info,
|
| - PROTO_FIELDS_BEGIN, PROTO_FIELDS_END - 1);
|
| -
|
| - // UniquePosition fields
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetUniquePositionFieldString, &UniquePositionToValue,
|
| - UNIQUE_POSITION_FIELDS_BEGIN, UNIQUE_POSITION_FIELDS_END - 1);
|
| -
|
| - // AttachmentMetadata fields
|
| - SetFieldValues(*this,
|
| - kernel_info,
|
| - &GetAttachmentMetadataFieldString,
|
| - &AttachmentMetadataToValue,
|
| - ATTACHMENT_METADATA_FIELDS_BEGIN,
|
| - ATTACHMENT_METADATA_FIELDS_END - 1);
|
| -
|
| - // Bit temps.
|
| - SetFieldValues(*this, kernel_info,
|
| - &GetBitTempString, &BooleanToValue,
|
| - BIT_TEMPS_BEGIN, BIT_TEMPS_END - 1);
|
| -
|
| - return kernel_info;
|
| -}
|
| -
|
| -base::ListValue* EntryKernelMutationMapToValue(
|
| - const EntryKernelMutationMap& mutations) {
|
| - base::ListValue* list = new base::ListValue();
|
| - for (EntryKernelMutationMap::const_iterator it = mutations.begin();
|
| - it != mutations.end(); ++it) {
|
| - list->Append(EntryKernelMutationToValue(it->second));
|
| - }
|
| - return list;
|
| -}
|
| -
|
| -base::DictionaryValue* EntryKernelMutationToValue(
|
| - const EntryKernelMutation& mutation) {
|
| - base::DictionaryValue* dict = new base::DictionaryValue();
|
| - dict->Set("original", mutation.original.ToValue(NULL));
|
| - dict->Set("mutated", mutation.mutated.ToValue(NULL));
|
| - return dict;
|
| -}
|
| -
|
| -std::ostream& operator<<(std::ostream& os, const EntryKernel& entry_kernel) {
|
| - int i;
|
| - EntryKernel* const kernel = const_cast<EntryKernel*>(&entry_kernel);
|
| - for (i = BEGIN_FIELDS; i < INT64_FIELDS_END; ++i) {
|
| - os << g_metas_columns[i].name << ": "
|
| - << kernel->ref(static_cast<Int64Field>(i)) << ", ";
|
| - }
|
| - for (; i < TIME_FIELDS_END; ++i) {
|
| - os << g_metas_columns[i].name << ": "
|
| - << GetTimeDebugString(kernel->ref(static_cast<TimeField>(i))) << ", ";
|
| - }
|
| - for (; i < ID_FIELDS_END; ++i) {
|
| - os << g_metas_columns[i].name << ": "
|
| - << kernel->ref(static_cast<IdField>(i)) << ", ";
|
| - }
|
| - os << "Flags: ";
|
| - for (; i < BIT_FIELDS_END; ++i) {
|
| - if (kernel->ref(static_cast<BitField>(i)))
|
| - os << g_metas_columns[i].name << ", ";
|
| - }
|
| - for (; i < STRING_FIELDS_END; ++i) {
|
| - const std::string& field = kernel->ref(static_cast<StringField>(i));
|
| - os << g_metas_columns[i].name << ": " << field << ", ";
|
| - }
|
| - for (; i < PROTO_FIELDS_END; ++i) {
|
| - std::string escaped_str = base::EscapeBytesAsInvalidJSONString(
|
| - kernel->ref(static_cast<ProtoField>(i)).SerializeAsString(), false);
|
| - os << g_metas_columns[i].name << ": " << escaped_str << ", ";
|
| - }
|
| - for (; i < UNIQUE_POSITION_FIELDS_END; ++i) {
|
| - os << g_metas_columns[i].name << ": "
|
| - << kernel->ref(static_cast<UniquePositionField>(i)).ToDebugString()
|
| - << ", ";
|
| - }
|
| - for (; i < ATTACHMENT_METADATA_FIELDS_END; ++i) {
|
| - std::string escaped_str = base::EscapeBytesAsInvalidJSONString(
|
| - kernel->ref(static_cast<AttachmentMetadataField>(i))
|
| - .SerializeAsString(),
|
| - false);
|
| - os << g_metas_columns[i].name << ": " << escaped_str << ", ";
|
| - }
|
| - os << "TempFlags: ";
|
| - for (; i < BIT_TEMPS_END; ++i) {
|
| - if (kernel->ref(static_cast<BitTemp>(i)))
|
| - os << "#" << i - BIT_TEMPS_BEGIN << ", ";
|
| - }
|
| - return os;
|
| -}
|
| -
|
| -} // namespace syncable
|
| -} // namespace syncer
|
|
|