| 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_core.h" | 5 #include "chrome/browser/sync/glue/sync_backend_host_core.h" |
| 6 | 6 |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "chrome/browser/sync/glue/device_info.h" | 9 #include "chrome/browser/sync/glue/device_info.h" |
| 10 #include "chrome/browser/sync/glue/invalidation_adapter.h" | 10 #include "chrome/browser/sync/glue/invalidation_adapter.h" |
| 11 #include "chrome/browser/sync/glue/sync_backend_registrar.h" | 11 #include "chrome/browser/sync/glue/sync_backend_registrar.h" |
| 12 #include "chrome/browser/sync/glue/synced_device_tracker.h" | |
| 13 #include "chrome/common/chrome_version_info.h" | 12 #include "chrome/common/chrome_version_info.h" |
| 14 #include "components/invalidation/invalidation_util.h" | 13 #include "components/invalidation/invalidation_util.h" |
| 15 #include "components/invalidation/object_id_invalidation_map.h" | 14 #include "components/invalidation/object_id_invalidation_map.h" |
| 16 #include "sync/internal_api/public/events/protocol_event.h" | 15 #include "sync/internal_api/public/events/protocol_event.h" |
| 17 #include "sync/internal_api/public/http_post_provider_factory.h" | 16 #include "sync/internal_api/public/http_post_provider_factory.h" |
| 18 #include "sync/internal_api/public/internal_components_factory.h" | 17 #include "sync/internal_api/public/internal_components_factory.h" |
| 19 #include "sync/internal_api/public/sessions/commit_counters.h" | 18 #include "sync/internal_api/public/sessions/commit_counters.h" |
| 20 #include "sync/internal_api/public/sessions/status_counters.h" | 19 #include "sync/internal_api/public/sessions/status_counters.h" |
| 21 #include "sync/internal_api/public/sessions/sync_session_snapshot.h" | 20 #include "sync/internal_api/public/sessions/sync_session_snapshot.h" |
| 22 #include "sync/internal_api/public/sessions/update_counters.h" | 21 #include "sync/internal_api/public/sessions/update_counters.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 scoped_ptr<syncer::HttpPostProviderFactory> http_bridge_factory, | 63 scoped_ptr<syncer::HttpPostProviderFactory> http_bridge_factory, |
| 65 const syncer::SyncCredentials& credentials, | 64 const syncer::SyncCredentials& credentials, |
| 66 const std::string& invalidator_client_id, | 65 const std::string& invalidator_client_id, |
| 67 scoped_ptr<syncer::SyncManagerFactory> sync_manager_factory, | 66 scoped_ptr<syncer::SyncManagerFactory> sync_manager_factory, |
| 68 bool delete_sync_data_folder, | 67 bool delete_sync_data_folder, |
| 69 const std::string& restored_key_for_bootstrapping, | 68 const std::string& restored_key_for_bootstrapping, |
| 70 const std::string& restored_keystore_key_for_bootstrapping, | 69 const std::string& restored_keystore_key_for_bootstrapping, |
| 71 scoped_ptr<syncer::InternalComponentsFactory> internal_components_factory, | 70 scoped_ptr<syncer::InternalComponentsFactory> internal_components_factory, |
| 72 scoped_ptr<syncer::UnrecoverableErrorHandler> unrecoverable_error_handler, | 71 scoped_ptr<syncer::UnrecoverableErrorHandler> unrecoverable_error_handler, |
| 73 syncer::ReportUnrecoverableErrorFunction | 72 syncer::ReportUnrecoverableErrorFunction |
| 74 report_unrecoverable_error_function, | 73 report_unrecoverable_error_function) |
| 75 const std::string& signin_scoped_device_id) | |
| 76 : sync_loop(sync_loop), | 74 : sync_loop(sync_loop), |
| 77 registrar(registrar), | 75 registrar(registrar), |
| 78 routing_info(routing_info), | 76 routing_info(routing_info), |
| 79 workers(workers), | 77 workers(workers), |
| 80 extensions_activity(extensions_activity), | 78 extensions_activity(extensions_activity), |
| 81 event_handler(event_handler), | 79 event_handler(event_handler), |
| 82 service_url(service_url), | 80 service_url(service_url), |
| 83 http_bridge_factory(http_bridge_factory.Pass()), | 81 http_bridge_factory(http_bridge_factory.Pass()), |
| 84 credentials(credentials), | 82 credentials(credentials), |
| 85 invalidator_client_id(invalidator_client_id), | 83 invalidator_client_id(invalidator_client_id), |
| 86 sync_manager_factory(sync_manager_factory.Pass()), | 84 sync_manager_factory(sync_manager_factory.Pass()), |
| 87 delete_sync_data_folder(delete_sync_data_folder), | 85 delete_sync_data_folder(delete_sync_data_folder), |
| 88 restored_key_for_bootstrapping(restored_key_for_bootstrapping), | 86 restored_key_for_bootstrapping(restored_key_for_bootstrapping), |
| 89 restored_keystore_key_for_bootstrapping( | 87 restored_keystore_key_for_bootstrapping( |
| 90 restored_keystore_key_for_bootstrapping), | 88 restored_keystore_key_for_bootstrapping), |
| 91 internal_components_factory(internal_components_factory.Pass()), | 89 internal_components_factory(internal_components_factory.Pass()), |
| 92 unrecoverable_error_handler(unrecoverable_error_handler.Pass()), | 90 unrecoverable_error_handler(unrecoverable_error_handler.Pass()), |
| 93 report_unrecoverable_error_function(report_unrecoverable_error_function), | 91 report_unrecoverable_error_function(report_unrecoverable_error_function) { |
| 94 signin_scoped_device_id(signin_scoped_device_id) { | |
| 95 } | 92 } |
| 96 | 93 |
| 97 DoInitializeOptions::~DoInitializeOptions() {} | 94 DoInitializeOptions::~DoInitializeOptions() {} |
| 98 | 95 |
| 99 DoConfigureSyncerTypes::DoConfigureSyncerTypes() {} | 96 DoConfigureSyncerTypes::DoConfigureSyncerTypes() {} |
| 100 | 97 |
| 101 DoConfigureSyncerTypes::~DoConfigureSyncerTypes() {} | 98 DoConfigureSyncerTypes::~DoConfigureSyncerTypes() {} |
| 102 | 99 |
| 103 SyncBackendHostCore::SyncBackendHostCore( | 100 SyncBackendHostCore::SyncBackendHostCore( |
| 104 const std::string& name, | 101 const std::string& name, |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 } | 394 } |
| 398 } | 395 } |
| 399 } | 396 } |
| 400 | 397 |
| 401 void SyncBackendHostCore::DoInitialize( | 398 void SyncBackendHostCore::DoInitialize( |
| 402 scoped_ptr<DoInitializeOptions> options) { | 399 scoped_ptr<DoInitializeOptions> options) { |
| 403 DCHECK(!sync_loop_); | 400 DCHECK(!sync_loop_); |
| 404 sync_loop_ = options->sync_loop; | 401 sync_loop_ = options->sync_loop; |
| 405 DCHECK(sync_loop_); | 402 DCHECK(sync_loop_); |
| 406 | 403 |
| 407 signin_scoped_device_id_ = options->signin_scoped_device_id; | |
| 408 | |
| 409 // Finish initializing the HttpBridgeFactory. We do this here because | 404 // Finish initializing the HttpBridgeFactory. We do this here because |
| 410 // building the user agent may block on some platforms. | 405 // building the user agent may block on some platforms. |
| 411 chrome::VersionInfo version_info; | 406 chrome::VersionInfo version_info; |
| 412 options->http_bridge_factory->Init( | 407 options->http_bridge_factory->Init( |
| 413 DeviceInfo::MakeUserAgentForSyncApi(version_info)); | 408 DeviceInfo::MakeUserAgentForSyncApi(version_info)); |
| 414 | 409 |
| 415 // Blow away the partial or corrupt sync data folder before doing any more | 410 // Blow away the partial or corrupt sync data folder before doing any more |
| 416 // initialization, if necessary. | 411 // initialization, if necessary. |
| 417 if (options->delete_sync_data_folder) { | 412 if (options->delete_sync_data_folder) { |
| 418 DeleteSyncDataFolder(); | 413 DeleteSyncDataFolder(); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 } | 497 } |
| 503 | 498 |
| 504 if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) { | 499 if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) { |
| 505 LOG(ERROR) << "Failed to download control types"; | 500 LOG(ERROR) << "Failed to download control types"; |
| 506 host_.Call( | 501 host_.Call( |
| 507 FROM_HERE, | 502 FROM_HERE, |
| 508 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 503 &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); |
| 509 return; | 504 return; |
| 510 } | 505 } |
| 511 | 506 |
| 512 // Initialize device info. This is asynchronous on some platforms, so we | |
| 513 // provide a callback for when it finishes. | |
| 514 synced_device_tracker_.reset( | |
| 515 new SyncedDeviceTracker(sync_manager_->GetUserShare(), | |
| 516 sync_manager_->cache_guid())); | |
| 517 synced_device_tracker_->InitLocalDeviceInfo( | |
| 518 signin_scoped_device_id_, | |
| 519 base::Bind(&SyncBackendHostCore::DoFinishInitialProcessControlTypes, | |
| 520 weak_ptr_factory_.GetWeakPtr())); | |
| 521 } | |
| 522 | |
| 523 void SyncBackendHostCore::DoFinishInitialProcessControlTypes() { | |
| 524 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); | |
| 525 | |
| 526 registrar_->ActivateDataType(syncer::DEVICE_INFO, | |
| 527 syncer::GROUP_PASSIVE, | |
| 528 synced_device_tracker_.get(), | |
| 529 sync_manager_->GetUserShare()); | |
| 530 | |
| 531 host_.Call(FROM_HERE, | 507 host_.Call(FROM_HERE, |
| 532 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, | 508 &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, |
| 533 js_backend_, | 509 js_backend_, |
| 534 debug_info_listener_, | 510 debug_info_listener_, |
| 535 sync_manager_->GetSyncContextProxy(), | 511 sync_manager_->GetSyncContextProxy(), |
| 536 sync_manager_->cache_guid()); | 512 sync_manager_->cache_guid()); |
| 537 | 513 |
| 538 js_backend_.Reset(); | 514 js_backend_.Reset(); |
| 539 debug_info_listener_.Reset(); | 515 debug_info_listener_.Reset(); |
| 540 } | 516 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 568 // no longer be used to create new HttpBridge instances. We can get away with | 544 // no longer be used to create new HttpBridge instances. We can get away with |
| 569 // this because the stop_syncing_signal_ has already been signalled, which | 545 // this because the stop_syncing_signal_ has already been signalled, which |
| 570 // guarantees that the ServerConnectionManager will no longer attempt to | 546 // guarantees that the ServerConnectionManager will no longer attempt to |
| 571 // create new connections. | 547 // create new connections. |
| 572 release_request_context_signal_.Signal(); | 548 release_request_context_signal_.Signal(); |
| 573 } | 549 } |
| 574 | 550 |
| 575 void SyncBackendHostCore::DoShutdown(syncer::ShutdownReason reason) { | 551 void SyncBackendHostCore::DoShutdown(syncer::ShutdownReason reason) { |
| 576 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); | 552 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
| 577 | 553 |
| 578 // It's safe to do this even if the type was never activated. | |
| 579 registrar_->DeactivateDataType(syncer::DEVICE_INFO); | |
| 580 synced_device_tracker_.reset(); | |
| 581 | |
| 582 DoDestroySyncManager(reason); | 554 DoDestroySyncManager(reason); |
| 583 | 555 |
| 584 registrar_ = NULL; | 556 registrar_ = NULL; |
| 585 | 557 |
| 586 if (reason == syncer::DISABLE_SYNC) | 558 if (reason == syncer::DISABLE_SYNC) |
| 587 DeleteSyncDataFolder(); | 559 DeleteSyncDataFolder(); |
| 588 | 560 |
| 589 host_.Reset(); | 561 host_.Reset(); |
| 590 weak_ptr_factory_.InvalidateWeakPtrs(); | 562 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 591 } | 563 } |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 728 base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), |
| 757 this, &SyncBackendHostCore::SaveChanges); | 729 this, &SyncBackendHostCore::SaveChanges); |
| 758 } | 730 } |
| 759 | 731 |
| 760 void SyncBackendHostCore::SaveChanges() { | 732 void SyncBackendHostCore::SaveChanges() { |
| 761 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); | 733 DCHECK_EQ(base::MessageLoop::current(), sync_loop_); |
| 762 sync_manager_->SaveChanges(); | 734 sync_manager_->SaveChanges(); |
| 763 } | 735 } |
| 764 | 736 |
| 765 } // namespace browser_sync | 737 } // namespace browser_sync |
| OLD | NEW |