// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SYNC_ENGINE_COMMIT_UTIL_H_
#define SYNC_ENGINE_COMMIT_UTIL_H_

#include <stdint.h>

#include <set>

#include "sync/base/sync_export.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/protocol/sync.pb.h"
#include "sync/util/extensions_activity.h"

namespace sync_pb {
class CommitMessage;
class SyncEntity;
}

namespace syncer {

namespace syncable {
class BaseTransaction;
class Entry;
class Id;
class BaseWriteTransaction;
}

namespace commit_util {

// Adds bookmark extensions activity report to |message|.
SYNC_EXPORT void AddExtensionsActivityToMessage(
    ExtensionsActivity* activity,
    ExtensionsActivity::Records* extensions_activity_buffer,
    sync_pb::CommitMessage* message);

// Fills the config_params field of |message|.
SYNC_EXPORT void AddClientConfigParamsToMessage(
    ModelTypeSet enabled_types,
    bool cookie_jar_mismatch,
    sync_pb::CommitMessage* message);

// Takes a snapshot of |meta_entry| and puts it into a protobuf suitable for use
// in a commit request message.
SYNC_EXPORT void BuildCommitItem(const syncable::Entry& meta_entry,
                                 sync_pb::SyncEntity* sync_entry);

// Process a single commit response.  Updates the entry's SERVER fields using
// |pb_commit_response| and |pb_committed_entry|.
//
// The |deleted_folders| parameter is a set of IDs that represent deleted
// folders.  This function will add its entry's ID to this set if it finds
// itself processing a folder deletion.
SYNC_EXPORT
sync_pb::CommitResponse::ResponseType ProcessSingleCommitResponse(
    syncable::BaseWriteTransaction* trans,
    const sync_pb::CommitResponse_EntryResponse& server_entry,
    const sync_pb::SyncEntity& commit_request_entry,
    int64_t metahandle,
    std::set<syncable::Id>* deleted_folders);

}  // namespace commit_util

}  // namespace syncer

#endif  // SYNC_ENGINE_COMMIT_UTIL_H_
