| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ | 5 #ifndef COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ |
| 6 #define COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ | 6 #define COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "components/sync/engine_impl/commit_contributor.h" | 21 #include "components/sync/engine_impl/commit_contributor.h" |
| 22 #include "components/sync/engine_impl/nudge_handler.h" | 22 #include "components/sync/engine_impl/nudge_handler.h" |
| 23 #include "components/sync/engine_impl/update_handler.h" | 23 #include "components/sync/engine_impl/update_handler.h" |
| 24 #include "components/sync/protocol/data_type_state.pb.h" | 24 #include "components/sync/protocol/data_type_state.pb.h" |
| 25 #include "components/sync/protocol/sync.pb.h" | 25 #include "components/sync/protocol/sync.pb.h" |
| 26 | 26 |
| 27 namespace base { | 27 namespace base { |
| 28 class SingleThreadTaskRunner; | 28 class SingleThreadTaskRunner; |
| 29 } | 29 } |
| 30 | 30 |
| 31 namespace syncer_v2 { | 31 namespace syncer { |
| 32 | 32 |
| 33 class ModelTypeProcessor; | 33 class ModelTypeProcessor; |
| 34 class WorkerEntityTracker; | 34 class WorkerEntityTracker; |
| 35 | 35 |
| 36 // A smart cache for sync types that use message passing (rather than | 36 // A smart cache for sync types that use message passing (rather than |
| 37 // transactions and the syncable::Directory) to communicate with the sync | 37 // transactions and the syncable::Directory) to communicate with the sync |
| 38 // thread. | 38 // thread. |
| 39 // | 39 // |
| 40 // When the non-blocking sync type wants to talk with the sync server, it will | 40 // When the non-blocking sync type wants to talk with the sync server, it will |
| 41 // send a message from its thread to this object on the sync thread. This | 41 // send a message from its thread to this object on the sync thread. This |
| 42 // object ensures the appropriate sync server communication gets scheduled and | 42 // object ensures the appropriate sync server communication gets scheduled and |
| 43 // executed. The response, if any, will be returned to the non-blocking sync | 43 // executed. The response, if any, will be returned to the non-blocking sync |
| 44 // type's thread eventually. | 44 // type's thread eventually. |
| 45 // | 45 // |
| 46 // This object also has a role to play in communications in the opposite | 46 // This object also has a role to play in communications in the opposite |
| 47 // direction. Sometimes the sync thread will receive changes from the sync | 47 // direction. Sometimes the sync thread will receive changes from the sync |
| 48 // server and deliver them here. This object will post this information back to | 48 // server and deliver them here. This object will post this information back to |
| 49 // the appropriate component on the model type's thread. | 49 // the appropriate component on the model type's thread. |
| 50 // | 50 // |
| 51 // This object does more than just pass along messages. It understands the sync | 51 // This object does more than just pass along messages. It understands the sync |
| 52 // protocol, and it can make decisions when it sees conflicting messages. For | 52 // protocol, and it can make decisions when it sees conflicting messages. For |
| 53 // example, if the sync server sends down an update for a sync entity that is | 53 // example, if the sync server sends down an update for a sync entity that is |
| 54 // currently pending for commit, this object will detect this condition and | 54 // currently pending for commit, this object will detect this condition and |
| 55 // cancel the pending commit. | 55 // cancel the pending commit. |
| 56 class ModelTypeWorker : public syncer::UpdateHandler, | 56 class ModelTypeWorker : public UpdateHandler, |
| 57 public syncer::CommitContributor, | 57 public CommitContributor, |
| 58 public CommitQueue { | 58 public CommitQueue { |
| 59 public: | 59 public: |
| 60 ModelTypeWorker(syncer::ModelType type, | 60 ModelTypeWorker(ModelType type, |
| 61 const sync_pb::DataTypeState& initial_state, | 61 const sync_pb::DataTypeState& initial_state, |
| 62 std::unique_ptr<syncer::Cryptographer> cryptographer, | 62 std::unique_ptr<Cryptographer> cryptographer, |
| 63 syncer::NudgeHandler* nudge_handler, | 63 NudgeHandler* nudge_handler, |
| 64 std::unique_ptr<ModelTypeProcessor> model_type_processor); | 64 std::unique_ptr<ModelTypeProcessor> model_type_processor); |
| 65 ~ModelTypeWorker() override; | 65 ~ModelTypeWorker() override; |
| 66 | 66 |
| 67 syncer::ModelType GetModelType() const; | 67 ModelType GetModelType() const; |
| 68 | 68 |
| 69 void UpdateCryptographer( | 69 void UpdateCryptographer(std::unique_ptr<Cryptographer> cryptographer); |
| 70 std::unique_ptr<syncer::Cryptographer> cryptographer); | |
| 71 | 70 |
| 72 // UpdateHandler implementation. | 71 // UpdateHandler implementation. |
| 73 bool IsInitialSyncEnded() const override; | 72 bool IsInitialSyncEnded() const override; |
| 74 void GetDownloadProgress( | 73 void GetDownloadProgress( |
| 75 sync_pb::DataTypeProgressMarker* progress_marker) const override; | 74 sync_pb::DataTypeProgressMarker* progress_marker) const override; |
| 76 void GetDataTypeContext(sync_pb::DataTypeContext* context) const override; | 75 void GetDataTypeContext(sync_pb::DataTypeContext* context) const override; |
| 77 syncer::SyncerError ProcessGetUpdatesResponse( | 76 SyncerError ProcessGetUpdatesResponse( |
| 78 const sync_pb::DataTypeProgressMarker& progress_marker, | 77 const sync_pb::DataTypeProgressMarker& progress_marker, |
| 79 const sync_pb::DataTypeContext& mutated_context, | 78 const sync_pb::DataTypeContext& mutated_context, |
| 80 const SyncEntityList& applicable_updates, | 79 const SyncEntityList& applicable_updates, |
| 81 syncer::StatusController* status) override; | 80 StatusController* status) override; |
| 82 void ApplyUpdates(syncer::StatusController* status) override; | 81 void ApplyUpdates(StatusController* status) override; |
| 83 void PassiveApplyUpdates(syncer::StatusController* status) override; | 82 void PassiveApplyUpdates(StatusController* status) override; |
| 84 | 83 |
| 85 // CommitQueue implementation. | 84 // CommitQueue implementation. |
| 86 void EnqueueForCommit(const CommitRequestDataList& request_list) override; | 85 void EnqueueForCommit(const CommitRequestDataList& request_list) override; |
| 87 | 86 |
| 88 // CommitContributor implementation. | 87 // CommitContributor implementation. |
| 89 std::unique_ptr<syncer::CommitContribution> GetContribution( | 88 std::unique_ptr<CommitContribution> GetContribution( |
| 90 size_t max_entries) override; | 89 size_t max_entries) override; |
| 91 | 90 |
| 92 // Callback for when our contribution gets a response. | 91 // Callback for when our contribution gets a response. |
| 93 void OnCommitResponse(CommitResponseDataList* response_list); | 92 void OnCommitResponse(CommitResponseDataList* response_list); |
| 94 | 93 |
| 95 base::WeakPtr<ModelTypeWorker> AsWeakPtr(); | 94 base::WeakPtr<ModelTypeWorker> AsWeakPtr(); |
| 96 | 95 |
| 97 private: | 96 private: |
| 98 using EntityMap = std::map<std::string, std::unique_ptr<WorkerEntityTracker>>; | 97 using EntityMap = std::map<std::string, std::unique_ptr<WorkerEntityTracker>>; |
| 99 | 98 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 // Returns the entity tracker for the given |tag_hash|, or nullptr. | 135 // Returns the entity tracker for the given |tag_hash|, or nullptr. |
| 137 WorkerEntityTracker* GetEntityTracker(const std::string& tag_hash); | 136 WorkerEntityTracker* GetEntityTracker(const std::string& tag_hash); |
| 138 | 137 |
| 139 // Creates an entity tracker in the map using the given |data| and returns a | 138 // Creates an entity tracker in the map using the given |data| and returns a |
| 140 // pointer to it. Requires that one doesn't exist for data.client_tag_hash. | 139 // pointer to it. Requires that one doesn't exist for data.client_tag_hash. |
| 141 WorkerEntityTracker* CreateEntityTracker(const EntityData& data); | 140 WorkerEntityTracker* CreateEntityTracker(const EntityData& data); |
| 142 | 141 |
| 143 // Gets the entity tracker for |data| or creates one if it doesn't exist. | 142 // Gets the entity tracker for |data| or creates one if it doesn't exist. |
| 144 WorkerEntityTracker* GetOrCreateEntityTracker(const EntityData& data); | 143 WorkerEntityTracker* GetOrCreateEntityTracker(const EntityData& data); |
| 145 | 144 |
| 146 syncer::ModelType type_; | 145 ModelType type_; |
| 147 | 146 |
| 148 // State that applies to the entire model type. | 147 // State that applies to the entire model type. |
| 149 sync_pb::DataTypeState data_type_state_; | 148 sync_pb::DataTypeState data_type_state_; |
| 150 | 149 |
| 151 // Pointer to the ModelTypeProcessor associated with this worker. Never null. | 150 // Pointer to the ModelTypeProcessor associated with this worker. Never null. |
| 152 std::unique_ptr<ModelTypeProcessor> model_type_processor_; | 151 std::unique_ptr<ModelTypeProcessor> model_type_processor_; |
| 153 | 152 |
| 154 // A private copy of the most recent cryptographer known to sync. | 153 // A private copy of the most recent cryptographer known to sync. |
| 155 // Initialized at construction time and updated with UpdateCryptographer(). | 154 // Initialized at construction time and updated with UpdateCryptographer(). |
| 156 // NULL if encryption is not enabled for this type. | 155 // NULL if encryption is not enabled for this type. |
| 157 std::unique_ptr<syncer::Cryptographer> cryptographer_; | 156 std::unique_ptr<Cryptographer> cryptographer_; |
| 158 | 157 |
| 159 // Interface used to access and send nudges to the sync scheduler. Not owned. | 158 // Interface used to access and send nudges to the sync scheduler. Not owned. |
| 160 syncer::NudgeHandler* nudge_handler_; | 159 NudgeHandler* nudge_handler_; |
| 161 | 160 |
| 162 // A map of per-entity information, keyed by client_tag_hash. | 161 // A map of per-entity information, keyed by client_tag_hash. |
| 163 // | 162 // |
| 164 // When commits are pending, their information is stored here. This | 163 // When commits are pending, their information is stored here. This |
| 165 // information is dropped from memory when the commit succeeds or gets | 164 // information is dropped from memory when the commit succeeds or gets |
| 166 // cancelled. | 165 // cancelled. |
| 167 // | 166 // |
| 168 // This also stores some information related to received server state in | 167 // This also stores some information related to received server state in |
| 169 // order to implement reflection blocking and conflict detection. This | 168 // order to implement reflection blocking and conflict detection. This |
| 170 // information is kept in memory indefinitely. | 169 // information is kept in memory indefinitely. |
| 171 EntityMap entities_; | 170 EntityMap entities_; |
| 172 | 171 |
| 173 // Accumulates all the updates from a single GetUpdates cycle in memory so | 172 // Accumulates all the updates from a single GetUpdates cycle in memory so |
| 174 // they can all be sent to the processor at once. | 173 // they can all be sent to the processor at once. |
| 175 UpdateResponseDataList pending_updates_; | 174 UpdateResponseDataList pending_updates_; |
| 176 | 175 |
| 177 base::ThreadChecker thread_checker_; | 176 base::ThreadChecker thread_checker_; |
| 178 base::WeakPtrFactory<ModelTypeWorker> weak_ptr_factory_; | 177 base::WeakPtrFactory<ModelTypeWorker> weak_ptr_factory_; |
| 179 }; | 178 }; |
| 180 | 179 |
| 181 } // namespace syncer_v2 | 180 } // namespace syncer |
| 182 | 181 |
| 183 #endif // COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ | 182 #endif // COMPONENTS_SYNC_ENGINE_IMPL_MODEL_TYPE_WORKER_H_ |
| OLD | NEW |