#ifndef COMPONENTS_SYNC_ENGINE_COMMIT_CONTRIBUTION_IMPL_H_
#define COMPONENTS_SYNC_ENGINE_COMMIT_CONTRIBUTION_IMPL_H_
#include <stddef.h>
#include <stdint.h>
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "components/sync/base/passphrase_enums.h"
#include "components/sync/engine/commit_and_get_updates_types.h"
#include "components/sync/engine/commit_contribution.h"
#include "components/sync/protocol/data_type_progress_marker.pb.h"
namespace sync_pb {
class ClientToServerMessage;
class SyncEntity;
class ClientToServerResponse;
}
namespace syncer {
class Cryptographer;
class ModelTypeWorker;
class CommitContributionImpl : public CommitContribution {
public:
CommitContributionImpl(
ModelType type,
const sync_pb::DataTypeContext& context,
CommitRequestDataList commit_requests,
base::OnceCallback<void(const CommitResponseDataList&,
const FailedCommitResponseDataList&)>
on_commit_response_callback,
base::OnceCallback<void(SyncCommitError)> on_full_commit_failure_callback,
Cryptographer* cryptographer,
PassphraseType passphrase_type,
bool only_commit_specifics);
CommitContributionImpl(const CommitContributionImpl&) = delete;
CommitContributionImpl& operator=(const CommitContributionImpl&) = delete;
~CommitContributionImpl() override;
void AddToCommitMessage(sync_pb::ClientToServerMessage* msg) override;
SyncerError ProcessCommitResponse(
const sync_pb::ClientToServerResponse& response,
StatusController* status) override;
void ProcessCommitFailure(SyncCommitError commit_error) override;
size_t GetNumEntries() const override;
static void PopulateCommitProto(ModelType type,
const CommitRequestData& commit_entity,
sync_pb::SyncEntity* commit_proto);
private:
void AdjustCommitProto(sync_pb::SyncEntity* commit_proto);
const ModelType type_;
base::OnceCallback<void(const CommitResponseDataList&,
const FailedCommitResponseDataList&)>
on_commit_response_callback_;
base::OnceCallback<void(SyncCommitError)> on_full_commit_failure_callback_;
const raw_ptr<Cryptographer> cryptographer_;
const PassphraseType passphrase_type_;
const sync_pb::DataTypeContext context_;
CommitRequestDataList commit_requests_;
size_t entries_start_index_;
bool only_commit_specifics_;
};
}
#endif