OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_file_sync_service.h" | 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 struct DriveFileSyncService::ProcessRemoteChangeParam { | 178 struct DriveFileSyncService::ProcessRemoteChangeParam { |
179 scoped_ptr<TaskToken> token; | 179 scoped_ptr<TaskToken> token; |
180 RemoteChangeProcessor* processor; | 180 RemoteChangeProcessor* processor; |
181 RemoteChange remote_change; | 181 RemoteChange remote_change; |
182 fileapi::SyncFileCallback callback; | 182 fileapi::SyncFileCallback callback; |
183 | 183 |
184 DriveMetadata drive_metadata; | 184 DriveMetadata drive_metadata; |
185 bool metadata_updated; | 185 bool metadata_updated; |
186 base::FilePath temporary_file_path; | 186 base::FilePath temporary_file_path; |
187 std::string md5_checksum; | 187 std::string md5_checksum; |
188 fileapi::SyncAction sync_action; | 188 SyncAction sync_action; |
189 bool clear_local_changes; | 189 bool clear_local_changes; |
190 | 190 |
191 ProcessRemoteChangeParam(scoped_ptr<TaskToken> token, | 191 ProcessRemoteChangeParam(scoped_ptr<TaskToken> token, |
192 RemoteChangeProcessor* processor, | 192 RemoteChangeProcessor* processor, |
193 const RemoteChange& remote_change, | 193 const RemoteChange& remote_change, |
194 const fileapi::SyncFileCallback& callback) | 194 const fileapi::SyncFileCallback& callback) |
195 : token(token.Pass()), | 195 : token(token.Pass()), |
196 processor(processor), | 196 processor(processor), |
197 remote_change(remote_change), | 197 remote_change(remote_change), |
198 callback(callback), | 198 callback(callback), |
199 metadata_updated(false), | 199 metadata_updated(false), |
200 sync_action(fileapi::SYNC_ACTION_NONE), | 200 sync_action(SYNC_ACTION_NONE), |
201 clear_local_changes(true) { | 201 clear_local_changes(true) { |
202 } | 202 } |
203 }; | 203 }; |
204 | 204 |
205 DriveFileSyncService::ChangeQueueItem::ChangeQueueItem() | 205 DriveFileSyncService::ChangeQueueItem::ChangeQueueItem() |
206 : changestamp(0), | 206 : changestamp(0), |
207 sync_type(REMOTE_SYNC_TYPE_INCREMENTAL) { | 207 sync_type(REMOTE_SYNC_TYPE_INCREMENTAL) { |
208 } | 208 } |
209 | 209 |
210 DriveFileSyncService::ChangeQueueItem::ChangeQueueItem( | 210 DriveFileSyncService::ChangeQueueItem::ChangeQueueItem( |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 metadata.set_md5_checksum(std::string()); | 612 metadata.set_md5_checksum(std::string()); |
613 } | 613 } |
614 metadata.set_conflicted(true); | 614 metadata.set_conflicted(true); |
615 metadata.set_to_be_fetched(false); | 615 metadata.set_to_be_fetched(false); |
616 metadata_store_->UpdateEntry( | 616 metadata_store_->UpdateEntry( |
617 url, metadata, | 617 url, metadata, |
618 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 618 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
619 AsWeakPtr(), base::Passed(&token), url, | 619 AsWeakPtr(), base::Passed(&token), url, |
620 google_apis::HTTP_CONFLICT, callback)); | 620 google_apis::HTTP_CONFLICT, callback)); |
621 NotifyObserversFileStatusChanged(url, | 621 NotifyObserversFileStatusChanged(url, |
622 fileapi::SYNC_FILE_STATUS_CONFLICTING, | 622 SYNC_FILE_STATUS_CONFLICTING, |
623 fileapi::SYNC_ACTION_NONE, | 623 SYNC_ACTION_NONE, |
624 fileapi::SYNC_DIRECTION_NONE); | 624 SYNC_DIRECTION_NONE); |
625 return; | 625 return; |
626 } | 626 } |
627 case LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE: { | 627 case LOCAL_SYNC_OPERATION_RESOLVE_TO_REMOTE: { |
628 // Mark the file as to-be-fetched. | 628 // Mark the file as to-be-fetched. |
629 DriveMetadata metadata; | 629 DriveMetadata metadata; |
630 const fileapi::SyncStatusCode status = | 630 const fileapi::SyncStatusCode status = |
631 metadata_store_->ReadEntry(url, &metadata); | 631 metadata_store_->ReadEntry(url, &metadata); |
632 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); | 632 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); |
633 metadata.set_conflicted(false); | 633 metadata.set_conflicted(false); |
634 metadata.set_to_be_fetched(true); | 634 metadata.set_to_be_fetched(true); |
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1191 DriveMetadata metadata; | 1191 DriveMetadata metadata; |
1192 metadata.set_resource_id(resource_id); | 1192 metadata.set_resource_id(resource_id); |
1193 metadata.set_md5_checksum(file_md5); | 1193 metadata.set_md5_checksum(file_md5); |
1194 metadata.set_conflicted(false); | 1194 metadata.set_conflicted(false); |
1195 metadata.set_to_be_fetched(false); | 1195 metadata.set_to_be_fetched(false); |
1196 metadata_store_->UpdateEntry( | 1196 metadata_store_->UpdateEntry( |
1197 url, metadata, | 1197 url, metadata, |
1198 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1198 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1199 AsWeakPtr(), base::Passed(&token), url, error, callback)); | 1199 AsWeakPtr(), base::Passed(&token), url, error, callback)); |
1200 NotifyObserversFileStatusChanged(url, | 1200 NotifyObserversFileStatusChanged(url, |
1201 fileapi::SYNC_FILE_STATUS_SYNCED, | 1201 SYNC_FILE_STATUS_SYNCED, |
1202 fileapi::SYNC_ACTION_ADDED, | 1202 SYNC_ACTION_ADDED, |
1203 fileapi::SYNC_DIRECTION_LOCAL_TO_REMOTE); | 1203 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
1204 return; | 1204 return; |
1205 } | 1205 } |
1206 FinalizeLocalSync(token.Pass(), callback, | 1206 FinalizeLocalSync(token.Pass(), callback, |
1207 GDataErrorCodeToSyncStatusCodeWrapper(error)); | 1207 GDataErrorCodeToSyncStatusCodeWrapper(error)); |
1208 } | 1208 } |
1209 | 1209 |
1210 void DriveFileSyncService::DidUploadExistingFileForLocalSync( | 1210 void DriveFileSyncService::DidUploadExistingFileForLocalSync( |
1211 scoped_ptr<TaskToken> token, | 1211 scoped_ptr<TaskToken> token, |
1212 const fileapi::FileSystemURL& url, | 1212 const fileapi::FileSystemURL& url, |
1213 const fileapi::SyncStatusCallback& callback, | 1213 const fileapi::SyncStatusCallback& callback, |
1214 google_apis::GDataErrorCode error, | 1214 google_apis::GDataErrorCode error, |
1215 const std::string& resource_id, | 1215 const std::string& resource_id, |
1216 const std::string& file_md5) { | 1216 const std::string& file_md5) { |
1217 switch (error) { | 1217 switch (error) { |
1218 case google_apis::HTTP_SUCCESS: { | 1218 case google_apis::HTTP_SUCCESS: { |
1219 DriveMetadata metadata; | 1219 DriveMetadata metadata; |
1220 metadata.set_resource_id(resource_id); | 1220 metadata.set_resource_id(resource_id); |
1221 metadata.set_md5_checksum(file_md5); | 1221 metadata.set_md5_checksum(file_md5); |
1222 metadata.set_conflicted(false); | 1222 metadata.set_conflicted(false); |
1223 metadata.set_to_be_fetched(false); | 1223 metadata.set_to_be_fetched(false); |
1224 metadata_store_->UpdateEntry( | 1224 metadata_store_->UpdateEntry( |
1225 url, metadata, | 1225 url, metadata, |
1226 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1226 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1227 AsWeakPtr(), base::Passed(&token), url, error, callback)); | 1227 AsWeakPtr(), base::Passed(&token), url, error, callback)); |
1228 NotifyObserversFileStatusChanged(url, | 1228 NotifyObserversFileStatusChanged(url, |
1229 fileapi::SYNC_FILE_STATUS_SYNCED, | 1229 SYNC_FILE_STATUS_SYNCED, |
1230 fileapi::SYNC_ACTION_UPDATED, | 1230 SYNC_ACTION_UPDATED, |
1231 fileapi::SYNC_DIRECTION_LOCAL_TO_REMOTE); | 1231 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
1232 return; | 1232 return; |
1233 } | 1233 } |
1234 case google_apis::HTTP_CONFLICT: { | 1234 case google_apis::HTTP_CONFLICT: { |
1235 // Mark the file as conflicted. | 1235 // Mark the file as conflicted. |
1236 DriveMetadata metadata; | 1236 DriveMetadata metadata; |
1237 const fileapi::SyncStatusCode status = | 1237 const fileapi::SyncStatusCode status = |
1238 metadata_store_->ReadEntry(url, &metadata); | 1238 metadata_store_->ReadEntry(url, &metadata); |
1239 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); | 1239 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); |
1240 metadata.set_conflicted(true); | 1240 metadata.set_conflicted(true); |
1241 metadata.set_to_be_fetched(false); | 1241 metadata.set_to_be_fetched(false); |
1242 metadata_store_->UpdateEntry( | 1242 metadata_store_->UpdateEntry( |
1243 url, metadata, | 1243 url, metadata, |
1244 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1244 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1245 AsWeakPtr(), base::Passed(&token), url, error, callback)); | 1245 AsWeakPtr(), base::Passed(&token), url, error, callback)); |
1246 NotifyObserversFileStatusChanged(url, | 1246 NotifyObserversFileStatusChanged(url, |
1247 fileapi::SYNC_FILE_STATUS_CONFLICTING, | 1247 SYNC_FILE_STATUS_CONFLICTING, |
1248 fileapi::SYNC_ACTION_NONE, | 1248 SYNC_ACTION_NONE, |
1249 fileapi::SYNC_DIRECTION_NONE); | 1249 SYNC_DIRECTION_NONE); |
1250 return; | 1250 return; |
1251 } | 1251 } |
1252 case google_apis::HTTP_NOT_MODIFIED: { | 1252 case google_apis::HTTP_NOT_MODIFIED: { |
1253 DidApplyLocalChange(token.Pass(), url, google_apis::HTTP_SUCCESS, | 1253 DidApplyLocalChange(token.Pass(), url, google_apis::HTTP_SUCCESS, |
1254 callback, fileapi::SYNC_STATUS_OK); | 1254 callback, fileapi::SYNC_STATUS_OK); |
1255 return; | 1255 return; |
1256 } | 1256 } |
1257 default: { | 1257 default: { |
1258 const fileapi::SyncStatusCode status = | 1258 const fileapi::SyncStatusCode status = |
1259 GDataErrorCodeToSyncStatusCodeWrapper(error); | 1259 GDataErrorCodeToSyncStatusCodeWrapper(error); |
1260 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); | 1260 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); |
1261 FinalizeLocalSync(token.Pass(), callback, status); | 1261 FinalizeLocalSync(token.Pass(), callback, status); |
1262 return; | 1262 return; |
1263 } | 1263 } |
1264 } | 1264 } |
1265 } | 1265 } |
1266 | 1266 |
1267 void DriveFileSyncService::DidDeleteFileForLocalSync( | 1267 void DriveFileSyncService::DidDeleteFileForLocalSync( |
1268 scoped_ptr<TaskToken> token, | 1268 scoped_ptr<TaskToken> token, |
1269 const fileapi::FileSystemURL& url, | 1269 const fileapi::FileSystemURL& url, |
1270 const fileapi::SyncStatusCallback& callback, | 1270 const fileapi::SyncStatusCallback& callback, |
1271 google_apis::GDataErrorCode error) { | 1271 google_apis::GDataErrorCode error) { |
1272 switch (error) { | 1272 switch (error) { |
1273 case google_apis::HTTP_SUCCESS: { | 1273 case google_apis::HTTP_SUCCESS: { |
1274 metadata_store_->DeleteEntry( | 1274 metadata_store_->DeleteEntry( |
1275 url, | 1275 url, |
1276 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1276 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1277 AsWeakPtr(), base::Passed(&token), url, error, callback)); | 1277 AsWeakPtr(), base::Passed(&token), url, error, callback)); |
1278 NotifyObserversFileStatusChanged(url, | 1278 NotifyObserversFileStatusChanged(url, |
1279 fileapi::SYNC_FILE_STATUS_SYNCED, | 1279 SYNC_FILE_STATUS_SYNCED, |
1280 fileapi::SYNC_ACTION_DELETED, | 1280 SYNC_ACTION_DELETED, |
1281 fileapi::SYNC_DIRECTION_LOCAL_TO_REMOTE); | 1281 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
1282 return; | 1282 return; |
1283 } | 1283 } |
1284 case google_apis::HTTP_PRECONDITION: | 1284 case google_apis::HTTP_PRECONDITION: |
1285 // FALLTHROUGH | 1285 // FALLTHROUGH |
1286 case google_apis::HTTP_CONFLICT: { | 1286 case google_apis::HTTP_CONFLICT: { |
1287 // Mark the file as conflicted. | 1287 // Mark the file as conflicted. |
1288 DriveMetadata metadata; | 1288 DriveMetadata metadata; |
1289 const fileapi::SyncStatusCode status = | 1289 const fileapi::SyncStatusCode status = |
1290 metadata_store_->ReadEntry(url, &metadata); | 1290 metadata_store_->ReadEntry(url, &metadata); |
1291 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); | 1291 DCHECK_EQ(fileapi::SYNC_STATUS_OK, status); |
1292 metadata.set_conflicted(true); | 1292 metadata.set_conflicted(true); |
1293 metadata.set_to_be_fetched(false); | 1293 metadata.set_to_be_fetched(false); |
1294 metadata_store_->UpdateEntry( | 1294 metadata_store_->UpdateEntry( |
1295 url, metadata, | 1295 url, metadata, |
1296 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1296 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1297 AsWeakPtr(), base::Passed(&token), url, error, callback)); | 1297 AsWeakPtr(), base::Passed(&token), url, error, callback)); |
1298 NotifyObserversFileStatusChanged(url, | 1298 NotifyObserversFileStatusChanged(url, |
1299 fileapi::SYNC_FILE_STATUS_CONFLICTING, | 1299 SYNC_FILE_STATUS_CONFLICTING, |
1300 fileapi::SYNC_ACTION_NONE, | 1300 SYNC_ACTION_NONE, |
1301 fileapi::SYNC_DIRECTION_NONE); | 1301 SYNC_DIRECTION_NONE); |
1302 return; | 1302 return; |
1303 } | 1303 } |
1304 default: { | 1304 default: { |
1305 const fileapi::SyncStatusCode status = | 1305 const fileapi::SyncStatusCode status = |
1306 GDataErrorCodeToSyncStatusCodeWrapper(error); | 1306 GDataErrorCodeToSyncStatusCodeWrapper(error); |
1307 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); | 1307 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); |
1308 FinalizeLocalSync(token.Pass(), callback, status); | 1308 FinalizeLocalSync(token.Pass(), callback, status); |
1309 return; | 1309 return; |
1310 } | 1310 } |
1311 } | 1311 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 << (missing_local_file ? " (missing local file)" : " ") | 1349 << (missing_local_file ? " (missing local file)" : " ") |
1350 << " remote_change: " << remote_file_change.DebugString() | 1350 << " remote_change: " << remote_file_change.DebugString() |
1351 << " ==> operation: ResolveConflictToRemoteChange"; | 1351 << " ==> operation: ResolveConflictToRemoteChange"; |
1352 | 1352 |
1353 const fileapi::FileSystemURL& url = param->remote_change.url; | 1353 const fileapi::FileSystemURL& url = param->remote_change.url; |
1354 param->drive_metadata.set_conflicted(false); | 1354 param->drive_metadata.set_conflicted(false); |
1355 param->drive_metadata.set_to_be_fetched(true); | 1355 param->drive_metadata.set_to_be_fetched(true); |
1356 metadata_store_->UpdateEntry( | 1356 metadata_store_->UpdateEntry( |
1357 url, drive_metadata, base::Bind(&EmptyStatusCallback)); | 1357 url, drive_metadata, base::Bind(&EmptyStatusCallback)); |
1358 | 1358 |
1359 param->sync_action = fileapi::SYNC_ACTION_ADDED; | 1359 param->sync_action = SYNC_ACTION_ADDED; |
1360 DownloadForRemoteSync(param.Pass()); | 1360 DownloadForRemoteSync(param.Pass()); |
1361 return; | 1361 return; |
1362 } | 1362 } |
1363 | 1363 |
1364 DCHECK(remote_file_change.IsDelete()); | 1364 DCHECK(remote_file_change.IsDelete()); |
1365 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1365 param->sync_action = SYNC_ACTION_NONE; |
1366 DeleteMetadataForRemoteSync(param.Pass()); | 1366 DeleteMetadataForRemoteSync(param.Pass()); |
1367 return; | 1367 return; |
1368 } | 1368 } |
1369 | 1369 |
1370 DCHECK(!missing_local_file); | 1370 DCHECK(!missing_local_file); |
1371 if (remote_file_change.IsAddOrUpdate()) { | 1371 if (remote_file_change.IsAddOrUpdate()) { |
1372 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1372 param->sync_action = SYNC_ACTION_NONE; |
1373 param->drive_metadata.set_conflicted(true); | 1373 param->drive_metadata.set_conflicted(true); |
1374 param->drive_metadata.set_to_be_fetched(false); | 1374 param->drive_metadata.set_to_be_fetched(false); |
1375 | 1375 |
1376 metadata_store_->UpdateEntry( | 1376 metadata_store_->UpdateEntry( |
1377 url, drive_metadata, | 1377 url, drive_metadata, |
1378 base::Bind(&DriveFileSyncService::CompleteRemoteSync, AsWeakPtr(), | 1378 base::Bind(&DriveFileSyncService::CompleteRemoteSync, AsWeakPtr(), |
1379 base::Passed(¶m))); | 1379 base::Passed(¶m))); |
1380 return; | 1380 return; |
1381 } | 1381 } |
1382 | 1382 |
1383 DCHECK(remote_file_change.IsDelete()); | 1383 DCHECK(remote_file_change.IsDelete()); |
1384 DVLOG(1) << "ProcessRemoteChange for " << url.DebugString() | 1384 DVLOG(1) << "ProcessRemoteChange for " << url.DebugString() |
1385 << (param->drive_metadata.conflicted() ? " (conflicted)" : " ") | 1385 << (param->drive_metadata.conflicted() ? " (conflicted)" : " ") |
1386 << (missing_local_file ? " (missing local file)" : " ") | 1386 << (missing_local_file ? " (missing local file)" : " ") |
1387 << " remote_change: " << remote_file_change.DebugString() | 1387 << " remote_change: " << remote_file_change.DebugString() |
1388 << " ==> operation: ResolveConflictToLocalChange"; | 1388 << " ==> operation: ResolveConflictToLocalChange"; |
1389 | 1389 |
1390 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1390 param->sync_action = SYNC_ACTION_NONE; |
1391 param->clear_local_changes = false; | 1391 param->clear_local_changes = false; |
1392 | 1392 |
1393 RemoteChangeProcessor* processor = param->processor; | 1393 RemoteChangeProcessor* processor = param->processor; |
1394 processor->RecordFakeLocalChange( | 1394 processor->RecordFakeLocalChange( |
1395 url, | 1395 url, |
1396 fileapi::FileChange(fileapi::FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 1396 fileapi::FileChange(fileapi::FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
1397 fileapi::SYNC_FILE_TYPE_FILE), | 1397 fileapi::SYNC_FILE_TYPE_FILE), |
1398 base::Bind(&DriveFileSyncService::DidResolveConflictToLocalChange, | 1398 base::Bind(&DriveFileSyncService::DidResolveConflictToLocalChange, |
1399 AsWeakPtr(), base::Passed(¶m))); | 1399 AsWeakPtr(), base::Passed(¶m))); |
1400 return; | 1400 return; |
1401 } | 1401 } |
1402 | 1402 |
1403 DCHECK(!param->drive_metadata.conflicted()); | 1403 DCHECK(!param->drive_metadata.conflicted()); |
1404 if (remote_file_change.IsAddOrUpdate()) { | 1404 if (remote_file_change.IsAddOrUpdate()) { |
1405 if (local_changes.empty()) { | 1405 if (local_changes.empty()) { |
1406 if (missing_local_file) { | 1406 if (missing_local_file) { |
1407 param->sync_action = fileapi::SYNC_ACTION_ADDED; | 1407 param->sync_action = SYNC_ACTION_ADDED; |
1408 DownloadForRemoteSync(param.Pass()); | 1408 DownloadForRemoteSync(param.Pass()); |
1409 return; | 1409 return; |
1410 } | 1410 } |
1411 | 1411 |
1412 DCHECK(!missing_local_file); | 1412 DCHECK(!missing_local_file); |
1413 param->sync_action = fileapi::SYNC_ACTION_UPDATED; | 1413 param->sync_action = SYNC_ACTION_UPDATED; |
1414 DownloadForRemoteSync(param.Pass()); | 1414 DownloadForRemoteSync(param.Pass()); |
1415 return; | 1415 return; |
1416 } | 1416 } |
1417 | 1417 |
1418 DCHECK(!local_changes.empty()); | 1418 DCHECK(!local_changes.empty()); |
1419 if (local_changes.list().back().IsAddOrUpdate()) { | 1419 if (local_changes.list().back().IsAddOrUpdate()) { |
1420 param->drive_metadata.set_conflicted(true); | 1420 param->drive_metadata.set_conflicted(true); |
1421 param->drive_metadata.set_to_be_fetched(false); | 1421 param->drive_metadata.set_to_be_fetched(false); |
1422 | 1422 |
1423 metadata_store_->UpdateEntry( | 1423 metadata_store_->UpdateEntry( |
1424 url, drive_metadata, | 1424 url, drive_metadata, |
1425 base::Bind(&DriveFileSyncService::CompleteRemoteSync, AsWeakPtr(), | 1425 base::Bind(&DriveFileSyncService::CompleteRemoteSync, AsWeakPtr(), |
1426 base::Passed(¶m))); | 1426 base::Passed(¶m))); |
1427 NotifyObserversFileStatusChanged(url, | 1427 NotifyObserversFileStatusChanged(url, |
1428 fileapi::SYNC_FILE_STATUS_CONFLICTING, | 1428 SYNC_FILE_STATUS_CONFLICTING, |
1429 fileapi::SYNC_ACTION_NONE, | 1429 SYNC_ACTION_NONE, |
1430 fileapi::SYNC_DIRECTION_NONE); | 1430 SYNC_DIRECTION_NONE); |
1431 return; | 1431 return; |
1432 } | 1432 } |
1433 | 1433 |
1434 DCHECK(local_changes.list().back().IsDelete()); | 1434 DCHECK(local_changes.list().back().IsDelete()); |
1435 param->sync_action = fileapi::SYNC_ACTION_ADDED; | 1435 param->sync_action = SYNC_ACTION_ADDED; |
1436 DownloadForRemoteSync(param.Pass()); | 1436 DownloadForRemoteSync(param.Pass()); |
1437 return; | 1437 return; |
1438 } | 1438 } |
1439 | 1439 |
1440 DCHECK(remote_file_change.IsDelete()); | 1440 DCHECK(remote_file_change.IsDelete()); |
1441 if (local_changes.empty()) { | 1441 if (local_changes.empty()) { |
1442 if (missing_local_file) { | 1442 if (missing_local_file) { |
1443 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1443 param->sync_action = SYNC_ACTION_NONE; |
1444 if (missing_db_entry) | 1444 if (missing_db_entry) |
1445 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); | 1445 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); |
1446 else | 1446 else |
1447 DeleteMetadataForRemoteSync(param.Pass()); | 1447 DeleteMetadataForRemoteSync(param.Pass()); |
1448 return; | 1448 return; |
1449 } | 1449 } |
1450 DCHECK(!missing_local_file); | 1450 DCHECK(!missing_local_file); |
1451 param->sync_action = fileapi::SYNC_ACTION_DELETED; | 1451 param->sync_action = SYNC_ACTION_DELETED; |
1452 | 1452 |
1453 const fileapi::FileChange& file_change = remote_file_change; | 1453 const fileapi::FileChange& file_change = remote_file_change; |
1454 param->processor->ApplyRemoteChange( | 1454 param->processor->ApplyRemoteChange( |
1455 file_change, base::FilePath(), url, | 1455 file_change, base::FilePath(), url, |
1456 base::Bind(&DriveFileSyncService::DidApplyRemoteChange, AsWeakPtr(), | 1456 base::Bind(&DriveFileSyncService::DidApplyRemoteChange, AsWeakPtr(), |
1457 base::Passed(¶m))); | 1457 base::Passed(¶m))); |
1458 return; | 1458 return; |
1459 } | 1459 } |
1460 | 1460 |
1461 DCHECK(!local_changes.empty()); | 1461 DCHECK(!local_changes.empty()); |
1462 if (local_changes.list().back().IsAddOrUpdate()) { | 1462 if (local_changes.list().back().IsAddOrUpdate()) { |
1463 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1463 param->sync_action = SYNC_ACTION_NONE; |
1464 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); | 1464 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); |
1465 return; | 1465 return; |
1466 } | 1466 } |
1467 | 1467 |
1468 DCHECK(local_changes.list().back().IsDelete()); | 1468 DCHECK(local_changes.list().back().IsDelete()); |
1469 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1469 param->sync_action = SYNC_ACTION_NONE; |
1470 if (missing_db_entry) | 1470 if (missing_db_entry) |
1471 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); | 1471 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); |
1472 else | 1472 else |
1473 DeleteMetadataForRemoteSync(param.Pass()); | 1473 DeleteMetadataForRemoteSync(param.Pass()); |
1474 } | 1474 } |
1475 | 1475 |
1476 void DriveFileSyncService::DidResolveConflictToLocalChange( | 1476 void DriveFileSyncService::DidResolveConflictToLocalChange( |
1477 scoped_ptr<ProcessRemoteChangeParam> param, | 1477 scoped_ptr<ProcessRemoteChangeParam> param, |
1478 fileapi::SyncStatusCode status) { | 1478 fileapi::SyncStatusCode status) { |
1479 if (status != fileapi::SYNC_STATUS_OK) { | 1479 if (status != fileapi::SYNC_STATUS_OK) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 temporary_file_path, | 1523 temporary_file_path, |
1524 base::Bind(&DriveFileSyncService::DidDownloadFileForRemoteSync, | 1524 base::Bind(&DriveFileSyncService::DidDownloadFileForRemoteSync, |
1525 AsWeakPtr(), base::Passed(¶m))); | 1525 AsWeakPtr(), base::Passed(¶m))); |
1526 } | 1526 } |
1527 | 1527 |
1528 void DriveFileSyncService::DidDownloadFileForRemoteSync( | 1528 void DriveFileSyncService::DidDownloadFileForRemoteSync( |
1529 scoped_ptr<ProcessRemoteChangeParam> param, | 1529 scoped_ptr<ProcessRemoteChangeParam> param, |
1530 google_apis::GDataErrorCode error, | 1530 google_apis::GDataErrorCode error, |
1531 const std::string& md5_checksum) { | 1531 const std::string& md5_checksum) { |
1532 if (error == google_apis::HTTP_NOT_MODIFIED) { | 1532 if (error == google_apis::HTTP_NOT_MODIFIED) { |
1533 param->sync_action = fileapi::SYNC_ACTION_NONE; | 1533 param->sync_action = SYNC_ACTION_NONE; |
1534 DidApplyRemoteChange(param.Pass(), fileapi::SYNC_STATUS_OK); | 1534 DidApplyRemoteChange(param.Pass(), fileapi::SYNC_STATUS_OK); |
1535 return; | 1535 return; |
1536 } | 1536 } |
1537 | 1537 |
1538 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); | 1538 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); |
1539 if (status != fileapi::SYNC_STATUS_OK) { | 1539 if (status != fileapi::SYNC_STATUS_OK) { |
1540 AbortRemoteSync(param.Pass(), status); | 1540 AbortRemoteSync(param.Pass(), status); |
1541 return; | 1541 return; |
1542 } | 1542 } |
1543 | 1543 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1644 AsWeakPtr(), base::Passed(¶m), status)); | 1644 AsWeakPtr(), base::Passed(¶m), status)); |
1645 return; | 1645 return; |
1646 } | 1646 } |
1647 | 1647 |
1648 if (!param->temporary_file_path.empty()) | 1648 if (!param->temporary_file_path.empty()) |
1649 DeleteTemporaryFile(param->temporary_file_path); | 1649 DeleteTemporaryFile(param->temporary_file_path); |
1650 NotifyTaskDone(status, param->token.Pass()); | 1650 NotifyTaskDone(status, param->token.Pass()); |
1651 if (status == fileapi::SYNC_STATUS_HAS_CONFLICT || | 1651 if (status == fileapi::SYNC_STATUS_HAS_CONFLICT || |
1652 param->drive_metadata.conflicted()) { | 1652 param->drive_metadata.conflicted()) { |
1653 NotifyObserversFileStatusChanged(param->remote_change.url, | 1653 NotifyObserversFileStatusChanged(param->remote_change.url, |
1654 fileapi::SYNC_FILE_STATUS_CONFLICTING, | 1654 SYNC_FILE_STATUS_CONFLICTING, |
1655 fileapi::SYNC_ACTION_NONE, | 1655 SYNC_ACTION_NONE, |
1656 fileapi::SYNC_DIRECTION_NONE); | 1656 SYNC_DIRECTION_NONE); |
1657 } else if (status == fileapi::SYNC_STATUS_OK && | 1657 } else if (status == fileapi::SYNC_STATUS_OK && |
1658 param->sync_action != fileapi::SYNC_ACTION_NONE) { | 1658 param->sync_action != SYNC_ACTION_NONE) { |
1659 NotifyObserversFileStatusChanged(param->remote_change.url, | 1659 NotifyObserversFileStatusChanged(param->remote_change.url, |
1660 fileapi::SYNC_FILE_STATUS_SYNCED, | 1660 SYNC_FILE_STATUS_SYNCED, |
1661 param->sync_action, | 1661 param->sync_action, |
1662 fileapi::SYNC_DIRECTION_REMOTE_TO_LOCAL); | 1662 SYNC_DIRECTION_REMOTE_TO_LOCAL); |
1663 } | 1663 } |
1664 param->callback.Run(status, param->remote_change.url); | 1664 param->callback.Run(status, param->remote_change.url); |
1665 } | 1665 } |
1666 | 1666 |
1667 bool DriveFileSyncService::AppendRemoteChange( | 1667 bool DriveFileSyncService::AppendRemoteChange( |
1668 const GURL& origin, | 1668 const GURL& origin, |
1669 const google_apis::ResourceEntry& entry, | 1669 const google_apis::ResourceEntry& entry, |
1670 int64 changestamp, | 1670 int64 changestamp, |
1671 RemoteSyncType sync_type) { | 1671 RemoteSyncType sync_type) { |
1672 // TODO(tzik): Normalize the path here. | 1672 // TODO(tzik): Normalize the path here. |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2005 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( | 2005 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( |
2006 google_apis::GDataErrorCode error) const { | 2006 google_apis::GDataErrorCode error) const { |
2007 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 2007 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); |
2008 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) | 2008 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) |
2009 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; | 2009 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; |
2010 return status; | 2010 return status; |
2011 } | 2011 } |
2012 | 2012 |
2013 void DriveFileSyncService::NotifyObserversFileStatusChanged( | 2013 void DriveFileSyncService::NotifyObserversFileStatusChanged( |
2014 const fileapi::FileSystemURL& url, | 2014 const fileapi::FileSystemURL& url, |
2015 fileapi::SyncFileStatus sync_status, | 2015 SyncFileStatus sync_status, |
2016 fileapi::SyncAction action_taken, | 2016 SyncAction action_taken, |
2017 fileapi::SyncDirection direction) { | 2017 SyncDirection direction) { |
2018 if (sync_status != fileapi::SYNC_FILE_STATUS_SYNCED) { | 2018 if (sync_status != SYNC_FILE_STATUS_SYNCED) { |
2019 DCHECK_EQ(fileapi::SYNC_ACTION_NONE, action_taken); | 2019 DCHECK_EQ(SYNC_ACTION_NONE, action_taken); |
2020 DCHECK_EQ(fileapi::SYNC_DIRECTION_NONE, direction); | 2020 DCHECK_EQ(SYNC_DIRECTION_NONE, direction); |
2021 } | 2021 } |
2022 | 2022 |
2023 FOR_EACH_OBSERVER( | 2023 FOR_EACH_OBSERVER( |
2024 FileStatusObserver, file_status_observers_, | 2024 FileStatusObserver, file_status_observers_, |
2025 OnFileStatusChanged(url, sync_status, action_taken, direction)); | 2025 OnFileStatusChanged(url, sync_status, action_taken, direction)); |
2026 } | 2026 } |
2027 | 2027 |
2028 } // namespace sync_file_system | 2028 } // namespace sync_file_system |
OLD | NEW |