910e62b5创建于 1月15日历史提交
// Copyright 2025 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/data_sharing/migration/public/migratable_sync_bridge.h"

#include "base/functional/bind.h"
#include "base/notimplemented.h"
#include "components/prefs/pref_service.h"
#include "components/sync/model/data_type_local_change_processor.h"
#include "components/sync/model/metadata_change_list.h"

namespace data_sharing::migration {

MigratableSyncBridge::MigratableSyncBridge(
    syncer::DataType data_type,
    syncer::OnceDataTypeStoreFactory create_store_callback,
    std::unique_ptr<syncer::DataTypeLocalChangeProcessor> change_processor,
    PrefService* pref_service,
    bool is_shared_bridge)
    : syncer::DataTypeSyncBridge(std::move(change_processor)),
      pref_service_(pref_service),
      is_shared_bridge_(is_shared_bridge) {
  CHECK(pref_service_);
  std::move(create_store_callback)
      .Run(data_type, base::BindOnce(&MigratableSyncBridge::OnStoreCreated,
                                     weak_ptr_factory_.GetWeakPtr()));
}

MigratableSyncBridge::~MigratableSyncBridge() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}

void MigratableSyncBridge::OnStoreCreated(
    const std::optional<syncer::ModelError>& error,
    std::unique_ptr<syncer::DataTypeStore> store) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  if (error) {
    change_processor()->ReportError(*error);
    return;
  }
  store_ = std::move(store);
  OnStoreCreatedAndReady();
}

std::optional<syncer::ModelError> MigratableSyncBridge::MergeFullSyncData(
    std::unique_ptr<syncer::MetadataChangeList> metadata_change_list,
    syncer::EntityChangeList entity_data) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  // Delegate the core logic to the feature-specific implementation.
  return ProcessSyncChanges(std::move(metadata_change_list),
                            std::move(entity_data));
}

std::optional<syncer::ModelError>
MigratableSyncBridge::ApplyIncrementalSyncChanges(
    std::unique_ptr<syncer::MetadataChangeList> metadata_change_list,
    syncer::EntityChangeList entity_changes) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  // Delegate the core logic to the feature-specific implementation.
  return ProcessSyncChanges(std::move(metadata_change_list),
                            std::move(entity_changes));
}

void MigratableSyncBridge::ApplyDisableSyncChanges(
    std::unique_ptr<syncer::MetadataChangeList> delete_metadata_change_list) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  NOTIMPLEMENTED();
}

}  // namespace data_sharing::migration