| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/glue/sync_backend_host_impl.h" | 5 #include "chrome/browser/sync/glue/sync_backend_host_impl.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/location.h" |
| 8 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/single_thread_task_runner.h" |
| 9 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 12 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 14 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
| 13 #include "chrome/browser/sync/glue/invalidation_helper.h" | 15 #include "chrome/browser/sync/glue/invalidation_helper.h" |
| 14 #include "chrome/browser/sync/glue/sync_backend_host_core.h" | 16 #include "chrome/browser/sync/glue/sync_backend_host_core.h" |
| 15 #include "chrome/browser/sync/glue/sync_backend_registrar.h" | 17 #include "chrome/browser/sync/glue/sync_backend_registrar.h" |
| 16 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
| 17 #include "components/invalidation/invalidation_service.h" | 19 #include "components/invalidation/invalidation_service.h" |
| 18 #include "components/invalidation/object_id_invalidation_map.h" | 20 #include "components/invalidation/object_id_invalidation_map.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 scoped_ptr<InternalComponentsFactory>( | 157 scoped_ptr<InternalComponentsFactory>( |
| 156 new syncer::InternalComponentsFactoryImpl(factory_switches)).Pass(), | 158 new syncer::InternalComponentsFactoryImpl(factory_switches)).Pass(), |
| 157 unrecoverable_error_handler.Pass(), | 159 unrecoverable_error_handler.Pass(), |
| 158 report_unrecoverable_error_function)); | 160 report_unrecoverable_error_function)); |
| 159 InitCore(init_opts.Pass()); | 161 InitCore(init_opts.Pass()); |
| 160 } | 162 } |
| 161 | 163 |
| 162 void SyncBackendHostImpl::UpdateCredentials( | 164 void SyncBackendHostImpl::UpdateCredentials( |
| 163 const syncer::SyncCredentials& credentials) { | 165 const syncer::SyncCredentials& credentials) { |
| 164 DCHECK(registrar_->sync_thread()->IsRunning()); | 166 DCHECK(registrar_->sync_thread()->IsRunning()); |
| 165 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 167 registrar_->sync_thread()->task_runner()->PostTask( |
| 166 base::Bind(&SyncBackendHostCore::DoUpdateCredentials, | 168 FROM_HERE, base::Bind(&SyncBackendHostCore::DoUpdateCredentials, |
| 167 core_.get(), | 169 core_.get(), credentials)); |
| 168 credentials)); | |
| 169 } | 170 } |
| 170 | 171 |
| 171 void SyncBackendHostImpl::StartSyncingWithServer() { | 172 void SyncBackendHostImpl::StartSyncingWithServer() { |
| 172 SDVLOG(1) << "SyncBackendHostImpl::StartSyncingWithServer called."; | 173 SDVLOG(1) << "SyncBackendHostImpl::StartSyncingWithServer called."; |
| 173 | 174 |
| 174 syncer::ModelSafeRoutingInfo routing_info; | 175 syncer::ModelSafeRoutingInfo routing_info; |
| 175 registrar_->GetModelSafeRoutingInfo(&routing_info); | 176 registrar_->GetModelSafeRoutingInfo(&routing_info); |
| 176 | 177 |
| 177 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 178 registrar_->sync_thread()->task_runner()->PostTask( |
| 178 base::Bind(&SyncBackendHostCore::DoStartSyncing, | 179 FROM_HERE, base::Bind(&SyncBackendHostCore::DoStartSyncing, core_.get(), |
| 179 core_.get(), routing_info, sync_prefs_->GetLastPollTime())); | 180 routing_info, sync_prefs_->GetLastPollTime())); |
| 180 } | 181 } |
| 181 | 182 |
| 182 void SyncBackendHostImpl::SetEncryptionPassphrase(const std::string& passphrase, | 183 void SyncBackendHostImpl::SetEncryptionPassphrase(const std::string& passphrase, |
| 183 bool is_explicit) { | 184 bool is_explicit) { |
| 184 DCHECK(registrar_->sync_thread()->IsRunning()); | 185 DCHECK(registrar_->sync_thread()->IsRunning()); |
| 185 if (!IsNigoriEnabled()) { | 186 if (!IsNigoriEnabled()) { |
| 186 NOTREACHED() << "SetEncryptionPassphrase must never be called when nigori" | 187 NOTREACHED() << "SetEncryptionPassphrase must never be called when nigori" |
| 187 " is disabled."; | 188 " is disabled."; |
| 188 return; | 189 return; |
| 189 } | 190 } |
| 190 | 191 |
| 191 // We should never be called with an empty passphrase. | 192 // We should never be called with an empty passphrase. |
| 192 DCHECK(!passphrase.empty()); | 193 DCHECK(!passphrase.empty()); |
| 193 | 194 |
| 194 // This should only be called by the frontend. | 195 // This should only be called by the frontend. |
| 195 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); | 196 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
| 196 | 197 |
| 197 // SetEncryptionPassphrase should never be called if we are currently | 198 // SetEncryptionPassphrase should never be called if we are currently |
| 198 // encrypted with an explicit passphrase. | 199 // encrypted with an explicit passphrase. |
| 199 DCHECK(cached_passphrase_type_ == syncer::KEYSTORE_PASSPHRASE || | 200 DCHECK(cached_passphrase_type_ == syncer::KEYSTORE_PASSPHRASE || |
| 200 cached_passphrase_type_ == syncer::IMPLICIT_PASSPHRASE); | 201 cached_passphrase_type_ == syncer::IMPLICIT_PASSPHRASE); |
| 201 | 202 |
| 202 // Post an encryption task on the syncer thread. | 203 // Post an encryption task on the syncer thread. |
| 203 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 204 registrar_->sync_thread()->task_runner()->PostTask( |
| 204 base::Bind(&SyncBackendHostCore::DoSetEncryptionPassphrase, | 205 FROM_HERE, base::Bind(&SyncBackendHostCore::DoSetEncryptionPassphrase, |
| 205 core_.get(), | 206 core_.get(), passphrase, is_explicit)); |
| 206 passphrase, is_explicit)); | |
| 207 } | 207 } |
| 208 | 208 |
| 209 bool SyncBackendHostImpl::SetDecryptionPassphrase( | 209 bool SyncBackendHostImpl::SetDecryptionPassphrase( |
| 210 const std::string& passphrase) { | 210 const std::string& passphrase) { |
| 211 if (!IsNigoriEnabled()) { | 211 if (!IsNigoriEnabled()) { |
| 212 NOTREACHED() << "SetDecryptionPassphrase must never be called when nigori" | 212 NOTREACHED() << "SetDecryptionPassphrase must never be called when nigori" |
| 213 " is disabled."; | 213 " is disabled."; |
| 214 return false; | 214 return false; |
| 215 } | 215 } |
| 216 | 216 |
| 217 // We should never be called with an empty passphrase. | 217 // We should never be called with an empty passphrase. |
| 218 DCHECK(!passphrase.empty()); | 218 DCHECK(!passphrase.empty()); |
| 219 | 219 |
| 220 // This should only be called by the frontend. | 220 // This should only be called by the frontend. |
| 221 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); | 221 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
| 222 | 222 |
| 223 // This should only be called when we have cached pending keys. | 223 // This should only be called when we have cached pending keys. |
| 224 DCHECK(cached_pending_keys_.has_blob()); | 224 DCHECK(cached_pending_keys_.has_blob()); |
| 225 | 225 |
| 226 // Check the passphrase that was provided against our local cache of the | 226 // Check the passphrase that was provided against our local cache of the |
| 227 // cryptographer's pending keys. If this was unsuccessful, the UI layer can | 227 // cryptographer's pending keys. If this was unsuccessful, the UI layer can |
| 228 // immediately call OnPassphraseRequired without showing the user a spinner. | 228 // immediately call OnPassphraseRequired without showing the user a spinner. |
| 229 if (!CheckPassphraseAgainstCachedPendingKeys(passphrase)) | 229 if (!CheckPassphraseAgainstCachedPendingKeys(passphrase)) |
| 230 return false; | 230 return false; |
| 231 | 231 |
| 232 // Post a decryption task on the syncer thread. | 232 // Post a decryption task on the syncer thread. |
| 233 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 233 registrar_->sync_thread()->task_runner()->PostTask( |
| 234 base::Bind(&SyncBackendHostCore::DoSetDecryptionPassphrase, | 234 FROM_HERE, base::Bind(&SyncBackendHostCore::DoSetDecryptionPassphrase, |
| 235 core_.get(), | 235 core_.get(), passphrase)); |
| 236 passphrase)); | |
| 237 | 236 |
| 238 // Since we were able to decrypt the cached pending keys with the passphrase | 237 // Since we were able to decrypt the cached pending keys with the passphrase |
| 239 // provided, we immediately alert the UI layer that the passphrase was | 238 // provided, we immediately alert the UI layer that the passphrase was |
| 240 // accepted. This will avoid the situation where a user enters a passphrase, | 239 // accepted. This will avoid the situation where a user enters a passphrase, |
| 241 // clicks OK, immediately reopens the advanced settings dialog, and gets an | 240 // clicks OK, immediately reopens the advanced settings dialog, and gets an |
| 242 // unnecessary prompt for a passphrase. | 241 // unnecessary prompt for a passphrase. |
| 243 // Note: It is not guaranteed that the passphrase will be accepted by the | 242 // Note: It is not guaranteed that the passphrase will be accepted by the |
| 244 // syncer thread, since we could receive a new nigori node while the task is | 243 // syncer thread, since we could receive a new nigori node while the task is |
| 245 // pending. This scenario is a valid race, and SetDecryptionPassphrase can | 244 // pending. This scenario is a valid race, and SetDecryptionPassphrase can |
| 246 // trigger a new OnPassphraseRequired if it needs to. | 245 // trigger a new OnPassphraseRequired if it needs to. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 if (invalidation_handler_registered_) { | 278 if (invalidation_handler_registered_) { |
| 280 if (reason == syncer::DISABLE_SYNC) { | 279 if (reason == syncer::DISABLE_SYNC) { |
| 281 UnregisterInvalidationIds(); | 280 UnregisterInvalidationIds(); |
| 282 } | 281 } |
| 283 invalidator_->UnregisterInvalidationHandler(this); | 282 invalidator_->UnregisterInvalidationHandler(this); |
| 284 invalidator_ = NULL; | 283 invalidator_ = NULL; |
| 285 } | 284 } |
| 286 invalidation_handler_registered_ = false; | 285 invalidation_handler_registered_ = false; |
| 287 | 286 |
| 288 // Shut down and destroy sync manager. | 287 // Shut down and destroy sync manager. |
| 289 registrar_->sync_thread()->message_loop()->PostTask( | 288 registrar_->sync_thread()->task_runner()->PostTask( |
| 290 FROM_HERE, | 289 FROM_HERE, |
| 291 base::Bind(&SyncBackendHostCore::DoShutdown, | 290 base::Bind(&SyncBackendHostCore::DoShutdown, core_.get(), reason)); |
| 292 core_.get(), reason)); | |
| 293 core_ = NULL; | 291 core_ = NULL; |
| 294 | 292 |
| 295 // Worker cleanup. | 293 // Worker cleanup. |
| 296 SyncBackendRegistrar* detached_registrar = registrar_.release(); | 294 SyncBackendRegistrar* detached_registrar = registrar_.release(); |
| 297 detached_registrar->sync_thread()->message_loop()->PostTask( | 295 detached_registrar->sync_thread()->task_runner()->PostTask( |
| 298 FROM_HERE, | 296 FROM_HERE, base::Bind(&SyncBackendRegistrar::Shutdown, |
| 299 base::Bind(&SyncBackendRegistrar::Shutdown, | 297 base::Unretained(detached_registrar))); |
| 300 base::Unretained(detached_registrar))); | |
| 301 | 298 |
| 302 if (sync_thread_claimed) | 299 if (sync_thread_claimed) |
| 303 return detached_registrar->ReleaseSyncThread(); | 300 return detached_registrar->ReleaseSyncThread(); |
| 304 else | 301 else |
| 305 return scoped_ptr<base::Thread>(); | 302 return scoped_ptr<base::Thread>(); |
| 306 } | 303 } |
| 307 | 304 |
| 308 void SyncBackendHostImpl::UnregisterInvalidationIds() { | 305 void SyncBackendHostImpl::UnregisterInvalidationIds() { |
| 309 if (invalidation_handler_registered_) { | 306 if (invalidation_handler_registered_) { |
| 310 CHECK(invalidator_->UpdateRegisteredInvalidationIds(this, | 307 CHECK(invalidator_->UpdateRegisteredInvalidationIds(this, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 retry_callback); | 432 retry_callback); |
| 436 | 433 |
| 437 DCHECK(syncer::Intersection(active_types, types_to_purge).Empty()); | 434 DCHECK(syncer::Intersection(active_types, types_to_purge).Empty()); |
| 438 DCHECK(syncer::Intersection(active_types, fatal_types).Empty()); | 435 DCHECK(syncer::Intersection(active_types, fatal_types).Empty()); |
| 439 DCHECK(syncer::Intersection(active_types, unapply_types).Empty()); | 436 DCHECK(syncer::Intersection(active_types, unapply_types).Empty()); |
| 440 DCHECK(syncer::Intersection(active_types, inactive_types).Empty()); | 437 DCHECK(syncer::Intersection(active_types, inactive_types).Empty()); |
| 441 return syncer::Difference(active_types, types_to_download); | 438 return syncer::Difference(active_types, types_to_download); |
| 442 } | 439 } |
| 443 | 440 |
| 444 void SyncBackendHostImpl::EnableEncryptEverything() { | 441 void SyncBackendHostImpl::EnableEncryptEverything() { |
| 445 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 442 registrar_->sync_thread()->task_runner()->PostTask( |
| 446 base::Bind(&SyncBackendHostCore::DoEnableEncryptEverything, | 443 FROM_HERE, |
| 447 core_.get())); | 444 base::Bind(&SyncBackendHostCore::DoEnableEncryptEverything, core_.get())); |
| 448 } | 445 } |
| 449 | 446 |
| 450 void SyncBackendHostImpl::ActivateDataType( | 447 void SyncBackendHostImpl::ActivateDataType( |
| 451 syncer::ModelType type, syncer::ModelSafeGroup group, | 448 syncer::ModelType type, syncer::ModelSafeGroup group, |
| 452 sync_driver::ChangeProcessor* change_processor) { | 449 sync_driver::ChangeProcessor* change_processor) { |
| 453 registrar_->ActivateDataType(type, group, change_processor, GetUserShare()); | 450 registrar_->ActivateDataType(type, group, change_processor, GetUserShare()); |
| 454 } | 451 } |
| 455 | 452 |
| 456 void SyncBackendHostImpl::DeactivateDataType(syncer::ModelType type) { | 453 void SyncBackendHostImpl::DeactivateDataType(syncer::ModelType type) { |
| 457 registrar_->DeactivateDataType(type); | 454 registrar_->DeactivateDataType(type); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 } | 508 } |
| 512 } | 509 } |
| 513 | 510 |
| 514 void SyncBackendHostImpl::FlushDirectory() const { | 511 void SyncBackendHostImpl::FlushDirectory() const { |
| 515 DCHECK(initialized()); | 512 DCHECK(initialized()); |
| 516 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 513 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, |
| 517 base::Bind(&SyncBackendHostCore::SaveChanges, core_)); | 514 base::Bind(&SyncBackendHostCore::SaveChanges, core_)); |
| 518 } | 515 } |
| 519 | 516 |
| 520 void SyncBackendHostImpl::RequestBufferedProtocolEventsAndEnableForwarding() { | 517 void SyncBackendHostImpl::RequestBufferedProtocolEventsAndEnableForwarding() { |
| 521 registrar_->sync_thread()->message_loop()->PostTask( | 518 registrar_->sync_thread()->task_runner()->PostTask( |
| 522 FROM_HERE, | 519 FROM_HERE, |
| 523 base::Bind( | 520 base::Bind( |
| 524 &SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding, | 521 &SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding, |
| 525 core_)); | 522 core_)); |
| 526 } | 523 } |
| 527 | 524 |
| 528 void SyncBackendHostImpl::DisableProtocolEventForwarding() { | 525 void SyncBackendHostImpl::DisableProtocolEventForwarding() { |
| 529 registrar_->sync_thread()->message_loop()->PostTask( | 526 registrar_->sync_thread()->task_runner()->PostTask( |
| 530 FROM_HERE, | 527 FROM_HERE, |
| 531 base::Bind( | 528 base::Bind(&SyncBackendHostCore::DisableProtocolEventForwarding, core_)); |
| 532 &SyncBackendHostCore::DisableProtocolEventForwarding, | |
| 533 core_)); | |
| 534 } | 529 } |
| 535 | 530 |
| 536 void SyncBackendHostImpl::EnableDirectoryTypeDebugInfoForwarding() { | 531 void SyncBackendHostImpl::EnableDirectoryTypeDebugInfoForwarding() { |
| 537 DCHECK(initialized()); | 532 DCHECK(initialized()); |
| 538 registrar_->sync_thread()->message_loop()->PostTask( | 533 registrar_->sync_thread()->task_runner()->PostTask( |
| 539 FROM_HERE, | 534 FROM_HERE, |
| 540 base::Bind( | 535 base::Bind(&SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding, |
| 541 &SyncBackendHostCore::EnableDirectoryTypeDebugInfoForwarding, | 536 core_)); |
| 542 core_)); | |
| 543 } | 537 } |
| 544 | 538 |
| 545 void SyncBackendHostImpl::DisableDirectoryTypeDebugInfoForwarding() { | 539 void SyncBackendHostImpl::DisableDirectoryTypeDebugInfoForwarding() { |
| 546 DCHECK(initialized()); | 540 DCHECK(initialized()); |
| 547 registrar_->sync_thread()->message_loop()->PostTask( | 541 registrar_->sync_thread()->task_runner()->PostTask( |
| 548 FROM_HERE, | 542 FROM_HERE, |
| 549 base::Bind( | 543 base::Bind(&SyncBackendHostCore::DisableDirectoryTypeDebugInfoForwarding, |
| 550 &SyncBackendHostCore::DisableDirectoryTypeDebugInfoForwarding, | 544 core_)); |
| 551 core_)); | |
| 552 } | 545 } |
| 553 | 546 |
| 554 void SyncBackendHostImpl::GetAllNodesForTypes( | 547 void SyncBackendHostImpl::GetAllNodesForTypes( |
| 555 syncer::ModelTypeSet types, | 548 syncer::ModelTypeSet types, |
| 556 base::Callback<void(const std::vector<syncer::ModelType>&, | 549 base::Callback<void(const std::vector<syncer::ModelType>&, |
| 557 ScopedVector<base::ListValue>)> callback) { | 550 ScopedVector<base::ListValue>)> callback) { |
| 558 DCHECK(initialized()); | 551 DCHECK(initialized()); |
| 559 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 552 registrar_->sync_thread()->task_runner()->PostTask( |
| 560 base::Bind( | 553 FROM_HERE, base::Bind(&SyncBackendHostCore::GetAllNodesForTypes, core_, |
| 561 &SyncBackendHostCore::GetAllNodesForTypes, | 554 types, frontend_loop_->task_runner(), callback)); |
| 562 core_, | |
| 563 types, | |
| 564 frontend_loop_->message_loop_proxy(), | |
| 565 callback)); | |
| 566 } | 555 } |
| 567 | 556 |
| 568 void SyncBackendHostImpl::InitCore(scoped_ptr<DoInitializeOptions> options) { | 557 void SyncBackendHostImpl::InitCore(scoped_ptr<DoInitializeOptions> options) { |
| 569 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 558 registrar_->sync_thread()->task_runner()->PostTask( |
| 570 base::Bind(&SyncBackendHostCore::DoInitialize, | 559 FROM_HERE, base::Bind(&SyncBackendHostCore::DoInitialize, core_.get(), |
| 571 core_.get(), base::Passed(&options))); | 560 base::Passed(&options))); |
| 572 } | 561 } |
| 573 | 562 |
| 574 void SyncBackendHostImpl::RequestConfigureSyncer( | 563 void SyncBackendHostImpl::RequestConfigureSyncer( |
| 575 syncer::ConfigureReason reason, | 564 syncer::ConfigureReason reason, |
| 576 syncer::ModelTypeSet to_download, | 565 syncer::ModelTypeSet to_download, |
| 577 syncer::ModelTypeSet to_purge, | 566 syncer::ModelTypeSet to_purge, |
| 578 syncer::ModelTypeSet to_journal, | 567 syncer::ModelTypeSet to_journal, |
| 579 syncer::ModelTypeSet to_unapply, | 568 syncer::ModelTypeSet to_unapply, |
| 580 syncer::ModelTypeSet to_ignore, | 569 syncer::ModelTypeSet to_ignore, |
| 581 const syncer::ModelSafeRoutingInfo& routing_info, | 570 const syncer::ModelSafeRoutingInfo& routing_info, |
| 582 const base::Callback<void(syncer::ModelTypeSet, | 571 const base::Callback<void(syncer::ModelTypeSet, |
| 583 syncer::ModelTypeSet)>& ready_task, | 572 syncer::ModelTypeSet)>& ready_task, |
| 584 const base::Closure& retry_callback) { | 573 const base::Closure& retry_callback) { |
| 585 DoConfigureSyncerTypes config_types; | 574 DoConfigureSyncerTypes config_types; |
| 586 config_types.to_download = to_download; | 575 config_types.to_download = to_download; |
| 587 config_types.to_purge = to_purge; | 576 config_types.to_purge = to_purge; |
| 588 config_types.to_journal = to_journal; | 577 config_types.to_journal = to_journal; |
| 589 config_types.to_unapply = to_unapply; | 578 config_types.to_unapply = to_unapply; |
| 590 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 579 registrar_->sync_thread()->task_runner()->PostTask( |
| 591 base::Bind(&SyncBackendHostCore::DoConfigureSyncer, | 580 FROM_HERE, |
| 592 core_.get(), | 581 base::Bind(&SyncBackendHostCore::DoConfigureSyncer, core_.get(), reason, |
| 593 reason, | 582 config_types, routing_info, ready_task, retry_callback)); |
| 594 config_types, | |
| 595 routing_info, | |
| 596 ready_task, | |
| 597 retry_callback)); | |
| 598 } | 583 } |
| 599 | 584 |
| 600 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop( | 585 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop( |
| 601 const syncer::ModelTypeSet enabled_types, | 586 const syncer::ModelTypeSet enabled_types, |
| 602 const syncer::ModelTypeSet succeeded_configuration_types, | 587 const syncer::ModelTypeSet succeeded_configuration_types, |
| 603 const syncer::ModelTypeSet failed_configuration_types, | 588 const syncer::ModelTypeSet failed_configuration_types, |
| 604 const base::Callback<void(syncer::ModelTypeSet, | 589 const base::Callback<void(syncer::ModelTypeSet, |
| 605 syncer::ModelTypeSet)>& ready_task) { | 590 syncer::ModelTypeSet)>& ready_task) { |
| 606 if (!frontend_) | 591 if (!frontend_) |
| 607 return; | 592 return; |
| 608 | 593 |
| 609 if (invalidator_) { | 594 if (invalidator_) { |
| 610 CHECK(invalidator_->UpdateRegisteredInvalidationIds( | 595 CHECK(invalidator_->UpdateRegisteredInvalidationIds( |
| 611 this, ModelTypeSetToObjectIdSet(enabled_types))); | 596 this, ModelTypeSetToObjectIdSet(enabled_types))); |
| 612 } | 597 } |
| 613 | 598 |
| 614 if (!ready_task.is_null()) | 599 if (!ready_task.is_null()) |
| 615 ready_task.Run(succeeded_configuration_types, failed_configuration_types); | 600 ready_task.Run(succeeded_configuration_types, failed_configuration_types); |
| 616 } | 601 } |
| 617 | 602 |
| 618 void SyncBackendHostImpl::Observe( | 603 void SyncBackendHostImpl::Observe( |
| 619 int type, | 604 int type, |
| 620 const content::NotificationSource& source, | 605 const content::NotificationSource& source, |
| 621 const content::NotificationDetails& details) { | 606 const content::NotificationDetails& details) { |
| 622 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 607 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 623 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL); | 608 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL); |
| 624 | 609 |
| 625 content::Details<const syncer::ModelTypeSet> state_details(details); | 610 content::Details<const syncer::ModelTypeSet> state_details(details); |
| 626 const syncer::ModelTypeSet& types = *(state_details.ptr()); | 611 const syncer::ModelTypeSet& types = *(state_details.ptr()); |
| 627 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, | 612 registrar_->sync_thread()->task_runner()->PostTask( |
| 613 FROM_HERE, |
| 628 base::Bind(&SyncBackendHostCore::DoRefreshTypes, core_.get(), types)); | 614 base::Bind(&SyncBackendHostCore::DoRefreshTypes, core_.get(), types)); |
| 629 } | 615 } |
| 630 | 616 |
| 631 void SyncBackendHostImpl::AddExperimentalTypes() { | 617 void SyncBackendHostImpl::AddExperimentalTypes() { |
| 632 CHECK(initialized()); | 618 CHECK(initialized()); |
| 633 syncer::Experiments experiments; | 619 syncer::Experiments experiments; |
| 634 if (core_->sync_manager()->ReceivedExperiment(&experiments)) | 620 if (core_->sync_manager()->ReceivedExperiment(&experiments)) |
| 635 frontend_->OnExperimentsChanged(experiments); | 621 frontend_->OnExperimentsChanged(experiments); |
| 636 } | 622 } |
| 637 | 623 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 void SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop( | 722 void SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop( |
| 737 syncer::ModelTypeSet types) { | 723 syncer::ModelTypeSet types) { |
| 738 if (!frontend_) | 724 if (!frontend_) |
| 739 return; | 725 return; |
| 740 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); | 726 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); |
| 741 frontend_->OnMigrationNeededForTypes(types); | 727 frontend_->OnMigrationNeededForTypes(types); |
| 742 } | 728 } |
| 743 | 729 |
| 744 void SyncBackendHostImpl::OnInvalidatorStateChange( | 730 void SyncBackendHostImpl::OnInvalidatorStateChange( |
| 745 syncer::InvalidatorState state) { | 731 syncer::InvalidatorState state) { |
| 746 registrar_->sync_thread()->message_loop()->PostTask( | 732 registrar_->sync_thread()->task_runner()->PostTask( |
| 747 FROM_HERE, | 733 FROM_HERE, base::Bind(&SyncBackendHostCore::DoOnInvalidatorStateChange, |
| 748 base::Bind(&SyncBackendHostCore::DoOnInvalidatorStateChange, | 734 core_.get(), state)); |
| 749 core_.get(), | |
| 750 state)); | |
| 751 } | 735 } |
| 752 | 736 |
| 753 void SyncBackendHostImpl::OnIncomingInvalidation( | 737 void SyncBackendHostImpl::OnIncomingInvalidation( |
| 754 const syncer::ObjectIdInvalidationMap& invalidation_map) { | 738 const syncer::ObjectIdInvalidationMap& invalidation_map) { |
| 755 registrar_->sync_thread()->message_loop()->PostTask( | 739 registrar_->sync_thread()->task_runner()->PostTask( |
| 756 FROM_HERE, | 740 FROM_HERE, base::Bind(&SyncBackendHostCore::DoOnIncomingInvalidation, |
| 757 base::Bind(&SyncBackendHostCore::DoOnIncomingInvalidation, | 741 core_.get(), invalidation_map)); |
| 758 core_.get(), | |
| 759 invalidation_map)); | |
| 760 } | 742 } |
| 761 | 743 |
| 762 std::string SyncBackendHostImpl::GetOwnerName() const { | 744 std::string SyncBackendHostImpl::GetOwnerName() const { |
| 763 return "SyncBackendHostImpl"; | 745 return "SyncBackendHostImpl"; |
| 764 } | 746 } |
| 765 | 747 |
| 766 bool SyncBackendHostImpl::CheckPassphraseAgainstCachedPendingKeys( | 748 bool SyncBackendHostImpl::CheckPassphraseAgainstCachedPendingKeys( |
| 767 const std::string& passphrase) const { | 749 const std::string& passphrase) const { |
| 768 DCHECK(cached_pending_keys_.has_blob()); | 750 DCHECK(cached_pending_keys_.has_blob()); |
| 769 DCHECK(!passphrase.empty()); | 751 DCHECK(!passphrase.empty()); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 | 857 |
| 876 base::MessageLoop* SyncBackendHostImpl::GetSyncLoopForTesting() { | 858 base::MessageLoop* SyncBackendHostImpl::GetSyncLoopForTesting() { |
| 877 return registrar_->sync_thread()->message_loop(); | 859 return registrar_->sync_thread()->message_loop(); |
| 878 } | 860 } |
| 879 | 861 |
| 880 } // namespace browser_sync | 862 } // namespace browser_sync |
| 881 | 863 |
| 882 #undef SDVLOG | 864 #undef SDVLOG |
| 883 | 865 |
| 884 #undef SLOG | 866 #undef SLOG |
| OLD | NEW |