| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_backend/sync_worker.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), | 95 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
| 96 should_check_conflict_(true), | 96 should_check_conflict_(true), |
| 97 should_check_remote_change_(true), | 97 should_check_remote_change_(true), |
| 98 listing_remote_changes_(false), | 98 listing_remote_changes_(false), |
| 99 sync_enabled_(false), | 99 sync_enabled_(false), |
| 100 default_conflict_resolution_policy_( | 100 default_conflict_resolution_policy_( |
| 101 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), | 101 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), |
| 102 network_available_(false), | 102 network_available_(false), |
| 103 extension_service_(extension_service), | 103 extension_service_(extension_service), |
| 104 context_(sync_engine_context.Pass()), | 104 context_(sync_engine_context.Pass()), |
| 105 has_refresh_token_(false), |
| 105 weak_ptr_factory_(this) {} | 106 weak_ptr_factory_(this) {} |
| 106 | 107 |
| 107 SyncWorker::~SyncWorker() {} | 108 SyncWorker::~SyncWorker() {} |
| 108 | 109 |
| 109 void SyncWorker::Initialize() { | 110 void SyncWorker::Initialize() { |
| 110 DCHECK(!task_manager_); | 111 DCHECK(!task_manager_); |
| 111 | 112 |
| 112 task_manager_.reset(new SyncTaskManager( | 113 task_manager_.reset(new SyncTaskManager( |
| 113 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */)); | 114 weak_ptr_factory_.GetWeakPtr(), 0 /* maximum_background_task */)); |
| 114 task_manager_->Initialize(SYNC_STATUS_OK); | 115 task_manager_->Initialize(SYNC_STATUS_OK); |
| 115 | 116 |
| 116 PostInitializeTask(); | 117 PostInitializeTask(); |
| 117 | 118 |
| 118 net::NetworkChangeNotifier::ConnectionType type = | 119 net::NetworkChangeNotifier::ConnectionType type = |
| 119 net::NetworkChangeNotifier::GetConnectionType(); | 120 net::NetworkChangeNotifier::GetConnectionType(); |
| 120 network_available_ = | 121 network_available_ = |
| 121 type != net::NetworkChangeNotifier::CONNECTION_NONE; | 122 type != net::NetworkChangeNotifier::CONNECTION_NONE; |
| 122 } | 123 } |
| 123 | 124 |
| 124 void SyncWorker::RegisterOrigin( | 125 void SyncWorker::RegisterOrigin( |
| 125 const GURL& origin, | 126 const GURL& origin, |
| 126 const SyncStatusCallback& callback) { | 127 const SyncStatusCallback& callback) { |
| 127 if (!GetMetadataDatabase() && GetDriveService()->HasRefreshToken()) | 128 if (!GetMetadataDatabase() && has_refresh_token_) |
| 128 PostInitializeTask(); | 129 PostInitializeTask(); |
| 129 | 130 |
| 130 scoped_ptr<RegisterAppTask> task( | 131 scoped_ptr<RegisterAppTask> task( |
| 131 new RegisterAppTask(context_.get(), origin.host())); | 132 new RegisterAppTask(context_.get(), origin.host())); |
| 132 if (task->CanFinishImmediately()) { | 133 if (task->CanFinishImmediately()) { |
| 133 context_->GetUITaskRunner()->PostTask( | 134 context_->GetUITaskRunner()->PostTask( |
| 134 FROM_HERE, base::Bind(callback, SYNC_STATUS_OK)); | 135 FROM_HERE, base::Bind(callback, SYNC_STATUS_OK)); |
| 135 return; | 136 return; |
| 136 } | 137 } |
| 137 | 138 |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 340 |
| 340 void SyncWorker::OnNotificationReceived() { | 341 void SyncWorker::OnNotificationReceived() { |
| 341 if (service_state_ == REMOTE_SERVICE_TEMPORARY_UNAVAILABLE) | 342 if (service_state_ == REMOTE_SERVICE_TEMPORARY_UNAVAILABLE) |
| 342 UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive."); | 343 UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive."); |
| 343 | 344 |
| 344 should_check_remote_change_ = true; | 345 should_check_remote_change_ = true; |
| 345 MaybeScheduleNextTask(); | 346 MaybeScheduleNextTask(); |
| 346 } | 347 } |
| 347 | 348 |
| 348 void SyncWorker::OnReadyToSendRequests(const std::string& account_id) { | 349 void SyncWorker::OnReadyToSendRequests(const std::string& account_id) { |
| 350 has_refresh_token_ = true; |
| 349 if (service_state_ == REMOTE_SERVICE_OK) | 351 if (service_state_ == REMOTE_SERVICE_OK) |
| 350 return; | 352 return; |
| 351 UpdateServiceState(REMOTE_SERVICE_OK, "Authenticated"); | 353 UpdateServiceState(REMOTE_SERVICE_OK, "Authenticated"); |
| 352 | 354 |
| 353 if (!GetMetadataDatabase() && !account_id.empty()) { | 355 if (!GetMetadataDatabase() && !account_id.empty()) { |
| 354 GetDriveService()->Initialize(account_id); | 356 GetDriveService()->Initialize(account_id); |
| 355 PostInitializeTask(); | 357 PostInitializeTask(); |
| 356 return; | 358 return; |
| 357 } | 359 } |
| 358 | 360 |
| 359 should_check_remote_change_ = true; | 361 should_check_remote_change_ = true; |
| 360 MaybeScheduleNextTask(); | 362 MaybeScheduleNextTask(); |
| 361 } | 363 } |
| 362 | 364 |
| 363 void SyncWorker::OnRefreshTokenInvalid() { | 365 void SyncWorker::OnRefreshTokenInvalid() { |
| 366 has_refresh_token_ = false; |
| 367 |
| 364 UpdateServiceState( | 368 UpdateServiceState( |
| 365 REMOTE_SERVICE_AUTHENTICATION_REQUIRED, | 369 REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 366 "Found invalid refresh token."); | 370 "Found invalid refresh token."); |
| 367 } | 371 } |
| 368 | 372 |
| 369 void SyncWorker::OnNetworkChanged( | 373 void SyncWorker::OnNetworkChanged( |
| 370 net::NetworkChangeNotifier::ConnectionType type) { | 374 net::NetworkChangeNotifier::ConnectionType type) { |
| 371 bool new_network_availability = | 375 bool new_network_availability = |
| 372 type != net::NetworkChangeNotifier::CONNECTION_NONE; | 376 type != net::NetworkChangeNotifier::CONNECTION_NONE; |
| 373 | 377 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 scoped_ptr<SyncTask>(initializer), | 439 scoped_ptr<SyncTask>(initializer), |
| 436 SyncTaskManager::PRIORITY_HIGH, | 440 SyncTaskManager::PRIORITY_HIGH, |
| 437 base::Bind(&SyncWorker::DidInitialize, | 441 base::Bind(&SyncWorker::DidInitialize, |
| 438 weak_ptr_factory_.GetWeakPtr(), | 442 weak_ptr_factory_.GetWeakPtr(), |
| 439 initializer)); | 443 initializer)); |
| 440 } | 444 } |
| 441 | 445 |
| 442 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer, | 446 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer, |
| 443 SyncStatusCode status) { | 447 SyncStatusCode status) { |
| 444 if (status != SYNC_STATUS_OK) { | 448 if (status != SYNC_STATUS_OK) { |
| 445 if (GetDriveService()->HasRefreshToken()) { | 449 if (has_refresh_token_) { |
| 446 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, | 450 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, |
| 447 "Could not initialize remote service"); | 451 "Could not initialize remote service"); |
| 448 } else { | 452 } else { |
| 449 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, | 453 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 450 "Authentication required."); | 454 "Authentication required."); |
| 451 } | 455 } |
| 452 return; | 456 return; |
| 453 } | 457 } |
| 454 | 458 |
| 455 scoped_ptr<MetadataDatabase> metadata_database = | 459 scoped_ptr<MetadataDatabase> metadata_database = |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 case SYNC_STATUS_ACCESS_FORBIDDEN: | 668 case SYNC_STATUS_ACCESS_FORBIDDEN: |
| 665 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, | 669 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 666 "Access forbidden"); | 670 "Access forbidden"); |
| 667 break; | 671 break; |
| 668 | 672 |
| 669 // Errors which could make the service temporarily unavailable. | 673 // Errors which could make the service temporarily unavailable. |
| 670 case SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE: | 674 case SYNC_STATUS_SERVICE_TEMPORARILY_UNAVAILABLE: |
| 671 case SYNC_STATUS_NETWORK_ERROR: | 675 case SYNC_STATUS_NETWORK_ERROR: |
| 672 case SYNC_STATUS_ABORT: | 676 case SYNC_STATUS_ABORT: |
| 673 case SYNC_STATUS_FAILED: | 677 case SYNC_STATUS_FAILED: |
| 674 if (GetDriveService()->HasRefreshToken()) { | 678 if (has_refresh_token_) { |
| 675 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, | 679 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, |
| 676 "Network or temporary service error."); | 680 "Network or temporary service error."); |
| 677 } else { | 681 } else { |
| 678 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, | 682 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
| 679 "Authentication required"); | 683 "Authentication required"); |
| 680 } | 684 } |
| 681 break; | 685 break; |
| 682 | 686 |
| 683 // Errors which would require manual user intervention to resolve. | 687 // Errors which would require manual user intervention to resolve. |
| 684 case SYNC_DATABASE_ERROR_CORRUPTION: | 688 case SYNC_DATABASE_ERROR_CORRUPTION: |
| (...skipping 21 matching lines...) Expand all Loading... |
| 706 "Service state changed: %d->%d: %s", | 710 "Service state changed: %d->%d: %s", |
| 707 old_state, GetCurrentState(), description.c_str()); | 711 old_state, GetCurrentState(), description.c_str()); |
| 708 | 712 |
| 709 FOR_EACH_OBSERVER( | 713 FOR_EACH_OBSERVER( |
| 710 Observer, observers_, | 714 Observer, observers_, |
| 711 UpdateServiceState(GetCurrentState(), description)); | 715 UpdateServiceState(GetCurrentState(), description)); |
| 712 } | 716 } |
| 713 | 717 |
| 714 } // namespace drive_backend | 718 } // namespace drive_backend |
| 715 } // namespace sync_file_system | 719 } // namespace sync_file_system |
| OLD | NEW |