blob: 5e0a7379e9601b1ddf75613b5c8eb5efdaa7d8b9 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync/test/fake_sync_manager.h"
#include <cstddef>
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/notimplemented.h"
#include "base/run_loop.h"
#include "base/task/sequenced_task_runner.h"
#include "components/sync/engine/cycle/sync_cycle_snapshot.h"
#include "components/sync/engine/engine_components_factory.h"
#include "components/sync/engine/net/http_post_provider_factory.h"
#include "components/sync/test/fake_data_type_connector.h"
class GURL;
namespace syncer {
FakeSyncManager::FakeSyncManager(DataTypeSet initial_sync_ended_types,
DataTypeSet progress_marker_types,
DataTypeSet configure_fail_types)
: initial_sync_ended_types_(initial_sync_ended_types),
progress_marker_types_(progress_marker_types),
configure_fail_types_(configure_fail_types),
last_configure_reason_(ConfigureReason::kUnknown) {
sync_task_runner_ = base::SequencedTaskRunner::GetCurrentDefault();
}
FakeSyncManager::~FakeSyncManager() = default;
DataTypeSet FakeSyncManager::GetAndResetDownloadedTypes() {
DataTypeSet downloaded_types = downloaded_types_;
downloaded_types_.Clear();
return downloaded_types;
}
ConfigureReason FakeSyncManager::GetAndResetConfigureReason() {
ConfigureReason reason = last_configure_reason_;
last_configure_reason_ = ConfigureReason::kUnknown;
return reason;
}
int FakeSyncManager::GetInvalidationCount(DataType type) const {
auto it = num_invalidations_received_.find(type);
if (it == num_invalidations_received_.end()) {
return 0;
}
return it->second;
}
void FakeSyncManager::WaitForSyncThread() {
// Post a task to `sync_task_runner_` and block until it runs.
base::RunLoop run_loop;
if (!sync_task_runner_->PostTaskAndReply(FROM_HERE, base::DoNothing(),
run_loop.QuitClosure())) {
NOTREACHED();
}
run_loop.Run();
}
void FakeSyncManager::NotifySyncStatusChanged(const SyncStatus& status) {
sync_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&FakeSyncManager::DoNotifySyncStatusChanged,
base::Unretained(this), status));
}
void FakeSyncManager::NotifySyncCycleCompleted(
const SyncCycleSnapshot& snapshot) {
sync_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&FakeSyncManager::DoNotifySyncCycleCompleted,
base::Unretained(this), snapshot));
}
void FakeSyncManager::DoNotifySyncStatusChanged(const SyncStatus& status) {
DCHECK(sync_task_runner_->RunsTasksInCurrentSequence());
for (Observer& observer : observers_) {
observer.OnSyncStatusChanged(status);
}
}
void FakeSyncManager::DoNotifySyncCycleCompleted(
const SyncCycleSnapshot& snapshot) {
DCHECK(sync_task_runner_->RunsTasksInCurrentSequence());
for (Observer& observer : observers_) {
observer.OnSyncCycleCompleted(snapshot);
}
}
void FakeSyncManager::Init(InitArgs* args) {
cache_guid_ = args->cache_guid;
birthday_ = args->birthday;
bag_of_chips_ = args->bag_of_chips;
}
DataTypeSet FakeSyncManager::InitialSyncEndedTypes() {
return initial_sync_ended_types_;
}
DataTypeSet FakeSyncManager::GetConnectedTypes() {
return progress_marker_types_;
}
void FakeSyncManager::UpdateCredentials(const SyncCredentials& credentials) {
NOTIMPLEMENTED();
}
void FakeSyncManager::InvalidateCredentials() {
NOTIMPLEMENTED();
}
void FakeSyncManager::StartSyncingNormally(base::Time last_poll_time) {
// Do nothing.
}
void FakeSyncManager::StartConfiguration() {
// Do nothing.
}
void FakeSyncManager::ConfigureSyncer(ConfigureReason reason,
DataTypeSet to_download,
SyncFeatureState sync_feature_state,
base::OnceClosure ready_task) {
last_configure_reason_ = reason;
DataTypeSet success_types = to_download;
success_types.RemoveAll(configure_fail_types_);
DVLOG(1) << "Faking configuration. Downloading: "
<< DataTypeSetToDebugString(success_types);
// Now simulate the actual configuration for those types that successfully
// download + apply.
progress_marker_types_.PutAll(success_types);
initial_sync_ended_types_.PutAll(success_types);
downloaded_types_.PutAll(success_types);
std::move(ready_task).Run();
}
void FakeSyncManager::AddObserver(Observer* observer) {
DCHECK(sync_task_runner_->RunsTasksInCurrentSequence());
observers_.AddObserver(observer);
}
void FakeSyncManager::RemoveObserver(Observer* observer) {
DCHECK(sync_task_runner_->RunsTasksInCurrentSequence());
observers_.RemoveObserver(observer);
}
void FakeSyncManager::ShutdownOnSyncThread() {
DCHECK(sync_task_runner_->RunsTasksInCurrentSequence());
}
DataTypeConnector* FakeSyncManager::GetDataTypeConnector() {
return &fake_data_type_connector_;
}
std::unique_ptr<DataTypeConnector>
FakeSyncManager::GetDataTypeConnectorProxy() {
return std::make_unique<FakeDataTypeConnector>();
}
std::string FakeSyncManager::cache_guid() {
return cache_guid_;
}
std::string FakeSyncManager::birthday() {
return birthday_;
}
std::string FakeSyncManager::bag_of_chips() {
return bag_of_chips_;
}
bool FakeSyncManager::HasUnsyncedItemsForTest() {
NOTIMPLEMENTED();
return false;
}
SyncEncryptionHandler* FakeSyncManager::GetEncryptionHandler() {
return &fake_encryption_handler_;
}
std::vector<std::unique_ptr<ProtocolEvent>>
FakeSyncManager::GetBufferedProtocolEvents() {
return std::vector<std::unique_ptr<ProtocolEvent>>();
}
void FakeSyncManager::RefreshTypes(DataTypeSet types) {
last_refresh_request_types_ = types;
}
void FakeSyncManager::OnIncomingInvalidation(
DataType type,
std::unique_ptr<SyncInvalidation> invalidation) {
num_invalidations_received_[type]++;
}
DataTypeSet FakeSyncManager::GetLastRefreshRequestTypes() {
return last_refresh_request_types_;
}
void FakeSyncManager::SetInvalidatorEnabled(bool invalidator_enabled) {
invalidator_enabled_ = invalidator_enabled;
}
void FakeSyncManager::OnCookieJarChanged(bool account_mismatch) {}
void FakeSyncManager::UpdateActiveDevicesInvalidationInfo(
ActiveDevicesInvalidationInfo active_devices_invalidation_info) {
// Do nothing.
}
} // namespace syncer