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

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

Issue 11418305: Fix incremental sync behavior of DriveFileSyncService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 if (param->drive_metadata.conflicted()) { 1076 if (param->drive_metadata.conflicted()) {
1077 if (missing_local_file) { 1077 if (missing_local_file) {
1078 if (param->remote_change.change.IsAddOrUpdate()) { 1078 if (param->remote_change.change.IsAddOrUpdate()) {
1079 NOTIMPLEMENTED() << "ResolveToRemote()"; 1079 NOTIMPLEMENTED() << "ResolveToRemote()";
1080 AbortRemoteSync(param.Pass(), fileapi::SYNC_STATUS_FAILED); 1080 AbortRemoteSync(param.Pass(), fileapi::SYNC_STATUS_FAILED);
1081 return; 1081 return;
1082 } 1082 }
1083 1083
1084 DCHECK(param->remote_change.change.IsDelete()); 1084 DCHECK(param->remote_change.change.IsDelete());
1085 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1085 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1086 DeleteMetadataForRemoteSync(param.Pass()); 1086 if (missing_db_entry)
1087 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK);
kinuko 2012/12/04 08:55:42 Could this happen? (We're in metadata.conflicted()
tzik 2012/12/04 09:14:29 Done. It can't be reached.
1088 else
1089 DeleteMetadataForRemoteSync(param.Pass());
1087 return; 1090 return;
1088 } 1091 }
1089 1092
1090 DCHECK(!missing_local_file); 1093 DCHECK(!missing_local_file);
1091 if (param->remote_change.change.IsAddOrUpdate()) { 1094 if (param->remote_change.change.IsAddOrUpdate()) {
1092 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1095 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1093 param->drive_metadata.set_conflicted(true); 1096 param->drive_metadata.set_conflicted(true);
1094 1097
1095 metadata_store_->UpdateEntry( 1098 metadata_store_->UpdateEntry(
1096 url, drive_metadata, 1099 url, drive_metadata,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 DCHECK(local_changes.list().back().IsDelete()); 1138 DCHECK(local_changes.list().back().IsDelete());
1136 param->operation_type = fileapi::SYNC_OPERATION_ADD; 1139 param->operation_type = fileapi::SYNC_OPERATION_ADD;
1137 DownloadForRemoteSync(param.Pass()); 1140 DownloadForRemoteSync(param.Pass());
1138 return; 1141 return;
1139 } 1142 }
1140 1143
1141 DCHECK(param->remote_change.change.IsDelete()); 1144 DCHECK(param->remote_change.change.IsDelete());
1142 if (local_changes.empty()) { 1145 if (local_changes.empty()) {
1143 if (missing_local_file) { 1146 if (missing_local_file) {
1144 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1147 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1145 DeleteMetadataForRemoteSync(param.Pass()); 1148 if (missing_db_entry)
1149 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK);
1150 else
1151 DeleteMetadataForRemoteSync(param.Pass());
1146 return; 1152 return;
1147 } 1153 }
1148 DCHECK(!missing_local_file); 1154 DCHECK(!missing_local_file);
1149 param->operation_type = fileapi::SYNC_OPERATION_DELETE; 1155 param->operation_type = fileapi::SYNC_OPERATION_DELETE;
1150 1156
1151 const fileapi::FileChange& file_change = param->remote_change.change; 1157 const fileapi::FileChange& file_change = param->remote_change.change;
1152 param->processor->ApplyRemoteChange( 1158 param->processor->ApplyRemoteChange(
1153 file_change, FilePath(), url, 1159 file_change, FilePath(), url,
1154 base::Bind(&DriveFileSyncService::DidApplyRemoteChange, AsWeakPtr(), 1160 base::Bind(&DriveFileSyncService::DidApplyRemoteChange, AsWeakPtr(),
1155 base::Passed(&param))); 1161 base::Passed(&param)));
1156 return; 1162 return;
1157 } 1163 }
1158 1164
1159 DCHECK(!local_changes.empty()); 1165 DCHECK(!local_changes.empty());
1160 if (local_changes.list().back().IsAddOrUpdate()) { 1166 if (local_changes.list().back().IsAddOrUpdate()) {
1161 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1167 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1162 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); 1168 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK);
1163 return; 1169 return;
1164 } 1170 }
1165 1171
1166 DCHECK(local_changes.list().back().IsDelete()); 1172 DCHECK(local_changes.list().back().IsDelete());
1167 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1173 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1168 DeleteMetadataForRemoteSync(param.Pass()); 1174 if (missing_db_entry)
1175 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK);
1176 else
1177 DeleteMetadataForRemoteSync(param.Pass());
1169 } 1178 }
1170 1179
1171 void DriveFileSyncService::DownloadForRemoteSync( 1180 void DriveFileSyncService::DownloadForRemoteSync(
1172 scoped_ptr<ProcessRemoteChangeParam> param) { 1181 scoped_ptr<ProcessRemoteChangeParam> param) {
1173 // TODO(tzik): Use ShareableFileReference here after we get thread-safe 1182 // TODO(tzik): Use ShareableFileReference here after we get thread-safe
1174 // version of it. crbug.com/162598 1183 // version of it. crbug.com/162598
1175 FilePath* temporary_file_path = &param->temporary_file_path; 1184 FilePath* temporary_file_path = &param->temporary_file_path;
1176 content::BrowserThread::PostTaskAndReplyWithResult( 1185 content::BrowserThread::PostTaskAndReplyWithResult(
1177 content::BrowserThread::FILE, FROM_HERE, 1186 content::BrowserThread::FILE, FROM_HERE,
1178 base::Bind(&CreateTemporaryFile, 1187 base::Bind(&CreateTemporaryFile,
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 1405
1397 polling_enabled_ = false; 1406 polling_enabled_ = false;
1398 token->set_completion_callback(base::Bind(&EnablePolling, &polling_enabled_)); 1407 token->set_completion_callback(base::Bind(&EnablePolling, &polling_enabled_));
1399 1408
1400 if (metadata_store_->incremental_sync_origins().empty()) { 1409 if (metadata_store_->incremental_sync_origins().empty()) {
1401 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); 1410 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass());
1402 return; 1411 return;
1403 } 1412 }
1404 1413
1405 sync_client_->ListChanges( 1414 sync_client_->ListChanges(
1406 largest_fetched_changestamp_, 1415 largest_fetched_changestamp_ + 1,
1407 base::Bind(&DriveFileSyncService::DidFetchChangesForIncrementalSync, 1416 base::Bind(&DriveFileSyncService::DidFetchChangesForIncrementalSync,
1408 AsWeakPtr(), base::Passed(&token))); 1417 AsWeakPtr(), base::Passed(&token)));
1409 } 1418 }
1410 1419
1411 void DriveFileSyncService::DidFetchChangesForIncrementalSync( 1420 void DriveFileSyncService::DidFetchChangesForIncrementalSync(
1412 scoped_ptr<TaskToken> token, 1421 scoped_ptr<TaskToken> token,
1413 google_apis::GDataErrorCode error, 1422 google_apis::GDataErrorCode error,
1414 scoped_ptr<google_apis::DocumentFeed> changes) { 1423 scoped_ptr<google_apis::DocumentFeed> changes) {
1415 if (error != google_apis::HTTP_SUCCESS) { 1424 if (error != google_apis::HTTP_SUCCESS) {
1416 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass()); 1425 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass());
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1507 fileapi::SyncStatusCode 1516 fileapi::SyncStatusCode
1508 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( 1517 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper(
1509 google_apis::GDataErrorCode error) const { 1518 google_apis::GDataErrorCode error) const {
1510 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 1519 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
1511 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) 1520 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated())
1512 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; 1521 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED;
1513 return status; 1522 return status;
1514 } 1523 }
1515 1524
1516 } // namespace sync_file_system 1525 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698