blob: 1d644648d93f915d59fb2f58a24830396c997f96 [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 {
Mikel Astizf479e122023-05-15 06:48:0238 return GetDisableReasons().Empty() && HasSyncConsent() &&
Mikel Astizf13d336d62023-05-29 16:33:0939#if BUILDFLAG(IS_CHROMEOS_ASH)
Mikel Astizf479e122023-05-15 06:48:0240 !IsSyncFeatureDisabledViaDashboard() &&
Mikel Astizf13d336d62023-05-29 16:33:0941#endif // BUILDFLAG(IS_CHROMEOS_ASH)
Mikel Astizf479e122023-05-15 06:48:0242 IsSyncFeatureConsideredRequested();
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 }
57 NOTREACHED();
58 return false;
59}
60
Marc Treib735cc0582018-09-17 17:08:3161bool SyncService::IsSyncFeatureActive() const {
Marc Treibeedaa3e2018-08-02 18:53:5862 if (!IsSyncFeatureEnabled()) {
63 return false;
64 }
Marc Treib4b23757c2018-08-06 11:03:4765 switch (GetTransportState()) {
66 case TransportState::DISABLED:
Victor Hugo Vianna Silva9647e682020-07-22 09:18:2167 case TransportState::PAUSED:
Marc Treib4b23757c2018-08-06 11:03:4768 case TransportState::START_DEFERRED:
69 case TransportState::INITIALIZING:
70 case TransportState::PENDING_DESIRED_CONFIGURATION:
Marc Treib90ce10aa2018-07-23 07:30:0371 return false;
Marc Treib4b23757c2018-08-06 11:03:4772 case TransportState::CONFIGURING:
73 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0374 return true;
75 }
76 NOTREACHED();
77 return false;
Marc Treib94702442018-07-19 09:04:4378}
79
Marc Treibdb1e1a0f2018-07-07 15:30:4880bool SyncService::HasUnrecoverableError() const {
81 return HasDisableReason(DISABLE_REASON_UNRECOVERABLE_ERROR);
82}
83
maxbogue7e006db2016-10-03 19:48:2884} // namespace syncer