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"
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
;
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();
40 delete_journal_list
->back().specifics
= unencrypted_data
;
45 if (!undecryptable_journal
.empty()) {
46 trans
->GetDirectory()->delete_journal()->PurgeDeleteJournals(
47 trans
->GetWrappedTrans(), undecryptable_journal
);
52 void DeleteJournal::PurgeDeleteJournals(BaseTransaction
* trans
,
53 const std::set
<int64
>& ids
) {
54 trans
->GetDirectory()->delete_journal()->PurgeDeleteJournals(
55 trans
->GetWrappedTrans(), ids
);