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

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

Issue 11665029: Sync FileSystem: Mark empty batch sync origin as incremental sync origin. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: +comment Created 7 years, 11 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) 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 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 const GURL& origin, 320 const GURL& origin,
321 const fileapi::SyncStatusCallback& callback) { 321 const fileapi::SyncStatusCallback& callback) {
322 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DATABASE, "")); 322 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DATABASE, ""));
323 if (!token) { 323 if (!token) {
324 pending_tasks_.push_back(base::Bind( 324 pending_tasks_.push_back(base::Bind(
325 &DriveFileSyncService::UnregisterOriginForTrackingChanges, 325 &DriveFileSyncService::UnregisterOriginForTrackingChanges,
326 AsWeakPtr(), origin, callback)); 326 AsWeakPtr(), origin, callback));
327 return; 327 return;
328 } 328 }
329 329
330 URLToChange::iterator found = url_to_change_.find(origin); 330 OriginToChangesMap::iterator found = origin_to_changes_map_.find(origin);
331 if (found != url_to_change_.end()) { 331 if (found != origin_to_changes_map_.end()) {
332 for (PathToChange::iterator itr = found->second.begin(); 332 for (PathToChangeMap::iterator itr = found->second.begin();
333 itr != found->second.end(); ++itr) 333 itr != found->second.end(); ++itr)
334 pending_changes_.erase(itr->second.position_in_queue); 334 pending_changes_.erase(itr->second.position_in_queue);
335 url_to_change_.erase(found); 335 origin_to_changes_map_.erase(found);
336 } 336 }
337 337
338 metadata_store_->RemoveOrigin(origin, base::Bind( 338 metadata_store_->RemoveOrigin(origin, base::Bind(
339 &DriveFileSyncService::DidRemoveOriginOnMetadataStore, 339 &DriveFileSyncService::DidRemoveOriginOnMetadataStore,
340 AsWeakPtr(), base::Passed(&token), callback)); 340 AsWeakPtr(), base::Passed(&token), callback));
341 } 341 }
342 342
343 void DriveFileSyncService::ProcessRemoteChange( 343 void DriveFileSyncService::ProcessRemoteChange(
344 RemoteChangeProcessor* processor, 344 RemoteChangeProcessor* processor,
345 const fileapi::SyncOperationCallback& callback) { 345 const fileapi::SyncOperationCallback& callback) {
(...skipping 18 matching lines...) Expand all
364 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); 364 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass());
365 callback.Run(fileapi::SYNC_STATUS_NO_CHANGE_TO_SYNC, 365 callback.Run(fileapi::SYNC_STATUS_NO_CHANGE_TO_SYNC,
366 fileapi::FileSystemURL(), 366 fileapi::FileSystemURL(),
367 fileapi::SYNC_OPERATION_NONE); 367 fileapi::SYNC_OPERATION_NONE);
368 return; 368 return;
369 } 369 }
370 370
371 const fileapi::FileSystemURL& url = pending_changes_.begin()->url; 371 const fileapi::FileSystemURL& url = pending_changes_.begin()->url;
372 const GURL& origin = url.origin(); 372 const GURL& origin = url.origin();
373 const FilePath& path = url.path(); 373 const FilePath& path = url.path();
374 DCHECK(ContainsKey(url_to_change_, origin)); 374 DCHECK(ContainsKey(origin_to_changes_map_, origin));
375 PathToChange* path_to_change = &url_to_change_[origin]; 375 PathToChangeMap* path_to_change = &origin_to_changes_map_[origin];
376 DCHECK(ContainsKey(*path_to_change, path)); 376 DCHECK(ContainsKey(*path_to_change, path));
377 const RemoteChange& remote_change = (*path_to_change)[path]; 377 const RemoteChange& remote_change = (*path_to_change)[path];
378 378
379 DVLOG(1) << "ProcessRemoteChange for " << url.DebugString() 379 DVLOG(1) << "ProcessRemoteChange for " << url.DebugString()
380 << " remote_change:" << remote_change.change.DebugString(); 380 << " remote_change:" << remote_change.change.DebugString();
381 381
382 scoped_ptr<ProcessRemoteChangeParam> param(new ProcessRemoteChangeParam( 382 scoped_ptr<ProcessRemoteChangeParam> param(new ProcessRemoteChangeParam(
383 token.Pass(), processor, remote_change, callback)); 383 token.Pass(), processor, remote_change, callback));
384 processor->PrepareForProcessRemoteChange( 384 processor->PrepareForProcessRemoteChange(
385 remote_change.url, 385 remote_change.url,
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 GURL next_feed_url; 880 GURL next_feed_url;
881 if (feed->GetNextFeedURL(&next_feed_url)) { 881 if (feed->GetNextFeedURL(&next_feed_url)) {
882 sync_client_->ContinueListing( 882 sync_client_->ContinueListing(
883 next_feed_url, 883 next_feed_url,
884 base::Bind( 884 base::Bind(
885 &DriveFileSyncService::DidGetDirectoryContentForBatchSync, 885 &DriveFileSyncService::DidGetDirectoryContentForBatchSync,
886 AsWeakPtr(), base::Passed(&token), origin, largest_changestamp)); 886 AsWeakPtr(), base::Passed(&token), origin, largest_changestamp));
887 return; 887 return;
888 } 888 }
889 889
890 // Move |origin| to the incremental sync origin set if the origin has no file.
891 if (metadata_store_->IsBatchSyncOrigin(origin) &&
892 !ContainsKey(origin_to_changes_map_, origin)) {
893 metadata_store_->MoveBatchSyncOriginToIncremental(origin);
894 }
895
890 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); 896 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass());
891 } 897 }
892 898
893 void DriveFileSyncService::DidRemoveOriginOnMetadataStore( 899 void DriveFileSyncService::DidRemoveOriginOnMetadataStore(
894 scoped_ptr<TaskToken> token, 900 scoped_ptr<TaskToken> token,
895 const fileapi::SyncStatusCallback& callback, 901 const fileapi::SyncStatusCallback& callback,
896 fileapi::SyncStatusCode status) { 902 fileapi::SyncStatusCode status) {
897 NotifyTaskDone(status, token.Pass()); 903 NotifyTaskDone(status, token.Pass());
898 callback.Run(status); 904 callback.Run(status);
899 } 905 }
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 REMOTE_SYNC_TYPE_FETCH); 1487 REMOTE_SYNC_TYPE_FETCH);
1482 } 1488 }
1483 1489
1484 bool DriveFileSyncService::AppendRemoteChangeInternal( 1490 bool DriveFileSyncService::AppendRemoteChangeInternal(
1485 const GURL& origin, 1491 const GURL& origin,
1486 const FilePath& path, 1492 const FilePath& path,
1487 bool is_deleted, 1493 bool is_deleted,
1488 const std::string& resource_id, 1494 const std::string& resource_id,
1489 int64 changestamp, 1495 int64 changestamp,
1490 RemoteSyncType sync_type) { 1496 RemoteSyncType sync_type) {
1491 PathToChange* path_to_change = &url_to_change_[origin]; 1497 PathToChangeMap* path_to_change = &origin_to_changes_map_[origin];
1492 PathToChange::iterator found = path_to_change->find(path); 1498 PathToChangeMap::iterator found = path_to_change->find(path);
1493 if (found != path_to_change->end()) { 1499 if (found != path_to_change->end()) {
1494 if (found->second.changestamp >= changestamp) 1500 if (found->second.changestamp >= changestamp)
1495 return false; 1501 return false;
1496 pending_changes_.erase(found->second.position_in_queue); 1502 pending_changes_.erase(found->second.position_in_queue);
1497 } 1503 }
1498 1504
1499 fileapi::FileSystemURL url( 1505 fileapi::FileSystemURL url(
1500 fileapi::CreateSyncableFileSystemURL(origin, kServiceName, path)); 1506 fileapi::CreateSyncableFileSystemURL(origin, kServiceName, path));
1501 1507
1502 fileapi::FileChange::ChangeType change_type; 1508 fileapi::FileChange::ChangeType change_type;
(...skipping 17 matching lines...) Expand all
1520 << file_change.DebugString(); 1526 << file_change.DebugString();
1521 1527
1522 (*path_to_change)[path] = RemoteChange( 1528 (*path_to_change)[path] = RemoteChange(
1523 changestamp, resource_id, sync_type, url, file_change, 1529 changestamp, resource_id, sync_type, url, file_change,
1524 inserted_to_queue.first); 1530 inserted_to_queue.first);
1525 return true; 1531 return true;
1526 } 1532 }
1527 1533
1528 void DriveFileSyncService::RemoveRemoteChange( 1534 void DriveFileSyncService::RemoveRemoteChange(
1529 const fileapi::FileSystemURL& url) { 1535 const fileapi::FileSystemURL& url) {
1530 URLToChange::iterator found_origin = url_to_change_.find(url.origin()); 1536 OriginToChangesMap::iterator found_origin =
1531 if (found_origin == url_to_change_.end()) 1537 origin_to_changes_map_.find(url.origin());
1538 if (found_origin == origin_to_changes_map_.end())
1532 return; 1539 return;
1533 1540
1534 PathToChange* path_to_change = &found_origin->second; 1541 PathToChangeMap* path_to_change = &found_origin->second;
1535 PathToChange::iterator found_change = path_to_change->find(url.path()); 1542 PathToChangeMap::iterator found_change = path_to_change->find(url.path());
1536 if (found_change == path_to_change->end()) 1543 if (found_change == path_to_change->end())
1537 return; 1544 return;
1538 1545
1539 pending_changes_.erase(found_change->second.position_in_queue); 1546 pending_changes_.erase(found_change->second.position_in_queue);
1540 path_to_change->erase(found_change); 1547 path_to_change->erase(found_change);
1541 if (path_to_change->empty()) 1548 if (path_to_change->empty())
1542 url_to_change_.erase(found_origin); 1549 origin_to_changes_map_.erase(found_origin);
1543 1550
1544 if (metadata_store_->IsBatchSyncOrigin(url.origin()) && 1551 if (metadata_store_->IsBatchSyncOrigin(url.origin()) &&
1545 !ContainsKey(url_to_change_, url.origin())) { 1552 !ContainsKey(origin_to_changes_map_, url.origin())) {
1546 metadata_store_->MoveBatchSyncOriginToIncremental(url.origin()); 1553 metadata_store_->MoveBatchSyncOriginToIncremental(url.origin());
1547 } 1554 }
1548 } 1555 }
1549 1556
1550 bool DriveFileSyncService::GetPendingChangeForFileSystemURL( 1557 bool DriveFileSyncService::GetPendingChangeForFileSystemURL(
1551 const fileapi::FileSystemURL& url, 1558 const fileapi::FileSystemURL& url,
1552 RemoteChange* change) const { 1559 RemoteChange* change) const {
1553 DCHECK(change); 1560 DCHECK(change);
1554 URLToChange::const_iterator found_url = url_to_change_.find(url.origin()); 1561 OriginToChangesMap::const_iterator found_url =
1555 if (found_url == url_to_change_.end()) 1562 origin_to_changes_map_.find(url.origin());
1563 if (found_url == origin_to_changes_map_.end())
1556 return false; 1564 return false;
1557 const PathToChange& path_to_change = found_url->second; 1565 const PathToChangeMap& path_to_change = found_url->second;
1558 PathToChange::const_iterator found_path = path_to_change.find(url.path()); 1566 PathToChangeMap::const_iterator found_path = path_to_change.find(url.path());
1559 if (found_path == path_to_change.end()) 1567 if (found_path == path_to_change.end())
1560 return false; 1568 return false;
1561 *change = found_path->second; 1569 *change = found_path->second;
1562 return true; 1570 return true;
1563 } 1571 }
1564 1572
1565 void DriveFileSyncService::FetchChangesForIncrementalSync() { 1573 void DriveFileSyncService::FetchChangesForIncrementalSync() {
1566 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DRIVE, 1574 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DRIVE,
1567 "Fetching remote change list")); 1575 "Fetching remote change list"));
1568 if (!token) { 1576 if (!token) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 fileapi::SyncStatusCode 1700 fileapi::SyncStatusCode
1693 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( 1701 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper(
1694 google_apis::GDataErrorCode error) const { 1702 google_apis::GDataErrorCode error) const {
1695 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 1703 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
1696 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) 1704 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated())
1697 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; 1705 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED;
1698 return status; 1706 return status;
1699 } 1707 }
1700 1708
1701 } // namespace sync_file_system 1709 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698