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

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

Powered by Google App Engine
This is Rietveld 408576698