blob: c26dad7005721e81f6913a12621799b541e09560 [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
maxbogue455a57e32016-08-14 00:08:325#include "components/sync/driver/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 Treib3accf29c2018-11-29 07:45:4810#include "components/sync/driver/sync_user_settings.h"
Marc Treib2b58eec2019-04-17 09:51:5211#include "components/sync/engine/cycle/sync_cycle_snapshot.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 {
Marc Treibccf421692021-10-19 14:27:3338 return GetDisableReasons().Empty() && HasSyncConsent();
Marc Treibdb1e1a0f2018-07-07 15:30:4839}
40
Marc Treib90ce10aa2018-07-23 07:30:0341bool SyncService::IsEngineInitialized() const {
Marc Treib4b23757c2018-08-06 11:03:4742 switch (GetTransportState()) {
43 case TransportState::DISABLED:
Victor Hugo Vianna Silva9647e682020-07-22 09:18:2144 case TransportState::PAUSED:
Marc Treib4b23757c2018-08-06 11:03:4745 case TransportState::START_DEFERRED:
46 case TransportState::INITIALIZING:
Marc Treib90ce10aa2018-07-23 07:30:0347 return false;
Marc Treib4b23757c2018-08-06 11:03:4748 case TransportState::PENDING_DESIRED_CONFIGURATION:
49 case TransportState::CONFIGURING:
50 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0351 return true;
52 }
53 NOTREACHED();
54 return false;
55}
56
Marc Treib735cc0582018-09-17 17:08:3157bool SyncService::IsSyncFeatureActive() const {
Marc Treibeedaa3e2018-08-02 18:53:5858 if (!IsSyncFeatureEnabled()) {
59 return false;
60 }
Marc Treib4b23757c2018-08-06 11:03:4761 switch (GetTransportState()) {
62 case TransportState::DISABLED:
Victor Hugo Vianna Silva9647e682020-07-22 09:18:2163 case TransportState::PAUSED:
Marc Treib4b23757c2018-08-06 11:03:4764 case TransportState::START_DEFERRED:
65 case TransportState::INITIALIZING:
66 case TransportState::PENDING_DESIRED_CONFIGURATION:
Marc Treib90ce10aa2018-07-23 07:30:0367 return false;
Marc Treib4b23757c2018-08-06 11:03:4768 case TransportState::CONFIGURING:
69 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0370 return true;
71 }
72 NOTREACHED();
73 return false;
Marc Treib94702442018-07-19 09:04:4374}
75
Marc Treibdb1e1a0f2018-07-07 15:30:4876bool SyncService::HasUnrecoverableError() const {
77 return HasDisableReason(DISABLE_REASON_UNRECOVERABLE_ERROR);
78}
79
maxbogue7e006db2016-10-03 19:48:2880} // namespace syncer