| // Copyright 2015 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "components/sync/service/sync_service.h" | |
| #include <utility> | |
| #include "components/signin/public/identity_manager/account_info.h" | |
| #include "components/sync/engine/cycle/sync_cycle_snapshot.h" | |
| #include "components/sync/service/sync_user_settings.h" | |
| namespace syncer { | |
| SyncSetupInProgressHandle::SyncSetupInProgressHandle( | |
| base::OnceClosure on_destroy) | |
| : on_destroy_(std::move(on_destroy)) {} | |
| SyncSetupInProgressHandle::~SyncSetupInProgressHandle() { | |
| std::move(on_destroy_).Run(); | |
| } | |
| bool SyncService::HasCompletedSyncCycle() const { | |
| // Stats on the last Sync cycle are only available in internal "for debugging" | |
| // information. Better to access that here than making clients do it. | |
| return GetLastCycleSnapshotForDebugging().is_initialized(); | |
| } | |
| bool SyncService::IsSyncFeatureEnabled() const { | |
| // Note: IsInitialSyncFeatureSetupComplete() shouldn't usually be true if we | |
| // don't have a primary account, but it could happen if the account changes | |
| // from primary to secondary. | |
| return CanSyncFeatureStart() && | |
| GetUserSettings()->IsInitialSyncFeatureSetupComplete(); | |
| } | |
| bool SyncService::CanSyncFeatureStart() const { | |
| return GetDisableReasons().empty() && | |
| #if BUILDFLAG(IS_CHROMEOS) | |
| !GetUserSettings()->IsSyncFeatureDisabledViaDashboard() && | |
| #endif // BUILDFLAG(IS_CHROMEOS) | |
| HasSyncConsent(); | |
| } | |
| bool SyncService::IsEngineInitialized() const { | |
| switch (GetTransportState()) { | |
| case TransportState::DISABLED: | |
| case TransportState::PAUSED: | |
| case TransportState::START_DEFERRED: | |
| case TransportState::INITIALIZING: | |
| return false; | |
| case TransportState::PENDING_DESIRED_CONFIGURATION: | |
| case TransportState::CONFIGURING: | |
| case TransportState::ACTIVE: | |
| return true; | |
| } | |
| NOTREACHED(); | |
| } | |
| bool SyncService::IsSyncFeatureActive() const { | |
| if (!IsSyncFeatureEnabled()) { | |
| return false; | |
| } | |
| switch (GetTransportState()) { | |
| case TransportState::DISABLED: | |
| case TransportState::PAUSED: | |
| case TransportState::START_DEFERRED: | |
| case TransportState::INITIALIZING: | |
| case TransportState::PENDING_DESIRED_CONFIGURATION: | |
| return false; | |
| case TransportState::CONFIGURING: | |
| case TransportState::ACTIVE: | |
| return true; | |
| } | |
| NOTREACHED(); | |
| } | |
| bool SyncService::HasUnrecoverableError() const { | |
| return HasDisableReason(DISABLE_REASON_UNRECOVERABLE_ERROR); | |
| } | |
| } // namespace syncer |