Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/syncer_util.h" | 11 #include "chrome/browser/sync/engine/syncer_util.h" |
| 12 #include "chrome/browser/sync/syncable/directory_manager.h" | |
| 12 #include "chrome/browser/sync/syncable/syncable.h" | 13 #include "chrome/browser/sync/syncable/syncable.h" |
| 14 #include "chrome/browser/sync/util/cryptographer.h" | |
| 13 | 15 |
| 14 using std::set; | 16 using std::set; |
| 15 using std::vector; | 17 using std::vector; |
| 16 | 18 |
| 17 namespace browser_sync { | 19 namespace browser_sync { |
| 18 | 20 |
| 19 using sessions::OrderedCommitSet; | 21 using sessions::OrderedCommitSet; |
| 20 using sessions::SyncSession; | 22 using sessions::SyncSession; |
| 21 using sessions::StatusController; | 23 using sessions::StatusController; |
| 22 | 24 |
| 23 GetCommitIdsCommand::GetCommitIdsCommand(int commit_batch_size) | 25 GetCommitIdsCommand::GetCommitIdsCommand(int commit_batch_size) |
| 24 : requested_commit_batch_size_(commit_batch_size) {} | 26 : requested_commit_batch_size_(commit_batch_size) {} |
| 25 | 27 |
| 26 GetCommitIdsCommand::~GetCommitIdsCommand() {} | 28 GetCommitIdsCommand::~GetCommitIdsCommand() {} |
| 27 | 29 |
| 28 void GetCommitIdsCommand::ExecuteImpl(SyncSession* session) { | 30 void GetCommitIdsCommand::ExecuteImpl(SyncSession* session) { |
| 29 // Gather the full set of unsynced items and store it in the session. They | 31 // Gather the full set of unsynced items and store it in the session. They |
| 30 // are not in the correct order for commit. | 32 // are not in the correct order for commit. |
| 31 syncable::Directory::UnsyncedMetaHandles all_unsynced_handles; | 33 syncable::Directory::UnsyncedMetaHandles all_unsynced_handles; |
| 32 SyncerUtil::GetUnsyncedEntries(session->write_transaction(), | 34 SyncerUtil::GetUnsyncedEntries(session->write_transaction(), |
| 33 &all_unsynced_handles); | 35 &all_unsynced_handles); |
| 36 | |
| 37 Cryptographer *cryptographer = | |
| 38 session->context()->directory_manager()->GetCryptographer( | |
| 39 session->write_transaction()); | |
| 40 if (cryptographer) { | |
| 41 FilterEntriesNeedingEncryption(cryptographer->GetEncryptedTypes(), | |
| 42 session->write_transaction(), | |
| 43 &all_unsynced_handles); | |
| 44 } | |
| 34 StatusController* status = session->status_controller(); | 45 StatusController* status = session->status_controller(); |
| 35 status->set_unsynced_handles(all_unsynced_handles); | 46 status->set_unsynced_handles(all_unsynced_handles); |
| 36 | 47 |
| 37 BuildCommitIds(status->unsynced_handles(), session->write_transaction(), | 48 BuildCommitIds(status->unsynced_handles(), session->write_transaction(), |
| 38 session->routing_info()); | 49 session->routing_info()); |
| 39 | 50 |
| 40 const vector<syncable::Id>& verified_commit_ids = | 51 const vector<syncable::Id>& verified_commit_ids = |
| 41 ordered_commit_set_->GetAllCommitIds(); | 52 ordered_commit_set_->GetAllCommitIds(); |
| 42 | 53 |
| 43 for (size_t i = 0; i < verified_commit_ids.size(); i++) | 54 for (size_t i = 0; i < verified_commit_ids.size(); i++) |
| 44 VLOG(1) << "Debug commit batch result:" << verified_commit_ids[i]; | 55 VLOG(1) << "Debug commit batch result:" << verified_commit_ids[i]; |
| 45 | 56 |
| 46 status->set_commit_set(*ordered_commit_set_.get()); | 57 status->set_commit_set(*ordered_commit_set_.get()); |
| 47 } | 58 } |
| 48 | 59 |
| 60 // We create a new list of unsynced handles which omits all handles to entries | |
| 61 // that require encryption but are written in plaintext. If any were found we | |
| 62 // overwrite |unsynced_handles| with this new list, else no change is made. | |
| 63 // Static. | |
| 64 void GetCommitIdsCommand::FilterEntriesNeedingEncryption( | |
| 65 const syncable::ModelTypeSet& encrypted_types, | |
| 66 syncable::BaseTransaction* trans, | |
| 67 syncable::Directory::UnsyncedMetaHandles* unsynced_handles) { | |
| 68 bool removed_handles = false; | |
| 69 syncable::Directory::UnsyncedMetaHandles::iterator iter; | |
| 70 syncable::Directory::UnsyncedMetaHandles new_unsynced_handles; | |
| 71 new_unsynced_handles.reserve(unsynced_handles->size()); | |
| 72 for (iter = unsynced_handles->begin(); | |
|
tim (not reviewing)
2011/08/29 23:15:31
Hm. I think we should embed this filter in the exi
Nicolas Zea
2011/08/30 00:44:22
Added TODO, as discussed offline.
| |
| 73 iter != unsynced_handles->end(); | |
| 74 ++iter) { | |
| 75 syncable::Entry entry(trans, syncable::GET_BY_HANDLE, *iter); | |
| 76 syncable::ModelType type = entry.GetModelType(); | |
| 77 if (encrypted_types.count(type) == 0 || | |
| 78 !entry.Get(syncable::UNIQUE_SERVER_TAG).empty() || | |
| 79 type == syncable::PASSWORDS || | |
|
tim (not reviewing)
2011/08/29 23:15:31
this code looks vaguely familiar... do we run a si
Nicolas Zea
2011/08/30 00:44:22
Done.
| |
| 80 entry.Get(syncable::SPECIFICS).has_encrypted()) { | |
| 81 new_unsynced_handles.push_back(*iter); | |
| 82 } else { | |
| 83 // This entry requires encryption but is not encrypted (possibly due to | |
| 84 // the cryptographer not being initialized). Don't add it to our new list | |
| 85 // of unsynced handles. | |
| 86 removed_handles = true; | |
| 87 } | |
| 88 } | |
| 89 if (removed_handles) | |
| 90 *unsynced_handles = new_unsynced_handles; | |
| 91 } | |
| 92 | |
| 49 void GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors( | 93 void GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors( |
| 50 syncable::BaseTransaction* trans, | 94 syncable::BaseTransaction* trans, |
| 51 syncable::Id parent_id, | 95 syncable::Id parent_id, |
| 52 const ModelSafeRoutingInfo& routes) { | 96 const ModelSafeRoutingInfo& routes) { |
| 53 OrderedCommitSet item_dependencies(routes); | 97 OrderedCommitSet item_dependencies(routes); |
| 54 | 98 |
| 55 // Climb the tree adding entries leaf -> root. | 99 // Climb the tree adding entries leaf -> root. |
| 56 while (!parent_id.ServerKnows()) { | 100 while (!parent_id.ServerKnows()) { |
| 57 syncable::Entry parent(trans, syncable::GET_BY_ID, parent_id); | 101 syncable::Entry parent(trans, syncable::GET_BY_ID, parent_id); |
| 58 CHECK(parent.good()) << "Bad user-only parent in item path."; | 102 CHECK(parent.good()) << "Bad user-only parent in item path."; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 248 // delete trees. | 292 // delete trees. |
| 249 | 293 |
| 250 // Add moves and creates, and prepend their uncommitted parents. | 294 // Add moves and creates, and prepend their uncommitted parents. |
| 251 AddCreatesAndMoves(unsynced_handles, write_transaction, routes); | 295 AddCreatesAndMoves(unsynced_handles, write_transaction, routes); |
| 252 | 296 |
| 253 // Add all deletes. | 297 // Add all deletes. |
| 254 AddDeletes(unsynced_handles, write_transaction); | 298 AddDeletes(unsynced_handles, write_transaction); |
| 255 } | 299 } |
| 256 | 300 |
| 257 } // namespace browser_sync | 301 } // namespace browser_sync |
| OLD | NEW |