| 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/profile_sync_service_harness.h" | 5 #include "chrome/browser/sync/profile_sync_service_harness.h" |
| 6 | 6 |
| 7 #include <cstddef> | 7 #include <cstddef> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <ostream> | 9 #include <ostream> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 SignalStateCompleteWithNextState(FULLY_SYNCED); | 272 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 273 break; | 273 break; |
| 274 } | 274 } |
| 275 if (service()->passphrase_required_reason() == | 275 if (service()->passphrase_required_reason() == |
| 276 sync_api::REASON_SET_PASSPHRASE_FAILED) { | 276 sync_api::REASON_SET_PASSPHRASE_FAILED) { |
| 277 // A passphrase is required for decryption and we don't have it. Do not | 277 // A passphrase is required for decryption and we don't have it. Do not |
| 278 // wait any more. | 278 // wait any more. |
| 279 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED); | 279 SignalStateCompleteWithNextState(SET_PASSPHRASE_FAILED); |
| 280 break; | 280 break; |
| 281 } | 281 } |
| 282 if (!GetStatus().server_reachable) { | |
| 283 // The client cannot reach the sync server because the network is | |
| 284 // disabled. There is no need to wait anymore. | |
| 285 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); | |
| 286 break; | |
| 287 } | |
| 288 break; | 282 break; |
| 289 } | 283 } |
| 290 case WAITING_FOR_DATA_SYNC: { | 284 case WAITING_FOR_DATA_SYNC: { |
| 291 if (IsDataSynced()) { | 285 if (IsDataSynced()) { |
| 292 SignalStateCompleteWithNextState(FULLY_SYNCED); | 286 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 293 break; | 287 break; |
| 294 } | 288 } |
| 295 break; | 289 break; |
| 296 } | 290 } |
| 297 case WAITING_FOR_UPDATES: { | 291 case WAITING_FOR_UPDATES: { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 // The correctness of this if condition may depend on the ordering of its | 324 // The correctness of this if condition may depend on the ordering of its |
| 331 // sub-expressions. See crbug.com/98607, crbug.com/95619. | 325 // sub-expressions. See crbug.com/98607, crbug.com/95619. |
| 332 // TODO(rlarocque): Figure out a less brittle way of detecting this. | 326 // TODO(rlarocque): Figure out a less brittle way of detecting this. |
| 333 if (IsTypeEncrypted(waiting_for_encryption_type_) && | 327 if (IsTypeEncrypted(waiting_for_encryption_type_) && |
| 334 IsFullySynced() && | 328 IsFullySynced() && |
| 335 GetLastSessionSnapshot()->num_conflicting_updates == 0) { | 329 GetLastSessionSnapshot()->num_conflicting_updates == 0) { |
| 336 // Encryption is now complete for the the type in which we were waiting. | 330 // Encryption is now complete for the the type in which we were waiting. |
| 337 SignalStateCompleteWithNextState(FULLY_SYNCED); | 331 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 338 break; | 332 break; |
| 339 } | 333 } |
| 340 if (!GetStatus().server_reachable) { | |
| 341 // The client cannot reach the sync server because the network is | |
| 342 // disabled. There is no need to wait anymore. | |
| 343 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); | |
| 344 break; | |
| 345 } | |
| 346 break; | 334 break; |
| 347 } | 335 } |
| 348 case WAITING_FOR_SYNC_CONFIGURATION: { | 336 case WAITING_FOR_SYNC_CONFIGURATION: { |
| 349 DVLOG(1) << GetClientInfoString("WAITING_FOR_SYNC_CONFIGURATION"); | 337 DVLOG(1) << GetClientInfoString("WAITING_FOR_SYNC_CONFIGURATION"); |
| 350 if (service()->ShouldPushChanges()) { | 338 if (service()->ShouldPushChanges()) { |
| 351 // The Datatype manager is configured and sync is fully initialized. | 339 // The Datatype manager is configured and sync is fully initialized. |
| 352 SignalStateCompleteWithNextState(FULLY_SYNCED); | 340 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 353 } | 341 } |
| 354 break; | 342 break; |
| 355 } | 343 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 case WAITING_FOR_ACTIONABLE_ERROR: { | 381 case WAITING_FOR_ACTIONABLE_ERROR: { |
| 394 DVLOG(1) << GetClientInfoString("WAITING_FOR_ACTIONABLE_ERROR"); | 382 DVLOG(1) << GetClientInfoString("WAITING_FOR_ACTIONABLE_ERROR"); |
| 395 ProfileSyncService::Status status = GetStatus(); | 383 ProfileSyncService::Status status = GetStatus(); |
| 396 if (status.sync_protocol_error.action != browser_sync::UNKNOWN_ACTION && | 384 if (status.sync_protocol_error.action != browser_sync::UNKNOWN_ACTION && |
| 397 service_->unrecoverable_error_detected() == true) { | 385 service_->unrecoverable_error_detected() == true) { |
| 398 // An actionable error has been detected. | 386 // An actionable error has been detected. |
| 399 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); | 387 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); |
| 400 } | 388 } |
| 401 break; | 389 break; |
| 402 } | 390 } |
| 403 case SERVER_UNREACHABLE: { | |
| 404 DVLOG(1) << GetClientInfoString("SERVER_UNREACHABLE"); | |
| 405 if (GetStatus().server_reachable) { | |
| 406 // The client was offline due to the network being disabled, but is now | |
| 407 // back online. Wait for the pending sync cycle to complete. | |
| 408 SignalStateCompleteWithNextState(WAITING_FOR_FULL_SYNC); | |
| 409 } | |
| 410 break; | |
| 411 } | |
| 412 case SET_PASSPHRASE_FAILED: { | 391 case SET_PASSPHRASE_FAILED: { |
| 413 // A passphrase is required for decryption. There is nothing the sync | 392 // A passphrase is required for decryption. There is nothing the sync |
| 414 // client can do until SetPassphrase() is called. | 393 // client can do until SetPassphrase() is called. |
| 415 DVLOG(1) << GetClientInfoString("SET_PASSPHRASE_FAILED"); | 394 DVLOG(1) << GetClientInfoString("SET_PASSPHRASE_FAILED"); |
| 416 break; | 395 break; |
| 417 } | 396 } |
| 418 case FULLY_SYNCED: { | 397 case FULLY_SYNCED: { |
| 419 // The client is online and fully synced. There is nothing to do. | 398 // The client is online and fully synced. There is nothing to do. |
| 420 DVLOG(1) << GetClientInfoString("FULLY_SYNCED"); | 399 DVLOG(1) << GetClientInfoString("FULLY_SYNCED"); |
| 421 break; | 400 break; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, | 511 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, |
| 533 "Waiting for sync configuration."); | 512 "Waiting for sync configuration."); |
| 534 } | 513 } |
| 535 | 514 |
| 536 bool ProfileSyncServiceHarness::AwaitDataSyncCompletion( | 515 bool ProfileSyncServiceHarness::AwaitDataSyncCompletion( |
| 537 const std::string& reason) { | 516 const std::string& reason) { |
| 538 DVLOG(1) << GetClientInfoString("AwaitDataSyncCompletion"); | 517 DVLOG(1) << GetClientInfoString("AwaitDataSyncCompletion"); |
| 539 | 518 |
| 540 CHECK(service()->sync_initialized()); | 519 CHECK(service()->sync_initialized()); |
| 541 CHECK_NE(wait_state_, SYNC_DISABLED); | 520 CHECK_NE(wait_state_, SYNC_DISABLED); |
| 542 CHECK_NE(wait_state_, SERVER_UNREACHABLE); | |
| 543 | 521 |
| 544 if (IsDataSynced()) { | 522 if (IsDataSynced()) { |
| 545 // Client is already synced; don't wait. | 523 // Client is already synced; don't wait. |
| 546 return true; | 524 return true; |
| 547 } | 525 } |
| 548 | 526 |
| 549 wait_state_ = WAITING_FOR_DATA_SYNC; | 527 wait_state_ = WAITING_FOR_DATA_SYNC; |
| 550 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | 528 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); |
| 551 if (wait_state_ == FULLY_SYNCED) { | 529 if (wait_state_ == FULLY_SYNCED) { |
| 552 return true; | 530 return true; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 563 if (wait_state_ == SYNC_DISABLED) { | 541 if (wait_state_ == SYNC_DISABLED) { |
| 564 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << "."; | 542 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << "."; |
| 565 return false; | 543 return false; |
| 566 } | 544 } |
| 567 | 545 |
| 568 if (IsFullySynced()) { | 546 if (IsFullySynced()) { |
| 569 // Client is already synced; don't wait. | 547 // Client is already synced; don't wait. |
| 570 return true; | 548 return true; |
| 571 } | 549 } |
| 572 | 550 |
| 573 if (wait_state_ == SERVER_UNREACHABLE) { | |
| 574 // Client was offline; wait for it to go online, and then wait for sync. | |
| 575 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | |
| 576 DCHECK_EQ(wait_state_, WAITING_FOR_FULL_SYNC); | |
| 577 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | |
| 578 } | |
| 579 | |
| 580 DCHECK(service()->sync_initialized()); | 551 DCHECK(service()->sync_initialized()); |
| 581 wait_state_ = WAITING_FOR_FULL_SYNC; | 552 wait_state_ = WAITING_FOR_FULL_SYNC; |
| 582 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | 553 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); |
| 583 if (wait_state_ == FULLY_SYNCED) { | 554 if (wait_state_ == FULLY_SYNCED) { |
| 584 // Client is online; sync was successful. | 555 // Client is online; sync was successful. |
| 585 return true; | 556 return true; |
| 586 } else if (wait_state_ == SERVER_UNREACHABLE) { | |
| 587 // Client is offline; sync was unsuccessful. | |
| 588 LOG(ERROR) << "Client went offline after waiting for sync to finish"; | |
| 589 return false; | |
| 590 } else { | 557 } else { |
| 591 LOG(ERROR) << "Invalid wait state: " << wait_state_; | 558 LOG(ERROR) << "Invalid wait state: " << wait_state_; |
| 592 return false; | 559 return false; |
| 593 } | 560 } |
| 594 } | 561 } |
| 595 | 562 |
| 596 bool ProfileSyncServiceHarness::AwaitSyncDisabled(const std::string& reason) { | 563 bool ProfileSyncServiceHarness::AwaitSyncDisabled(const std::string& reason) { |
| 597 DCHECK(service()->HasSyncSetupCompleted()); | 564 DCHECK(service()->HasSyncSetupCompleted()); |
| 598 DCHECK_NE(wait_state_, SYNC_DISABLED); | 565 DCHECK_NE(wait_state_, SYNC_DISABLED); |
| 599 wait_state_ = WAITING_FOR_SYNC_DISABLED; | 566 wait_state_ = WAITING_FOR_SYNC_DISABLED; |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 return service_->GetPreferredDataTypes().Has(type); | 1062 return service_->GetPreferredDataTypes().Has(type); |
| 1096 } | 1063 } |
| 1097 | 1064 |
| 1098 std::string ProfileSyncServiceHarness::GetServiceStatus() { | 1065 std::string ProfileSyncServiceHarness::GetServiceStatus() { |
| 1099 DictionaryValue value; | 1066 DictionaryValue value; |
| 1100 sync_ui_util::ConstructAboutInformation(service_, &value); | 1067 sync_ui_util::ConstructAboutInformation(service_, &value); |
| 1101 std::string service_status; | 1068 std::string service_status; |
| 1102 base::JSONWriter::Write(&value, true, &service_status); | 1069 base::JSONWriter::Write(&value, true, &service_status); |
| 1103 return service_status; | 1070 return service_status; |
| 1104 } | 1071 } |
| OLD | NEW |