blob: ca6397753a47be3855f348352f6f2a7b48ef3adf [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.
#ifndef COMPONENTS_SYNC_TEST_FAKE_SYNC_MANAGER_H_
#define COMPONENTS_SYNC_TEST_FAKE_SYNC_MANAGER_H_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include "base/functional/callback_forward.h"
#include "base/memory/scoped_refptr.h"
#include "base/observer_list.h"
#include "components/sync/base/data_type.h"
#include "components/sync/engine/sync_manager.h"
#include "components/sync/test/fake_data_type_connector.h"
#include "components/sync/test/fake_sync_encryption_handler.h"
namespace base {
class SequencedTaskRunner;
}
namespace syncer {
class FakeSyncEncryptionHandler;
class SyncCycleSnapshot;
class FakeSyncManager : public SyncManager {
public:
// `initial_sync_ended_types`: The set of types that have initial_sync_ended
// set to true. This value will be used by InitialSyncEndedTypes() until the
// next configuration is performed.
//
// `progress_marker_types`: The set of types that have valid progress
// markers. This will be used by GetTypesWithEmptyProgressMarkerToken() until
// the next configuration is performed.
//
// `configure_fail_types`: The set of types that will fail
// configuration. Once ConfigureSyncer is called, the
// `initial_sync_ended_types_` and `progress_marker_types_` will be updated
// to include those types that didn't fail.
FakeSyncManager(DataTypeSet initial_sync_ended_types,
DataTypeSet progress_marker_types,
DataTypeSet configure_fail_types);
FakeSyncManager(const FakeSyncManager&) = delete;
FakeSyncManager& operator=(const FakeSyncManager&) = delete;
~FakeSyncManager() override;
// Returns those types that have been downloaded since the last call to
// GetAndResetDownloadedTypes(), or since startup if never called.
DataTypeSet GetAndResetDownloadedTypes();
// Returns the types that have most recently received a refresh request.
DataTypeSet GetLastRefreshRequestTypes();
// Returns the most recent configuration reason since the last call to
// GetAndResetConfigureReason, or since startup if never called.
ConfigureReason GetAndResetConfigureReason();
// Returns the number of invalidations received for type since startup.
int GetInvalidationCount(DataType type) const;
// Block until the sync thread has finished processing any pending messages.
void WaitForSyncThread();
bool IsInvalidatorEnabled() const { return invalidator_enabled_; }
// Notifies all observers about the changed `status`.
void NotifySyncStatusChanged(const SyncStatus& status);
// Notifies `observers_` about sync cycle completion.
void NotifySyncCycleCompleted(const SyncCycleSnapshot& snapshot);
// SyncManager implementation.
// Note: we treat whatever message loop this is called from as the sync
// loop for purposes of callbacks.
void Init(InitArgs* args) override;
DataTypeSet InitialSyncEndedTypes() override;
DataTypeSet GetConnectedTypes() override;
void UpdateCredentials(const SyncCredentials& credentials) override;
void InvalidateCredentials() override;
void StartSyncingNormally(base::Time last_poll_time) override;
void StartConfiguration() override;
void ConfigureSyncer(ConfigureReason reason,
DataTypeSet to_download,
SyncFeatureState sync_feature_state,
base::OnceClosure ready_task) override;
void OnIncomingInvalidation(
DataType type,
std::unique_ptr<SyncInvalidation> interface) override;
void SetInvalidatorEnabled(bool invalidator_enabled) override;
void AddObserver(Observer* observer) override;
void RemoveObserver(Observer* observer) override;
void ShutdownOnSyncThread() override;
DataTypeConnector* GetDataTypeConnector() override;
std::unique_ptr<DataTypeConnector> GetDataTypeConnectorProxy() override;
std::string cache_guid() override;
std::string birthday() override;
std::string bag_of_chips() override;
bool HasUnsyncedItemsForTest() override;
SyncEncryptionHandler* GetEncryptionHandler() override;
std::vector<std::unique_ptr<ProtocolEvent>> GetBufferedProtocolEvents()
override;
void RefreshTypes(DataTypeSet types) override;
void OnCookieJarChanged(bool account_mismatch) override;
void UpdateActiveDevicesInvalidationInfo(
ActiveDevicesInvalidationInfo active_devices_invalidation_info) override;
private:
void DoNotifySyncStatusChanged(const SyncStatus& status);
void DoNotifySyncCycleCompleted(const SyncCycleSnapshot& snapshot);
scoped_refptr<base::SequencedTaskRunner> sync_task_runner_;
base::ObserverList<SyncManager::Observer>::Unchecked observers_;
std::string cache_guid_;
std::string birthday_;
std::string bag_of_chips_;
bool invalidator_enabled_ = false;
// Faked data state.
DataTypeSet initial_sync_ended_types_;
DataTypeSet progress_marker_types_;
// Test specific state.
// The types that should fail configuration attempts. These types will not
// have their progress markers or initial_sync_ended bits set.
DataTypeSet configure_fail_types_;
// The set of types that have been downloaded.
DataTypeSet downloaded_types_;
// The types for which a refresh was most recently requested.
DataTypeSet last_refresh_request_types_;
// The most recent configure reason.
ConfigureReason last_configure_reason_;
FakeSyncEncryptionHandler fake_encryption_handler_;
FakeDataTypeConnector fake_data_type_connector_;
// Number of invalidations received per type since startup.
std::map<DataType, int> num_invalidations_received_;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_TEST_FAKE_SYNC_MANAGER_H_