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

Side by Side Diff: sync/syncable/entry_kernel.cc

Issue 1226213002: Sync: Support nodes with implicit permanent folders: Node Browser and out-of-order loading from DB (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed memory leak Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/syncable/entry_kernel.h" 5 #include "sync/syncable/entry_kernel.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "sync/protocol/proto_value_conversions.h" 8 #include "sync/protocol/proto_value_conversions.h"
9 #include "sync/syncable/syncable_enum_conversions.h" 9 #include "sync/syncable/syncable_enum_conversions.h"
10 #include "sync/util/cryptographer.h" 10 #include "sync/util/cryptographer.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // bound to a particular model type. 45 // bound to a particular model type.
46 if (!ref(UNIQUE_SERVER_TAG).empty() && ref(SERVER_IS_DIR)) 46 if (!ref(UNIQUE_SERVER_TAG).empty() && ref(SERVER_IS_DIR))
47 return TOP_LEVEL_FOLDER; 47 return TOP_LEVEL_FOLDER;
48 48
49 return UNSPECIFIED; 49 return UNSPECIFIED;
50 } 50 }
51 51
52 bool EntryKernel::ShouldMaintainPosition() const { 52 bool EntryKernel::ShouldMaintainPosition() const {
53 // We maintain positions for all bookmarks, except those that are 53 // We maintain positions for all bookmarks, except those that are
54 // server-created top-level folders. 54 // server-created top-level folders.
55 return (GetModelTypeFromSpecifics(ref(SPECIFICS)) == syncer::BOOKMARKS) 55 return TypeSupportsOrdering(GetModelTypeFromSpecifics(ref(SPECIFICS))) &&
56 && !(!ref(UNIQUE_SERVER_TAG).empty() && ref(IS_DIR)); 56 !(!ref(UNIQUE_SERVER_TAG).empty() && ref(IS_DIR));
57 } 57 }
58 58
59 bool EntryKernel::ShouldMaintainHierarchy() const { 59 bool EntryKernel::ShouldMaintainHierarchy() const {
60 // We maintain hierarchy for bookmarks and top-level folders, 60 // We maintain hierarchy for bookmarks and top-level folders,
61 // but no other types. Note that the Nigori node consists of a single 61 // but no other types. Note that the Nigori node consists of a single
62 // top-level folder, so it's included in this set. 62 // top-level folder, so it's included in this set.
63 return (GetModelTypeFromSpecifics(ref(SPECIFICS)) == syncer::BOOKMARKS) 63 return TypeSupportsHierarchy(GetModelTypeFromSpecifics(ref(SPECIFICS))) ||
64 || (!ref(UNIQUE_SERVER_TAG).empty()); 64 (!ref(UNIQUE_SERVER_TAG).empty());
65 } 65 }
66 66
67 namespace { 67 namespace {
68 68
69 // Utility function to loop through a set of enum values and add the 69 // Utility function to loop through a set of enum values and add the
70 // field keys/values in the kernel to the given dictionary. 70 // field keys/values in the kernel to the given dictionary.
71 // 71 //
72 // V should be convertible to Value. 72 // V should be convertible to Value.
73 template <class T, class U, class V> 73 template <class T, class U, class V>
74 void SetFieldValues(const EntryKernel& kernel, 74 void SetFieldValues(const EntryKernel& kernel,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 const sync_pb::AttachmentMetadata& a) { 141 const sync_pb::AttachmentMetadata& a) {
142 return new base::StringValue(a.SerializeAsString()); 142 return new base::StringValue(a.SerializeAsString());
143 } 143 }
144 144
145 } // namespace 145 } // namespace
146 146
147 base::DictionaryValue* EntryKernel::ToValue( 147 base::DictionaryValue* EntryKernel::ToValue(
148 Cryptographer* cryptographer) const { 148 Cryptographer* cryptographer) const {
149 base::DictionaryValue* kernel_info = new base::DictionaryValue(); 149 base::DictionaryValue* kernel_info = new base::DictionaryValue();
150 kernel_info->SetBoolean("isDirty", is_dirty()); 150 kernel_info->SetBoolean("isDirty", is_dirty());
151 kernel_info->Set("serverModelType", ModelTypeToValue(GetServerModelType())); 151 ModelType dataType = GetServerModelType();
152 if (!IsRealDataType(dataType))
153 dataType = GetModelType();
154 kernel_info->Set("modelType", ModelTypeToValue(dataType));
152 155
153 // Int64 fields. 156 // Int64 fields.
154 SetFieldValues(*this, kernel_info, 157 SetFieldValues(*this, kernel_info,
155 &GetMetahandleFieldString, &Int64ToValue, 158 &GetMetahandleFieldString, &Int64ToValue,
156 INT64_FIELDS_BEGIN, META_HANDLE); 159 INT64_FIELDS_BEGIN, META_HANDLE);
157 SetFieldValues(*this, kernel_info, 160 SetFieldValues(*this, kernel_info,
158 &GetBaseVersionString, &Int64ToValue, 161 &GetBaseVersionString, &Int64ToValue,
159 META_HANDLE + 1, BASE_VERSION); 162 META_HANDLE + 1, BASE_VERSION);
160 SetFieldValues(*this, kernel_info, 163 SetFieldValues(*this, kernel_info,
161 &GetInt64FieldString, &Int64ToValue, 164 &GetInt64FieldString, &Int64ToValue,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 base::DictionaryValue* EntryKernelMutationToValue( 231 base::DictionaryValue* EntryKernelMutationToValue(
229 const EntryKernelMutation& mutation) { 232 const EntryKernelMutation& mutation) {
230 base::DictionaryValue* dict = new base::DictionaryValue(); 233 base::DictionaryValue* dict = new base::DictionaryValue();
231 dict->Set("original", mutation.original.ToValue(NULL)); 234 dict->Set("original", mutation.original.ToValue(NULL));
232 dict->Set("mutated", mutation.mutated.ToValue(NULL)); 235 dict->Set("mutated", mutation.mutated.ToValue(NULL));
233 return dict; 236 return dict;
234 } 237 }
235 238
236 } // namespace syncer 239 } // namespace syncer
237 } // namespace syncable 240 } // namespace syncable
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698