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

Unified Diff: components/browser_sync/browser/profile_sync_service.cc

Issue 2064183002: Reland: "Sync: Support multiple setup UIs." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'master' of https://chromium.googlesource.com/chromium/src into 0183-settings-sync-rel… Created 4 years, 6 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
Index: components/browser_sync/browser/profile_sync_service.cc
diff --git a/components/browser_sync/browser/profile_sync_service.cc b/components/browser_sync/browser/profile_sync_service.cc
index 1b2911e47c5e158e9faa91cd299b4145c9d69d90..305693d1c93fb76997841ed675597b202f21e93c 100644
--- a/components/browser_sync/browser/profile_sync_service.cc
+++ b/components/browser_sync/browser/profile_sync_service.cc
@@ -234,8 +234,8 @@ ProfileSyncService::ProfileSyncService(InitParams init_params)
base_directory_.Append(base::FilePath(kSyncDataFolderName))),
catch_up_configure_in_progress_(false),
passphrase_prompt_triggered_by_version_(false),
- weak_factory_(this),
- startup_controller_weak_factory_(this) {
+ sync_enabled_weak_factory_(this),
+ weak_factory_(this) {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(sync_client_);
std::string last_version = sync_prefs_.GetLastRunVersion();
@@ -269,7 +269,7 @@ void ProfileSyncService::Initialize() {
&sync_prefs_,
base::Bind(&ProfileSyncService::CanBackendStart, base::Unretained(this)),
base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
- startup_controller_weak_factory_.GetWeakPtr())));
+ weak_factory_.GetWeakPtr())));
std::unique_ptr<browser_sync::LocalSessionEventRouter> router(
sync_client_->GetSyncSessionsClient()->GetLocalSessionEventRouter());
local_device_ = sync_client_->GetSyncApiComponentFactory()
@@ -282,9 +282,9 @@ void ProfileSyncService::Initialize() {
sync_client_->GetSyncSessionsClient(), &sync_prefs_, local_device_.get(),
std::move(router),
base::Bind(&ProfileSyncService::NotifyForeignSessionUpdated,
- weak_factory_.GetWeakPtr()),
+ sync_enabled_weak_factory_.GetWeakPtr()),
base::Bind(&ProfileSyncService::TriggerRefresh,
- weak_factory_.GetWeakPtr(),
+ sync_enabled_weak_factory_.GetWeakPtr(),
syncer::ModelTypeSet(syncer::SESSIONS))));
if (channel_ == version_info::Channel::UNKNOWN &&
@@ -375,8 +375,9 @@ void ProfileSyncService::Initialize() {
AddObserver(sync_error_controller_.get());
#endif
- memory_pressure_listener_.reset(new base::MemoryPressureListener(base::Bind(
- &ProfileSyncService::OnMemoryPressure, weak_factory_.GetWeakPtr())));
+ memory_pressure_listener_.reset(new base::MemoryPressureListener(
+ base::Bind(&ProfileSyncService::OnMemoryPressure,
+ sync_enabled_weak_factory_.GetWeakPtr())));
startup_controller_->Reset(GetRegisteredDataTypes());
startup_controller_->TryStart();
}
@@ -511,7 +512,7 @@ void ProfileSyncService::InitializeBackend(bool delete_stale_data) {
credentials, delete_stale_data,
std::unique_ptr<syncer::SyncManagerFactory>(
new syncer::SyncManagerFactory()),
- MakeWeakHandle(weak_factory_.GetWeakPtr()),
+ MakeWeakHandle(sync_enabled_weak_factory_.GetWeakPtr()),
base::Bind(browser_sync::ChromeReportUnrecoverableError, channel_),
http_post_provider_factory_getter, std::move(saved_nigori_state_));
}
@@ -643,10 +644,9 @@ void ProfileSyncService::OnGetTokenFailure(
next_token_request_time_ = base::Time::Now() +
request_access_token_backoff_.GetTimeUntilRelease();
request_access_token_retry_timer_.Start(
- FROM_HERE,
- request_access_token_backoff_.GetTimeUntilRelease(),
- base::Bind(&ProfileSyncService::RequestAccessToken,
- weak_factory_.GetWeakPtr()));
+ FROM_HERE, request_access_token_backoff_.GetTimeUntilRelease(),
+ base::Bind(&ProfileSyncService::RequestAccessToken,
+ sync_enabled_weak_factory_.GetWeakPtr()));
NotifyObservers();
break;
}
@@ -768,7 +768,7 @@ void ProfileSyncService::ShutdownImpl(syncer::ShutdownReason reason) {
base::TimeDelta shutdown_time = base::Time::Now() - shutdown_start_time;
UMA_HISTOGRAM_TIMES("Sync.Shutdown.BackendDestroyedTime", shutdown_time);
- weak_factory_.InvalidateWeakPtrs();
+ sync_enabled_weak_factory_.InvalidateWeakPtrs();
startup_controller_->Reset(GetRegisteredDataTypes());
@@ -894,10 +894,10 @@ void ProfileSyncService::OnUnrecoverableErrorImpl(
// Shut all data types down.
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(
- &ProfileSyncService::ShutdownImpl, weak_factory_.GetWeakPtr(),
- delete_sync_database ? syncer::DISABLE_SYNC : syncer::STOP_SYNC));
+ FROM_HERE, base::Bind(&ProfileSyncService::ShutdownImpl,
+ sync_enabled_weak_factory_.GetWeakPtr(),
+ delete_sync_database ? syncer::DISABLE_SYNC
+ : syncer::STOP_SYNC));
}
void ProfileSyncService::ReenableDatatype(syncer::ModelType type) {
@@ -1106,10 +1106,9 @@ void ProfileSyncService::OnConnectionStatusChange(
} else {
request_access_token_backoff_.InformOfRequest(false);
request_access_token_retry_timer_.Start(
- FROM_HERE,
- request_access_token_backoff_.GetTimeUntilRelease(),
+ FROM_HERE, request_access_token_backoff_.GetTimeUntilRelease(),
base::Bind(&ProfileSyncService::RequestAccessToken,
- weak_factory_.GetWeakPtr()));
+ sync_enabled_weak_factory_.GetWeakPtr()));
}
} else {
// Reset backoff time after successful connection.
@@ -1300,8 +1299,9 @@ void ProfileSyncService::BeginConfigureCatchUpBeforeClear() {
void ProfileSyncService::ClearAndRestartSyncForPassphraseEncryption() {
DCHECK(thread_checker_.CalledOnValidThread());
- backend_->ClearServerData(base::Bind(
- &ProfileSyncService::OnClearServerDataDone, weak_factory_.GetWeakPtr()));
+ backend_->ClearServerData(
+ base::Bind(&ProfileSyncService::OnClearServerDataDone,
+ sync_enabled_weak_factory_.GetWeakPtr()));
}
void ProfileSyncService::OnClearServerDataDone() {
@@ -1492,15 +1492,19 @@ bool ProfileSyncService::IsFirstSetupInProgress() const {
return !IsFirstSetupComplete() && startup_controller_->IsSetupInProgress();
}
-void ProfileSyncService::SetSetupInProgress(bool setup_in_progress) {
- // This method is a no-op if |setup_in_progress_| remains unchanged.
- if (startup_controller_->IsSetupInProgress() == setup_in_progress)
- return;
+std::unique_ptr<sync_driver::SyncSetupInProgressHandle>
+ProfileSyncService::GetSetupInProgressHandle() {
+ if (++outstanding_setup_in_progress_handles_ == 1) {
+ DCHECK(!startup_controller_->IsSetupInProgress());
+ startup_controller_->SetSetupInProgress(true);
- startup_controller_->SetSetupInProgress(setup_in_progress);
- if (!setup_in_progress && IsBackendInitialized())
- ReconfigureDatatypeManager();
- NotifyObservers();
+ NotifyObservers();
+ }
+
+ return std::unique_ptr<sync_driver::SyncSetupInProgressHandle>(
+ new sync_driver::SyncSetupInProgressHandle(
+ base::Bind(&ProfileSyncService::OnSetupInProgressHandleDestroyed,
+ weak_factory_.GetWeakPtr())));
}
bool ProfileSyncService::IsSyncAllowed() const {
@@ -2508,3 +2512,18 @@ tracked_objects::Location ProfileSyncService::unrecoverable_error_location()
const {
return unrecoverable_error_location_;
}
+
+void ProfileSyncService::OnSetupInProgressHandleDestroyed() {
+ DCHECK_GT(outstanding_setup_in_progress_handles_, 0);
+
+ // Don't re-start Sync until all outstanding handles are destroyed.
+ if (--outstanding_setup_in_progress_handles_ != 0)
+ return;
+
+ DCHECK(startup_controller_->IsSetupInProgress());
+ startup_controller_->SetSetupInProgress(false);
+
+ if (IsBackendInitialized())
+ ReconfigureDatatypeManager();
+ NotifyObservers();
+}
« no previous file with comments | « components/browser_sync/browser/profile_sync_service.h ('k') | components/browser_sync/browser/profile_sync_service_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698