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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
// 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_GET_UPDATES_DELEGATE_H_
#define COMPONENTS_SYNC_ENGINE_GET_UPDATES_DELEGATE_H_
#include <memory>
#include "base/memory/raw_ref.h"
#include "components/sync/engine/cycle/nudge_tracker.h"
#include "components/sync/engine/cycle/status_controller.h"
#include "components/sync/engine/data_type_registry.h"
#include "components/sync/engine/events/protocol_event.h"
namespace sync_pb {
class GetUpdatesMessage;
class ClientToServerMessage;
enum SyncEnums_GetUpdatesOrigin : int;
} // namespace sync_pb
namespace syncer {
// Interface for GetUpdates functionality that depends on the requested
// GetUpdate type (normal, configuration, poll). The GetUpdatesProcessor is
// given an appropriate GetUpdatesDelegate to handle type specific functionality
// on construction.
class GetUpdatesDelegate {
public:
GetUpdatesDelegate() = default;
GetUpdatesDelegate(const GetUpdatesDelegate&) = delete;
GetUpdatesDelegate& operator=(const GetUpdatesDelegate&) = delete;
virtual ~GetUpdatesDelegate() = default;
// Populates GetUpdate message fields that depend on GetUpdates request type.
virtual void HelpPopulateGuMessage(
sync_pb::GetUpdatesMessage* get_updates) const = 0;
virtual std::unique_ptr<ProtocolEvent> GetNetworkRequestEvent(
base::Time timestamp,
const sync_pb::ClientToServerMessage& request) const = 0;
virtual bool IsNotificationInfoRequired() const = 0;
};
// Functionality specific to the normal GetUpdate request.
class NormalGetUpdatesDelegate : public GetUpdatesDelegate {
public:
explicit NormalGetUpdatesDelegate(const NudgeTracker& nudge_tracker);
NormalGetUpdatesDelegate(const NormalGetUpdatesDelegate&) = delete;
NormalGetUpdatesDelegate& operator=(const NormalGetUpdatesDelegate&) = delete;
~NormalGetUpdatesDelegate() override;
// Uses the member NudgeTracker to populate some fields of this GU message.
void HelpPopulateGuMessage(
sync_pb::GetUpdatesMessage* get_updates) const override;
std::unique_ptr<ProtocolEvent> GetNetworkRequestEvent(
base::Time timestamp,
const sync_pb::ClientToServerMessage& request) const override;
bool IsNotificationInfoRequired() const override;
private:
const raw_ref<const NudgeTracker> nudge_tracker_;
};
// Functionality specific to the configure GetUpdate request.
class ConfigureGetUpdatesDelegate : public GetUpdatesDelegate {
public:
explicit ConfigureGetUpdatesDelegate(
sync_pb::SyncEnums_GetUpdatesOrigin origin);
ConfigureGetUpdatesDelegate(const ConfigureGetUpdatesDelegate&) = delete;
ConfigureGetUpdatesDelegate& operator=(const ConfigureGetUpdatesDelegate&) =
delete;
~ConfigureGetUpdatesDelegate() override;
// Sets the 'source' and 'origin' fields for this request.
void HelpPopulateGuMessage(
sync_pb::GetUpdatesMessage* get_updates) const override;
std::unique_ptr<ProtocolEvent> GetNetworkRequestEvent(
base::Time timestamp,
const sync_pb::ClientToServerMessage& request) const override;
bool IsNotificationInfoRequired() const override;
private:
const sync_pb::SyncEnums_GetUpdatesOrigin origin_;
};
// Functionality specific to the poll GetUpdate request.
class PollGetUpdatesDelegate : public GetUpdatesDelegate {
public:
PollGetUpdatesDelegate();
PollGetUpdatesDelegate(const PollGetUpdatesDelegate&) = delete;
PollGetUpdatesDelegate& operator=(const PollGetUpdatesDelegate&) = delete;
~PollGetUpdatesDelegate() override;
// Sets the 'source' and 'origin' to indicate this is a poll request.
void HelpPopulateGuMessage(
sync_pb::GetUpdatesMessage* get_updates) const override;
std::unique_ptr<ProtocolEvent> GetNetworkRequestEvent(
base::Time timestamp,
const sync_pb::ClientToServerMessage& request) const override;
bool IsNotificationInfoRequired() const override;
};
} // namespace syncer
#endif // COMPONENTS_SYNC_ENGINE_GET_UPDATES_DELEGATE_H_
|