chromium/components/sync/model/client_tag_based_data_type_processor.h

// Copyright 2014 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_MODEL_CLIENT_TAG_BASED_DATA_TYPE_PROCESSOR_H_
#define COMPONENTS_SYNC_MODEL_CLIENT_TAG_BASED_DATA_TYPE_PROCESSOR_H_

#include <map>
#include <memory>
#include <optional>
#include <string>
#include <unordered_set>
#include <vector>

#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "components/sync/base/client_tag_hash.h"
#include "components/sync/base/data_type.h"
#include "components/sync/base/sync_stop_metadata_fate.h"
#include "components/sync/engine/commit_and_get_updates_types.h"
#include "components/sync/engine/data_type_processor.h"
#include "components/sync/model/data_batch.h"
#include "components/sync/model/data_type_activation_request.h"
#include "components/sync/model/data_type_local_change_processor.h"
#include "components/sync/model/data_type_sync_bridge.h"
#include "components/sync/model/metadata_batch.h"
#include "components/sync/model/metadata_change_list.h"
#include "components/sync/model/model_error.h"
#include "components/sync/model/processor_entity_tracker.h"

namespace sync_pb {
class DataTypeState;
class DataTypeState_Invalidation;
}  // namespace sync_pb

namespace syncer {

class CommitQueue;

// A sync component embedded on the data type's sequence that tracks entity
// metadata in the model store and coordinates communication between sync and
// data type sequences. All changes in flight (either incoming from the server
// or local changes reported by the bridge) must specify a client tag.
// Lives on the model sequence.
//
// See
// //docs/website/site/developers/design-documents/sync/client-tag-based-data-type-processor/index.md
// for a more thorough description.
class ClientTagBasedDataTypeProcessor : public DataTypeProcessor,
                                         public DataTypeLocalChangeProcessor,
                                         public DataTypeControllerDelegate {};

}  // namespace syncer

#endif  // COMPONENTS_SYNC_MODEL_CLIENT_TAG_BASED_DATA_TYPE_PROCESSOR_H_