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 <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 completion_callback_.Reset(); | 85 completion_callback_.Reset(); |
86 } | 86 } |
87 | 87 |
88 void UpdateTask(const tracked_objects::Location& location, | 88 void UpdateTask(const tracked_objects::Location& location, |
89 TaskType task_type, | 89 TaskType task_type, |
90 const std::string& description) { | 90 const std::string& description) { |
91 location_ = location; | 91 location_ = location; |
92 task_type_ = task_type; | 92 task_type_ = task_type; |
93 description_ = description; | 93 description_ = description; |
94 | 94 |
95 DVLOG(1) << "Token updated: " << description_ | 95 DVLOG(2) << "Token updated: " << description_ |
96 << " " << location_.ToString(); | 96 << " " << location_.ToString(); |
97 } | 97 } |
98 | 98 |
99 const tracked_objects::Location& location() const { return location_; } | 99 const tracked_objects::Location& location() const { return location_; } |
100 TaskType task_type() const { return task_type_; } | 100 TaskType task_type() const { return task_type_; } |
101 const std::string& description() const { return description_; } | 101 const std::string& description() const { return description_; } |
102 std::string done_description() const { return description_ + " done"; } | 102 std::string done_description() const { return description_ + " done"; } |
103 | 103 |
104 void set_completion_callback(const base::Closure& callback) { | 104 void set_completion_callback(const base::Closure& callback) { |
105 completion_callback_ = callback; | 105 completion_callback_ = callback; |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 } | 360 } |
361 | 361 |
362 const fileapi::FileSystemURL& url = pending_changes_.begin()->url; | 362 const fileapi::FileSystemURL& url = pending_changes_.begin()->url; |
363 const GURL& origin = url.origin(); | 363 const GURL& origin = url.origin(); |
364 const FilePath& path = url.path(); | 364 const FilePath& path = url.path(); |
365 DCHECK(ContainsKey(url_to_change_, origin)); | 365 DCHECK(ContainsKey(url_to_change_, origin)); |
366 PathToChange* path_to_change = &url_to_change_[origin]; | 366 PathToChange* path_to_change = &url_to_change_[origin]; |
367 DCHECK(ContainsKey(*path_to_change, path)); | 367 DCHECK(ContainsKey(*path_to_change, path)); |
368 const RemoteChange& remote_change = (*path_to_change)[path]; | 368 const RemoteChange& remote_change = (*path_to_change)[path]; |
369 | 369 |
| 370 DVLOG(1) << "ProcessRemoteChange for " << url.DebugString() |
| 371 << " remote_change:" << remote_change.change.DebugString(); |
| 372 |
370 scoped_ptr<ProcessRemoteChangeParam> param(new ProcessRemoteChangeParam( | 373 scoped_ptr<ProcessRemoteChangeParam> param(new ProcessRemoteChangeParam( |
371 token.Pass(), processor, remote_change, callback)); | 374 token.Pass(), processor, remote_change, callback)); |
372 processor->PrepareForProcessRemoteChange( | 375 processor->PrepareForProcessRemoteChange( |
373 remote_change.url, | 376 remote_change.url, |
374 base::Bind(&DriveFileSyncService::DidPrepareForProcessRemoteChange, | 377 base::Bind(&DriveFileSyncService::DidPrepareForProcessRemoteChange, |
375 AsWeakPtr(), base::Passed(¶m))); | 378 AsWeakPtr(), base::Passed(¶m))); |
376 } | 379 } |
377 | 380 |
378 LocalChangeProcessor* DriveFileSyncService::GetLocalChangeProcessor() { | 381 LocalChangeProcessor* DriveFileSyncService::GetLocalChangeProcessor() { |
379 return this; | 382 return this; |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 return token_.Pass(); | 583 return token_.Pass(); |
581 } | 584 } |
582 | 585 |
583 void DriveFileSyncService::NotifyTaskDone(fileapi::SyncStatusCode status, | 586 void DriveFileSyncService::NotifyTaskDone(fileapi::SyncStatusCode status, |
584 scoped_ptr<TaskToken> token) { | 587 scoped_ptr<TaskToken> token) { |
585 DCHECK(token); | 588 DCHECK(token); |
586 last_operation_status_ = status; | 589 last_operation_status_ = status; |
587 token_ = token.Pass(); | 590 token_ = token.Pass(); |
588 | 591 |
589 if (token_->task_type() != TASK_TYPE_NONE) { | 592 if (token_->task_type() != TASK_TYPE_NONE) { |
590 DVLOG(1) << "NotifyTaskDone: " << token_->description() | 593 DVLOG(2) << "NotifyTaskDone: " << token_->description() |
591 << ": finished with status=" << status | 594 << ": finished with status=" << status |
| 595 << " (" << SyncStatusCodeToString(status) << ")" |
592 << " " << token_->location().ToString(); | 596 << " " << token_->location().ToString(); |
593 | 597 |
594 RemoteServiceState old_state = state_; | 598 RemoteServiceState old_state = state_; |
595 UpdateServiceState(); | 599 UpdateServiceState(); |
596 | 600 |
597 // Notify remote sync service state if the state has been changed. | 601 // Notify remote sync service state if the state has been changed. |
598 if (!token_->description().empty() || old_state != state_) { | 602 if (!token_->description().empty() || old_state != state_) { |
599 FOR_EACH_OBSERVER( | 603 FOR_EACH_OBSERVER( |
600 Observer, observers_, | 604 Observer, observers_, |
601 OnRemoteServiceStateUpdated(state_, token_->done_description())); | 605 OnRemoteServiceStateUpdated(state_, token_->done_description())); |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1410 } | 1414 } |
1411 | 1415 |
1412 polling_enabled_ = false; | 1416 polling_enabled_ = false; |
1413 token->set_completion_callback(base::Bind(&EnablePolling, &polling_enabled_)); | 1417 token->set_completion_callback(base::Bind(&EnablePolling, &polling_enabled_)); |
1414 | 1418 |
1415 if (metadata_store_->incremental_sync_origins().empty()) { | 1419 if (metadata_store_->incremental_sync_origins().empty()) { |
1416 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); | 1420 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); |
1417 return; | 1421 return; |
1418 } | 1422 } |
1419 | 1423 |
| 1424 DVLOG(1) << "FetchChangesForIncrementalSync (start_changestamp:" |
| 1425 << (largest_fetched_changestamp_ + 1) << ")"; |
| 1426 |
1420 sync_client_->ListChanges( | 1427 sync_client_->ListChanges( |
1421 largest_fetched_changestamp_ + 1, | 1428 largest_fetched_changestamp_ + 1, |
1422 base::Bind(&DriveFileSyncService::DidFetchChangesForIncrementalSync, | 1429 base::Bind(&DriveFileSyncService::DidFetchChangesForIncrementalSync, |
1423 AsWeakPtr(), base::Passed(&token))); | 1430 AsWeakPtr(), base::Passed(&token))); |
1424 } | 1431 } |
1425 | 1432 |
1426 void DriveFileSyncService::DidFetchChangesForIncrementalSync( | 1433 void DriveFileSyncService::DidFetchChangesForIncrementalSync( |
1427 scoped_ptr<TaskToken> token, | 1434 scoped_ptr<TaskToken> token, |
1428 google_apis::GDataErrorCode error, | 1435 google_apis::GDataErrorCode error, |
1429 scoped_ptr<google_apis::DocumentFeed> changes) { | 1436 scoped_ptr<google_apis::DocumentFeed> changes) { |
1430 if (error != google_apis::HTTP_SUCCESS) { | 1437 if (error != google_apis::HTTP_SUCCESS) { |
1431 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass()); | 1438 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass()); |
1432 return; | 1439 return; |
1433 } | 1440 } |
1434 | 1441 |
1435 typedef ScopedVector<google_apis::DocumentEntry>::const_iterator iterator; | 1442 typedef ScopedVector<google_apis::DocumentEntry>::const_iterator iterator; |
1436 for (iterator itr = changes->entries().begin(); | 1443 for (iterator itr = changes->entries().begin(); |
1437 itr != changes->entries().end(); ++itr) { | 1444 itr != changes->entries().end(); ++itr) { |
1438 const google_apis::DocumentEntry& entry = **itr; | 1445 const google_apis::DocumentEntry& entry = **itr; |
| 1446 DVLOG(3) << " change:" << entry.title(); |
1439 GURL origin; | 1447 GURL origin; |
1440 if (!GetOriginForEntry(entry, &origin)) | 1448 if (!GetOriginForEntry(entry, &origin)) |
1441 continue; | 1449 continue; |
1442 | 1450 |
1443 AppendNewRemoteChange(origin, entry, entry.changestamp(), | 1451 AppendNewRemoteChange(origin, entry, entry.changestamp(), |
1444 REMOTE_SYNC_TYPE_INCREMENTAL); | 1452 REMOTE_SYNC_TYPE_INCREMENTAL); |
1445 } | 1453 } |
1446 | 1454 |
1447 GURL next_feed; | 1455 GURL next_feed; |
1448 if (changes->GetNextFeedURL(&next_feed)) { | 1456 if (changes->GetNextFeedURL(&next_feed)) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1522 fileapi::SyncStatusCode | 1530 fileapi::SyncStatusCode |
1523 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( | 1531 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( |
1524 google_apis::GDataErrorCode error) const { | 1532 google_apis::GDataErrorCode error) const { |
1525 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 1533 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); |
1526 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) | 1534 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) |
1527 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; | 1535 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; |
1528 return status; | 1536 return status; |
1529 } | 1537 } |
1530 | 1538 |
1531 } // namespace sync_file_system | 1539 } // namespace sync_file_system |
OLD | NEW |