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

Unified Diff: sync/internal_api/delete_journal.cc

Issue 11533008: Use delete journal to remove bookmarks that are already deleted in sync model (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: sync/internal_api/delete_journal.cc
diff --git a/sync/internal_api/delete_journal.cc b/sync/internal_api/delete_journal.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ebeb5a761268ace27fa7ce2281211dd633109edd
--- /dev/null
+++ b/sync/internal_api/delete_journal.cc
@@ -0,0 +1,58 @@
+// 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/internal_api/public/delete_journal.h"
+
+#include "sync/internal_api/public/base_transaction.h"
+#include "sync/syncable/directory.h"
+#include "sync/syncable/syncable_base_transaction.h"
+
+namespace syncer {
+
+// static
+void DeleteJournal::GetBookmarkDeleteJournals(
+ BaseTransaction* trans, BookmarkDeleteJournalList *delete_journal_list) {
+ syncer::syncable::EntryKernelSet deleted_entries;
+ trans->GetDirectory()->delete_journal()->GetDeleteJournals(
+ trans->GetWrappedTrans(), BOOKMARKS, &deleted_entries);
+ std::set<int64> undecryptable_journal;
+ for (syncer::syncable::EntryKernelSet::const_iterator i =
+ deleted_entries.begin(); i != deleted_entries.end(); ++i) {
+ delete_journal_list->push_back(BookmarkDeleteJournal());
+ delete_journal_list->back().id = (*i)->ref(syncer::syncable::META_HANDLE);
+ delete_journal_list->back().is_folder = (*i)->ref(syncer::syncable::IS_DIR);
+
+ const sync_pb::EntitySpecifics& specifics = (*i)->ref(
+ syncer::syncable::SPECIFICS);
+ if (!specifics.has_encrypted()) {
+ delete_journal_list->back().specifics = specifics;
+ } else {
+ std::string plaintext_data = trans->GetCryptographer()->DecryptToString(
+ specifics.encrypted());
+ sync_pb::EntitySpecifics unencrypted_data;
+ if (plaintext_data.length() == 0 ||
+ !unencrypted_data.ParseFromString(plaintext_data)) {
+ // Fail to decrypt, Add this delete journal to purge.
+ undecryptable_journal.insert(delete_journal_list->back().id);
+ delete_journal_list->pop_back();
+ } else {
+ delete_journal_list->back().specifics = unencrypted_data;
+ }
+ }
+ }
+
+ if (!undecryptable_journal.empty()) {
+ trans->GetDirectory()->delete_journal()->PurgeDeleteJournals(
+ trans->GetWrappedTrans(), undecryptable_journal);
+ }
+}
+
+// static
+void DeleteJournal::PurgeDeleteJournals(BaseTransaction* trans,
+ const std::set<int64>& ids) {
+ trans->GetDirectory()->delete_journal()->PurgeDeleteJournals(
+ trans->GetWrappedTrans(), ids);
+}
+
+} // namespace syncer
« no previous file with comments | « chrome/browser/sync/profile_sync_service_bookmark_unittest.cc ('k') | sync/internal_api/public/delete_journal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698