| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "sync/internal_api/sync_manager_impl.h" | 5 #include "sync/internal_api/sync_manager_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 ConfigurationParams params(GetSourceFromReason(reason), | 296 ConfigurationParams params(GetSourceFromReason(reason), |
| 297 to_download, | 297 to_download, |
| 298 new_routing_info, | 298 new_routing_info, |
| 299 ready_task, | 299 ready_task, |
| 300 retry_task); | 300 retry_task); |
| 301 | 301 |
| 302 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE); | 302 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE); |
| 303 scheduler_->ScheduleConfiguration(params); | 303 scheduler_->ScheduleConfiguration(params); |
| 304 } | 304 } |
| 305 | 305 |
| 306 void SyncManagerImpl::Init( | 306 void SyncManagerImpl::Init(InitArgs* args) { |
| 307 const base::FilePath& database_location, | |
| 308 const WeakHandle<JsEventHandler>& event_handler, | |
| 309 const GURL& service_url, | |
| 310 scoped_ptr<HttpPostProviderFactory> post_factory, | |
| 311 const std::vector<scoped_refptr<ModelSafeWorker> >& workers, | |
| 312 ExtensionsActivity* extensions_activity, | |
| 313 SyncManager::ChangeDelegate* change_delegate, | |
| 314 const SyncCredentials& credentials, | |
| 315 const std::string& invalidator_client_id, | |
| 316 const std::string& restored_key_for_bootstrapping, | |
| 317 const std::string& restored_keystore_key_for_bootstrapping, | |
| 318 InternalComponentsFactory* internal_components_factory, | |
| 319 Encryptor* encryptor, | |
| 320 scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler, | |
| 321 ReportUnrecoverableErrorFunction report_unrecoverable_error_function, | |
| 322 CancelationSignal* cancelation_signal) { | |
| 323 CHECK(!initialized_); | 307 CHECK(!initialized_); |
| 324 DCHECK(thread_checker_.CalledOnValidThread()); | 308 DCHECK(thread_checker_.CalledOnValidThread()); |
| 325 DCHECK(post_factory.get()); | 309 DCHECK(args->post_factory.get()); |
| 326 DCHECK(!credentials.email.empty()); | 310 DCHECK(!args->credentials.email.empty()); |
| 327 DCHECK(!credentials.sync_token.empty()); | 311 DCHECK(!args->credentials.sync_token.empty()); |
| 328 DCHECK(!credentials.scope_set.empty()); | 312 DCHECK(!args->credentials.scope_set.empty()); |
| 329 DCHECK(cancelation_signal); | 313 DCHECK(args->cancelation_signal); |
| 330 DVLOG(1) << "SyncManager starting Init..."; | 314 DVLOG(1) << "SyncManager starting Init..."; |
| 331 | 315 |
| 332 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); | 316 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); |
| 333 | 317 |
| 334 change_delegate_ = change_delegate; | 318 change_delegate_ = args->change_delegate; |
| 335 | 319 |
| 336 AddObserver(&js_sync_manager_observer_); | 320 AddObserver(&js_sync_manager_observer_); |
| 337 SetJsEventHandler(event_handler); | 321 SetJsEventHandler(args->event_handler); |
| 338 | 322 |
| 339 AddObserver(&debug_info_event_listener_); | 323 AddObserver(&debug_info_event_listener_); |
| 340 | 324 |
| 341 database_path_ = database_location.Append( | 325 database_path_ = args->database_location.Append( |
| 342 syncable::Directory::kSyncDatabaseFilename); | 326 syncable::Directory::kSyncDatabaseFilename); |
| 343 unrecoverable_error_handler_ = unrecoverable_error_handler.Pass(); | 327 unrecoverable_error_handler_ = args->unrecoverable_error_handler.Pass(); |
| 344 report_unrecoverable_error_function_ = report_unrecoverable_error_function; | 328 report_unrecoverable_error_function_ = |
| 329 args->report_unrecoverable_error_function; |
| 345 | 330 |
| 346 allstatus_.SetHasKeystoreKey( | 331 allstatus_.SetHasKeystoreKey( |
| 347 !restored_keystore_key_for_bootstrapping.empty()); | 332 !args->restored_keystore_key_for_bootstrapping.empty()); |
| 348 sync_encryption_handler_.reset(new SyncEncryptionHandlerImpl( | 333 sync_encryption_handler_.reset(new SyncEncryptionHandlerImpl( |
| 349 &share_, | 334 &share_, |
| 350 encryptor, | 335 args->encryptor, |
| 351 restored_key_for_bootstrapping, | 336 args->restored_key_for_bootstrapping, |
| 352 restored_keystore_key_for_bootstrapping)); | 337 args->restored_keystore_key_for_bootstrapping)); |
| 353 sync_encryption_handler_->AddObserver(this); | 338 sync_encryption_handler_->AddObserver(this); |
| 354 sync_encryption_handler_->AddObserver(&debug_info_event_listener_); | 339 sync_encryption_handler_->AddObserver(&debug_info_event_listener_); |
| 355 sync_encryption_handler_->AddObserver(&js_sync_encryption_handler_observer_); | 340 sync_encryption_handler_->AddObserver(&js_sync_encryption_handler_observer_); |
| 356 | 341 |
| 357 base::FilePath absolute_db_path = database_path_; | 342 base::FilePath absolute_db_path = database_path_; |
| 358 DCHECK(absolute_db_path.IsAbsolute()); | 343 DCHECK(absolute_db_path.IsAbsolute()); |
| 359 | 344 |
| 360 scoped_ptr<syncable::DirectoryBackingStore> backing_store = | 345 scoped_ptr<syncable::DirectoryBackingStore> backing_store = |
| 361 internal_components_factory->BuildDirectoryBackingStore( | 346 args->internal_components_factory->BuildDirectoryBackingStore( |
| 362 credentials.email, absolute_db_path).Pass(); | 347 args->credentials.email, |
| 348 absolute_db_path).Pass(); |
| 363 | 349 |
| 364 DCHECK(backing_store.get()); | 350 DCHECK(backing_store.get()); |
| 365 share_.directory.reset( | 351 share_.directory.reset( |
| 366 new syncable::Directory( | 352 new syncable::Directory( |
| 367 backing_store.release(), | 353 backing_store.release(), |
| 368 unrecoverable_error_handler_.get(), | 354 unrecoverable_error_handler_.get(), |
| 369 report_unrecoverable_error_function_, | 355 report_unrecoverable_error_function_, |
| 370 sync_encryption_handler_.get(), | 356 sync_encryption_handler_.get(), |
| 371 sync_encryption_handler_->GetCryptographerUnsafe())); | 357 sync_encryption_handler_->GetCryptographerUnsafe())); |
| 372 share_.sync_credentials = credentials; | 358 share_.sync_credentials = args->credentials; |
| 373 | 359 |
| 374 // UserShare is accessible to a lot of code that doesn't need access to the | 360 // UserShare is accessible to a lot of code that doesn't need access to the |
| 375 // sync token so clear sync_token from the UserShare. | 361 // sync token so clear sync_token from the UserShare. |
| 376 share_.sync_credentials.sync_token = ""; | 362 share_.sync_credentials.sync_token = ""; |
| 377 | 363 |
| 378 const std::string& username = credentials.email; | 364 const std::string& username = args->credentials.email; |
| 379 DVLOG(1) << "Username: " << username; | 365 DVLOG(1) << "Username: " << username; |
| 380 if (!OpenDirectory(username)) { | 366 if (!OpenDirectory(username)) { |
| 381 NotifyInitializationFailure(); | 367 NotifyInitializationFailure(); |
| 382 LOG(ERROR) << "Sync manager initialization failed!"; | 368 LOG(ERROR) << "Sync manager initialization failed!"; |
| 383 return; | 369 return; |
| 384 } | 370 } |
| 385 | 371 |
| 386 connection_manager_.reset(new SyncAPIServerConnectionManager( | 372 connection_manager_.reset(new SyncAPIServerConnectionManager( |
| 387 service_url.host() + service_url.path(), | 373 args->service_url.host() + args->service_url.path(), |
| 388 service_url.EffectiveIntPort(), | 374 args->service_url.EffectiveIntPort(), |
| 389 service_url.SchemeIsSecure(), | 375 args->service_url.SchemeIsSecure(), |
| 390 post_factory.release(), | 376 args->post_factory.release(), |
| 391 cancelation_signal)); | 377 args->cancelation_signal)); |
| 392 connection_manager_->set_client_id(directory()->cache_guid()); | 378 connection_manager_->set_client_id(directory()->cache_guid()); |
| 393 connection_manager_->AddListener(this); | 379 connection_manager_->AddListener(this); |
| 394 | 380 |
| 395 std::string sync_id = directory()->cache_guid(); | 381 std::string sync_id = directory()->cache_guid(); |
| 396 | 382 |
| 397 DVLOG(1) << "Setting sync client ID: " << sync_id; | 383 DVLOG(1) << "Setting sync client ID: " << sync_id; |
| 398 allstatus_.SetSyncId(sync_id); | 384 allstatus_.SetSyncId(sync_id); |
| 399 DVLOG(1) << "Setting invalidator client ID: " << invalidator_client_id; | 385 DVLOG(1) << "Setting invalidator client ID: " << args->invalidator_client_id; |
| 400 allstatus_.SetInvalidatorClientId(invalidator_client_id); | 386 allstatus_.SetInvalidatorClientId(args->invalidator_client_id); |
| 401 | 387 |
| 402 model_type_registry_.reset(new ModelTypeRegistry(workers, directory(), this)); | 388 model_type_registry_.reset( |
| 389 new ModelTypeRegistry(args->workers, directory(), this)); |
| 403 | 390 |
| 404 // Bind the SyncContext WeakPtr to this thread. This helps us crash earlier | 391 // Bind the SyncContext WeakPtr to this thread. This helps us crash earlier |
| 405 // if the pointer is misused in debug mode. | 392 // if the pointer is misused in debug mode. |
| 406 base::WeakPtr<SyncContext> weak_core = model_type_registry_->AsWeakPtr(); | 393 base::WeakPtr<SyncContext> weak_core = model_type_registry_->AsWeakPtr(); |
| 407 weak_core.get(); | 394 weak_core.get(); |
| 408 | 395 |
| 409 sync_context_proxy_.reset( | 396 sync_context_proxy_.reset( |
| 410 new SyncContextProxyImpl(base::ThreadTaskRunnerHandle::Get(), weak_core)); | 397 new SyncContextProxyImpl(base::ThreadTaskRunnerHandle::Get(), weak_core)); |
| 411 | 398 |
| 412 // Build a SyncSessionContext and store the worker in it. | 399 // Build a SyncSessionContext and store the worker in it. |
| 413 DVLOG(1) << "Sync is bringing up SyncSessionContext."; | 400 DVLOG(1) << "Sync is bringing up SyncSessionContext."; |
| 414 std::vector<SyncEngineEventListener*> listeners; | 401 std::vector<SyncEngineEventListener*> listeners; |
| 415 listeners.push_back(&allstatus_); | 402 listeners.push_back(&allstatus_); |
| 416 listeners.push_back(this); | 403 listeners.push_back(this); |
| 417 session_context_ = internal_components_factory->BuildContext( | 404 session_context_ = args->internal_components_factory->BuildContext( |
| 418 connection_manager_.get(), | 405 connection_manager_.get(), |
| 419 directory(), | 406 directory(), |
| 420 extensions_activity, | 407 args->extensions_activity, |
| 421 listeners, | 408 listeners, |
| 422 &debug_info_event_listener_, | 409 &debug_info_event_listener_, |
| 423 model_type_registry_.get(), | 410 model_type_registry_.get(), |
| 424 invalidator_client_id).Pass(); | 411 args->invalidator_client_id).Pass(); |
| 425 session_context_->set_account_name(credentials.email); | 412 session_context_->set_account_name(args->credentials.email); |
| 426 scheduler_ = internal_components_factory->BuildScheduler( | 413 scheduler_ = args->internal_components_factory->BuildScheduler( |
| 427 name_, session_context_.get(), cancelation_signal).Pass(); | 414 name_, session_context_.get(), args->cancelation_signal).Pass(); |
| 428 | 415 |
| 429 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE); | 416 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE); |
| 430 | 417 |
| 431 initialized_ = true; | 418 initialized_ = true; |
| 432 | 419 |
| 433 net::NetworkChangeNotifier::AddIPAddressObserver(this); | 420 net::NetworkChangeNotifier::AddIPAddressObserver(this); |
| 434 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); | 421 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); |
| 435 observing_network_connectivity_changes_ = true; | 422 observing_network_connectivity_changes_ = true; |
| 436 | 423 |
| 437 UpdateCredentials(credentials); | 424 UpdateCredentials(args->credentials); |
| 438 | 425 |
| 439 NotifyInitializationSuccess(); | 426 NotifyInitializationSuccess(); |
| 440 } | 427 } |
| 441 | 428 |
| 442 void SyncManagerImpl::NotifyInitializationSuccess() { | 429 void SyncManagerImpl::NotifyInitializationSuccess() { |
| 443 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, | 430 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, |
| 444 OnInitializationComplete( | 431 OnInitializationComplete( |
| 445 MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()), | 432 MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()), |
| 446 MakeWeakHandle(debug_info_event_listener_.GetWeakPtr()), | 433 MakeWeakHandle(debug_info_event_listener_.GetWeakPtr()), |
| 447 true, InitialSyncEndedTypes())); | 434 true, InitialSyncEndedTypes())); |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 int SyncManagerImpl::GetDefaultNudgeDelay() { | 1137 int SyncManagerImpl::GetDefaultNudgeDelay() { |
| 1151 return kDefaultNudgeDelayMilliseconds; | 1138 return kDefaultNudgeDelayMilliseconds; |
| 1152 } | 1139 } |
| 1153 | 1140 |
| 1154 // static. | 1141 // static. |
| 1155 int SyncManagerImpl::GetPreferencesNudgeDelay() { | 1142 int SyncManagerImpl::GetPreferencesNudgeDelay() { |
| 1156 return kPreferencesNudgeDelayMilliseconds; | 1143 return kPreferencesNudgeDelayMilliseconds; |
| 1157 } | 1144 } |
| 1158 | 1145 |
| 1159 } // namespace syncer | 1146 } // namespace syncer |
| OLD | NEW |