blob: 67a9818040d98b26a899d9c715892f086adac6b6 [file] [log] [blame]
maxbogue93150a5d2015-08-31 21:08:321// Copyright 2015 The Chromium Authors. All rights reserved.
2// 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
Marc Treib3accf29c2018-11-29 07:45:487#include "components/sync/driver/sync_user_settings.h"
8
maxbogue7e006db2016-10-03 19:48:289namespace syncer {
maxbogue93150a5d2015-08-31 21:08:3210
tommyclif3a1551e2016-06-21 18:11:2311SyncSetupInProgressHandle::SyncSetupInProgressHandle(base::Closure on_destroy)
12 : on_destroy_(on_destroy) {}
13
14SyncSetupInProgressHandle::~SyncSetupInProgressHandle() {
15 on_destroy_.Run();
16}
17
Marc Treibeedaa3e2018-08-02 18:53:5818bool SyncService::IsSyncFeatureEnabled() const {
Marc Treib135720d2018-08-29 12:11:4319 // Note: IsFirstSetupComplete() shouldn't usually be true if we don't have a
20 // primary account, but it could happen if the account changes from primary to
21 // secondary.
Marc Treib3accf29c2018-11-29 07:45:4822 return CanSyncFeatureStart() && GetUserSettings()->IsFirstSetupComplete();
Marc Treibeedaa3e2018-08-02 18:53:5823}
24
Marc Treib735cc0582018-09-17 17:08:3125bool SyncService::CanSyncFeatureStart() const {
Marc Treib19e2f142018-11-16 14:48:0226 return GetDisableReasons() == DISABLE_REASON_NONE &&
27 IsAuthenticatedAccountPrimary();
Marc Treibdb1e1a0f2018-07-07 15:30:4828}
29
Marc Treib90ce10aa2018-07-23 07:30:0330bool SyncService::IsEngineInitialized() const {
Marc Treib4b23757c2018-08-06 11:03:4731 switch (GetTransportState()) {
32 case TransportState::DISABLED:
33 case TransportState::WAITING_FOR_START_REQUEST:
34 case TransportState::START_DEFERRED:
35 case TransportState::INITIALIZING:
Marc Treib90ce10aa2018-07-23 07:30:0336 return false;
Marc Treib4b23757c2018-08-06 11:03:4737 case TransportState::PENDING_DESIRED_CONFIGURATION:
38 case TransportState::CONFIGURING:
39 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0340 return true;
41 }
42 NOTREACHED();
43 return false;
44}
45
Marc Treib735cc0582018-09-17 17:08:3146bool SyncService::IsSyncFeatureActive() const {
Marc Treibeedaa3e2018-08-02 18:53:5847 if (!IsSyncFeatureEnabled()) {
48 return false;
49 }
Marc Treib4b23757c2018-08-06 11:03:4750 switch (GetTransportState()) {
51 case TransportState::DISABLED:
52 case TransportState::WAITING_FOR_START_REQUEST:
53 case TransportState::START_DEFERRED:
54 case TransportState::INITIALIZING:
55 case TransportState::PENDING_DESIRED_CONFIGURATION:
Marc Treib90ce10aa2018-07-23 07:30:0356 return false;
Marc Treib4b23757c2018-08-06 11:03:4757 case TransportState::CONFIGURING:
58 case TransportState::ACTIVE:
Marc Treib90ce10aa2018-07-23 07:30:0359 return true;
60 }
61 NOTREACHED();
62 return false;
Marc Treib94702442018-07-19 09:04:4363}
64
Marc Treib2eac56fd2018-07-20 13:29:3365bool SyncService::IsFirstSetupInProgress() const {
Marc Treib3accf29c2018-11-29 07:45:4866 return !GetUserSettings()->IsFirstSetupComplete() && IsSetupInProgress();
Marc Treib2eac56fd2018-07-20 13:29:3367}
68
Marc Treibdb1e1a0f2018-07-07 15:30:4869bool SyncService::HasUnrecoverableError() const {
70 return HasDisableReason(DISABLE_REASON_UNRECOVERABLE_ERROR);
71}
72
maxbogue7e006db2016-10-03 19:48:2873} // namespace syncer