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

Side by Side Diff: chrome/browser/sync/engine/get_commit_ids_command.cc

Issue 7806005: Revert 98770 - Merge 98758 - [Sync] Gracefully handle writing to a node when the cryptographer is... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/835/src/
Patch Set: Created 9 years, 3 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
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/engine/get_commit_ids_command.h" 5 #include "chrome/browser/sync/engine/get_commit_ids_command.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "chrome/browser/sync/engine/nigori_util.h"
12 #include "chrome/browser/sync/engine/syncer_util.h" 11 #include "chrome/browser/sync/engine/syncer_util.h"
13 #include "chrome/browser/sync/syncable/directory_manager.h"
14 #include "chrome/browser/sync/syncable/syncable.h" 12 #include "chrome/browser/sync/syncable/syncable.h"
15 #include "chrome/browser/sync/util/cryptographer.h"
16 13
17 using std::set; 14 using std::set;
18 using std::vector; 15 using std::vector;
19 16
20 namespace browser_sync { 17 namespace browser_sync {
21 18
22 using sessions::OrderedCommitSet; 19 using sessions::OrderedCommitSet;
23 using sessions::SyncSession; 20 using sessions::SyncSession;
24 using sessions::StatusController; 21 using sessions::StatusController;
25 22
26 GetCommitIdsCommand::GetCommitIdsCommand(int commit_batch_size) 23 GetCommitIdsCommand::GetCommitIdsCommand(int commit_batch_size)
27 : requested_commit_batch_size_(commit_batch_size) {} 24 : requested_commit_batch_size_(commit_batch_size) {}
28 25
29 GetCommitIdsCommand::~GetCommitIdsCommand() {} 26 GetCommitIdsCommand::~GetCommitIdsCommand() {}
30 27
31 void GetCommitIdsCommand::ExecuteImpl(SyncSession* session) { 28 void GetCommitIdsCommand::ExecuteImpl(SyncSession* session) {
32 // Gather the full set of unsynced items and store it in the session. They 29 // Gather the full set of unsynced items and store it in the session. They
33 // are not in the correct order for commit. 30 // are not in the correct order for commit.
34 syncable::Directory::UnsyncedMetaHandles all_unsynced_handles; 31 syncable::Directory::UnsyncedMetaHandles all_unsynced_handles;
35 SyncerUtil::GetUnsyncedEntries(session->write_transaction(), 32 SyncerUtil::GetUnsyncedEntries(session->write_transaction(),
36 &all_unsynced_handles); 33 &all_unsynced_handles);
37
38 Cryptographer *cryptographer =
39 session->context()->directory_manager()->GetCryptographer(
40 session->write_transaction());
41 if (cryptographer) {
42 FilterEntriesNeedingEncryption(cryptographer->GetEncryptedTypes(),
43 session->write_transaction(),
44 &all_unsynced_handles);
45 }
46 StatusController* status = session->status_controller(); 34 StatusController* status = session->status_controller();
47 status->set_unsynced_handles(all_unsynced_handles); 35 status->set_unsynced_handles(all_unsynced_handles);
48 36
49 BuildCommitIds(status->unsynced_handles(), session->write_transaction(), 37 BuildCommitIds(status->unsynced_handles(), session->write_transaction(),
50 session->routing_info()); 38 session->routing_info());
51 39
52 const vector<syncable::Id>& verified_commit_ids = 40 const vector<syncable::Id>& verified_commit_ids =
53 ordered_commit_set_->GetAllCommitIds(); 41 ordered_commit_set_->GetAllCommitIds();
54 42
55 for (size_t i = 0; i < verified_commit_ids.size(); i++) 43 for (size_t i = 0; i < verified_commit_ids.size(); i++)
56 VLOG(1) << "Debug commit batch result:" << verified_commit_ids[i]; 44 VLOG(1) << "Debug commit batch result:" << verified_commit_ids[i];
57 45
58 status->set_commit_set(*ordered_commit_set_.get()); 46 status->set_commit_set(*ordered_commit_set_.get());
59 } 47 }
60 48
61 // We create a new list of unsynced handles which omits all handles to entries
62 // that require encryption but are written in plaintext. If any were found we
63 // overwrite |unsynced_handles| with this new list, else no change is made.
64 // Static.
65 void GetCommitIdsCommand::FilterEntriesNeedingEncryption(
66 const syncable::ModelTypeSet& encrypted_types,
67 syncable::BaseTransaction* trans,
68 syncable::Directory::UnsyncedMetaHandles* unsynced_handles) {
69 bool removed_handles = false;
70 syncable::Directory::UnsyncedMetaHandles::iterator iter;
71 syncable::Directory::UnsyncedMetaHandles new_unsynced_handles;
72 new_unsynced_handles.reserve(unsynced_handles->size());
73 // TODO(zea): If this becomes a bottleneck, we should merge this loop into the
74 // AddCreatesAndMoves and AddDeletes loops.
75 for (iter = unsynced_handles->begin();
76 iter != unsynced_handles->end();
77 ++iter) {
78 syncable::Entry entry(trans, syncable::GET_BY_HANDLE, *iter);
79 if (syncable::EntryNeedsEncryption(encrypted_types, entry)) {
80 // This entry requires encryption but is not encrypted (possibly due to
81 // the cryptographer not being initialized). Don't add it to our new list
82 // of unsynced handles.
83 removed_handles = true;
84 } else {
85 new_unsynced_handles.push_back(*iter);
86 }
87 }
88 if (removed_handles)
89 *unsynced_handles = new_unsynced_handles;
90 }
91
92 void GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors( 49 void GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors(
93 syncable::BaseTransaction* trans, 50 syncable::BaseTransaction* trans,
94 syncable::Id parent_id, 51 syncable::Id parent_id,
95 const ModelSafeRoutingInfo& routes) { 52 const ModelSafeRoutingInfo& routes) {
96 OrderedCommitSet item_dependencies(routes); 53 OrderedCommitSet item_dependencies(routes);
97 54
98 // Climb the tree adding entries leaf -> root. 55 // Climb the tree adding entries leaf -> root.
99 while (!parent_id.ServerKnows()) { 56 while (!parent_id.ServerKnows()) {
100 syncable::Entry parent(trans, syncable::GET_BY_ID, parent_id); 57 syncable::Entry parent(trans, syncable::GET_BY_ID, parent_id);
101 CHECK(parent.good()) << "Bad user-only parent in item path."; 58 CHECK(parent.good()) << "Bad user-only parent in item path.";
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 // delete trees. 248 // delete trees.
292 249
293 // Add moves and creates, and prepend their uncommitted parents. 250 // Add moves and creates, and prepend their uncommitted parents.
294 AddCreatesAndMoves(unsynced_handles, write_transaction, routes); 251 AddCreatesAndMoves(unsynced_handles, write_transaction, routes);
295 252
296 // Add all deletes. 253 // Add all deletes.
297 AddDeletes(unsynced_handles, write_transaction); 254 AddDeletes(unsynced_handles, write_transaction);
298 } 255 }
299 256
300 } // namespace browser_sync 257 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/get_commit_ids_command.h ('k') | chrome/browser/sync/engine/syncapi.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698