// Copyright 2014 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_GET_UPDATES_DELEGATE_H_ #define SYNC_ENGINE_GET_UPDATES_DELEGATE_H_ #include "base/macros.h" #include "sync/internal_api/public/events/protocol_event.h" #include "sync/protocol/sync.pb.h" #include "sync/sessions/model_type_registry.h" #include "sync/sessions/nudge_tracker.h" #include "sync/sessions/status_controller.h" namespace syncer { class GetUpdatesProcessor; // Interface for GetUpdates functionality that dependends on the requested // GetUpdate type (normal, configuration, poll). The GetUpdatesProcessor is // given an appropriate GetUpdatesDelegate to handle type specific functionality // on construction. class SYNC_EXPORT GetUpdatesDelegate { public: GetUpdatesDelegate(); virtual ~GetUpdatesDelegate() = 0; // Populates GetUpdate message fields that depende on GetUpdates request type. virtual void HelpPopulateGuMessage( sync_pb::GetUpdatesMessage* get_updates) const = 0; // Applies pending updates to non-control types. virtual void ApplyUpdates( ModelTypeSet gu_types, sessions::StatusController* status, UpdateHandlerMap* update_handler_map) const = 0; virtual scoped_ptr GetNetworkRequestEvent( base::Time timestamp, const sync_pb::ClientToServerMessage& request) const = 0; }; // Functionality specific to the normal GetUpdate request. class SYNC_EXPORT NormalGetUpdatesDelegate : public GetUpdatesDelegate { public: explicit NormalGetUpdatesDelegate( const sessions::NudgeTracker& nudge_tracker); ~NormalGetUpdatesDelegate() override; // Uses the member NudgeTracker to populate some fields of this GU message. void HelpPopulateGuMessage( sync_pb::GetUpdatesMessage* get_updates) const override; // Applies pending updates on the appropriate data type threads. void ApplyUpdates(ModelTypeSet gu_types, sessions::StatusController* status, UpdateHandlerMap* update_handler_map) const override; scoped_ptr GetNetworkRequestEvent( base::Time timestamp, const sync_pb::ClientToServerMessage& request) const override; private: const sessions::NudgeTracker& nudge_tracker_; DISALLOW_COPY_AND_ASSIGN(NormalGetUpdatesDelegate); }; // Functionality specific to the configure GetUpdate request. class SYNC_EXPORT ConfigureGetUpdatesDelegate : public GetUpdatesDelegate { public: ConfigureGetUpdatesDelegate( sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source); ~ConfigureGetUpdatesDelegate() override; // Sets the 'source' and 'origin' fields for this request. void HelpPopulateGuMessage( sync_pb::GetUpdatesMessage* get_updates) const override; // Applies updates passively (ie. on the sync thread). // // This is safe only if the ChangeProcessor is not listening to changes at // this time. void ApplyUpdates(ModelTypeSet gu_types, sessions::StatusController* status, UpdateHandlerMap* update_handler_map) const override; scoped_ptr GetNetworkRequestEvent( base::Time timestamp, const sync_pb::ClientToServerMessage& request) const override; private: static sync_pb::SyncEnums::GetUpdatesOrigin ConvertConfigureSourceToOrigin( sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source); const sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source_; DISALLOW_COPY_AND_ASSIGN(ConfigureGetUpdatesDelegate); }; // Functionality specific to the poll GetUpdate request. class SYNC_EXPORT PollGetUpdatesDelegate : public GetUpdatesDelegate { public: PollGetUpdatesDelegate(); ~PollGetUpdatesDelegate() override; // Sets the 'source' and 'origin' to indicate this is a poll request. void HelpPopulateGuMessage( sync_pb::GetUpdatesMessage* get_updates) const override; // Applies updates on the appropriate data type thread. void ApplyUpdates(ModelTypeSet gu_types, sessions::StatusController* status, UpdateHandlerMap* update_handler_map) const override; scoped_ptr GetNetworkRequestEvent( base::Time timestamp, const sync_pb::ClientToServerMessage& request) const override; private: DISALLOW_COPY_AND_ASSIGN(PollGetUpdatesDelegate); }; } // namespace syncer #endif // SYNC_ENGINE_GET_UPDATES_DELEGATE_H_