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

Unified Diff: components/sync/engine_impl/model_type_worker.cc

Issue 2353353004: [Sync] Misc ModelTypeWorker improvements. (Closed)
Patch Set: Address comment. Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/sync/engine_impl/model_type_worker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/engine_impl/model_type_worker.cc
diff --git a/components/sync/engine_impl/model_type_worker.cc b/components/sync/engine_impl/model_type_worker.cc
index 72160a5cd35e6f8fab546388702a1c1c1fdccbb9..f8786421af2f128d3ab3b2c83fa4b9f77ac35a7c 100644
--- a/components/sync/engine_impl/model_type_worker.cc
+++ b/components/sync/engine_impl/model_type_worker.cc
@@ -63,20 +63,15 @@ ModelTypeWorker::~ModelTypeWorker() {
}
ModelType ModelTypeWorker::GetModelType() const {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
return type_;
}
-bool ModelTypeWorker::IsEncryptionRequired() const {
- return !!cryptographer_;
-}
-
void ModelTypeWorker::UpdateCryptographer(
std::unique_ptr<Cryptographer> cryptographer) {
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(cryptographer);
cryptographer_ = std::move(cryptographer);
-
- // Update our state and that of the proxy.
OnCryptographerUpdated();
// Nudge the scheduler if we're now allowed to commit.
@@ -86,18 +81,19 @@ void ModelTypeWorker::UpdateCryptographer(
// UpdateHandler implementation.
bool ModelTypeWorker::IsInitialSyncEnded() const {
+ DCHECK(thread_checker_.CalledOnValidThread());
return data_type_state_.initial_sync_done();
}
void ModelTypeWorker::GetDownloadProgress(
sync_pb::DataTypeProgressMarker* progress_marker) const {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
progress_marker->CopyFrom(data_type_state_.progress_marker());
}
void ModelTypeWorker::GetDataTypeContext(
sync_pb::DataTypeContext* context) const {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
context->CopyFrom(data_type_state_.type_context());
}
@@ -106,7 +102,7 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
const sync_pb::DataTypeContext& mutated_context,
const SyncEntityList& applicable_updates,
syncer::StatusController* status) {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// TODO(rlarocque): Handle data type context conflicts.
*data_type_state_.mutable_type_context() = mutated_context;
@@ -114,8 +110,7 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
for (const sync_pb::SyncEntity* update_entity : applicable_updates) {
// Skip updates for permanent folders.
- // TODO(stanisc): crbug.com/516866: might need to handle this for
- // hierarchical datatypes.
+ // TODO(crbug.com/516866): might need to handle this for hierarchical types.
if (!update_entity->server_defined_unique_tag().empty())
continue;
@@ -123,7 +118,7 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
const std::string& client_tag_hash =
update_entity->client_defined_unique_tag();
- // TODO(stanisc): crbug.com/516866: this wouldn't be true for bookmarks.
+ // TODO(crbug.com/516866): this wouldn't be true for bookmarks.
DCHECK(!client_tag_hash.empty());
// Prepare the message for the model thread.
@@ -152,19 +147,17 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
response_data.entity = data.PassToPtr();
entity->ReceiveUpdate(response_data);
pending_updates_.push_back(response_data);
- } else if (specifics.has_encrypted() && cryptographer_ &&
+ } else if (cryptographer_ &&
cryptographer_->CanDecrypt(specifics.encrypted())) {
- // Encrypted, but we know the key.
- if (DecryptSpecifics(cryptographer_.get(), specifics, &data.specifics)) {
+ // Encrypted and we know the key.
+ if (DecryptSpecifics(specifics, &data.specifics)) {
response_data.entity = data.PassToPtr();
response_data.encryption_key_name = specifics.encrypted().key_name();
entity->ReceiveUpdate(response_data);
pending_updates_.push_back(response_data);
}
- } else if (specifics.has_encrypted() &&
- (!cryptographer_ ||
- !cryptographer_->CanDecrypt(specifics.encrypted()))) {
- // Can't decrypt right now. Ask the entity tracker to handle it.
+ } else {
+ // Can't decrypt right now. Ask the entity tracker to handle it.
data.specifics = specifics;
response_data.entity = data.PassToPtr();
entity->ReceiveEncryptedUpdate(response_data);
@@ -175,7 +168,7 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
}
void ModelTypeWorker::ApplyUpdates(syncer::StatusController* status) {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// This should only ever be called after one PassiveApplyUpdates.
DCHECK(data_type_state_.initial_sync_done());
// Download cycle is done, pass all updates to the processor.
@@ -183,6 +176,7 @@ void ModelTypeWorker::ApplyUpdates(syncer::StatusController* status) {
}
void ModelTypeWorker::PassiveApplyUpdates(syncer::StatusController* status) {
+ DCHECK(thread_checker_.CalledOnValidThread());
// This should only be called at the end of the very first download cycle.
DCHECK(!data_type_state_.initial_sync_done());
// Indicate to the processor that the initial download is done. The initial
@@ -201,10 +195,9 @@ void ModelTypeWorker::ApplyPendingUpdates() {
}
void ModelTypeWorker::EnqueueForCommit(const CommitRequestDataList& list) {
- DCHECK(CalledOnValidThread());
-
+ DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(IsTypeInitialized())
- << "Asked to commit items before type was initialized. "
+ << "Asked to commit items before type was initialized. "
<< "ModelType is: " << ModelTypeToString(type_);
for (const CommitRequestData& commit : list) {
@@ -222,7 +215,7 @@ void ModelTypeWorker::EnqueueForCommit(const CommitRequestDataList& list) {
// CommitContributor implementation.
std::unique_ptr<CommitContribution> ModelTypeWorker::GetContribution(
size_t max_entries) {
- DCHECK(CalledOnValidThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// There shouldn't be a GetUpdates in progress when a commit is triggered.
DCHECK(pending_updates_.empty());
@@ -253,6 +246,7 @@ std::unique_ptr<CommitContribution> ModelTypeWorker::GetContribution(
}
void ModelTypeWorker::OnCommitResponse(CommitResponseDataList* response_list) {
+ DCHECK(thread_checker_.CalledOnValidThread());
for (CommitResponseData& response : *response_list) {
WorkerEntityTracker* entity = GetEntityTracker(response.client_tag_hash);
@@ -267,7 +261,7 @@ void ModelTypeWorker::OnCommitResponse(CommitResponseDataList* response_list) {
entity->ReceiveCommitResponse(&response);
}
- // Send the responses back to the model thread. It needs to know which
+ // Send the responses back to the model thread. It needs to know which
// items have been successfully committed so it can save that information in
// permanent storage.
model_type_processor_->OnCommitCompleted(data_type_state_, *response_list);
@@ -289,8 +283,7 @@ bool ModelTypeWorker::CanCommitItems() const {
return false;
// Don't commit if we should be encrypting but don't have the required keys.
- if (IsEncryptionRequired() &&
- (!cryptographer_ || !cryptographer_->is_ready())) {
+ if (cryptographer_ && !cryptographer_->is_ready()) {
return false;
}
@@ -303,7 +296,7 @@ void ModelTypeWorker::AdjustCommitProto(sync_pb::SyncEntity* sync_entity) {
// Initial commits need our help to generate a client ID.
if (sync_entity->version() == kUncommittedVersion) {
DCHECK(!sync_entity->has_id_string());
- // TODO(stanisc): This is incorrect for bookmarks for two reasons:
+ // TODO(crbug.com/516866): This is incorrect for bookmarks for two reasons:
// 1) Won't be able to match previously committed bookmarks to the ones
// with server ID.
// 2) Recommitting an item in a case of failing to receive commit response
@@ -317,9 +310,9 @@ void ModelTypeWorker::AdjustCommitProto(sync_pb::SyncEntity* sync_entity) {
}
// Encrypt the specifics and hide the title if necessary.
- if (IsEncryptionRequired()) {
- // IsEncryptionRequired() && CanCommitItems() implies
- // that the cryptographer is valid and ready to encrypt.
+ if (cryptographer_) {
+ // If there is a cryptographer and CanCommitItems() is true then the
+ // cryptographer is valid and ready to encrypt.
sync_pb::EntitySpecifics encrypted_specifics;
bool result = cryptographer_->Encrypt(
sync_entity->specifics(), encrypted_specifics.mutable_encrypted());
@@ -328,12 +321,11 @@ void ModelTypeWorker::AdjustCommitProto(sync_pb::SyncEntity* sync_entity) {
sync_entity->set_name("encrypted");
}
- // Always include enough specifics to identify the type. Do this even in
+ // Always include enough specifics to identify the type. Do this even in
// deletion requests, where the specifics are otherwise invalid.
AddDefaultFieldValue(type_, sync_entity->mutable_specifics());
- // TODO(stanisc): crbug.com/516866:
- // Call sync_entity->set_parent_id_string(...) for hierarchical entities here.
+ // TODO(crbug.com/516866): Set parent_id_string for hierarchical types here.
}
void ModelTypeWorker::OnCryptographerUpdated() {
@@ -353,25 +345,18 @@ void ModelTypeWorker::OnCryptographerUpdated() {
new_encryption_key = true;
}
- for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
- ++it) {
- if (it->second->HasEncryptedUpdate()) {
- const UpdateResponseData& encrypted_update =
- it->second->GetEncryptedUpdate();
+ for (const auto& kv : entities_) {
+ WorkerEntityTracker* entity = kv.second.get();
+ if (entity->HasEncryptedUpdate()) {
+ const UpdateResponseData& encrypted_update = entity->GetEncryptedUpdate();
const EntityData& data = encrypted_update.entity.value();
-
- // We assume all pending updates are encrypted items for which we
- // don't have the key.
DCHECK(data.specifics.has_encrypted());
if (cryptographer_->CanDecrypt(data.specifics.encrypted())) {
EntityData decrypted_data;
- if (DecryptSpecifics(cryptographer_.get(), data.specifics,
- &decrypted_data.specifics)) {
+ if (DecryptSpecifics(data.specifics, &decrypted_data.specifics)) {
// Copy other fields one by one since EntityData doesn't allow
// copying.
- // TODO(stanisc): this code is likely to be removed once we get
- // rid of pending updates.
decrypted_data.id = data.id;
decrypted_data.client_tag_hash = data.client_tag_hash;
decrypted_data.non_unique_name = data.non_unique_name;
@@ -385,7 +370,7 @@ void ModelTypeWorker::OnCryptographerUpdated() {
data.specifics.encrypted().key_name();
response_datas.push_back(decrypted_update);
- it->second->ClearEncryptedUpdate();
+ entity->ClearEncryptedUpdate();
}
}
}
@@ -400,14 +385,13 @@ void ModelTypeWorker::OnCryptographerUpdated() {
}
}
-bool ModelTypeWorker::DecryptSpecifics(Cryptographer* cryptographer,
- const sync_pb::EntitySpecifics& in,
+bool ModelTypeWorker::DecryptSpecifics(const sync_pb::EntitySpecifics& in,
sync_pb::EntitySpecifics* out) {
+ DCHECK(cryptographer_);
DCHECK(in.has_encrypted());
- DCHECK(cryptographer->CanDecrypt(in.encrypted()));
+ DCHECK(cryptographer_->CanDecrypt(in.encrypted()));
- std::string plaintext;
- plaintext = cryptographer->DecryptToString(in.encrypted());
+ std::string plaintext = cryptographer_->DecryptToString(in.encrypted());
if (plaintext.empty()) {
LOG(ERROR) << "Failed to decrypt a decryptable entity";
return false;
« no previous file with comments | « components/sync/engine_impl/model_type_worker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698