| Index: chrome/browser/sync/profile_sync_service_harness.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service_harness.cc b/chrome/browser/sync/profile_sync_service_harness.cc
|
| index 3ecafb74fa1c467ea2cc91d2cfd11e56bebbf5e1..475003370104991df4f8e27dfc1b9cad1ec15988 100644
|
| --- a/chrome/browser/sync/profile_sync_service_harness.cc
|
| +++ b/chrome/browser/sync/profile_sync_service_harness.cc
|
| @@ -84,18 +84,44 @@ bool StateChangeTimeoutEvent::Abort() {
|
| }
|
|
|
| ProfileSyncServiceHarness::ProfileSyncServiceHarness(
|
| - Profile* p,
|
| + Profile* profile,
|
| const std::string& username,
|
| const std::string& password,
|
| int id)
|
| - : wait_state_(WAITING_FOR_ON_BACKEND_INITIALIZED),
|
| - profile_(p),
|
| + : wait_state_(INITIAL_WAIT_STATE),
|
| + profile_(profile),
|
| service_(NULL),
|
| last_timestamp_(0),
|
| min_timestamp_needed_(kMinTimestampNeededNone),
|
| username_(username),
|
| password_(password),
|
| - id_(id) {}
|
| + id_(id) {
|
| + if (IsSyncAlreadySetup()) {
|
| + service_ = profile_->GetProfileSyncService();
|
| + service_->AddObserver(this);
|
| + wait_state_ = FULLY_SYNCED;
|
| + }
|
| +}
|
| +
|
| +// static
|
| +ProfileSyncServiceHarness* ProfileSyncServiceHarness::CreateAndAttach(
|
| + Profile* profile) {
|
| + if (!profile->HasProfileSyncService()) {
|
| + NOTREACHED() << "Profile has never signed into sync.";
|
| + return NULL;
|
| + }
|
| + return new ProfileSyncServiceHarness(profile, "", "", 0);
|
| +}
|
| +
|
| +void ProfileSyncServiceHarness::SetCredentials(const std::string& username,
|
| + const std::string& password) {
|
| + username_ = username;
|
| + password_ = password;
|
| +}
|
| +
|
| +bool ProfileSyncServiceHarness::IsSyncAlreadySetup() {
|
| + return profile_->HasProfileSyncService();
|
| +}
|
|
|
| bool ProfileSyncServiceHarness::SetupSync() {
|
| syncable::ModelTypeSet synced_datatypes;
|
| @@ -109,7 +135,7 @@ bool ProfileSyncServiceHarness::SetupSync() {
|
| bool ProfileSyncServiceHarness::SetupSync(
|
| const syncable::ModelTypeSet& synced_datatypes) {
|
| // Initialize the sync client's profile sync service object.
|
| - service_ = profile_->GetProfileSyncService("");
|
| + service_ = profile_->GetProfileSyncService();
|
| if (service_ == NULL) {
|
| LOG(ERROR) << "SetupSync(): service_ is null.";
|
| return false;
|
| @@ -123,7 +149,7 @@ bool ProfileSyncServiceHarness::SetupSync(
|
| service_->signin()->StartSignIn(username_, password_, "", "");
|
|
|
| // Wait for the OnBackendInitialized() callback.
|
| - DCHECK_EQ(wait_state_, WAITING_FOR_ON_BACKEND_INITIALIZED);
|
| + wait_state_ = WAITING_FOR_ON_BACKEND_INITIALIZED;
|
| if (!AwaitStatusChangeWithTimeout(kLiveSyncOperationTimeoutMs,
|
| "Waiting for OnBackendInitialized().")) {
|
| LOG(ERROR) << "OnBackendInitialized() not seen after "
|
| @@ -148,6 +174,9 @@ bool ProfileSyncServiceHarness::SetupSync(
|
| return false;
|
| }
|
|
|
| + // Indicate to the browser that sync setup is complete.
|
| + service()->SetSyncSetupCompleted();
|
| +
|
| return true;
|
| }
|
|
|
| @@ -157,6 +186,10 @@ void ProfileSyncServiceHarness::SignalStateCompleteWithNextState(
|
| SignalStateComplete();
|
| }
|
|
|
| +void ProfileSyncServiceHarness::SignalStateComplete() {
|
| + MessageLoop::current()->Quit();
|
| +}
|
| +
|
| bool ProfileSyncServiceHarness::RunStateChangeMachine() {
|
| WaitState original_wait_state = wait_state_;
|
| switch (wait_state_) {
|
| @@ -353,13 +386,16 @@ bool ProfileSyncServiceHarness::AwaitStatusChangeWithTimeout(
|
| }
|
| scoped_refptr<StateChangeTimeoutEvent> timeout_signal(
|
| new StateChangeTimeoutEvent(this, reason));
|
| - MessageLoopForUI* loop = MessageLoopForUI::current();
|
| + MessageLoop* loop = MessageLoop::current();
|
| + bool did_allow_nestable_tasks = loop->NestableTasksAllowed();
|
| + loop->SetNestableTasksAllowed(true);
|
| loop->PostDelayedTask(
|
| FROM_HERE,
|
| NewRunnableMethod(timeout_signal.get(),
|
| &StateChangeTimeoutEvent::Callback),
|
| timeout_milliseconds);
|
| - AwaitStatusChange();
|
| + loop->Run();
|
| + loop->SetNestableTasksAllowed(did_allow_nestable_tasks);
|
| LogClientInfo("AwaitStatusChangeWithTimeout succeeded");
|
| return timeout_signal->Abort();
|
| }
|
| @@ -370,11 +406,12 @@ ProfileSyncService::Status ProfileSyncServiceHarness::GetStatus() {
|
| }
|
|
|
| bool ProfileSyncServiceHarness::IsSynced() {
|
| + if (service() == NULL)
|
| + return false;
|
| const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
|
| // TODO(rsimha): Remove additional checks of snap->has_more_to_sync and
|
| // snap->unsynced_count once http://crbug.com/48989 is fixed.
|
| - return (service() &&
|
| - snap &&
|
| + return (snap &&
|
| ServiceIsPushingChanges() &&
|
| GetStatus().notifications_enabled &&
|
| !service()->backend()->HasUnsyncedItems() &&
|
| @@ -478,19 +515,24 @@ int64 ProfileSyncServiceHarness::GetUpdatedTimestamp() {
|
| }
|
|
|
| void ProfileSyncServiceHarness::LogClientInfo(std::string message) {
|
| - const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
|
| - if (snap) {
|
| - VLOG(1) << "Client " << id_ << ": " << message
|
| - << ": max_local_timestamp: " << snap->max_local_timestamp
|
| - << ", has_more_to_sync: " << snap->has_more_to_sync
|
| - << ", unsynced_count: " << snap->unsynced_count
|
| - << ", has_unsynced_items: "
|
| - << service()->backend()->HasUnsyncedItems()
|
| - << ", notifications_enabled: "
|
| - << GetStatus().notifications_enabled
|
| - << ", service_is_pushing_changes: " << ServiceIsPushingChanges();
|
| + if (service()) {
|
| + const SyncSessionSnapshot* snap = GetLastSessionSnapshot();
|
| + if (snap) {
|
| + VLOG(1) << "Client " << id_ << ": " << message
|
| + << ": max_local_timestamp: " << snap->max_local_timestamp
|
| + << ", has_more_to_sync: " << snap->has_more_to_sync
|
| + << ", unsynced_count: " << snap->unsynced_count
|
| + << ", has_unsynced_items: "
|
| + << service()->backend()->HasUnsyncedItems()
|
| + << ", notifications_enabled: "
|
| + << GetStatus().notifications_enabled
|
| + << ", service_is_pushing_changes: " << ServiceIsPushingChanges();
|
| + } else {
|
| + VLOG(1) << "Client " << id_ << ": " << message
|
| + << ": Sync session snapshot not available.";
|
| + }
|
| } else {
|
| VLOG(1) << "Client " << id_ << ": " << message
|
| - << ": Sync session snapshot not available.";
|
| + << ": Sync service not available.";
|
| }
|
| }
|
|
|