Commit 14260f61 authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

Migrate the iOS SyncSetupService to use SyncUserSettings

SyncUserSettings is a new class that encapsulates all the
user-configurable knobs for Sync. It replaces a bunch of setters
and getters directly on the SyncService.

Bug: 884159
Change-Id: I219dc4d37ecd4a9eac1a7fb40f50b6b0bc2cb88d
Reviewed-on: https://chromium-review.googlesource.com/c/1331402Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Commit-Queue: Marc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607577}
parent 3b21ced5
...@@ -93,8 +93,7 @@ std::unique_ptr<KeyedService> BuildMockSyncSetupService( ...@@ -93,8 +93,7 @@ std::unique_ptr<KeyedService> BuildMockSyncSetupService(
ios::ChromeBrowserState* browser_state = ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
return std::make_unique<SyncSetupServiceMock>( return std::make_unique<SyncSetupServiceMock>(
ProfileSyncServiceFactory::GetForBrowserState(browser_state), ProfileSyncServiceFactory::GetForBrowserState(browser_state));
browser_state->GetPrefs());
} }
} // namespace } // namespace
......
...@@ -8,16 +8,11 @@ ...@@ -8,16 +8,11 @@
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "components/prefs/pref_service.h"
#include "components/sync/base/stop_source.h" #include "components/sync/base/stop_source.h"
#include "components/sync/base/sync_prefs.h"
#include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_service.h"
#include "components/sync/protocol/sync_protocol_error.h" #include "components/sync/driver/sync_user_settings.h"
#include "components/unified_consent/feature.h" #include "components/unified_consent/feature.h"
#include "google_apis/gaia/google_service_auth_error.h" #include "google_apis/gaia/google_service_auth_error.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/pref_names.h"
#include "net/base/network_change_notifier.h"
namespace { namespace {
// The set of user-selectable datatypes. This must be in the same order as // The set of user-selectable datatypes. This must be in the same order as
...@@ -29,11 +24,9 @@ syncer::ModelType kDataTypes[] = { ...@@ -29,11 +24,9 @@ syncer::ModelType kDataTypes[] = {
}; };
} // namespace } // namespace
SyncSetupService::SyncSetupService(syncer::SyncService* sync_service, SyncSetupService::SyncSetupService(syncer::SyncService* sync_service)
PrefService* prefs) : sync_service_(sync_service) {
: sync_service_(sync_service), prefs_(prefs) {
DCHECK(sync_service_); DCHECK(sync_service_);
DCHECK(prefs_);
for (unsigned int i = 0; i < base::size(kDataTypes); ++i) { for (unsigned int i = 0; i < base::size(kDataTypes); ++i) {
if (kDataTypes[i] == syncer::USER_EVENTS && if (kDataTypes[i] == syncer::USER_EVENTS &&
!unified_consent::IsUnifiedConsentFeatureEnabled()) !unified_consent::IsUnifiedConsentFeatureEnabled())
...@@ -74,7 +67,8 @@ void SyncSetupService::SetDataTypeEnabled(syncer::ModelType datatype, ...@@ -74,7 +67,8 @@ void SyncSetupService::SetDataTypeEnabled(syncer::ModelType datatype,
types.RetainAll(user_selectable_types_); types.RetainAll(user_selectable_types_);
if (enabled && !IsSyncEnabled()) if (enabled && !IsSyncEnabled())
SetSyncEnabledWithoutChangingDatatypes(true); SetSyncEnabledWithoutChangingDatatypes(true);
sync_service_->OnUserChoseDatatypes(IsSyncingAllDataTypes(), types); sync_service_->GetUserSettings()->SetChosenDataTypes(IsSyncingAllDataTypes(),
types);
if (GetPreferredDataTypes().Empty()) if (GetPreferredDataTypes().Empty())
SetSyncEnabled(false); SetSyncEnabled(false);
} }
...@@ -102,8 +96,7 @@ bool SyncSetupService::UserActionIsRequiredToHaveSyncWork() { ...@@ -102,8 +96,7 @@ bool SyncSetupService::UserActionIsRequiredToHaveSyncWork() {
} }
bool SyncSetupService::IsSyncingAllDataTypes() const { bool SyncSetupService::IsSyncingAllDataTypes() const {
syncer::SyncPrefs sync_prefs(prefs_); return sync_service_->GetUserSettings()->IsSyncEverythingEnabled();
return sync_prefs.HasKeepEverythingSynced();
} }
void SyncSetupService::SetSyncingAllDataTypes(bool sync_all) { void SyncSetupService::SetSyncingAllDataTypes(bool sync_all) {
...@@ -111,7 +104,7 @@ void SyncSetupService::SetSyncingAllDataTypes(bool sync_all) { ...@@ -111,7 +104,7 @@ void SyncSetupService::SetSyncingAllDataTypes(bool sync_all) {
sync_blocker_ = sync_service_->GetSetupInProgressHandle(); sync_blocker_ = sync_service_->GetSetupInProgressHandle();
if (sync_all && !IsSyncEnabled()) if (sync_all && !IsSyncEnabled())
SetSyncEnabled(true); SetSyncEnabled(true);
sync_service_->OnUserChoseDatatypes( sync_service_->GetUserSettings()->SetChosenDataTypes(
sync_all, sync_all,
Intersection(GetPreferredDataTypes(), syncer::UserSelectableTypes())); Intersection(GetPreferredDataTypes(), syncer::UserSelectableTypes()));
} }
...@@ -162,7 +155,7 @@ SyncSetupService::SyncServiceState SyncSetupService::GetSyncServiceState() { ...@@ -162,7 +155,7 @@ SyncSetupService::SyncServiceState SyncSetupService::GetSyncServiceState() {
} }
if (sync_service_->HasUnrecoverableError()) if (sync_service_->HasUnrecoverableError())
return kSyncServiceUnrecoverableError; return kSyncServiceUnrecoverableError;
if (sync_service_->IsPassphraseRequiredForDecryption()) if (sync_service_->GetUserSettings()->IsPassphraseRequiredForDecryption())
return kSyncServiceNeedsPassphrase; return kSyncServiceNeedsPassphrase;
return kNoSyncServiceError; return kNoSyncServiceError;
} }
...@@ -173,13 +166,13 @@ bool SyncSetupService::HasFinishedInitialSetup() { ...@@ -173,13 +166,13 @@ bool SyncSetupService::HasFinishedInitialSetup() {
// OR // OR
// 2. User is not signed in or has disabled sync. // 2. User is not signed in or has disabled sync.
return !sync_service_->CanSyncFeatureStart() || return !sync_service_->CanSyncFeatureStart() ||
sync_service_->IsFirstSetupComplete(); sync_service_->GetUserSettings()->IsFirstSetupComplete();
} }
void SyncSetupService::PrepareForFirstSyncSetup() { void SyncSetupService::PrepareForFirstSyncSetup() {
// |PrepareForFirstSyncSetup| should always be called while the user is signed // |PrepareForFirstSyncSetup| should always be called while the user is signed
// out. At that time, sync setup is not completed. // out. At that time, sync setup is not completed.
DCHECK(!sync_service_->IsFirstSetupComplete()); DCHECK(!sync_service_->GetUserSettings()->IsFirstSetupComplete());
if (!sync_blocker_) if (!sync_blocker_)
sync_blocker_ = sync_service_->GetSetupInProgressHandle(); sync_blocker_ = sync_service_->GetSetupInProgressHandle();
} }
...@@ -189,7 +182,7 @@ void SyncSetupService::CommitChanges() { ...@@ -189,7 +182,7 @@ void SyncSetupService::CommitChanges() {
// Turn on the sync setup completed flag only if the user did not turn sync // Turn on the sync setup completed flag only if the user did not turn sync
// off. // off.
if (sync_service_->CanSyncFeatureStart()) { if (sync_service_->CanSyncFeatureStart()) {
sync_service_->SetFirstSetupComplete(); sync_service_->GetUserSettings()->SetFirstSetupComplete();
} }
} }
...@@ -204,11 +197,9 @@ void SyncSetupService::SetSyncEnabledWithoutChangingDatatypes( ...@@ -204,11 +197,9 @@ void SyncSetupService::SetSyncEnabledWithoutChangingDatatypes(
bool sync_enabled) { bool sync_enabled) {
if (!sync_blocker_) if (!sync_blocker_)
sync_blocker_ = sync_service_->GetSetupInProgressHandle(); sync_blocker_ = sync_service_->GetSetupInProgressHandle();
if (sync_enabled) { if (!sync_enabled) {
sync_service_->RequestStart();
} else {
UMA_HISTOGRAM_ENUMERATION("Sync.StopSource", syncer::CHROME_SYNC_SETTINGS, UMA_HISTOGRAM_ENUMERATION("Sync.StopSource", syncer::CHROME_SYNC_SETTINGS,
syncer::STOP_SOURCE_LIMIT); syncer::STOP_SOURCE_LIMIT);
sync_service_->RequestStop(syncer::SyncService::KEEP_DATA);
} }
sync_service_->GetUserSettings()->SetSyncRequested(sync_enabled);
} }
...@@ -5,16 +5,11 @@ ...@@ -5,16 +5,11 @@
#ifndef IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_H_ #ifndef IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_H_
#define IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_H_ #define IOS_CHROME_BROWSER_SYNC_SYNC_SETUP_SERVICE_H_
#include <map>
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/string16.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/sync/base/model_type.h" #include "components/sync/base/model_type.h"
#include "components/sync/base/syncer_error.h"
class PrefService;
namespace syncer { namespace syncer {
class SyncService; class SyncService;
...@@ -49,7 +44,7 @@ class SyncSetupService : public KeyedService { ...@@ -49,7 +44,7 @@ class SyncSetupService : public KeyedService {
kNumberOfSyncableDatatypes kNumberOfSyncableDatatypes
}; };
SyncSetupService(syncer::SyncService* sync_service, PrefService* prefs); SyncSetupService(syncer::SyncService* sync_service);
~SyncSetupService() override; ~SyncSetupService() override;
// Returns the |syncer::ModelType| associated to the given // Returns the |syncer::ModelType| associated to the given
...@@ -111,7 +106,6 @@ class SyncSetupService : public KeyedService { ...@@ -111,7 +106,6 @@ class SyncSetupService : public KeyedService {
void SetSyncEnabledWithoutChangingDatatypes(bool sync_enabled); void SetSyncEnabledWithoutChangingDatatypes(bool sync_enabled);
syncer::SyncService* const sync_service_; syncer::SyncService* const sync_service_;
PrefService* const prefs_;
syncer::ModelTypeSet user_selectable_types_; syncer::ModelTypeSet user_selectable_types_;
// Prevents Sync from running until configuration is complete. // Prevents Sync from running until configuration is complete.
......
...@@ -45,6 +45,5 @@ std::unique_ptr<KeyedService> SyncSetupServiceFactory::BuildServiceInstanceFor( ...@@ -45,6 +45,5 @@ std::unique_ptr<KeyedService> SyncSetupServiceFactory::BuildServiceInstanceFor(
ios::ChromeBrowserState* browser_state = ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
return std::make_unique<SyncSetupService>( return std::make_unique<SyncSetupService>(
ProfileSyncServiceFactory::GetForBrowserState(browser_state), ProfileSyncServiceFactory::GetForBrowserState(browser_state));
browser_state->GetPrefs());
} }
...@@ -4,9 +4,12 @@ ...@@ -4,9 +4,12 @@
#include "ios/chrome/browser/sync/sync_setup_service_mock.h" #include "ios/chrome/browser/sync/sync_setup_service_mock.h"
SyncSetupServiceMock::SyncSetupServiceMock(syncer::SyncService* sync_service)
: SyncSetupService(sync_service) {}
SyncSetupServiceMock::SyncSetupServiceMock(syncer::SyncService* sync_service, SyncSetupServiceMock::SyncSetupServiceMock(syncer::SyncService* sync_service,
PrefService* prefs) PrefService* prefs)
: SyncSetupService(sync_service, prefs) {} : SyncSetupService(sync_service) {}
SyncSetupServiceMock::~SyncSetupServiceMock() { SyncSetupServiceMock::~SyncSetupServiceMock() {
} }
......
...@@ -9,9 +9,14 @@ ...@@ -9,9 +9,14 @@
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
class PrefService;
// Mock for the class that allows configuring sync on iOS. // Mock for the class that allows configuring sync on iOS.
class SyncSetupServiceMock : public SyncSetupService { class SyncSetupServiceMock : public SyncSetupService {
public: public:
SyncSetupServiceMock(syncer::SyncService* sync_service);
// TODO(crbug.com/884159): ¦prefs¦ is not required; get rid of this
// constructor once no tests use it anymore.
SyncSetupServiceMock(syncer::SyncService* sync_service, PrefService* prefs); SyncSetupServiceMock(syncer::SyncService* sync_service, PrefService* prefs);
~SyncSetupServiceMock(); ~SyncSetupServiceMock();
......
...@@ -43,8 +43,7 @@ std::unique_ptr<KeyedService> CreateSyncSetupService( ...@@ -43,8 +43,7 @@ std::unique_ptr<KeyedService> CreateSyncSetupService(
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
syncer::SyncService* sync_service = syncer::SyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<SyncSetupServiceMock>( return std::make_unique<SyncSetupServiceMock>(sync_service);
sync_service, chrome_browser_state->GetPrefs());
} }
class ProfileSyncServiceMockForRecentTabsTableCoordinator class ProfileSyncServiceMockForRecentTabsTableCoordinator
......
...@@ -49,8 +49,7 @@ class SyncEncryptionPassphraseCollectionViewControllerTest ...@@ -49,8 +49,7 @@ class SyncEncryptionPassphraseCollectionViewControllerTest
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
syncer::SyncService* sync_service = syncer::SyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<SyncSetupServiceMock>( return std::make_unique<SyncSetupServiceMock>(sync_service);
sync_service, chrome_browser_state->GetPrefs());
} }
void TurnSyncPassphraseErrorOn() { void TurnSyncPassphraseErrorOn() {
......
...@@ -52,9 +52,8 @@ using testing::Return; ...@@ -52,9 +52,8 @@ using testing::Return;
class SyncSetupServiceMockThatFails : public SyncSetupServiceMock { class SyncSetupServiceMockThatFails : public SyncSetupServiceMock {
public: public:
SyncSetupServiceMockThatFails(browser_sync::ProfileSyncService* sync_service, SyncSetupServiceMockThatFails(browser_sync::ProfileSyncService* sync_service)
PrefService* prefs) : SyncSetupServiceMock(sync_service) {}
: SyncSetupServiceMock(sync_service, prefs) {}
bool IsSyncEnabled() const override { return sync_enabled_; } bool IsSyncEnabled() const override { return sync_enabled_; }
void SetSyncEnabled(bool sync_enabled) override {} void SetSyncEnabled(bool sync_enabled) override {}
bool IsSyncingAllDataTypes() const override { return sync_all_; } bool IsSyncingAllDataTypes() const override { return sync_all_; }
...@@ -78,9 +77,8 @@ bool SyncSetupServiceMockThatFails::sync_all_ = true; ...@@ -78,9 +77,8 @@ bool SyncSetupServiceMockThatFails::sync_all_ = true;
class SyncSetupServiceMockThatSucceeds : public SyncSetupServiceMockThatFails { class SyncSetupServiceMockThatSucceeds : public SyncSetupServiceMockThatFails {
public: public:
SyncSetupServiceMockThatSucceeds( SyncSetupServiceMockThatSucceeds(
browser_sync::ProfileSyncService* sync_service, browser_sync::ProfileSyncService* sync_service)
PrefService* prefs) : SyncSetupServiceMockThatFails(sync_service) {}
: SyncSetupServiceMockThatFails(sync_service, prefs) {}
void SetSyncEnabled(bool sync_enabled) override { void SetSyncEnabled(bool sync_enabled) override {
sync_enabled_ = sync_enabled; sync_enabled_ = sync_enabled;
} }
...@@ -99,8 +97,7 @@ class SyncSettingsCollectionViewControllerTest ...@@ -99,8 +97,7 @@ class SyncSettingsCollectionViewControllerTest
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
browser_sync::ProfileSyncService* sync_service = browser_sync::ProfileSyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<NiceMock<SyncSetupServiceMock>>( return std::make_unique<NiceMock<SyncSetupServiceMock>>(sync_service);
sync_service, chrome_browser_state->GetPrefs());
} }
static std::unique_ptr<KeyedService> CreateSucceedingSyncSetupService( static std::unique_ptr<KeyedService> CreateSucceedingSyncSetupService(
...@@ -110,7 +107,7 @@ class SyncSettingsCollectionViewControllerTest ...@@ -110,7 +107,7 @@ class SyncSettingsCollectionViewControllerTest
browser_sync::ProfileSyncService* sync_service = browser_sync::ProfileSyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<NiceMock<SyncSetupServiceMockThatSucceeds>>( return std::make_unique<NiceMock<SyncSetupServiceMockThatSucceeds>>(
sync_service, chrome_browser_state->GetPrefs()); sync_service);
} }
static std::unique_ptr<KeyedService> CreateFailingSyncSetupService( static std::unique_ptr<KeyedService> CreateFailingSyncSetupService(
...@@ -120,7 +117,7 @@ class SyncSettingsCollectionViewControllerTest ...@@ -120,7 +117,7 @@ class SyncSettingsCollectionViewControllerTest
browser_sync::ProfileSyncService* sync_service = browser_sync::ProfileSyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<NiceMock<SyncSetupServiceMockThatFails>>( return std::make_unique<NiceMock<SyncSetupServiceMockThatFails>>(
sync_service, chrome_browser_state->GetPrefs()); sync_service);
} }
static std::unique_ptr<KeyedService> CreateProfileSyncService( static std::unique_ptr<KeyedService> CreateProfileSyncService(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment