Support Promise<T> syntax in the IDL parser.
[chromium-blink-merge.git] / sync / internal_api / delete_journal.cc
blobebeb5a761268ace27fa7ce2281211dd633109edd
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
3 // found in the LICENSE file.
5 #include "sync/internal_api/public/delete_journal.h"
7 #include "sync/internal_api/public/base_transaction.h"
8 #include "sync/syncable/directory.h"
9 #include "sync/syncable/syncable_base_transaction.h"
11 namespace syncer {
13 // static
14 void DeleteJournal::GetBookmarkDeleteJournals(
15 BaseTransaction* trans, BookmarkDeleteJournalList *delete_journal_list) {
16 syncer::syncable::EntryKernelSet deleted_entries;
17 trans->GetDirectory()->delete_journal()->GetDeleteJournals(
18 trans->GetWrappedTrans(), BOOKMARKS, &deleted_entries);
19 std::set<int64> undecryptable_journal;
20 for (syncer::syncable::EntryKernelSet::const_iterator i =
21 deleted_entries.begin(); i != deleted_entries.end(); ++i) {
22 delete_journal_list->push_back(BookmarkDeleteJournal());
23 delete_journal_list->back().id = (*i)->ref(syncer::syncable::META_HANDLE);
24 delete_journal_list->back().is_folder = (*i)->ref(syncer::syncable::IS_DIR);
26 const sync_pb::EntitySpecifics& specifics = (*i)->ref(
27 syncer::syncable::SPECIFICS);
28 if (!specifics.has_encrypted()) {
29 delete_journal_list->back().specifics = specifics;
30 } else {
31 std::string plaintext_data = trans->GetCryptographer()->DecryptToString(
32 specifics.encrypted());
33 sync_pb::EntitySpecifics unencrypted_data;
34 if (plaintext_data.length() == 0 ||
35 !unencrypted_data.ParseFromString(plaintext_data)) {
36 // Fail to decrypt, Add this delete journal to purge.
37 undecryptable_journal.insert(delete_journal_list->back().id);
38 delete_journal_list->pop_back();
39 } else {
40 delete_journal_list->back().specifics = unencrypted_data;
45 if (!undecryptable_journal.empty()) {
46 trans->GetDirectory()->delete_journal()->PurgeDeleteJournals(
47 trans->GetWrappedTrans(), undecryptable_journal);
51 // static
52 void DeleteJournal::PurgeDeleteJournals(BaseTransaction* trans,
53 const std::set<int64>& ids) {
54 trans->GetDirectory()->delete_journal()->PurgeDeleteJournals(
55 trans->GetWrappedTrans(), ids);
58 } // namespace syncer