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

Side by Side Diff: trunk/src/sync/internal_api/sync_manager_impl.cc

Issue 23658030: Revert 222154 "sync: Gracefully handle very early shutdown" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/json/json_writer.h" 13 #include "base/json/json_writer.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/observer_list.h" 16 #include "base/observer_list.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/values.h" 18 #include "base/values.h"
19 #include "sync/engine/sync_scheduler.h" 19 #include "sync/engine/sync_scheduler.h"
20 #include "sync/engine/syncer_types.h" 20 #include "sync/engine/syncer_types.h"
21 #include "sync/internal_api/change_reorder_buffer.h" 21 #include "sync/internal_api/change_reorder_buffer.h"
22 #include "sync/internal_api/public/base/cancelation_signal.h"
23 #include "sync/internal_api/public/base/model_type.h" 22 #include "sync/internal_api/public/base/model_type.h"
24 #include "sync/internal_api/public/base_node.h" 23 #include "sync/internal_api/public/base_node.h"
25 #include "sync/internal_api/public/configure_reason.h" 24 #include "sync/internal_api/public/configure_reason.h"
26 #include "sync/internal_api/public/engine/polling_constants.h" 25 #include "sync/internal_api/public/engine/polling_constants.h"
27 #include "sync/internal_api/public/http_post_provider_factory.h" 26 #include "sync/internal_api/public/http_post_provider_factory.h"
28 #include "sync/internal_api/public/internal_components_factory.h" 27 #include "sync/internal_api/public/internal_components_factory.h"
29 #include "sync/internal_api/public/read_node.h" 28 #include "sync/internal_api/public/read_node.h"
30 #include "sync/internal_api/public/read_transaction.h" 29 #include "sync/internal_api/public/read_transaction.h"
31 #include "sync/internal_api/public/user_share.h" 30 #include "sync/internal_api/public/user_share.h"
32 #include "sync/internal_api/public/util/experiments.h" 31 #include "sync/internal_api/public/util/experiments.h"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 ExtensionsActivity* extensions_activity, 347 ExtensionsActivity* extensions_activity,
349 SyncManager::ChangeDelegate* change_delegate, 348 SyncManager::ChangeDelegate* change_delegate,
350 const SyncCredentials& credentials, 349 const SyncCredentials& credentials,
351 const std::string& invalidator_client_id, 350 const std::string& invalidator_client_id,
352 const std::string& restored_key_for_bootstrapping, 351 const std::string& restored_key_for_bootstrapping,
353 const std::string& restored_keystore_key_for_bootstrapping, 352 const std::string& restored_keystore_key_for_bootstrapping,
354 InternalComponentsFactory* internal_components_factory, 353 InternalComponentsFactory* internal_components_factory,
355 Encryptor* encryptor, 354 Encryptor* encryptor,
356 scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler, 355 scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
357 ReportUnrecoverableErrorFunction report_unrecoverable_error_function, 356 ReportUnrecoverableErrorFunction report_unrecoverable_error_function,
358 bool use_oauth2_token, 357 bool use_oauth2_token) {
359 CancelationSignal* cancelation_signal) {
360 CHECK(!initialized_); 358 CHECK(!initialized_);
361 DCHECK(thread_checker_.CalledOnValidThread()); 359 DCHECK(thread_checker_.CalledOnValidThread());
362 DCHECK(post_factory.get()); 360 DCHECK(post_factory.get());
363 DCHECK(!credentials.email.empty()); 361 DCHECK(!credentials.email.empty());
364 DCHECK(!credentials.sync_token.empty()); 362 DCHECK(!credentials.sync_token.empty());
365 DCHECK(cancelation_signal);
366 DVLOG(1) << "SyncManager starting Init..."; 363 DVLOG(1) << "SyncManager starting Init...";
367 364
368 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); 365 weak_handle_this_ = MakeWeakHandle(weak_ptr_factory_.GetWeakPtr());
369 366
370 change_delegate_ = change_delegate; 367 change_delegate_ = change_delegate;
371 368
372 AddObserver(&js_sync_manager_observer_); 369 AddObserver(&js_sync_manager_observer_);
373 SetJsEventHandler(event_handler); 370 SetJsEventHandler(event_handler);
374 371
375 AddObserver(&debug_info_event_listener_); 372 AddObserver(&debug_info_event_listener_);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()), 412 MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()),
416 MakeWeakHandle( 413 MakeWeakHandle(
417 debug_info_event_listener_.GetWeakPtr()), 414 debug_info_event_listener_.GetWeakPtr()),
418 false, ModelTypeSet())); 415 false, ModelTypeSet()));
419 LOG(ERROR) << "Sync manager initialization failed!"; 416 LOG(ERROR) << "Sync manager initialization failed!";
420 return; 417 return;
421 } 418 }
422 419
423 connection_manager_.reset(new SyncAPIServerConnectionManager( 420 connection_manager_.reset(new SyncAPIServerConnectionManager(
424 sync_server_and_path, port, use_ssl, use_oauth2_token, 421 sync_server_and_path, port, use_ssl, use_oauth2_token,
425 post_factory.release(), cancelation_signal)); 422 post_factory.release()));
426 connection_manager_->set_client_id(directory()->cache_guid()); 423 connection_manager_->set_client_id(directory()->cache_guid());
427 connection_manager_->AddListener(this); 424 connection_manager_->AddListener(this);
428 425
429 std::string sync_id = directory()->cache_guid(); 426 std::string sync_id = directory()->cache_guid();
430 427
431 allstatus_.SetSyncId(sync_id); 428 allstatus_.SetSyncId(sync_id);
432 allstatus_.SetInvalidatorClientId(invalidator_client_id); 429 allstatus_.SetInvalidatorClientId(invalidator_client_id);
433 430
434 DVLOG(1) << "Setting sync client ID: " << sync_id; 431 DVLOG(1) << "Setting sync client ID: " << sync_id;
435 DVLOG(1) << "Setting invalidator client ID: " << invalidator_client_id; 432 DVLOG(1) << "Setting invalidator client ID: " << invalidator_client_id;
436 433
437 // Build a SyncSessionContext and store the worker in it. 434 // Build a SyncSessionContext and store the worker in it.
438 DVLOG(1) << "Sync is bringing up SyncSessionContext."; 435 DVLOG(1) << "Sync is bringing up SyncSessionContext.";
439 std::vector<SyncEngineEventListener*> listeners; 436 std::vector<SyncEngineEventListener*> listeners;
440 listeners.push_back(&allstatus_); 437 listeners.push_back(&allstatus_);
441 listeners.push_back(this); 438 listeners.push_back(this);
442 session_context_ = internal_components_factory->BuildContext( 439 session_context_ = internal_components_factory->BuildContext(
443 connection_manager_.get(), 440 connection_manager_.get(),
444 directory(), 441 directory(),
445 workers, 442 workers,
446 extensions_activity, 443 extensions_activity,
447 listeners, 444 listeners,
448 &debug_info_event_listener_, 445 &debug_info_event_listener_,
449 &traffic_recorder_, 446 &traffic_recorder_,
450 invalidator_client_id).Pass(); 447 invalidator_client_id).Pass();
451 session_context_->set_account_name(credentials.email); 448 session_context_->set_account_name(credentials.email);
452 scheduler_ = internal_components_factory->BuildScheduler( 449 scheduler_ = internal_components_factory->BuildScheduler(
453 name_, session_context_.get(), cancelation_signal).Pass(); 450 name_, session_context_.get()).Pass();
454 451
455 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE); 452 scheduler_->Start(SyncScheduler::CONFIGURATION_MODE);
456 453
457 initialized_ = true; 454 initialized_ = true;
458 455
459 net::NetworkChangeNotifier::AddIPAddressObserver(this); 456 net::NetworkChangeNotifier::AddIPAddressObserver(this);
460 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); 457 net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
461 observing_network_connectivity_changes_ = true; 458 observing_network_connectivity_changes_ = true;
462 459
463 UpdateCredentials(credentials); 460 UpdateCredentials(credentials);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 void SyncManagerImpl::AddObserver(SyncManager::Observer* observer) { 611 void SyncManagerImpl::AddObserver(SyncManager::Observer* observer) {
615 DCHECK(thread_checker_.CalledOnValidThread()); 612 DCHECK(thread_checker_.CalledOnValidThread());
616 observers_.AddObserver(observer); 613 observers_.AddObserver(observer);
617 } 614 }
618 615
619 void SyncManagerImpl::RemoveObserver(SyncManager::Observer* observer) { 616 void SyncManagerImpl::RemoveObserver(SyncManager::Observer* observer) {
620 DCHECK(thread_checker_.CalledOnValidThread()); 617 DCHECK(thread_checker_.CalledOnValidThread());
621 observers_.RemoveObserver(observer); 618 observers_.RemoveObserver(observer);
622 } 619 }
623 620
621 void SyncManagerImpl::StopSyncingForShutdown() {
622 DVLOG(2) << "StopSyncingForShutdown";
623 scheduler_->RequestStop();
624 if (connection_manager_)
625 connection_manager_->TerminateAllIO();
626 }
627
624 void SyncManagerImpl::ShutdownOnSyncThread() { 628 void SyncManagerImpl::ShutdownOnSyncThread() {
625 DCHECK(thread_checker_.CalledOnValidThread()); 629 DCHECK(thread_checker_.CalledOnValidThread());
626 630
627 // Prevent any in-flight method calls from running. Also 631 // Prevent any in-flight method calls from running. Also
628 // invalidates |weak_handle_this_| and |change_observer_|. 632 // invalidates |weak_handle_this_| and |change_observer_|.
629 weak_ptr_factory_.InvalidateWeakPtrs(); 633 weak_ptr_factory_.InvalidateWeakPtrs();
630 js_mutation_event_observer_.InvalidateWeakPtrs(); 634 js_mutation_event_observer_.InvalidateWeakPtrs();
631 635
632 scheduler_.reset(); 636 scheduler_.reset();
633 session_context_.reset(); 637 session_context_.reset();
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 int SyncManagerImpl::GetDefaultNudgeDelay() { 1331 int SyncManagerImpl::GetDefaultNudgeDelay() {
1328 return kDefaultNudgeDelayMilliseconds; 1332 return kDefaultNudgeDelayMilliseconds;
1329 } 1333 }
1330 1334
1331 // static. 1335 // static.
1332 int SyncManagerImpl::GetPreferencesNudgeDelay() { 1336 int SyncManagerImpl::GetPreferencesNudgeDelay() {
1333 return kPreferencesNudgeDelayMilliseconds; 1337 return kPreferencesNudgeDelayMilliseconds;
1334 } 1338 }
1335 1339
1336 } // namespace syncer 1340 } // namespace syncer
OLDNEW
« no previous file with comments | « trunk/src/sync/internal_api/sync_manager_impl.h ('k') | trunk/src/sync/internal_api/sync_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698