blob: 20f88ed604fc753b8745ff1914403fcf63c68438 [file] [log] [blame]
Avi Drissman8ba1bad2022-09-13 19:22:361// Copyright 2015 The Chromium Authors
maxbogue93150a5d2015-08-31 21:08:322// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Mikel Astiz91c345c2023-05-16 14:18:565#include "components/sync/service/sync_service.h"
maxbogue93150a5d2015-08-31 21:08:326
Ken Rockotcd98d952019-12-19 21:06:277#include <utility>
8
Marc Treibe712f652019-12-02 17:36:349#include "components/signin/public/identity_manager/account_info.h"
Marc Treib2b58eec2019-04-17 09:51:5210#include "components/sync/engine/cycle/sync_cycle_snapshot.h"
Mikel Astiz91c345c2023-05-16 14:18:5611#include "components/sync/service/sync_user_settings.h"
Marc Treib3accf29c2018-11-29 07:45:4812
maxbogue7e006db2016-10-03 19:48:2813namespace syncer {
maxbogue93150a5d2015-08-31 21:08:3214
Ken Rockotcd98d952019-12-19 21:06:2715SyncSetupInProgressHandle::SyncSetupInProgressHandle(
16 base::OnceClosure on_destroy)
17 : on_destroy_(std::move(on_destroy)) {}
tommyclif3a1551e2016-06-21 18:11:2318
19SyncSetupInProgressHandle::~SyncSetupInProgressHandle() {
Ken Rockotcd98d952019-12-19 21:06:2720 std::move(on_destroy_).Run();
tommyclif3a1551e2016-06-21 18:11:2321}
22
Marc Treib2b58eec2019-04-17 09:51:5223bool SyncService::HasCompletedSyncCycle() const {
Marc Treib22be1c02019-04-18 11:21:4324 // Stats on the last Sync cycle are only available in internal "for debugging"
25 // information. Better to access that here than making clients do it.
26 return GetLastCycleSnapshotForDebugging().is_initialized();
Marc Treib2b58eec2019-04-17 09:51:5227}
28
Marc Treibeedaa3e2018-08-02 18:53:5829bool SyncService::IsSyncFeatureEnabled() const {
Jood Hajeere033f6d2023-05-12 12:25:5430 // Note: IsInitialSyncFeatureSetupComplete() shouldn't usually be true if we
31 // don't have a primary account, but it could happen if the account changes
32 // from primary to secondary.
33 return CanSyncFeatureStart() &&
34 GetUserSettings()->IsInitialSyncFeatureSetupComplete();
Marc Treibeedaa3e2018-08-02 18:53:5835}
36
Marc Treib735cc0582018-09-17 17:08:3137bool SyncService::CanSyncFeatureStart() const {
Lei Zhangbda6288d2024-03-29 23:16:0338 return GetDisableReasons().empty() &&
Georg Neis0ea785912024-12-24 09:13:5939#if BUILDFLAG(IS_CHROMEOS)
Mikel Astize53e54a42023-10-05 18:29:4940 !GetUserSettings()->IsSyncFeatureDisabledViaDashboard() &&
Georg Neis0ea785912024-12-24 09:13:5941#endif // BUILDFLAG(IS_CHROMEOS)
Mikel Astiz4da0dcc62023-11-28 18:35:2942 HasSyncConsent();
Marc Treibdb1e1a0f2018-07-07 15:30:4843}
44
Marc Treib90ce10aa2018-07-23 07:30:0345bool SyncService::IsEngineInitialized() const {
Marc Treib4b23757c2018-08-06 11:03:4746 switch (GetTransportState()) {
47 case TransportState::DISABLED:
Victor Hugo Vianna Silva9647e682020-07-22 09:18:2148 case TransportState::PAUSED:
Marc Treib4b23757c2018-08-06 11:03:4749 case TransportState::START_DEFERRED:
50 case TransportState::INITIALIZING:
Marc Treib90ce10aa2018-07-23 07:30:0351 return false;
Marc Treib4b23757c2018-08-06 11:03:4752 case TransportState::PENDING_DESIRED_CONFIGURATION:
53 case TransportState::CONFIGURING:
54 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0355 return true;
56 }
Peter Boström678d1f92024-10-31 09:10:1657 NOTREACHED();
Marc Treib90ce10aa2018-07-23 07:30:0358}
59
Marc Treib735cc0582018-09-17 17:08:3160bool SyncService::IsSyncFeatureActive() const {
Marc Treibeedaa3e2018-08-02 18:53:5861 if (!IsSyncFeatureEnabled()) {
62 return false;
63 }
Marc Treib4b23757c2018-08-06 11:03:4764 switch (GetTransportState()) {
65 case TransportState::DISABLED:
Victor Hugo Vianna Silva9647e682020-07-22 09:18:2166 case TransportState::PAUSED:
Marc Treib4b23757c2018-08-06 11:03:4767 case TransportState::START_DEFERRED:
68 case TransportState::INITIALIZING:
69 case TransportState::PENDING_DESIRED_CONFIGURATION:
Marc Treib90ce10aa2018-07-23 07:30:0370 return false;
Marc Treib4b23757c2018-08-06 11:03:4771 case TransportState::CONFIGURING:
72 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0373 return true;
74 }
Peter Boström678d1f92024-10-31 09:10:1675 NOTREACHED();
Marc Treib94702442018-07-19 09:04:4376}
77
Marc Treibdb1e1a0f2018-07-07 15:30:4878bool SyncService::HasUnrecoverableError() const {
79 return HasDisableReason(DISABLE_REASON_UNRECOVERABLE_ERROR);
80}
81
maxbogue7e006db2016-10-03 19:48:2882} // namespace syncer