OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/drive/local_change_processor_delegate.
h" | 5 #include "chrome/browser/sync_file_system/drive/local_change_processor_delegate.
h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "chrome/browser/sync_file_system/drive/api_util.h" | 9 #include "chrome/browser/sync_file_system/drive/api_util.h" |
10 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" | 10 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 local_change_(local_change), | 25 local_change_(local_change), |
26 local_path_(local_path), | 26 local_path_(local_path), |
27 local_metadata_(local_metadata), | 27 local_metadata_(local_metadata), |
28 has_drive_metadata_(false), | 28 has_drive_metadata_(false), |
29 has_remote_change_(false), | 29 has_remote_change_(false), |
30 weak_factory_(this) {} | 30 weak_factory_(this) {} |
31 | 31 |
32 LocalChangeProcessorDelegate::~LocalChangeProcessorDelegate() {} | 32 LocalChangeProcessorDelegate::~LocalChangeProcessorDelegate() {} |
33 | 33 |
34 void LocalChangeProcessorDelegate::Run(const SyncStatusCallback& callback) { | 34 void LocalChangeProcessorDelegate::Run(const SyncStatusCallback& callback) { |
35 if (!sync_service_) | 35 if (!sync_service_.get()) |
36 return; | 36 return; |
37 | 37 |
38 // TODO(nhiroki): support directory operations (http://crbug.com/161442). | 38 // TODO(nhiroki): support directory operations (http://crbug.com/161442). |
39 DCHECK(IsSyncFSDirectoryOperationEnabled() || !local_change_.IsDirectory()); | 39 DCHECK(IsSyncFSDirectoryOperationEnabled() || !local_change_.IsDirectory()); |
40 | 40 |
41 has_drive_metadata_ = | 41 has_drive_metadata_ = |
42 metadata_store()->ReadEntry(url_, &drive_metadata_) == SYNC_STATUS_OK; | 42 metadata_store()->ReadEntry(url_, &drive_metadata_) == SYNC_STATUS_OK; |
43 | 43 |
44 if (!has_drive_metadata_) | 44 if (!has_drive_metadata_) |
45 drive_metadata_.set_md5_checksum(std::string()); | 45 drive_metadata_.set_md5_checksum(std::string()); |
46 | 46 |
47 sync_service_->EnsureOriginRootDirectory( | 47 sync_service_->EnsureOriginRootDirectory( |
48 url_.origin(), | 48 url_.origin(), |
49 base::Bind(&LocalChangeProcessorDelegate::DidGetOriginRoot, | 49 base::Bind(&LocalChangeProcessorDelegate::DidGetOriginRoot, |
50 weak_factory_.GetWeakPtr(), | 50 weak_factory_.GetWeakPtr(), |
51 callback)); | 51 callback)); |
52 } | 52 } |
53 | 53 |
54 void LocalChangeProcessorDelegate::DidGetOriginRoot( | 54 void LocalChangeProcessorDelegate::DidGetOriginRoot( |
55 const SyncStatusCallback& callback, | 55 const SyncStatusCallback& callback, |
56 SyncStatusCode status, | 56 SyncStatusCode status, |
57 const std::string& origin_resource_id) { | 57 const std::string& origin_resource_id) { |
58 if (!sync_service_) | 58 if (!sync_service_.get()) |
59 return; | 59 return; |
60 | 60 |
61 if (status != SYNC_STATUS_OK) { | 61 if (status != SYNC_STATUS_OK) { |
62 callback.Run(status); | 62 callback.Run(status); |
63 return; | 63 return; |
64 } | 64 } |
65 | 65 |
66 origin_resource_id_ = origin_resource_id; | 66 origin_resource_id_ = origin_resource_id; |
67 | 67 |
68 has_remote_change_ = | 68 has_remote_change_ = |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 callback.Run(SYNC_STATUS_FAILED); | 116 callback.Run(SYNC_STATUS_FAILED); |
117 return; | 117 return; |
118 } | 118 } |
119 } | 119 } |
120 NOTREACHED(); | 120 NOTREACHED(); |
121 callback.Run(SYNC_STATUS_FAILED); | 121 callback.Run(SYNC_STATUS_FAILED); |
122 } | 122 } |
123 | 123 |
124 void LocalChangeProcessorDelegate::UploadNewFile( | 124 void LocalChangeProcessorDelegate::UploadNewFile( |
125 const SyncStatusCallback& callback) { | 125 const SyncStatusCallback& callback) { |
126 if (!sync_service_) | 126 if (!sync_service_.get()) |
127 return; | 127 return; |
128 | 128 |
129 api_util()->UploadNewFile( | 129 api_util()->UploadNewFile( |
130 origin_resource_id_, | 130 origin_resource_id_, |
131 local_path_, | 131 local_path_, |
132 DriveFileSyncService::PathToTitle(url_.path()), | 132 DriveFileSyncService::PathToTitle(url_.path()), |
133 base::Bind(&LocalChangeProcessorDelegate::DidUploadNewFile, | 133 base::Bind(&LocalChangeProcessorDelegate::DidUploadNewFile, |
134 weak_factory_.GetWeakPtr(), callback)); | 134 weak_factory_.GetWeakPtr(), callback)); |
135 } | 135 } |
136 | 136 |
137 void LocalChangeProcessorDelegate::DidUploadNewFile( | 137 void LocalChangeProcessorDelegate::DidUploadNewFile( |
138 const SyncStatusCallback& callback, | 138 const SyncStatusCallback& callback, |
139 google_apis::GDataErrorCode error, | 139 google_apis::GDataErrorCode error, |
140 const std::string& resource_id, | 140 const std::string& resource_id, |
141 const std::string& md5) { | 141 const std::string& md5) { |
142 if (!sync_service_) | 142 if (!sync_service_.get()) |
143 return; | 143 return; |
144 | 144 |
145 switch (error) { | 145 switch (error) { |
146 case google_apis::HTTP_CREATED: | 146 case google_apis::HTTP_CREATED: |
147 UpdateMetadata( | 147 UpdateMetadata( |
148 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, | 148 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, |
149 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 149 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
150 weak_factory_.GetWeakPtr(), callback, error)); | 150 weak_factory_.GetWeakPtr(), callback, error)); |
151 sync_service_->NotifyObserversFileStatusChanged( | 151 sync_service_->NotifyObserversFileStatusChanged( |
152 url_, | 152 url_, |
153 SYNC_FILE_STATUS_SYNCED, | 153 SYNC_FILE_STATUS_SYNCED, |
154 SYNC_ACTION_ADDED, | 154 SYNC_ACTION_ADDED, |
155 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 155 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
156 return; | 156 return; |
157 case google_apis::HTTP_CONFLICT: | 157 case google_apis::HTTP_CONFLICT: |
158 HandleCreationConflict(resource_id, DriveMetadata::RESOURCE_TYPE_FILE, | 158 HandleCreationConflict(resource_id, DriveMetadata::RESOURCE_TYPE_FILE, |
159 callback); | 159 callback); |
160 return; | 160 return; |
161 default: | 161 default: |
162 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 162 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 void LocalChangeProcessorDelegate::CreateDirectory( | 166 void LocalChangeProcessorDelegate::CreateDirectory( |
167 const SyncStatusCallback& callback) { | 167 const SyncStatusCallback& callback) { |
168 if (!sync_service_) | 168 if (!sync_service_.get()) |
169 return; | 169 return; |
170 | 170 |
171 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 171 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
172 api_util()->CreateDirectory( | 172 api_util()->CreateDirectory( |
173 origin_resource_id_, | 173 origin_resource_id_, |
174 DriveFileSyncService::PathToTitle(url_.path()), | 174 DriveFileSyncService::PathToTitle(url_.path()), |
175 base::Bind(&LocalChangeProcessorDelegate::DidCreateDirectory, | 175 base::Bind(&LocalChangeProcessorDelegate::DidCreateDirectory, |
176 weak_factory_.GetWeakPtr(), callback)); | 176 weak_factory_.GetWeakPtr(), callback)); |
177 } | 177 } |
178 | 178 |
179 void LocalChangeProcessorDelegate::DidCreateDirectory( | 179 void LocalChangeProcessorDelegate::DidCreateDirectory( |
180 const SyncStatusCallback& callback, | 180 const SyncStatusCallback& callback, |
181 google_apis::GDataErrorCode error, | 181 google_apis::GDataErrorCode error, |
182 const std::string& resource_id) { | 182 const std::string& resource_id) { |
183 if (!sync_service_) | 183 if (!sync_service_.get()) |
184 return; | 184 return; |
185 | 185 |
186 switch (error) { | 186 switch (error) { |
187 case google_apis::HTTP_SUCCESS: | 187 case google_apis::HTTP_SUCCESS: |
188 case google_apis::HTTP_CREATED: { | 188 case google_apis::HTTP_CREATED: { |
189 UpdateMetadata( | 189 UpdateMetadata( |
190 resource_id, std::string(), DriveMetadata::RESOURCE_TYPE_FOLDER, | 190 resource_id, std::string(), DriveMetadata::RESOURCE_TYPE_FOLDER, |
191 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 191 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
192 weak_factory_.GetWeakPtr(), callback, error)); | 192 weak_factory_.GetWeakPtr(), callback, error)); |
193 sync_service_->NotifyObserversFileStatusChanged( | 193 sync_service_->NotifyObserversFileStatusChanged( |
194 url_, | 194 url_, |
195 SYNC_FILE_STATUS_SYNCED, | 195 SYNC_FILE_STATUS_SYNCED, |
196 SYNC_ACTION_ADDED, | 196 SYNC_ACTION_ADDED, |
197 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 197 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
198 return; | 198 return; |
199 } | 199 } |
200 | 200 |
201 case google_apis::HTTP_CONFLICT: | 201 case google_apis::HTTP_CONFLICT: |
202 // There were conflicts and a file was left. | 202 // There were conflicts and a file was left. |
203 // TODO(kinuko): Handle the latter case (http://crbug.com/237090). | 203 // TODO(kinuko): Handle the latter case (http://crbug.com/237090). |
204 // Fall-through | 204 // Fall-through |
205 | 205 |
206 default: | 206 default: |
207 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 207 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
208 } | 208 } |
209 } | 209 } |
210 | 210 |
211 void LocalChangeProcessorDelegate::UploadExistingFile( | 211 void LocalChangeProcessorDelegate::UploadExistingFile( |
212 const SyncStatusCallback& callback) { | 212 const SyncStatusCallback& callback) { |
213 if (!sync_service_) | 213 if (!sync_service_.get()) |
214 return; | 214 return; |
215 | 215 |
216 DCHECK(has_drive_metadata_); | 216 DCHECK(has_drive_metadata_); |
217 api_util()->UploadExistingFile( | 217 api_util()->UploadExistingFile( |
218 drive_metadata_.resource_id(), | 218 drive_metadata_.resource_id(), |
219 drive_metadata_.md5_checksum(), | 219 drive_metadata_.md5_checksum(), |
220 local_path_, | 220 local_path_, |
221 base::Bind(&LocalChangeProcessorDelegate::DidUploadExistingFile, | 221 base::Bind(&LocalChangeProcessorDelegate::DidUploadExistingFile, |
222 weak_factory_.GetWeakPtr(), callback)); | 222 weak_factory_.GetWeakPtr(), callback)); |
223 } | 223 } |
224 | 224 |
225 void LocalChangeProcessorDelegate::DidUploadExistingFile( | 225 void LocalChangeProcessorDelegate::DidUploadExistingFile( |
226 const SyncStatusCallback& callback, | 226 const SyncStatusCallback& callback, |
227 google_apis::GDataErrorCode error, | 227 google_apis::GDataErrorCode error, |
228 const std::string& resource_id, | 228 const std::string& resource_id, |
229 const std::string& md5) { | 229 const std::string& md5) { |
230 if (!sync_service_) | 230 if (!sync_service_.get()) |
231 return; | 231 return; |
232 | 232 |
233 DCHECK(has_drive_metadata_); | 233 DCHECK(has_drive_metadata_); |
234 switch (error) { | 234 switch (error) { |
235 case google_apis::HTTP_SUCCESS: | 235 case google_apis::HTTP_SUCCESS: |
236 UpdateMetadata( | 236 UpdateMetadata( |
237 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, | 237 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, |
238 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 238 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
239 weak_factory_.GetWeakPtr(), callback, error)); | 239 weak_factory_.GetWeakPtr(), callback, error)); |
240 sync_service_->NotifyObserversFileStatusChanged( | 240 sync_service_->NotifyObserversFileStatusChanged( |
(...skipping 20 matching lines...) Expand all Loading... |
261 GDataErrorCodeToSyncStatusCodeWrapper(error); | 261 GDataErrorCodeToSyncStatusCodeWrapper(error); |
262 DCHECK_NE(SYNC_STATUS_OK, status); | 262 DCHECK_NE(SYNC_STATUS_OK, status); |
263 callback.Run(status); | 263 callback.Run(status); |
264 return; | 264 return; |
265 } | 265 } |
266 } | 266 } |
267 } | 267 } |
268 | 268 |
269 void LocalChangeProcessorDelegate::DeleteFile( | 269 void LocalChangeProcessorDelegate::DeleteFile( |
270 const SyncStatusCallback& callback) { | 270 const SyncStatusCallback& callback) { |
271 if (!sync_service_) | 271 if (!sync_service_.get()) |
272 return; | 272 return; |
273 | 273 |
274 DCHECK(has_drive_metadata_); | 274 DCHECK(has_drive_metadata_); |
275 api_util()->DeleteFile( | 275 api_util()->DeleteFile( |
276 drive_metadata_.resource_id(), | 276 drive_metadata_.resource_id(), |
277 drive_metadata_.md5_checksum(), | 277 drive_metadata_.md5_checksum(), |
278 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, | 278 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, |
279 weak_factory_.GetWeakPtr(), callback)); | 279 weak_factory_.GetWeakPtr(), callback)); |
280 } | 280 } |
281 | 281 |
282 void LocalChangeProcessorDelegate::DeleteDirectory( | 282 void LocalChangeProcessorDelegate::DeleteDirectory( |
283 const SyncStatusCallback& callback) { | 283 const SyncStatusCallback& callback) { |
284 if (!sync_service_) | 284 if (!sync_service_.get()) |
285 return; | 285 return; |
286 | 286 |
287 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 287 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
288 DCHECK(has_drive_metadata_); | 288 DCHECK(has_drive_metadata_); |
289 // This does not handle recursive directory deletion | 289 // This does not handle recursive directory deletion |
290 // (which should not happen other than after a restart). | 290 // (which should not happen other than after a restart). |
291 api_util()->DeleteFile( | 291 api_util()->DeleteFile( |
292 drive_metadata_.resource_id(), | 292 drive_metadata_.resource_id(), |
293 std::string(), // empty md5 | 293 std::string(), // empty md5 |
294 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, | 294 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, |
295 weak_factory_.GetWeakPtr(), callback)); | 295 weak_factory_.GetWeakPtr(), callback)); |
296 } | 296 } |
297 | 297 |
298 void LocalChangeProcessorDelegate::DidDeleteFile( | 298 void LocalChangeProcessorDelegate::DidDeleteFile( |
299 const SyncStatusCallback& callback, | 299 const SyncStatusCallback& callback, |
300 google_apis::GDataErrorCode error) { | 300 google_apis::GDataErrorCode error) { |
301 if (!sync_service_) | 301 if (!sync_service_.get()) |
302 return; | 302 return; |
303 | 303 |
304 DCHECK(has_drive_metadata_); | 304 DCHECK(has_drive_metadata_); |
305 | 305 |
306 switch (error) { | 306 switch (error) { |
307 // Regardless of whether the deletion has succeeded (HTTP_SUCCESS) or | 307 // Regardless of whether the deletion has succeeded (HTTP_SUCCESS) or |
308 // has failed with ETag conflict error (HTTP_PRECONDITION or HTTP_CONFLICT) | 308 // has failed with ETag conflict error (HTTP_PRECONDITION or HTTP_CONFLICT) |
309 // we should just delete the drive_metadata. | 309 // we should just delete the drive_metadata. |
310 // In the former case the file should be just gone now, and | 310 // In the former case the file should be just gone now, and |
311 // in the latter case the remote change will be applied in a future | 311 // in the latter case the remote change will be applied in a future |
(...skipping 19 matching lines...) Expand all Loading... |
331 GDataErrorCodeToSyncStatusCodeWrapper(error); | 331 GDataErrorCodeToSyncStatusCodeWrapper(error); |
332 DCHECK_NE(SYNC_STATUS_OK, status); | 332 DCHECK_NE(SYNC_STATUS_OK, status); |
333 callback.Run(status); | 333 callback.Run(status); |
334 return; | 334 return; |
335 } | 335 } |
336 } | 336 } |
337 } | 337 } |
338 | 338 |
339 void LocalChangeProcessorDelegate::ResolveToLocal( | 339 void LocalChangeProcessorDelegate::ResolveToLocal( |
340 const SyncStatusCallback& callback) { | 340 const SyncStatusCallback& callback) { |
341 if (!sync_service_) | 341 if (!sync_service_.get()) |
342 return; | 342 return; |
343 | 343 |
344 api_util()->DeleteFile( | 344 api_util()->DeleteFile( |
345 drive_metadata_.resource_id(), | 345 drive_metadata_.resource_id(), |
346 drive_metadata_.md5_checksum(), | 346 drive_metadata_.md5_checksum(), |
347 base::Bind( | 347 base::Bind( |
348 &LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal, | 348 &LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal, |
349 weak_factory_.GetWeakPtr(), callback)); | 349 weak_factory_.GetWeakPtr(), callback)); |
350 } | 350 } |
351 | 351 |
352 void LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal( | 352 void LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal( |
353 const SyncStatusCallback& callback, | 353 const SyncStatusCallback& callback, |
354 google_apis::GDataErrorCode error) { | 354 google_apis::GDataErrorCode error) { |
355 if (!sync_service_) | 355 if (!sync_service_.get()) |
356 return; | 356 return; |
357 | 357 |
358 if (error != google_apis::HTTP_SUCCESS && | 358 if (error != google_apis::HTTP_SUCCESS && |
359 error != google_apis::HTTP_NOT_FOUND) { | 359 error != google_apis::HTTP_NOT_FOUND) { |
360 remote_change_handler()->RemoveChangeForURL(url_); | 360 remote_change_handler()->RemoveChangeForURL(url_); |
361 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 361 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
362 return; | 362 return; |
363 } | 363 } |
364 | 364 |
365 DCHECK_NE(SYNC_FILE_TYPE_UNKNOWN, local_metadata_.file_type); | 365 DCHECK_NE(SYNC_FILE_TYPE_UNKNOWN, local_metadata_.file_type); |
366 if (local_metadata_.file_type == SYNC_FILE_TYPE_FILE) { | 366 if (local_metadata_.file_type == SYNC_FILE_TYPE_FILE) { |
367 UploadNewFile(callback); | 367 UploadNewFile(callback); |
368 return; | 368 return; |
369 } | 369 } |
370 | 370 |
371 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 371 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
372 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_.file_type); | 372 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_.file_type); |
373 CreateDirectory(callback); | 373 CreateDirectory(callback); |
374 } | 374 } |
375 | 375 |
376 void LocalChangeProcessorDelegate::ResolveToRemote( | 376 void LocalChangeProcessorDelegate::ResolveToRemote( |
377 const SyncStatusCallback& callback) { | 377 const SyncStatusCallback& callback) { |
378 if (!sync_service_) | 378 if (!sync_service_.get()) |
379 return; | 379 return; |
380 | 380 |
381 // Mark the file as to-be-fetched. | 381 // Mark the file as to-be-fetched. |
382 DCHECK(!drive_metadata_.resource_id().empty()); | 382 DCHECK(!drive_metadata_.resource_id().empty()); |
383 | 383 |
384 SyncFileType type = remote_change_.change.file_type(); | 384 SyncFileType type = remote_change_.change.file_type(); |
385 SetMetadataToBeFetched( | 385 SetMetadataToBeFetched( |
386 DriveFileSyncService::SyncFileTypeToDriveMetadataResourceType(type), | 386 DriveFileSyncService::SyncFileTypeToDriveMetadataResourceType(type), |
387 base::Bind(&LocalChangeProcessorDelegate::DidResolveToRemote, | 387 base::Bind(&LocalChangeProcessorDelegate::DidResolveToRemote, |
388 weak_factory_.GetWeakPtr(), callback)); | 388 weak_factory_.GetWeakPtr(), callback)); |
389 // The synced notification will be dispatched when the remote file is | 389 // The synced notification will be dispatched when the remote file is |
390 // downloaded. | 390 // downloaded. |
391 } | 391 } |
392 | 392 |
393 void LocalChangeProcessorDelegate::DidResolveToRemote( | 393 void LocalChangeProcessorDelegate::DidResolveToRemote( |
394 const SyncStatusCallback& callback, | 394 const SyncStatusCallback& callback, |
395 SyncStatusCode status) { | 395 SyncStatusCode status) { |
396 if (!sync_service_) | 396 if (!sync_service_.get()) |
397 return; | 397 return; |
398 | 398 |
399 DCHECK(has_drive_metadata_); | 399 DCHECK(has_drive_metadata_); |
400 if (status != SYNC_STATUS_OK) { | 400 if (status != SYNC_STATUS_OK) { |
401 callback.Run(status); | 401 callback.Run(status); |
402 return; | 402 return; |
403 } | 403 } |
404 | 404 |
405 SyncFileType file_type = SYNC_FILE_TYPE_FILE; | 405 SyncFileType file_type = SYNC_FILE_TYPE_FILE; |
406 if (drive_metadata_.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) | 406 if (drive_metadata_.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) |
407 file_type = SYNC_FILE_TYPE_DIRECTORY; | 407 file_type = SYNC_FILE_TYPE_DIRECTORY; |
408 sync_service_->AppendFetchChange( | 408 sync_service_->AppendFetchChange( |
409 url_.origin(), url_.path(), drive_metadata_.resource_id(), file_type); | 409 url_.origin(), url_.path(), drive_metadata_.resource_id(), file_type); |
410 callback.Run(status); | 410 callback.Run(status); |
411 } | 411 } |
412 | 412 |
413 void LocalChangeProcessorDelegate::DidApplyLocalChange( | 413 void LocalChangeProcessorDelegate::DidApplyLocalChange( |
414 const SyncStatusCallback& callback, | 414 const SyncStatusCallback& callback, |
415 const google_apis::GDataErrorCode error, | 415 const google_apis::GDataErrorCode error, |
416 SyncStatusCode status) { | 416 SyncStatusCode status) { |
417 if (!sync_service_) | 417 if (!sync_service_.get()) |
418 return; | 418 return; |
419 | 419 |
420 if (status == SYNC_STATUS_OK) { | 420 if (status == SYNC_STATUS_OK) { |
421 remote_change_handler()->RemoveChangeForURL(url_); | 421 remote_change_handler()->RemoveChangeForURL(url_); |
422 status = GDataErrorCodeToSyncStatusCodeWrapper(error); | 422 status = GDataErrorCodeToSyncStatusCodeWrapper(error); |
423 } | 423 } |
424 callback.Run(status); | 424 callback.Run(status); |
425 } | 425 } |
426 | 426 |
427 void LocalChangeProcessorDelegate::UpdateMetadata( | 427 void LocalChangeProcessorDelegate::UpdateMetadata( |
428 const std::string& resource_id, | 428 const std::string& resource_id, |
429 const std::string& md5, | 429 const std::string& md5, |
430 DriveMetadata::ResourceType type, | 430 DriveMetadata::ResourceType type, |
431 const SyncStatusCallback& callback) { | 431 const SyncStatusCallback& callback) { |
432 if (!sync_service_) | 432 if (!sync_service_.get()) |
433 return; | 433 return; |
434 | 434 |
435 drive_metadata_.set_resource_id(resource_id); | 435 drive_metadata_.set_resource_id(resource_id); |
436 drive_metadata_.set_md5_checksum(md5); | 436 drive_metadata_.set_md5_checksum(md5); |
437 drive_metadata_.set_conflicted(false); | 437 drive_metadata_.set_conflicted(false); |
438 drive_metadata_.set_to_be_fetched(false); | 438 drive_metadata_.set_to_be_fetched(false); |
439 drive_metadata_.set_type(type); | 439 drive_metadata_.set_type(type); |
440 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 440 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
441 } | 441 } |
442 | 442 |
443 void LocalChangeProcessorDelegate::ResetMetadataMD5( | 443 void LocalChangeProcessorDelegate::ResetMetadataMD5( |
444 const SyncStatusCallback& callback) { | 444 const SyncStatusCallback& callback) { |
445 if (!sync_service_) | 445 if (!sync_service_.get()) |
446 return; | 446 return; |
447 | 447 |
448 drive_metadata_.set_md5_checksum(std::string()); | 448 drive_metadata_.set_md5_checksum(std::string()); |
449 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 449 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
450 } | 450 } |
451 | 451 |
452 void LocalChangeProcessorDelegate::SetMetadataToBeFetched( | 452 void LocalChangeProcessorDelegate::SetMetadataToBeFetched( |
453 DriveMetadata::ResourceType type, | 453 DriveMetadata::ResourceType type, |
454 const SyncStatusCallback& callback) { | 454 const SyncStatusCallback& callback) { |
455 if (!sync_service_) | 455 if (!sync_service_.get()) |
456 return; | 456 return; |
457 | 457 |
458 drive_metadata_.set_md5_checksum(std::string()); | 458 drive_metadata_.set_md5_checksum(std::string()); |
459 drive_metadata_.set_conflicted(false); | 459 drive_metadata_.set_conflicted(false); |
460 drive_metadata_.set_to_be_fetched(true); | 460 drive_metadata_.set_to_be_fetched(true); |
461 drive_metadata_.set_type(type); | 461 drive_metadata_.set_type(type); |
462 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 462 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
463 } | 463 } |
464 | 464 |
465 void LocalChangeProcessorDelegate::SetMetadataConflict( | 465 void LocalChangeProcessorDelegate::SetMetadataConflict( |
466 const SyncStatusCallback& callback) { | 466 const SyncStatusCallback& callback) { |
467 if (!sync_service_) | 467 if (!sync_service_.get()) |
468 return; | 468 return; |
469 | 469 |
470 drive_metadata_.set_conflicted(true); | 470 drive_metadata_.set_conflicted(true); |
471 drive_metadata_.set_to_be_fetched(false); | 471 drive_metadata_.set_to_be_fetched(false); |
472 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 472 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
473 } | 473 } |
474 | 474 |
475 void LocalChangeProcessorDelegate::DeleteMetadata( | 475 void LocalChangeProcessorDelegate::DeleteMetadata( |
476 const SyncStatusCallback& callback) { | 476 const SyncStatusCallback& callback) { |
477 metadata_store()->DeleteEntry(url_, callback); | 477 metadata_store()->DeleteEntry(url_, callback); |
478 } | 478 } |
479 | 479 |
480 void LocalChangeProcessorDelegate::HandleCreationConflict( | 480 void LocalChangeProcessorDelegate::HandleCreationConflict( |
481 const std::string& resource_id, | 481 const std::string& resource_id, |
482 DriveMetadata::ResourceType type, | 482 DriveMetadata::ResourceType type, |
483 const SyncStatusCallback& callback) { | 483 const SyncStatusCallback& callback) { |
484 if (!sync_service_) | 484 if (!sync_service_.get()) |
485 return; | 485 return; |
486 | 486 |
487 // File-file conflict is found. | 487 // File-file conflict is found. |
488 // Populates a fake drive_metadata and set has_drive_metadata = true. | 488 // Populates a fake drive_metadata and set has_drive_metadata = true. |
489 // In HandleConflictLocalSync: | 489 // In HandleConflictLocalSync: |
490 // - If conflict_resolution is manual, we'll change conflicted to true | 490 // - If conflict_resolution is manual, we'll change conflicted to true |
491 // and save the metadata. | 491 // and save the metadata. |
492 // - Otherwise we'll save the metadata with empty md5 and will start | 492 // - Otherwise we'll save the metadata with empty md5 and will start |
493 // over local sync as UploadExistingFile. | 493 // over local sync as UploadExistingFile. |
494 drive_metadata_.set_resource_id(resource_id); | 494 drive_metadata_.set_resource_id(resource_id); |
495 drive_metadata_.set_md5_checksum(std::string()); | 495 drive_metadata_.set_md5_checksum(std::string()); |
496 drive_metadata_.set_conflicted(false); | 496 drive_metadata_.set_conflicted(false); |
497 drive_metadata_.set_to_be_fetched(false); | 497 drive_metadata_.set_to_be_fetched(false); |
498 drive_metadata_.set_type(type); | 498 drive_metadata_.set_type(type); |
499 has_drive_metadata_ = true; | 499 has_drive_metadata_ = true; |
500 HandleConflict(callback); | 500 HandleConflict(callback); |
501 } | 501 } |
502 | 502 |
503 void LocalChangeProcessorDelegate::HandleConflict( | 503 void LocalChangeProcessorDelegate::HandleConflict( |
504 const SyncStatusCallback& callback) { | 504 const SyncStatusCallback& callback) { |
505 if (!sync_service_) | 505 if (!sync_service_.get()) |
506 return; | 506 return; |
507 | 507 |
508 DCHECK(!drive_metadata_.resource_id().empty()); | 508 DCHECK(!drive_metadata_.resource_id().empty()); |
509 api_util()->GetResourceEntry( | 509 api_util()->GetResourceEntry( |
510 drive_metadata_.resource_id(), | 510 drive_metadata_.resource_id(), |
511 base::Bind( | 511 base::Bind( |
512 &LocalChangeProcessorDelegate::DidGetEntryForConflictResolution, | 512 &LocalChangeProcessorDelegate::DidGetEntryForConflictResolution, |
513 weak_factory_.GetWeakPtr(), callback)); | 513 weak_factory_.GetWeakPtr(), callback)); |
514 } | 514 } |
515 | 515 |
516 void LocalChangeProcessorDelegate::DidGetEntryForConflictResolution( | 516 void LocalChangeProcessorDelegate::DidGetEntryForConflictResolution( |
517 const SyncStatusCallback& callback, | 517 const SyncStatusCallback& callback, |
518 google_apis::GDataErrorCode error, | 518 google_apis::GDataErrorCode error, |
519 scoped_ptr<google_apis::ResourceEntry> entry) { | 519 scoped_ptr<google_apis::ResourceEntry> entry) { |
520 if (!sync_service_) | 520 if (!sync_service_.get()) |
521 return; | 521 return; |
522 | 522 |
523 SyncFileType local_file_type = local_metadata_.file_type; | 523 SyncFileType local_file_type = local_metadata_.file_type; |
524 base::Time local_modification_time = local_metadata_.last_modified; | 524 base::Time local_modification_time = local_metadata_.last_modified; |
525 | 525 |
526 SyncFileType remote_file_type; | 526 SyncFileType remote_file_type; |
527 base::Time remote_modification_time = entry->updated_time(); | 527 base::Time remote_modification_time = entry->updated_time(); |
528 if (entry->is_file()) | 528 if (entry->is_file()) |
529 remote_file_type = SYNC_FILE_TYPE_FILE; | 529 remote_file_type = SYNC_FILE_TYPE_FILE; |
530 else if (entry->is_folder()) | 530 else if (entry->is_folder()) |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 APIUtilInterface* LocalChangeProcessorDelegate::api_util() { | 610 APIUtilInterface* LocalChangeProcessorDelegate::api_util() { |
611 return sync_service_->api_util_.get(); | 611 return sync_service_->api_util_.get(); |
612 } | 612 } |
613 | 613 |
614 RemoteChangeHandler* LocalChangeProcessorDelegate::remote_change_handler() { | 614 RemoteChangeHandler* LocalChangeProcessorDelegate::remote_change_handler() { |
615 return &sync_service_->remote_change_handler_; | 615 return &sync_service_->remote_change_handler_; |
616 } | 616 } |
617 | 617 |
618 } // namespace drive | 618 } // namespace drive |
619 } // namespace sync_file_system | 619 } // namespace sync_file_system |
OLD | NEW |