#include "components/saved_tab_groups/tab_group_sync_service_impl.h"
#include <memory>
#include "base/containers/contains.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/scoped_refptr.h"
#include "base/observer_list.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "components/saved_tab_groups/features.h"
#include "components/saved_tab_groups/pref_names.h"
#include "components/saved_tab_groups/saved_tab_group.h"
#include "components/saved_tab_groups/saved_tab_group_model.h"
#include "components/saved_tab_groups/saved_tab_group_sync_bridge.h"
#include "components/saved_tab_groups/saved_tab_group_tab.h"
#include "components/saved_tab_groups/shared_tab_group_data_sync_bridge.h"
#include "components/saved_tab_groups/stats.h"
#include "components/saved_tab_groups/sync_data_type_configuration.h"
#include "components/saved_tab_groups/tab_group_sync_metrics_logger.h"
#include "components/saved_tab_groups/types.h"
#include "components/saved_tab_groups/utils.h"
#include "components/sync/base/data_type.h"
#include "components/sync/model/client_tag_based_data_type_processor.h"
#include "components/sync/model/data_type_controller_delegate.h"
namespace tab_groups {
namespace {
constexpr base::TimeDelta kDelayBeforeMetricsLogged = …;
}
TabGroupSyncServiceImpl::TabGroupSyncServiceImpl(
std::unique_ptr<SavedTabGroupModel> model,
std::unique_ptr<SyncDataTypeConfiguration> saved_tab_group_configuration,
std::unique_ptr<SyncDataTypeConfiguration> shared_tab_group_configuration,
PrefService* pref_service,
std::unique_ptr<TabGroupSyncMetricsLogger> metrics_logger)
: … { … }
TabGroupSyncServiceImpl::~TabGroupSyncServiceImpl() { … }
void TabGroupSyncServiceImpl::SetCoordinator(
std::unique_ptr<TabGroupSyncCoordinator> coordinator) { … }
std::unique_ptr<ScopedLocalObservationPauser>
TabGroupSyncServiceImpl::CreateScopedLocalObserverPauser() { … }
void TabGroupSyncServiceImpl::AddObserver(
TabGroupSyncService::Observer* observer) { … }
void TabGroupSyncServiceImpl::RemoveObserver(
TabGroupSyncService::Observer* observer) { … }
void TabGroupSyncServiceImpl::SetIsInitializedForTesting(bool initialized) { … }
void TabGroupSyncServiceImpl::Shutdown() { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
TabGroupSyncServiceImpl::GetSavedTabGroupControllerDelegate() { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
TabGroupSyncServiceImpl::GetSharedTabGroupControllerDelegate() { … }
void TabGroupSyncServiceImpl::AddGroup(SavedTabGroup group) { … }
void TabGroupSyncServiceImpl::RemoveGroup(const LocalTabGroupID& local_id) { … }
void TabGroupSyncServiceImpl::RemoveGroup(const base::Uuid& sync_id) { … }
void TabGroupSyncServiceImpl::UpdateVisualData(
const LocalTabGroupID local_group_id,
const tab_groups::TabGroupVisualData* visual_data) { … }
void TabGroupSyncServiceImpl::UpdateGroupPosition(
const base::Uuid& sync_id,
std::optional<bool> is_pinned,
std::optional<int> new_index) { … }
void TabGroupSyncServiceImpl::AddTab(const LocalTabGroupID& group_id,
const LocalTabID& tab_id,
const std::u16string& title,
GURL url,
std::optional<size_t> position) { … }
void TabGroupSyncServiceImpl::UpdateTab(
const LocalTabGroupID& group_id,
const LocalTabID& tab_id,
const SavedTabGroupTabBuilder& tab_builder) { … }
void TabGroupSyncServiceImpl::RemoveTab(const LocalTabGroupID& group_id,
const LocalTabID& tab_id) { … }
void TabGroupSyncServiceImpl::MoveTab(const LocalTabGroupID& group_id,
const LocalTabID& tab_id,
int new_group_index) { … }
void TabGroupSyncServiceImpl::OnTabSelected(const LocalTabGroupID& group_id,
const LocalTabID& tab_id) { … }
void TabGroupSyncServiceImpl::MakeTabGroupShared(
const LocalTabGroupID& local_group_id,
std::string_view collaboration_id) { … }
std::vector<SavedTabGroup> TabGroupSyncServiceImpl::GetAllGroups() { … }
std::optional<SavedTabGroup> TabGroupSyncServiceImpl::GetGroup(
const base::Uuid& guid) { … }
std::optional<SavedTabGroup> TabGroupSyncServiceImpl::GetGroup(
const LocalTabGroupID& local_id) { … }
std::vector<LocalTabGroupID> TabGroupSyncServiceImpl::GetDeletedGroupIds() { … }
void TabGroupSyncServiceImpl::OpenTabGroup(
const base::Uuid& sync_group_id,
std::unique_ptr<TabGroupActionContext> context) { … }
void TabGroupSyncServiceImpl::UpdateLocalTabGroupMapping(
const base::Uuid& sync_id,
const LocalTabGroupID& local_id) { … }
void TabGroupSyncServiceImpl::RemoveLocalTabGroupMapping(
const LocalTabGroupID& local_id) { … }
void TabGroupSyncServiceImpl::UpdateLocalTabId(
const LocalTabGroupID& local_group_id,
const base::Uuid& sync_tab_id,
const LocalTabID& local_tab_id) { … }
void TabGroupSyncServiceImpl::ConnectLocalTabGroup(
const base::Uuid& sync_id,
const LocalTabGroupID& local_id) { … }
bool TabGroupSyncServiceImpl::IsRemoteDevice(
const std::optional<std::string>& cache_guid) const { … }
void TabGroupSyncServiceImpl::RecordTabGroupEvent(
const EventDetails& event_details) { … }
void TabGroupSyncServiceImpl::SavedTabGroupAddedFromSync(
const base::Uuid& guid) { … }
void TabGroupSyncServiceImpl::SavedTabGroupAddedLocally(
const base::Uuid& guid) { … }
void TabGroupSyncServiceImpl::SavedTabGroupUpdatedFromSync(
const base::Uuid& group_guid,
const std::optional<base::Uuid>& tab_guid) { … }
void TabGroupSyncServiceImpl::SavedTabGroupUpdatedLocally(
const base::Uuid& group_guid,
const std::optional<base::Uuid>& tab_guid) { … }
void TabGroupSyncServiceImpl::SavedTabGroupRemovedFromSync(
const SavedTabGroup& removed_group) { … }
void TabGroupSyncServiceImpl::SavedTabGroupRemovedLocally(
const SavedTabGroup& removed_group) { … }
void TabGroupSyncServiceImpl::HandleTabGroupAdded(const base::Uuid& guid,
TriggerSource source) { … }
void TabGroupSyncServiceImpl::HandleTabGroupUpdated(
const base::Uuid& group_guid,
const std::optional<base::Uuid>& tab_guid,
TriggerSource source) { … }
void TabGroupSyncServiceImpl::HandleTabGroupRemoved(
std::pair<base::Uuid, std::optional<LocalTabGroupID>> id_pair,
TriggerSource source) { … }
std::vector<LocalTabGroupID>
TabGroupSyncServiceImpl::GetDeletedGroupIdsFromPref() { … }
void TabGroupSyncServiceImpl::AddDeletedGroupIdToPref(
const LocalTabGroupID& local_id,
const base::Uuid& sync_id) { … }
void TabGroupSyncServiceImpl::RemoveDeletedGroupIdFromPref(
const LocalTabGroupID& local_id) { … }
void TabGroupSyncServiceImpl::SavedTabGroupLocalIdChanged(
const base::Uuid& group_guid) { … }
void TabGroupSyncServiceImpl::SavedTabGroupModelLoaded() { … }
void TabGroupSyncServiceImpl::NotifyServiceInitialized() { … }
void TabGroupSyncServiceImpl::UpdateAttributions(
const LocalTabGroupID& group_id,
const std::optional<LocalTabID>& tab_id) { … }
void TabGroupSyncServiceImpl::RecordMetrics() { … }
void TabGroupSyncServiceImpl::LogEvent(
TabGroupEvent event,
LocalTabGroupID group_id,
const std::optional<LocalTabID>& tab_id) { … }
}