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

Side by Side Diff: sync/internal_api/sync_rollback_manager_base.cc

Issue 235053006: Add sync manager classes for backup/rollback: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "sync/internal_api/sync_rollback_manager_base.h"
6
7 #include "sync/internal_api/public/base/model_type.h"
8 #include "sync/internal_api/public/internal_components_factory.h"
9 #include "sync/internal_api/public/read_node.h"
10 #include "sync/internal_api/public/read_transaction.h"
11 #include "sync/internal_api/public/util/syncer_error.h"
12 #include "sync/internal_api/public/write_transaction.h"
13 #include "sync/syncable/directory_backing_store.h"
14 #include "sync/syncable/mutable_entry.h"
15
16 namespace {
17
18 // Permanent bookmark folders as defined in bookmark_model_associator.cc.
19 const char kBookmarkBarTag[] = "bookmark_bar";
20 const char kMobileBookmarksTag[] = "synced_bookmarks";
21 const char kOtherBookmarksTag[] = "other_bookmarks";
22
23 } // anonymous namespace
24
25 namespace syncer {
26
27 SyncRollbackManagerBase::SyncRollbackManagerBase()
28 : report_unrecoverable_error_function_(NULL),
29 weak_ptr_factory_(this) {
30 }
31
32 SyncRollbackManagerBase::~SyncRollbackManagerBase() {
33 }
34
35 void SyncRollbackManagerBase::Init(
36 const base::FilePath& database_location,
37 const WeakHandle<JsEventHandler>& event_handler,
38 const std::string& sync_server_and_path,
39 int sync_server_port,
40 bool use_ssl,
41 scoped_ptr<HttpPostProviderFactory> post_factory,
42 const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
43 ExtensionsActivity* extensions_activity,
44 SyncManager::ChangeDelegate* change_delegate,
45 const SyncCredentials& credentials,
46 const std::string& invalidator_client_id,
47 const std::string& restored_key_for_bootstrapping,
48 const std::string& restored_keystore_key_for_bootstrapping,
49 InternalComponentsFactory* internal_components_factory,
50 Encryptor* encryptor,
51 scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
52 ReportUnrecoverableErrorFunction
53 report_unrecoverable_error_function,
54 CancelationSignal* cancelation_signal) {
55 unrecoverable_error_handler_ = unrecoverable_error_handler.Pass();
56 report_unrecoverable_error_function_ = report_unrecoverable_error_function;
57
58 if (!InitBackupDB(database_location, internal_components_factory)) {
59 NotifyInitializationFailure();
60 return;
61 }
62
63 NotifyInitializationSuccess();
64 }
65
66 void SyncRollbackManagerBase::ThrowUnrecoverableError() {
67 NOTREACHED();
68 }
69
70 ModelTypeSet SyncRollbackManagerBase::InitialSyncEndedTypes() {
71 return share_.directory->InitialSyncEndedTypes();
72 }
73
74 ModelTypeSet SyncRollbackManagerBase::GetTypesWithEmptyProgressMarkerToken(
75 ModelTypeSet types) {
76 ModelTypeSet inited_types = share_.directory->InitialSyncEndedTypes();
77 types.RemoveAll(inited_types);
78 return types;
79 }
80
81 bool SyncRollbackManagerBase::PurgePartiallySyncedTypes() {
82 NOTREACHED();
83 return true;
84 }
85
86 void SyncRollbackManagerBase::UpdateCredentials(
87 const SyncCredentials& credentials) {
88 NOTREACHED();
89 }
90
91 void SyncRollbackManagerBase::StartSyncingNormally(
92 const ModelSafeRoutingInfo& routing_info){
93 }
94
95 void SyncRollbackManagerBase::ConfigureSyncer(
96 ConfigureReason reason,
97 ModelTypeSet to_download,
98 ModelTypeSet to_purge,
99 ModelTypeSet to_journal,
100 ModelTypeSet to_unapply,
101 const ModelSafeRoutingInfo& new_routing_info,
102 const base::Closure& ready_task,
103 const base::Closure& retry_task) {
104 DCHECK(to_purge.Empty());
105 DCHECK(to_journal.Empty());
106 DCHECK(to_unapply.Empty());
107 for (ModelTypeSet::Iterator type = to_download.First();
108 type.Good(); type.Inc()) {
109 if (InitTypeRootNode(type.Get())) {
110 if (type.Get() == BOOKMARKS) {
111 InitBookmarkFolder(kBookmarkBarTag);
112 InitBookmarkFolder(kMobileBookmarksTag);
113 InitBookmarkFolder(kOtherBookmarksTag);
114 }
115 }
116 }
117
118 ready_task.Run();
119 }
120
121 void SyncRollbackManagerBase::OnInvalidatorStateChange(InvalidatorState state) {
122 }
123
124 void SyncRollbackManagerBase::OnIncomingInvalidation(
125 const ObjectIdInvalidationMap& invalidation_map) {
126 NOTREACHED();
127 }
128
129 void SyncRollbackManagerBase::AddObserver(SyncManager::Observer* observer) {
130 observers_.AddObserver(observer);
131 }
132
133 void SyncRollbackManagerBase::RemoveObserver(SyncManager::Observer* observer) {
134 observers_.RemoveObserver(observer);
135 }
136
137 SyncStatus SyncRollbackManagerBase::GetDetailedStatus() const {
138 return SyncStatus();
139 }
140
141 void SyncRollbackManagerBase::SaveChanges() {
142 }
143
144 void SyncRollbackManagerBase::ShutdownOnSyncThread() {
145 if (share_.directory) {
146 SaveChanges();
147 share_.directory->Close();
148 share_.directory.reset();
149 }
150 }
151
152 UserShare* SyncRollbackManagerBase::GetUserShare() {
153 return &share_;
154 }
155
156 const std::string SyncRollbackManagerBase::cache_guid() {
157 return share_.directory->cache_guid();
158 }
159
160 bool SyncRollbackManagerBase::ReceivedExperiment(Experiments* experiments) {
161 return false;
162 }
163
164 bool SyncRollbackManagerBase::HasUnsyncedItems() {
165 ReadTransaction trans(FROM_HERE, &share_);
166 syncable::Directory::Metahandles unsynced;
167 share_.directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(), &unsynced);
168 return !unsynced.empty();
169 }
170
171 SyncEncryptionHandler* SyncRollbackManagerBase::GetEncryptionHandler() {
172 return NULL;
173 }
174
175 void SyncRollbackManagerBase::RefreshTypes(ModelTypeSet types) {
176
177 }
178
179 void SyncRollbackManagerBase::HandleTransactionCompleteChangeEvent(
180 ModelTypeSet models_with_changes) {
181 }
182
183 ModelTypeSet SyncRollbackManagerBase::HandleTransactionEndingChangeEvent(
184 const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
185 syncable::BaseTransaction* trans) {
186 return ModelTypeSet();
187 }
188
189 void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncApi(
190 const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
191 syncable::BaseTransaction* trans,
192 std::vector<int64>* entries_changed) {
193 }
194
195 void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncer(
196 const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
197 syncable::BaseTransaction* trans,
198 std::vector<int64>* entries_changed) {
199 }
200
201 void SyncRollbackManagerBase::OnTransactionWrite(
202 const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
203 ModelTypeSet models_with_changes) {
204 }
205
206 void SyncRollbackManagerBase::NotifyInitializationSuccess() {
207 FOR_EACH_OBSERVER(
208 SyncManager::Observer, observers_,
209 OnInitializationComplete(
210 MakeWeakHandle(base::WeakPtr<JsBackend>()),
211 MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
212 true, InitialSyncEndedTypes()));
213 }
214
215 void SyncRollbackManagerBase::NotifyInitializationFailure() {
216 FOR_EACH_OBSERVER(
217 SyncManager::Observer, observers_,
218 OnInitializationComplete(
219 MakeWeakHandle(base::WeakPtr<JsBackend>()),
220 MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
221 false, InitialSyncEndedTypes()));
222 }
223
224 std::string SyncRollbackManagerBase::GetOwnerName() const {
225 return "";
226 }
227
228 syncer::SyncCoreProxy* SyncRollbackManagerBase::GetSyncCoreProxy() {
229 return NULL;
230 }
231
232 ScopedVector<syncer::ProtocolEvent>
233 SyncRollbackManagerBase::GetBufferedProtocolEvents() {
234 return ScopedVector<syncer::ProtocolEvent>().Pass();
235 }
236
237 scoped_ptr<base::ListValue> SyncRollbackManagerBase::GetAllNodesForType(
238 syncer::ModelType type) {
239 ReadTransaction trans(FROM_HERE, GetUserShare());
240 scoped_ptr<base::ListValue> nodes(
241 trans.GetDirectory()->GetNodeDetailsForType(trans.GetWrappedTrans(),
242 type));
243 return nodes.Pass();
244 }
245
246 bool SyncRollbackManagerBase::InitBackupDB(
247 const base::FilePath& sync_folder,
248 InternalComponentsFactory* internal_components_factory) {
249 base::FilePath backup_db_path = sync_folder.Append(
250 syncable::Directory::kSyncDatabaseFilename);
251 scoped_ptr<syncable::DirectoryBackingStore> backing_store =
252 internal_components_factory->BuildDirectoryBackingStore(
253 "backup", backup_db_path).Pass();
254
255 DCHECK(backing_store.get());
256 share_.directory.reset(
257 new syncable::Directory(
258 backing_store.release(),
259 unrecoverable_error_handler_.get(),
260 report_unrecoverable_error_function_,
261 NULL,
262 NULL));
263 return syncable::OPENED ==
264 share_.directory->Open(
265 "backup", this,
266 MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()));
267 }
268
269 bool SyncRollbackManagerBase::InitTypeRootNode(ModelType type) {
270 WriteTransaction trans(FROM_HERE, &share_);
271 ReadNode root(&trans);
272 if (BaseNode::INIT_OK == root.InitByTagLookup(ModelTypeToRootTag(type)))
273 return true;
274
275 syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
276 syncable::CREATE_NEW_UPDATE_ITEM,
277 syncable::Id::CreateFromServerId(
278 ModelTypeToString(type)));
279 if (!entry.good())
280 return false;
281
282 entry.PutParentId(syncable::Id());
283 entry.PutBaseVersion(1);
284 entry.PutUniqueServerTag(ModelTypeToRootTag(type));
285 entry.PutNonUniqueName(ModelTypeToString(type));
286 entry.PutIsDel(false);
287 entry.PutIsDir(true);
288
289 sync_pb::EntitySpecifics specifics;
290 AddDefaultFieldValue(type, &specifics);
291 entry.PutSpecifics(specifics);
292
293 return true;
294 }
295
296 void SyncRollbackManagerBase::InitBookmarkFolder(const std::string& folder) {
297 WriteTransaction trans(FROM_HERE, &share_);
298 syncable::Entry bookmark_root(trans.GetWrappedTrans(),
299 syncable::GET_BY_SERVER_TAG,
300 ModelTypeToRootTag(BOOKMARKS));
301 if (!bookmark_root.good())
302 return;
303
304 syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
305 syncable::CREATE_NEW_UPDATE_ITEM,
306 syncable::Id::CreateFromServerId(folder));
307 if (!entry.good())
308 return;
309
310 entry.PutParentId(bookmark_root.GetId());
311 entry.PutBaseVersion(1);
312 entry.PutUniqueServerTag(folder);
313 entry.PutNonUniqueName(folder);
314 entry.PutIsDel(false);
315 entry.PutIsDir(true);
316
317 sync_pb::EntitySpecifics specifics;
318 AddDefaultFieldValue(BOOKMARKS, &specifics);
319 entry.PutSpecifics(specifics);
320 }
321
322 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/internal_api/sync_rollback_manager_base.h ('k') | sync/internal_api/sync_rollback_manager_base_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698