| 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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 } | 267 } |
| 268 break; | 268 break; |
| 269 } | 269 } |
| 270 case WAITING_FOR_FULL_SYNC: { | 270 case WAITING_FOR_FULL_SYNC: { |
| 271 DVLOG(1) << GetClientInfoString("WAITING_FOR_FULL_SYNC"); | 271 DVLOG(1) << GetClientInfoString("WAITING_FOR_FULL_SYNC"); |
| 272 if (IsFullySynced()) { | 272 if (IsFullySynced()) { |
| 273 // The sync cycle we were waiting for is complete. | 273 // The sync cycle we were waiting for is complete. |
| 274 SignalStateCompleteWithNextState(FULLY_SYNCED); | 274 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 275 break; | 275 break; |
| 276 } | 276 } |
| 277 if (!GetStatus().server_reachable) { | |
| 278 // The client cannot reach the sync server because the network is | |
| 279 // disabled. There is no need to wait anymore. | |
| 280 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); | |
| 281 break; | |
| 282 } | |
| 283 break; | 277 break; |
| 284 } | 278 } |
| 285 case WAITING_FOR_DATA_SYNC: { | 279 case WAITING_FOR_DATA_SYNC: { |
| 286 if (IsDataSynced()) { | 280 if (IsDataSynced()) { |
| 287 SignalStateCompleteWithNextState(FULLY_SYNCED); | 281 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 288 break; | 282 break; |
| 289 } | 283 } |
| 290 break; | 284 break; |
| 291 } | 285 } |
| 292 case WAITING_FOR_UPDATES: { | 286 case WAITING_FOR_UPDATES: { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 323 // The correctness of this if condition may depend on the ordering of its | 317 // The correctness of this if condition may depend on the ordering of its |
| 324 // sub-expressions. See crbug.com/98607, crbug.com/95619. | 318 // sub-expressions. See crbug.com/98607, crbug.com/95619. |
| 325 // TODO(rlarocque): Figure out a less brittle way of detecting this. | 319 // TODO(rlarocque): Figure out a less brittle way of detecting this. |
| 326 if (IsTypeEncrypted(waiting_for_encryption_type_) && | 320 if (IsTypeEncrypted(waiting_for_encryption_type_) && |
| 327 IsFullySynced() && | 321 IsFullySynced() && |
| 328 GetLastSessionSnapshot()->num_conflicting_updates == 0) { | 322 GetLastSessionSnapshot()->num_conflicting_updates == 0) { |
| 329 // Encryption is now complete for the the type in which we were waiting. | 323 // Encryption is now complete for the the type in which we were waiting. |
| 330 SignalStateCompleteWithNextState(FULLY_SYNCED); | 324 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 331 break; | 325 break; |
| 332 } | 326 } |
| 333 if (!GetStatus().server_reachable) { | |
| 334 // The client cannot reach the sync server because the network is | |
| 335 // disabled. There is no need to wait anymore. | |
| 336 SignalStateCompleteWithNextState(SERVER_UNREACHABLE); | |
| 337 break; | |
| 338 } | |
| 339 break; | 327 break; |
| 340 } | 328 } |
| 341 case WAITING_FOR_SYNC_CONFIGURATION: { | 329 case WAITING_FOR_SYNC_CONFIGURATION: { |
| 342 DVLOG(1) << GetClientInfoString("WAITING_FOR_SYNC_CONFIGURATION"); | 330 DVLOG(1) << GetClientInfoString("WAITING_FOR_SYNC_CONFIGURATION"); |
| 343 if (service()->ShouldPushChanges()) { | 331 if (service()->ShouldPushChanges()) { |
| 344 // The Datatype manager is configured and sync is fully initialized. | 332 // The Datatype manager is configured and sync is fully initialized. |
| 345 SignalStateCompleteWithNextState(FULLY_SYNCED); | 333 SignalStateCompleteWithNextState(FULLY_SYNCED); |
| 346 } | 334 } |
| 347 break; | 335 break; |
| 348 } | 336 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 case WAITING_FOR_ACTIONABLE_ERROR: { | 374 case WAITING_FOR_ACTIONABLE_ERROR: { |
| 387 DVLOG(1) << GetClientInfoString("WAITING_FOR_ACTIONABLE_ERROR"); | 375 DVLOG(1) << GetClientInfoString("WAITING_FOR_ACTIONABLE_ERROR"); |
| 388 ProfileSyncService::Status status = GetStatus(); | 376 ProfileSyncService::Status status = GetStatus(); |
| 389 if (status.sync_protocol_error.action != browser_sync::UNKNOWN_ACTION && | 377 if (status.sync_protocol_error.action != browser_sync::UNKNOWN_ACTION && |
| 390 service_->unrecoverable_error_detected() == true) { | 378 service_->unrecoverable_error_detected() == true) { |
| 391 // An actionable error has been detected. | 379 // An actionable error has been detected. |
| 392 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); | 380 SignalStateCompleteWithNextState(WAITING_FOR_NOTHING); |
| 393 } | 381 } |
| 394 break; | 382 break; |
| 395 } | 383 } |
| 396 case SERVER_UNREACHABLE: { | |
| 397 DVLOG(1) << GetClientInfoString("SERVER_UNREACHABLE"); | |
| 398 if (GetStatus().server_reachable) { | |
| 399 // The client was offline due to the network being disabled, but is now | |
| 400 // back online. Wait for the pending sync cycle to complete. | |
| 401 SignalStateCompleteWithNextState(WAITING_FOR_FULL_SYNC); | |
| 402 } | |
| 403 break; | |
| 404 } | |
| 405 case SET_PASSPHRASE_FAILED: { | 384 case SET_PASSPHRASE_FAILED: { |
| 406 // A passphrase is required for decryption. There is nothing the sync | 385 // A passphrase is required for decryption. There is nothing the sync |
| 407 // client can do until SetPassphrase() is called. | 386 // client can do until SetPassphrase() is called. |
| 408 DVLOG(1) << GetClientInfoString("SET_PASSPHRASE_FAILED"); | 387 DVLOG(1) << GetClientInfoString("SET_PASSPHRASE_FAILED"); |
| 409 break; | 388 break; |
| 410 } | 389 } |
| 411 case FULLY_SYNCED: { | 390 case FULLY_SYNCED: { |
| 412 // The client is online and fully synced. There is nothing to do. | 391 // The client is online and fully synced. There is nothing to do. |
| 413 DVLOG(1) << GetClientInfoString("FULLY_SYNCED"); | 392 DVLOG(1) << GetClientInfoString("FULLY_SYNCED"); |
| 414 break; | 393 break; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, | 504 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, |
| 526 "Waiting for sync configuration."); | 505 "Waiting for sync configuration."); |
| 527 } | 506 } |
| 528 | 507 |
| 529 bool ProfileSyncServiceHarness::AwaitDataSyncCompletion( | 508 bool ProfileSyncServiceHarness::AwaitDataSyncCompletion( |
| 530 const std::string& reason) { | 509 const std::string& reason) { |
| 531 DVLOG(1) << GetClientInfoString("AwaitDataSyncCompletion"); | 510 DVLOG(1) << GetClientInfoString("AwaitDataSyncCompletion"); |
| 532 | 511 |
| 533 CHECK(service()->sync_initialized()); | 512 CHECK(service()->sync_initialized()); |
| 534 CHECK_NE(wait_state_, SYNC_DISABLED); | 513 CHECK_NE(wait_state_, SYNC_DISABLED); |
| 535 CHECK_NE(wait_state_, SERVER_UNREACHABLE); | |
| 536 | 514 |
| 537 if (IsDataSynced()) { | 515 if (IsDataSynced()) { |
| 538 // Client is already synced; don't wait. | 516 // Client is already synced; don't wait. |
| 539 return true; | 517 return true; |
| 540 } | 518 } |
| 541 | 519 |
| 542 wait_state_ = WAITING_FOR_DATA_SYNC; | 520 wait_state_ = WAITING_FOR_DATA_SYNC; |
| 543 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | 521 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); |
| 544 if (wait_state_ == FULLY_SYNCED) { | 522 if (wait_state_ == FULLY_SYNCED) { |
| 545 return true; | 523 return true; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 556 if (wait_state_ == SYNC_DISABLED) { | 534 if (wait_state_ == SYNC_DISABLED) { |
| 557 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << "."; | 535 LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << "."; |
| 558 return false; | 536 return false; |
| 559 } | 537 } |
| 560 | 538 |
| 561 if (IsFullySynced()) { | 539 if (IsFullySynced()) { |
| 562 // Client is already synced; don't wait. | 540 // Client is already synced; don't wait. |
| 563 return true; | 541 return true; |
| 564 } | 542 } |
| 565 | 543 |
| 566 if (wait_state_ == SERVER_UNREACHABLE) { | |
| 567 // Client was offline; wait for it to go online, and then wait for sync. | |
| 568 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | |
| 569 DCHECK_EQ(wait_state_, WAITING_FOR_FULL_SYNC); | |
| 570 return AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | |
| 571 } | |
| 572 | |
| 573 DCHECK(service()->sync_initialized()); | 544 DCHECK(service()->sync_initialized()); |
| 574 wait_state_ = WAITING_FOR_FULL_SYNC; | 545 wait_state_ = WAITING_FOR_FULL_SYNC; |
| 575 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); | 546 AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs, reason); |
| 576 if (wait_state_ == FULLY_SYNCED) { | 547 if (wait_state_ == FULLY_SYNCED) { |
| 577 // Client is online; sync was successful. | 548 // Client is online; sync was successful. |
| 578 return true; | 549 return true; |
| 579 } else if (wait_state_ == SERVER_UNREACHABLE) { | |
| 580 // Client is offline; sync was unsuccessful. | |
| 581 LOG(ERROR) << "Client went offline after waiting for sync to finish"; | |
| 582 return false; | |
| 583 } else { | 550 } else { |
| 584 LOG(ERROR) << "Invalid wait state: " << wait_state_; | 551 LOG(ERROR) << "Invalid wait state: " << wait_state_; |
| 585 return false; | 552 return false; |
| 586 } | 553 } |
| 587 } | 554 } |
| 588 | 555 |
| 589 bool ProfileSyncServiceHarness::AwaitSyncDisabled(const std::string& reason) { | 556 bool ProfileSyncServiceHarness::AwaitSyncDisabled(const std::string& reason) { |
| 590 DCHECK(service()->HasSyncSetupCompleted()); | 557 DCHECK(service()->HasSyncSetupCompleted()); |
| 591 DCHECK_NE(wait_state_, SYNC_DISABLED); | 558 DCHECK_NE(wait_state_, SYNC_DISABLED); |
| 592 wait_state_ = WAITING_FOR_SYNC_DISABLED; | 559 wait_state_ = WAITING_FOR_SYNC_DISABLED; |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 return state_map.size(); | 1074 return state_map.size(); |
| 1108 } | 1075 } |
| 1109 | 1076 |
| 1110 std::string ProfileSyncServiceHarness::GetServiceStatus() { | 1077 std::string ProfileSyncServiceHarness::GetServiceStatus() { |
| 1111 DictionaryValue value; | 1078 DictionaryValue value; |
| 1112 sync_ui_util::ConstructAboutInformation(service_, &value); | 1079 sync_ui_util::ConstructAboutInformation(service_, &value); |
| 1113 std::string service_status; | 1080 std::string service_status; |
| 1114 base::JSONWriter::Write(&value, true, &service_status); | 1081 base::JSONWriter::Write(&value, true, &service_status); |
| 1115 return service_status; | 1082 return service_status; |
| 1116 } | 1083 } |
| OLD | NEW |