Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: chrome/browser/sync_file_system/local_sync_operation_resolver.cc

Issue 14851005: SyncFS: Fix LocalSyncOperationResolverTest to cover all test cases (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 #include "chrome/browser/sync_file_system/local_sync_operation_resolver.h" 5 #include "chrome/browser/sync_file_system/local_sync_operation_resolver.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" 8 #include "chrome/browser/sync_file_system/sync_file_system.pb.h"
9 9
10 namespace sync_file_system { 10 namespace sync_file_system {
11 11
12 LocalSyncOperationType LocalSyncOperationResolver::Resolve( 12 LocalSyncOperationType LocalSyncOperationResolver::Resolve(
13 const FileChange& local_file_change, 13 const FileChange& local_file_change,
14 bool has_remote_change, 14 const FileChange* remote_file_change,
15 const FileChange& remote_file_change, 15 const DriveMetadata* drive_metadata) {
16 DriveMetadata* drive_metadata) {
17 // Invalid combination should never happen. 16 // Invalid combination should never happen.
18 if (has_remote_change && remote_file_change.IsTypeUnknown()) 17 if (remote_file_change && remote_file_change->IsTypeUnknown())
19 return LOCAL_SYNC_OPERATION_FAIL; 18 return LOCAL_SYNC_OPERATION_FAIL;
20 19
21 bool is_conflicting = false; 20 bool is_conflicting = false;
22 SyncFileType remote_file_type_in_metadata = SYNC_FILE_TYPE_UNKNOWN; 21 SyncFileType remote_file_type_in_metadata = SYNC_FILE_TYPE_UNKNOWN;
23 if (drive_metadata != NULL) { 22 if (drive_metadata) {
24 is_conflicting = drive_metadata->conflicted(); 23 is_conflicting = drive_metadata->conflicted();
25 if (drive_metadata->type() == 24 if (drive_metadata->type() ==
26 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE) 25 DriveMetadata_ResourceType_RESOURCE_TYPE_FILE)
27 remote_file_type_in_metadata = SYNC_FILE_TYPE_FILE; 26 remote_file_type_in_metadata = SYNC_FILE_TYPE_FILE;
28 else 27 else
29 remote_file_type_in_metadata = SYNC_FILE_TYPE_DIRECTORY; 28 remote_file_type_in_metadata = SYNC_FILE_TYPE_DIRECTORY;
30 } 29 }
31 30
32 switch (local_file_change.change()) { 31 switch (local_file_change.change()) {
33 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 32 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
34 switch (local_file_change.file_type()) { 33 switch (local_file_change.file_type()) {
35 case SYNC_FILE_TYPE_FILE: 34 case SYNC_FILE_TYPE_FILE:
36 return is_conflicting 35 return is_conflicting
37 ? ResolveForAddOrUpdateFileInConflict(has_remote_change, 36 ? ResolveForAddOrUpdateFileInConflict(remote_file_change)
38 remote_file_change) 37 : ResolveForAddOrUpdateFile(remote_file_change,
39 : ResolveForAddOrUpdateFile(has_remote_change,
40 remote_file_change,
41 remote_file_type_in_metadata); 38 remote_file_type_in_metadata);
42 case SYNC_FILE_TYPE_DIRECTORY: 39 case SYNC_FILE_TYPE_DIRECTORY:
43 return is_conflicting 40 return is_conflicting
44 ? ResolveForAddDirectoryInConflict(has_remote_change, 41 ? ResolveForAddDirectoryInConflict()
45 remote_file_change) 42 : ResolveForAddDirectory(remote_file_change,
46 : ResolveForAddDirectory(has_remote_change,
47 remote_file_change,
48 remote_file_type_in_metadata); 43 remote_file_type_in_metadata);
49 case SYNC_FILE_TYPE_UNKNOWN: 44 case SYNC_FILE_TYPE_UNKNOWN:
50 NOTREACHED(); 45 NOTREACHED();
51 return LOCAL_SYNC_OPERATION_FAIL; 46 return LOCAL_SYNC_OPERATION_FAIL;
52 } 47 }
53 case FileChange::FILE_CHANGE_DELETE: 48 case FileChange::FILE_CHANGE_DELETE:
54 switch (local_file_change.file_type()) { 49 switch (local_file_change.file_type()) {
55 case SYNC_FILE_TYPE_FILE: 50 case SYNC_FILE_TYPE_FILE:
56 return is_conflicting 51 return is_conflicting
57 ? ResolveForDeleteFileInConflict(has_remote_change, 52 ? ResolveForDeleteFileInConflict(remote_file_change)
58 remote_file_change) 53 : ResolveForDeleteFile(remote_file_change,
59 : ResolveForDeleteFile(has_remote_change,
60 remote_file_change,
61 remote_file_type_in_metadata); 54 remote_file_type_in_metadata);
62 case SYNC_FILE_TYPE_DIRECTORY: 55 case SYNC_FILE_TYPE_DIRECTORY:
63 return is_conflicting 56 return is_conflicting
64 ? ResolveForDeleteDirectoryInConflict(has_remote_change, 57 ? ResolveForDeleteDirectoryInConflict(remote_file_change)
65 remote_file_change) 58 : ResolveForDeleteDirectory(remote_file_change,
66 : ResolveForDeleteDirectory(has_remote_change,
67 remote_file_change,
68 remote_file_type_in_metadata); 59 remote_file_type_in_metadata);
69 case SYNC_FILE_TYPE_UNKNOWN: 60 case SYNC_FILE_TYPE_UNKNOWN:
70 NOTREACHED(); 61 NOTREACHED();
71 return LOCAL_SYNC_OPERATION_FAIL; 62 return LOCAL_SYNC_OPERATION_FAIL;
72 } 63 }
73 } 64 }
74 NOTREACHED(); 65 NOTREACHED();
75 return LOCAL_SYNC_OPERATION_FAIL; 66 return LOCAL_SYNC_OPERATION_FAIL;
76 } 67 }
77 68
78 LocalSyncOperationType LocalSyncOperationResolver::ResolveForAddOrUpdateFile( 69 LocalSyncOperationType LocalSyncOperationResolver::ResolveForAddOrUpdateFile(
79 bool has_remote_change, 70 const FileChange* remote_file_change,
80 const FileChange& remote_file_change,
81 SyncFileType remote_file_type_in_metadata) { 71 SyncFileType remote_file_type_in_metadata) {
82 if (!has_remote_change) { 72 if (!remote_file_change) {
83 switch (remote_file_type_in_metadata) { 73 switch (remote_file_type_in_metadata) {
84 case SYNC_FILE_TYPE_UNKNOWN: 74 case SYNC_FILE_TYPE_UNKNOWN:
85 // Remote file or directory may not exist. 75 // Remote file or directory may not exist.
86 return LOCAL_SYNC_OPERATION_ADD_FILE; 76 return LOCAL_SYNC_OPERATION_ADD_FILE;
87 case SYNC_FILE_TYPE_FILE: 77 case SYNC_FILE_TYPE_FILE:
88 return LOCAL_SYNC_OPERATION_UPDATE_FILE; 78 return LOCAL_SYNC_OPERATION_UPDATE_FILE;
89 case SYNC_FILE_TYPE_DIRECTORY: 79 case SYNC_FILE_TYPE_DIRECTORY:
90 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 80 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
91 } 81 }
92 } 82 }
93 83
94 switch (remote_file_change.change()) { 84 switch (remote_file_change->change()) {
95 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 85 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
96 if (remote_file_change.IsFile()) 86 if (remote_file_change->IsFile())
97 return LOCAL_SYNC_OPERATION_CONFLICT; 87 return LOCAL_SYNC_OPERATION_CONFLICT;
98 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 88 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
99 case FileChange::FILE_CHANGE_DELETE: 89 case FileChange::FILE_CHANGE_DELETE:
100 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 90 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
101 } 91 }
102 92
103 NOTREACHED(); 93 NOTREACHED();
104 return LOCAL_SYNC_OPERATION_FAIL; 94 return LOCAL_SYNC_OPERATION_FAIL;
105 } 95 }
106 96
107 LocalSyncOperationType 97 LocalSyncOperationType
108 LocalSyncOperationResolver::ResolveForAddOrUpdateFileInConflict( 98 LocalSyncOperationResolver::ResolveForAddOrUpdateFileInConflict(
109 bool has_remote_change, 99 const FileChange* remote_file_change) {
110 const FileChange& remote_file_change) { 100 if (!remote_file_change)
111 if (!has_remote_change)
112 return LOCAL_SYNC_OPERATION_CONFLICT; 101 return LOCAL_SYNC_OPERATION_CONFLICT;
113 switch (remote_file_change.change()) { 102 switch (remote_file_change->change()) {
114 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 103 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
115 if (remote_file_change.IsFile()) 104 if (remote_file_change->IsFile())
116 return LOCAL_SYNC_OPERATION_CONFLICT; 105 return LOCAL_SYNC_OPERATION_CONFLICT;
117 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 106 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
118 case FileChange::FILE_CHANGE_DELETE: 107 case FileChange::FILE_CHANGE_DELETE:
119 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 108 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
120 } 109 }
121 NOTREACHED(); 110 NOTREACHED();
122 return LOCAL_SYNC_OPERATION_FAIL; 111 return LOCAL_SYNC_OPERATION_FAIL;
123 } 112 }
124 113
125 LocalSyncOperationType LocalSyncOperationResolver::ResolveForAddDirectory( 114 LocalSyncOperationType LocalSyncOperationResolver::ResolveForAddDirectory(
126 bool has_remote_change, 115 const FileChange* remote_file_change,
127 const FileChange& remote_file_change,
128 SyncFileType remote_file_type_in_metadata) { 116 SyncFileType remote_file_type_in_metadata) {
129 if (!has_remote_change) { 117 if (!remote_file_change) {
130 switch (remote_file_type_in_metadata) { 118 switch (remote_file_type_in_metadata) {
131 case SYNC_FILE_TYPE_UNKNOWN: 119 case SYNC_FILE_TYPE_UNKNOWN:
132 // Remote file or directory may not exist. 120 // Remote file or directory may not exist.
133 return LOCAL_SYNC_OPERATION_ADD_DIRECTORY; 121 return LOCAL_SYNC_OPERATION_ADD_DIRECTORY;
134 case SYNC_FILE_TYPE_FILE: 122 case SYNC_FILE_TYPE_FILE:
135 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 123 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
136 case SYNC_FILE_TYPE_DIRECTORY: 124 case SYNC_FILE_TYPE_DIRECTORY:
137 return LOCAL_SYNC_OPERATION_NONE; 125 return LOCAL_SYNC_OPERATION_NONE;
138 } 126 }
139 } 127 }
140 128
141 switch (remote_file_change.change()) { 129 switch (remote_file_change->change()) {
142 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 130 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
143 if (remote_file_change.IsFile()) 131 if (remote_file_change->IsFile())
144 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 132 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
145 return LOCAL_SYNC_OPERATION_NONE; 133 return LOCAL_SYNC_OPERATION_NONE;
146 case FileChange::FILE_CHANGE_DELETE: 134 case FileChange::FILE_CHANGE_DELETE:
147 if (remote_file_change.IsFile()) 135 if (remote_file_change->IsFile())
148 return LOCAL_SYNC_OPERATION_ADD_DIRECTORY; 136 return LOCAL_SYNC_OPERATION_ADD_DIRECTORY;
149 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 137 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
150 } 138 }
151 139
152 NOTREACHED(); 140 NOTREACHED();
153 return LOCAL_SYNC_OPERATION_FAIL; 141 return LOCAL_SYNC_OPERATION_FAIL;
154 } 142 }
155 143
156 LocalSyncOperationType 144 LocalSyncOperationType
157 LocalSyncOperationResolver::ResolveForAddDirectoryInConflict( 145 LocalSyncOperationResolver::ResolveForAddDirectoryInConflict() {
158 bool has_remote_change,
159 const FileChange& remote_file_change) {
160 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL; 146 return LOCAL_SYNC_OPERATION_RESOLVE_TO_LOCAL;
161 } 147 }
162 148
163 LocalSyncOperationType LocalSyncOperationResolver::ResolveForDeleteFile( 149 LocalSyncOperationType LocalSyncOperationResolver::ResolveForDeleteFile(
164 bool has_remote_change, 150 const FileChange* remote_file_change,
165 const FileChange& remote_file_change,
166 SyncFileType remote_file_type_in_metadata) { 151 SyncFileType remote_file_type_in_metadata) {
167 if (!has_remote_change) { 152 if (!remote_file_change) {
168 switch (remote_file_type_in_metadata) { 153 switch (remote_file_type_in_metadata) {
169 case SYNC_FILE_TYPE_UNKNOWN: 154 case SYNC_FILE_TYPE_UNKNOWN:
170 // Remote file or directory may not exist. 155 // Remote file or directory may not exist.
171 return LOCAL_SYNC_OPERATION_NONE; 156 return LOCAL_SYNC_OPERATION_NONE;
172 case SYNC_FILE_TYPE_FILE: 157 case SYNC_FILE_TYPE_FILE:
173 return LOCAL_SYNC_OPERATION_DELETE_FILE; 158 return LOCAL_SYNC_OPERATION_DELETE_FILE;
174 case SYNC_FILE_TYPE_DIRECTORY: 159 case SYNC_FILE_TYPE_DIRECTORY:
175 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 160 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
176 } 161 }
177 } 162 }
178 163
179 switch (remote_file_change.change()) { 164 switch (remote_file_change->change()) {
180 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 165 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
181 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 166 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
182 case FileChange::FILE_CHANGE_DELETE: 167 case FileChange::FILE_CHANGE_DELETE:
183 return LOCAL_SYNC_OPERATION_DELETE_METADATA; 168 return LOCAL_SYNC_OPERATION_DELETE_METADATA;
184 } 169 }
185 170
186 NOTREACHED(); 171 NOTREACHED();
187 return LOCAL_SYNC_OPERATION_FAIL; 172 return LOCAL_SYNC_OPERATION_FAIL;
188 } 173 }
189 174
190 LocalSyncOperationType 175 LocalSyncOperationType
191 LocalSyncOperationResolver::ResolveForDeleteFileInConflict( 176 LocalSyncOperationResolver::ResolveForDeleteFileInConflict(
192 bool has_remote_change, 177 const FileChange* remote_file_change) {
193 const FileChange& remote_file_change) { 178 if (!remote_file_change)
194 if (!has_remote_change)
195 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 179 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
196 switch (remote_file_change.change()) { 180 switch (remote_file_change->change()) {
197 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 181 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
198 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 182 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
199 case FileChange::FILE_CHANGE_DELETE: 183 case FileChange::FILE_CHANGE_DELETE:
200 return LOCAL_SYNC_OPERATION_DELETE_METADATA; 184 return LOCAL_SYNC_OPERATION_DELETE_METADATA;
201 } 185 }
202 NOTREACHED(); 186 NOTREACHED();
203 return LOCAL_SYNC_OPERATION_FAIL; 187 return LOCAL_SYNC_OPERATION_FAIL;
204 } 188 }
205 189
206 LocalSyncOperationType LocalSyncOperationResolver::ResolveForDeleteDirectory( 190 LocalSyncOperationType LocalSyncOperationResolver::ResolveForDeleteDirectory(
207 bool has_remote_change, 191 const FileChange* remote_file_change,
208 const FileChange& remote_file_change,
209 SyncFileType remote_file_type_in_metadata) { 192 SyncFileType remote_file_type_in_metadata) {
210 if (!has_remote_change) { 193 if (!remote_file_change) {
211 switch (remote_file_type_in_metadata) { 194 switch (remote_file_type_in_metadata) {
212 case SYNC_FILE_TYPE_UNKNOWN: 195 case SYNC_FILE_TYPE_UNKNOWN:
213 // Remote file or dircetory may not exist. 196 // Remote file or dircetory may not exist.
214 return LOCAL_SYNC_OPERATION_NONE; 197 return LOCAL_SYNC_OPERATION_NONE;
215 case SYNC_FILE_TYPE_FILE: 198 case SYNC_FILE_TYPE_FILE:
216 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 199 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
217 case SYNC_FILE_TYPE_DIRECTORY: 200 case SYNC_FILE_TYPE_DIRECTORY:
218 return LOCAL_SYNC_OPERATION_DELETE_DIRECTORY; 201 return LOCAL_SYNC_OPERATION_DELETE_DIRECTORY;
219 } 202 }
220 } 203 }
221 204
222 switch (remote_file_change.change()) { 205 switch (remote_file_change->change()) {
223 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 206 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
224 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 207 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
225 case FileChange::FILE_CHANGE_DELETE: 208 case FileChange::FILE_CHANGE_DELETE:
226 return LOCAL_SYNC_OPERATION_DELETE_METADATA; 209 return LOCAL_SYNC_OPERATION_DELETE_METADATA;
227 } 210 }
228 211
229 NOTREACHED(); 212 NOTREACHED();
230 return LOCAL_SYNC_OPERATION_FAIL; 213 return LOCAL_SYNC_OPERATION_FAIL;
231 } 214 }
232 215
233 LocalSyncOperationType 216 LocalSyncOperationType
234 LocalSyncOperationResolver::ResolveForDeleteDirectoryInConflict( 217 LocalSyncOperationResolver::ResolveForDeleteDirectoryInConflict(
235 bool has_remote_change, 218 const FileChange* remote_file_change) {
236 const FileChange& remote_file_change) { 219 if (!remote_file_change)
237 if (!has_remote_change)
238 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 220 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
239 switch (remote_file_change.change()) { 221 switch (remote_file_change->change()) {
240 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 222 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
241 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE; 223 return LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE;
242 case FileChange::FILE_CHANGE_DELETE: 224 case FileChange::FILE_CHANGE_DELETE:
243 return LOCAL_SYNC_OPERATION_DELETE_METADATA; 225 return LOCAL_SYNC_OPERATION_DELETE_METADATA;
244 } 226 }
245 NOTREACHED(); 227 NOTREACHED();
246 return LOCAL_SYNC_OPERATION_FAIL; 228 return LOCAL_SYNC_OPERATION_FAIL;
247 } 229 }
248 230
249 } // namespace sync_file_system 231 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698