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 SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ | 5 #ifndef SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ |
6 #define SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ | 6 #define SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 | 39 |
40 // Construct an instance representing an item newly received from the server. | 40 // Construct an instance representing an item newly received from the server. |
41 static scoped_ptr<ModelTypeEntity> FromServerUpdate( | 41 static scoped_ptr<ModelTypeEntity> FromServerUpdate( |
42 const std::string& id, | 42 const std::string& id, |
43 const std::string& client_tag_hash, | 43 const std::string& client_tag_hash, |
44 const std::string& non_unique_name, | 44 const std::string& non_unique_name, |
45 int64 version, | 45 int64 version, |
46 const sync_pb::EntitySpecifics& specifics, | 46 const sync_pb::EntitySpecifics& specifics, |
47 bool deleted, | 47 bool deleted, |
48 base::Time ctime, | 48 base::Time ctime, |
49 base::Time mtime); | 49 base::Time mtime, |
| 50 const std::string& encryption_key_name); |
50 | 51 |
51 // TODO(rlarocque): Implement FromDisk constructor when we implement storage. | 52 // TODO(rlarocque): Implement FromDisk constructor when we implement storage. |
52 | 53 |
53 ~ModelTypeEntity(); | 54 ~ModelTypeEntity(); |
54 | 55 |
55 // Returns true if this data is out of sync with local storage. | 56 // Returns true if this data is out of sync with local storage. |
56 bool IsWriteRequired() const; | 57 bool IsWriteRequired() const; |
57 | 58 |
58 // Returns true if this data is out of sync with the server. | 59 // Returns true if this data is out of sync with the server. |
59 // A commit may or may not be in progress at this time. | 60 // A commit may or may not be in progress at this time. |
(...skipping 12 matching lines...) Expand all Loading... |
72 // Returns true if the specified update version conflicts with local changes. | 73 // Returns true if the specified update version conflicts with local changes. |
73 bool UpdateIsInConflict(int64 update_version) const; | 74 bool UpdateIsInConflict(int64 update_version) const; |
74 | 75 |
75 // Applies an update from the sync server. | 76 // Applies an update from the sync server. |
76 // | 77 // |
77 // Overrides any local changes. Check UpdateIsInConflict() before calling | 78 // Overrides any local changes. Check UpdateIsInConflict() before calling |
78 // this function if you want to handle conflicts differently. | 79 // this function if you want to handle conflicts differently. |
79 void ApplyUpdateFromServer(int64 update_version, | 80 void ApplyUpdateFromServer(int64 update_version, |
80 bool deleted, | 81 bool deleted, |
81 const sync_pb::EntitySpecifics& specifics, | 82 const sync_pb::EntitySpecifics& specifics, |
82 base::Time mtime); | 83 base::Time mtime, |
| 84 const std::string& encryption_key_name); |
83 | 85 |
84 // Applies a local change to this item. | 86 // Applies a local change to this item. |
85 void MakeLocalChange(const sync_pb::EntitySpecifics& specifics); | 87 void MakeLocalChange(const sync_pb::EntitySpecifics& specifics); |
86 | 88 |
| 89 // Schedule a commit if the |name| does not match this item's last known |
| 90 // encryption key. The worker that performs the commit is expected to |
| 91 // encrypt the item using the latest available key. |
| 92 void UpdateDesiredEncryptionKey(const std::string& name); |
| 93 |
87 // Applies a local deletion to this item. | 94 // Applies a local deletion to this item. |
88 void Delete(); | 95 void Delete(); |
89 | 96 |
90 // Initializes a message representing this item's uncommitted state | 97 // Initializes a message representing this item's uncommitted state |
91 // to be forwarded to the sync server for committing. | 98 // to be forwarded to the sync server for committing. |
92 void InitializeCommitRequestData(CommitRequestData* request) const; | 99 void InitializeCommitRequestData(CommitRequestData* request) const; |
93 | 100 |
94 // Notes that the current version of this item has been queued for commit. | 101 // Notes that the current version of this item has been queued for commit. |
95 void SetCommitRequestInProgress(); | 102 void SetCommitRequestInProgress(); |
96 | 103 |
97 // Receives a successful commit response. | 104 // Receives a successful commit response. |
98 // | 105 // |
99 // Sucssful commit responses can overwrite an item's ID. | 106 // Sucssful commit responses can overwrite an item's ID. |
100 // | 107 // |
101 // Note that the receipt of a successful commit response does not necessarily | 108 // Note that the receipt of a successful commit response does not necessarily |
102 // unset IsUnsynced(). If many local changes occur in quick succession, it's | 109 // unset IsUnsynced(). If many local changes occur in quick succession, it's |
103 // possible that the committed item was already out of date by the time it | 110 // possible that the committed item was already out of date by the time it |
104 // reached the server. | 111 // reached the server. |
105 void ReceiveCommitResponse(const std::string& id, | 112 void ReceiveCommitResponse(const std::string& id, |
106 int64 sequence_number, | 113 int64 sequence_number, |
107 int64 response_version); | 114 int64 response_version, |
| 115 const std::string& encryption_key_name); |
108 | 116 |
109 // Clears any in-memory sync state associated with outstanding commits. | 117 // Clears any in-memory sync state associated with outstanding commits. |
110 void ClearTransientSyncState(); | 118 void ClearTransientSyncState(); |
111 | 119 |
112 // Clears all sync state. Invoked when a user signs out. | 120 // Clears all sync state. Invoked when a user signs out. |
113 void ClearSyncState(); | 121 void ClearSyncState(); |
114 | 122 |
115 private: | 123 private: |
116 ModelTypeEntity(int64 sequence_number, | 124 ModelTypeEntity(int64 sequence_number, |
117 int64 commit_requested_sequence_number, | 125 int64 commit_requested_sequence_number, |
118 int64 acked_sequence_number, | 126 int64 acked_sequence_number, |
119 int64 base_version, | 127 int64 base_version, |
120 bool is_dirty, | 128 bool is_dirty, |
121 const std::string& id, | 129 const std::string& id, |
122 const std::string& client_tag_hash, | 130 const std::string& client_tag_hash, |
123 const std::string& non_unique_name, | 131 const std::string& non_unique_name, |
124 const sync_pb::EntitySpecifics& specifics, | 132 const sync_pb::EntitySpecifics& specifics, |
125 bool deleted, | 133 bool deleted, |
126 base::Time ctime, | 134 base::Time ctime, |
127 base::Time mtime); | 135 base::Time mtime, |
| 136 const std::string& encryption_key_name); |
128 | 137 |
129 // A sequence number used to track in-progress commits. Each local change | 138 // A sequence number used to track in-progress commits. Each local change |
130 // increments this number. | 139 // increments this number. |
131 int64 sequence_number_; | 140 int64 sequence_number_; |
132 | 141 |
133 // The sequence number of the last item sent to the sync thread. | 142 // The sequence number of the last item sent to the sync thread. |
134 int64 commit_requested_sequence_number_; | 143 int64 commit_requested_sequence_number_; |
135 | 144 |
136 // The sequence number of the last item known to be successfully committed. | 145 // The sequence number of the last item known to be successfully committed. |
137 int64 acked_sequence_number_; | 146 int64 acked_sequence_number_; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 | 187 |
179 // Whether or not the item is deleted. The |specifics_| field may be empty | 188 // Whether or not the item is deleted. The |specifics_| field may be empty |
180 // if this flag is true. | 189 // if this flag is true. |
181 bool deleted_; | 190 bool deleted_; |
182 | 191 |
183 // Entity creation and modification timestamps. | 192 // Entity creation and modification timestamps. |
184 // Assigned by the client and synced by the server, though the server usually | 193 // Assigned by the client and synced by the server, though the server usually |
185 // doesn't bother to inspect their values. | 194 // doesn't bother to inspect their values. |
186 base::Time ctime_; | 195 base::Time ctime_; |
187 base::Time mtime_; | 196 base::Time mtime_; |
| 197 |
| 198 // The name of the encryption key used to encrypt this item on the server. |
| 199 // Empty when no encryption is in use. |
| 200 std::string encryption_key_name_; |
188 }; | 201 }; |
189 | 202 |
190 } // namespace syncer | 203 } // namespace syncer |
191 | 204 |
192 #endif // SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ | 205 #endif // SYNC_ENGINE_MODEL_TYPE_ENTITY_H_ |
OLD | NEW |