Home | History | Annotate | Download | only in engine
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef SYNC_ENGINE_GET_UPDATES_DELEGATE_H_
      6 #define SYNC_ENGINE_GET_UPDATES_DELEGATE_H_
      7 
      8 #include "sync/internal_api/public/events/protocol_event.h"
      9 #include "sync/protocol/sync.pb.h"
     10 #include "sync/sessions/model_type_registry.h"
     11 #include "sync/sessions/nudge_tracker.h"
     12 #include "sync/sessions/status_controller.h"
     13 
     14 namespace syncer {
     15 
     16 class GetUpdatesProcessor;
     17 
     18 // Interface for GetUpdates functionality that dependends on the requested
     19 // GetUpdate type (normal, configuration, poll).  The GetUpdatesProcessor is
     20 // given an appropriate GetUpdatesDelegate to handle type specific functionality
     21 // on construction.
     22 class SYNC_EXPORT_PRIVATE GetUpdatesDelegate {
     23  public:
     24   GetUpdatesDelegate();
     25   virtual ~GetUpdatesDelegate() = 0;
     26 
     27   // Populates GetUpdate message fields that depende on GetUpdates request type.
     28   virtual void HelpPopulateGuMessage(
     29       sync_pb::GetUpdatesMessage* get_updates) const = 0;
     30 
     31   // Applies pending updates to non-control types.
     32   virtual void ApplyUpdates(
     33       ModelTypeSet gu_types,
     34       sessions::StatusController* status,
     35       UpdateHandlerMap* update_handler_map) const = 0;
     36 
     37   virtual scoped_ptr<ProtocolEvent> GetNetworkRequestEvent(
     38       base::Time timestamp,
     39       const sync_pb::ClientToServerMessage& request) const = 0;
     40 };
     41 
     42 // Functionality specific to the normal GetUpdate request.
     43 class SYNC_EXPORT_PRIVATE NormalGetUpdatesDelegate : public GetUpdatesDelegate {
     44  public:
     45   NormalGetUpdatesDelegate(const sessions::NudgeTracker& nudge_tracker);
     46   virtual ~NormalGetUpdatesDelegate();
     47 
     48   // Uses the member NudgeTracker to populate some fields of this GU message.
     49   virtual void HelpPopulateGuMessage(
     50       sync_pb::GetUpdatesMessage* get_updates) const OVERRIDE;
     51 
     52   // Applies pending updates on the appropriate data type threads.
     53   virtual void ApplyUpdates(
     54       ModelTypeSet gu_types,
     55       sessions::StatusController* status,
     56       UpdateHandlerMap* update_handler_map) const OVERRIDE;
     57 
     58   virtual scoped_ptr<ProtocolEvent> GetNetworkRequestEvent(
     59       base::Time timestamp,
     60       const sync_pb::ClientToServerMessage& request) const OVERRIDE;
     61  private:
     62   DISALLOW_COPY_AND_ASSIGN(NormalGetUpdatesDelegate);
     63 
     64   const sessions::NudgeTracker& nudge_tracker_;
     65 };
     66 
     67 // Functionality specific to the configure GetUpdate request.
     68 class SYNC_EXPORT_PRIVATE ConfigureGetUpdatesDelegate
     69     : public GetUpdatesDelegate {
     70  public:
     71   ConfigureGetUpdatesDelegate(
     72       sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source);
     73   virtual ~ConfigureGetUpdatesDelegate();
     74 
     75   // Sets the 'source' and 'origin' fields for this request.
     76   virtual void HelpPopulateGuMessage(
     77       sync_pb::GetUpdatesMessage* get_updates) const OVERRIDE;
     78 
     79   // Applies updates passively (ie. on the sync thread).
     80   //
     81   // This is safe only if the ChangeProcessor is not listening to changes at
     82   // this time.
     83   virtual void ApplyUpdates(
     84       ModelTypeSet gu_types,
     85       sessions::StatusController* status,
     86       UpdateHandlerMap* update_handler_map) const OVERRIDE;
     87 
     88   virtual scoped_ptr<ProtocolEvent> GetNetworkRequestEvent(
     89       base::Time timestamp,
     90       const sync_pb::ClientToServerMessage& request) const OVERRIDE;
     91  private:
     92   DISALLOW_COPY_AND_ASSIGN(ConfigureGetUpdatesDelegate);
     93 
     94   static sync_pb::SyncEnums::GetUpdatesOrigin ConvertConfigureSourceToOrigin(
     95       sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source);
     96 
     97   const sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source_;
     98 };
     99 
    100 // Functionality specific to the poll GetUpdate request.
    101 class SYNC_EXPORT_PRIVATE PollGetUpdatesDelegate : public GetUpdatesDelegate {
    102  public:
    103   PollGetUpdatesDelegate();
    104   virtual ~PollGetUpdatesDelegate();
    105 
    106   // Sets the 'source' and 'origin' to indicate this is a poll request.
    107   virtual void HelpPopulateGuMessage(
    108       sync_pb::GetUpdatesMessage* get_updates) const OVERRIDE;
    109 
    110   // Applies updates on the appropriate data type thread.
    111   virtual void ApplyUpdates(
    112       ModelTypeSet gu_types,
    113       sessions::StatusController* status,
    114       UpdateHandlerMap* update_handler_map) const OVERRIDE;
    115 
    116   virtual scoped_ptr<ProtocolEvent> GetNetworkRequestEvent(
    117       base::Time timestamp,
    118       const sync_pb::ClientToServerMessage& request) const OVERRIDE;
    119  private:
    120   DISALLOW_COPY_AND_ASSIGN(PollGetUpdatesDelegate);
    121 };
    122 
    123 }  // namespace syncer
    124 
    125 #endif   // SYNC_ENGINE_GET_UPDATES_DELEGATE_H_
    126