| 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_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ | 5 #ifndef COMPONENTS_SYNC_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ |
| 6 #define COMPONENTS_SYNC_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ | 6 #define COMPONENTS_SYNC_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <unordered_set> | 11 #include <unordered_set> |
| 12 | 12 |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/threading/non_thread_safe.h" | 14 #include "base/threading/non_thread_safe.h" |
| 15 #include "components/sync/api/data_batch.h" | 15 #include "components/sync/api/data_batch.h" |
| 16 #include "components/sync/api/data_type_error_handler.h" | 16 #include "components/sync/api/data_type_error_handler.h" |
| 17 #include "components/sync/api/metadata_batch.h" | 17 #include "components/sync/api/metadata_batch.h" |
| 18 #include "components/sync/api/metadata_change_list.h" | 18 #include "components/sync/api/metadata_change_list.h" |
| 19 #include "components/sync/api/model_type_change_processor.h" | 19 #include "components/sync/api/model_type_change_processor.h" |
| 20 #include "components/sync/api/model_type_service.h" | 20 #include "components/sync/api/model_type_service.h" |
| 21 #include "components/sync/api/sync_error.h" | 21 #include "components/sync/api/sync_error.h" |
| 22 #include "components/sync/base/model_type.h" | 22 #include "components/sync/base/model_type.h" |
| 23 #include "components/sync/core/model_type_processor.h" | 23 #include "components/sync/core/model_type_processor.h" |
| 24 #include "components/sync/core/non_blocking_sync_common.h" | 24 #include "components/sync/core/non_blocking_sync_common.h" |
| 25 #include "components/sync/protocol/data_type_state.pb.h" | 25 #include "components/sync/protocol/data_type_state.pb.h" |
| 26 #include "components/sync/protocol/sync.pb.h" | 26 #include "components/sync/protocol/sync.pb.h" |
| 27 | 27 |
| 28 namespace syncer_v2 { | 28 namespace syncer { |
| 29 struct ActivationContext; | 29 struct ActivationContext; |
| 30 class CommitQueue; | 30 class CommitQueue; |
| 31 class ProcessorEntityTracker; | 31 class ProcessorEntityTracker; |
| 32 | 32 |
| 33 // A sync component embedded on the synced type's thread that helps to handle | 33 // A sync component embedded on the synced type's thread that helps to handle |
| 34 // communication between sync and model type threads. | 34 // communication between sync and model type threads. |
| 35 class SharedModelTypeProcessor : public ModelTypeProcessor, | 35 class SharedModelTypeProcessor : public ModelTypeProcessor, |
| 36 public ModelTypeChangeProcessor, | 36 public ModelTypeChangeProcessor, |
| 37 base::NonThreadSafe { | 37 base::NonThreadSafe { |
| 38 public: | 38 public: |
| 39 SharedModelTypeProcessor(syncer::ModelType type, ModelTypeService* service); | 39 SharedModelTypeProcessor(ModelType type, ModelTypeService* service); |
| 40 ~SharedModelTypeProcessor() override; | 40 ~SharedModelTypeProcessor() override; |
| 41 | 41 |
| 42 // An easily bound function that constructs a SharedModelTypeProcessor. | 42 // An easily bound function that constructs a SharedModelTypeProcessor. |
| 43 static std::unique_ptr<ModelTypeChangeProcessor> CreateAsChangeProcessor( | 43 static std::unique_ptr<ModelTypeChangeProcessor> CreateAsChangeProcessor( |
| 44 syncer::ModelType type, | 44 ModelType type, |
| 45 ModelTypeService* service); | 45 ModelTypeService* service); |
| 46 | 46 |
| 47 // Whether the processor is allowing changes to its model type. If this is | 47 // Whether the processor is allowing changes to its model type. If this is |
| 48 // false, the service should not allow any changes to its data. | 48 // false, the service should not allow any changes to its data. |
| 49 bool IsAllowingChanges() const; | 49 bool IsAllowingChanges() const; |
| 50 | 50 |
| 51 // Returns true if the handshake with sync thread is complete. | 51 // Returns true if the handshake with sync thread is complete. |
| 52 bool IsConnected() const; | 52 bool IsConnected() const; |
| 53 | 53 |
| 54 // Returns a ListValue representing all nodes for data type |type| through | 54 // Returns a ListValue representing all nodes for data type |type| through |
| 55 // |callback| on this thread. | 55 // |callback| on this thread. |
| 56 // Used for populating nodes in Sync Node Browser of chrome://sync-internals. | 56 // Used for populating nodes in Sync Node Browser of chrome://sync-internals. |
| 57 // TODO(gangwu): GetAllNodes could be in a helper class. | 57 // TODO(gangwu): GetAllNodes could be in a helper class. |
| 58 void GetAllNodes( | 58 void GetAllNodes( |
| 59 const scoped_refptr<base::TaskRunner>& task_runner, | 59 const scoped_refptr<base::TaskRunner>& task_runner, |
| 60 const base::Callback<void(const syncer::ModelType type, | 60 const base::Callback<void(const ModelType type, |
| 61 std::unique_ptr<base::ListValue>)>& callback); | 61 std::unique_ptr<base::ListValue>)>& callback); |
| 62 | 62 |
| 63 // ModelTypeChangeProcessor implementation. | 63 // ModelTypeChangeProcessor implementation. |
| 64 void Put(const std::string& storage_key, | 64 void Put(const std::string& storage_key, |
| 65 std::unique_ptr<EntityData> entity_data, | 65 std::unique_ptr<EntityData> entity_data, |
| 66 MetadataChangeList* metadata_change_list) override; | 66 MetadataChangeList* metadata_change_list) override; |
| 67 void Delete(const std::string& storage_key, | 67 void Delete(const std::string& storage_key, |
| 68 MetadataChangeList* metadata_change_list) override; | 68 MetadataChangeList* metadata_change_list) override; |
| 69 void OnMetadataLoaded(syncer::SyncError error, | 69 void OnMetadataLoaded(SyncError error, |
| 70 std::unique_ptr<MetadataBatch> batch) override; | 70 std::unique_ptr<MetadataBatch> batch) override; |
| 71 void OnSyncStarting( | 71 void OnSyncStarting(std::unique_ptr<DataTypeErrorHandler> error_handler, |
| 72 std::unique_ptr<syncer::DataTypeErrorHandler> error_handler, | 72 const StartCallback& callback) override; |
| 73 const StartCallback& callback) override; | |
| 74 void DisableSync() override; | 73 void DisableSync() override; |
| 75 syncer::SyncError CreateAndUploadError( | 74 SyncError CreateAndUploadError(const tracked_objects::Location& location, |
| 76 const tracked_objects::Location& location, | 75 const std::string& message) override; |
| 77 const std::string& message) override; | |
| 78 | 76 |
| 79 // ModelTypeProcessor implementation. | 77 // ModelTypeProcessor implementation. |
| 80 void ConnectSync(std::unique_ptr<CommitQueue> worker) override; | 78 void ConnectSync(std::unique_ptr<CommitQueue> worker) override; |
| 81 void DisconnectSync() override; | 79 void DisconnectSync() override; |
| 82 void OnCommitCompleted(const sync_pb::DataTypeState& type_state, | 80 void OnCommitCompleted(const sync_pb::DataTypeState& type_state, |
| 83 const CommitResponseDataList& response_list) override; | 81 const CommitResponseDataList& response_list) override; |
| 84 void OnUpdateReceived(const sync_pb::DataTypeState& type_state, | 82 void OnUpdateReceived(const sync_pb::DataTypeState& type_state, |
| 85 const UpdateResponseDataList& updates) override; | 83 const UpdateResponseDataList& updates) override; |
| 86 | 84 |
| 87 private: | 85 private: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 107 | 105 |
| 108 // Recommit all entities for encryption except those in |already_updated|. | 106 // Recommit all entities for encryption except those in |already_updated|. |
| 109 void RecommitAllForEncryption(std::unordered_set<std::string> already_updated, | 107 void RecommitAllForEncryption(std::unordered_set<std::string> already_updated, |
| 110 MetadataChangeList* metadata_changes); | 108 MetadataChangeList* metadata_changes); |
| 111 | 109 |
| 112 // Handle the first update received from the server after being enabled. | 110 // Handle the first update received from the server after being enabled. |
| 113 void OnInitialUpdateReceived(const sync_pb::DataTypeState& type_state, | 111 void OnInitialUpdateReceived(const sync_pb::DataTypeState& type_state, |
| 114 const UpdateResponseDataList& updates); | 112 const UpdateResponseDataList& updates); |
| 115 | 113 |
| 116 // ModelTypeService::GetData() callback for initial pending commit data. | 114 // ModelTypeService::GetData() callback for initial pending commit data. |
| 117 void OnInitialPendingDataLoaded(syncer::SyncError error, | 115 void OnInitialPendingDataLoaded(SyncError error, |
| 118 std::unique_ptr<DataBatch> data_batch); | 116 std::unique_ptr<DataBatch> data_batch); |
| 119 | 117 |
| 120 // ModelTypeService::GetData() callback for re-encryption commit data. | 118 // ModelTypeService::GetData() callback for re-encryption commit data. |
| 121 void OnDataLoadedForReEncryption(syncer::SyncError error, | 119 void OnDataLoadedForReEncryption(SyncError error, |
| 122 std::unique_ptr<DataBatch> data_batch); | 120 std::unique_ptr<DataBatch> data_batch); |
| 123 | 121 |
| 124 // Caches EntityData from the |data_batch| in the entity trackers. | 122 // Caches EntityData from the |data_batch| in the entity trackers. |
| 125 void ConsumeDataBatch(std::unique_ptr<DataBatch> data_batch); | 123 void ConsumeDataBatch(std::unique_ptr<DataBatch> data_batch); |
| 126 | 124 |
| 127 // Sends all commit requests that are due to be sent to the sync thread. | 125 // Sends all commit requests that are due to be sent to the sync thread. |
| 128 void FlushPendingCommitRequests(); | 126 void FlushPendingCommitRequests(); |
| 129 | 127 |
| 130 // Computes the client tag hash for the given client |tag|. | 128 // Computes the client tag hash for the given client |tag|. |
| 131 std::string GetHashForTag(const std::string& tag); | 129 std::string GetHashForTag(const std::string& tag); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 149 ProcessorEntityTracker* CreateEntity(const std::string& storage_key, | 147 ProcessorEntityTracker* CreateEntity(const std::string& storage_key, |
| 150 const EntityData& data); | 148 const EntityData& data); |
| 151 | 149 |
| 152 // Version of the above that generates a tag for |data|. | 150 // Version of the above that generates a tag for |data|. |
| 153 ProcessorEntityTracker* CreateEntity(const EntityData& data); | 151 ProcessorEntityTracker* CreateEntity(const EntityData& data); |
| 154 | 152 |
| 155 // This is callback function for ModelTypeService::GetAllData. This function | 153 // This is callback function for ModelTypeService::GetAllData. This function |
| 156 // will merge real data |batch| with metadata, then pass to |callback|. | 154 // will merge real data |batch| with metadata, then pass to |callback|. |
| 157 void MergeDataWithMetadata( | 155 void MergeDataWithMetadata( |
| 158 const scoped_refptr<base::TaskRunner>& task_runner, | 156 const scoped_refptr<base::TaskRunner>& task_runner, |
| 159 const base::Callback<void(const syncer::ModelType, | 157 const base::Callback<void(const ModelType, |
| 160 std::unique_ptr<base::ListValue>)>& callback, | 158 std::unique_ptr<base::ListValue>)>& callback, |
| 161 syncer::SyncError error, | 159 SyncError error, |
| 162 std::unique_ptr<DataBatch> batch); | 160 std::unique_ptr<DataBatch> batch); |
| 163 | 161 |
| 164 const syncer::ModelType type_; | 162 const ModelType type_; |
| 165 sync_pb::DataTypeState data_type_state_; | 163 sync_pb::DataTypeState data_type_state_; |
| 166 | 164 |
| 167 // Stores the start callback in between OnSyncStarting() and ReadyToConnect(). | 165 // Stores the start callback in between OnSyncStarting() and ReadyToConnect(). |
| 168 StartCallback start_callback_; | 166 StartCallback start_callback_; |
| 169 | 167 |
| 170 // A cache for any error that may occur during startup and should be passed | 168 // A cache for any error that may occur during startup and should be passed |
| 171 // into the |start_callback_|. | 169 // into the |start_callback_|. |
| 172 syncer::SyncError start_error_; | 170 SyncError start_error_; |
| 173 | 171 |
| 174 // Indicates whether the metadata has finished loading. | 172 // Indicates whether the metadata has finished loading. |
| 175 bool is_metadata_loaded_; | 173 bool is_metadata_loaded_; |
| 176 | 174 |
| 177 // Indicates whether data for any initial pending commits has been loaded. | 175 // Indicates whether data for any initial pending commits has been loaded. |
| 178 bool is_initial_pending_data_loaded_; | 176 bool is_initial_pending_data_loaded_; |
| 179 | 177 |
| 180 // Reference to the CommitQueue. | 178 // Reference to the CommitQueue. |
| 181 // | 179 // |
| 182 // The interface hides the posting of tasks across threads as well as the | 180 // The interface hides the posting of tasks across threads as well as the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 195 // client tag hash. The other direction can use |entities_|. | 193 // client tag hash. The other direction can use |entities_|. |
| 196 std::map<std::string, std::string> storage_key_to_tag_hash_; | 194 std::map<std::string, std::string> storage_key_to_tag_hash_; |
| 197 | 195 |
| 198 // ModelTypeService linked to this processor. | 196 // ModelTypeService linked to this processor. |
| 199 // The service owns this processor instance so the pointer should never | 197 // The service owns this processor instance so the pointer should never |
| 200 // become invalid. | 198 // become invalid. |
| 201 ModelTypeService* const service_; | 199 ModelTypeService* const service_; |
| 202 | 200 |
| 203 // The object used for informing sync of errors; will be non-null after | 201 // The object used for informing sync of errors; will be non-null after |
| 204 // OnSyncStarting has been called. This pointer is not owned. | 202 // OnSyncStarting has been called. This pointer is not owned. |
| 205 std::unique_ptr<syncer::DataTypeErrorHandler> error_handler_; | 203 std::unique_ptr<DataTypeErrorHandler> error_handler_; |
| 206 | 204 |
| 207 // WeakPtrFactory for this processor which will be sent to sync thread. | 205 // WeakPtrFactory for this processor which will be sent to sync thread. |
| 208 base::WeakPtrFactory<SharedModelTypeProcessor> weak_ptr_factory_; | 206 base::WeakPtrFactory<SharedModelTypeProcessor> weak_ptr_factory_; |
| 209 }; | 207 }; |
| 210 | 208 |
| 211 } // namespace syncer_v2 | 209 } // namespace syncer |
| 212 | 210 |
| 213 #endif // COMPONENTS_SYNC_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ | 211 #endif // COMPONENTS_SYNC_CORE_SHARED_MODEL_TYPE_PROCESSOR_H_ |
| OLD | NEW |