1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
// 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_ENGINE_COMMIT_CONTRIBUTION_IMPL_H_
#define COMPONENTS_SYNC_ENGINE_COMMIT_CONTRIBUTION_IMPL_H_
#include <stddef.h>
#include "base/functional/callback.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"
namespace sync_pb {
class ClientToServerMessage;
class SyncEntity;
class ClientToServerResponse;
} // namespace sync_pb
namespace syncer {
// A sync type's contribution to an outgoing commit message.
//
// Helps build a commit message and process its response. It collaborates
// closely with the DataTypeWorker.
class CommitContributionImpl : public CommitContribution {
public:
// Only one of `on_commit_response_callback` and
// `on_full_commit_failure_callback` will be called.
// TODO(rushans): there is still possible rare case when both of these
// callbacks are never called, i.e. if get updates from the server fails.
CommitContributionImpl(
DataType 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,
PassphraseType passphrase_type);
CommitContributionImpl(const CommitContributionImpl&) = delete;
CommitContributionImpl& operator=(const CommitContributionImpl&) = delete;
~CommitContributionImpl() override;
// Implementation of CommitContribution
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;
// Public for testing.
// Copies data to be committed from CommitRequestData into SyncEntity proto.
static void PopulateCommitProto(DataType type,
const CommitRequestData& commit_entity,
sync_pb::SyncEntity* commit_proto);
private:
// Generates id for new entities and encrypts entity if needed.
void AdjustCommitProto(sync_pb::SyncEntity* commit_proto);
const DataType type_;
// A callback to inform the object that created this contribution about commit
// result.
base::OnceCallback<void(const CommitResponseDataList&,
const FailedCommitResponseDataList&)>
on_commit_response_callback_;
// A callback to inform the object that created this contribution about commit
// failure. This callback differs from `on_commit_response_callback_` and will
// be called when the server respond with any error code or do not respond at
// all (i.e. there is no internet connection).
base::OnceCallback<void(SyncCommitError)> on_full_commit_failure_callback_;
const PassphraseType passphrase_type_;
// The type-global context information.
const sync_pb::DataTypeContext context_;
// The list of entities to be committed.
CommitRequestDataList commit_requests_;
// The index in the commit message where this contribution's entities are
// added. Used to correlate per-item requests with per-item responses.
size_t entries_start_index_;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_ENGINE_COMMIT_CONTRIBUTION_IMPL_H_
|