Index: chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
diff --git a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
index 97f45645a54a9bc05db265383cc7f7fa1849b5c1..54a437562acdcf20e3d6a49b4b4c261747a03a2d 100644 |
--- a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
+++ b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
@@ -219,6 +219,110 @@ bool ProfileSyncServiceHarness::SetupSync( |
return true; |
} |
+bool ProfileSyncServiceHarness::SetupSyncForClear() { |
+ bool result = SetupSyncForClear(syncer::UserSelectableTypes()); |
+ if (result == false) { |
+ std::string status = GetServiceStatus(); |
+ LOG(ERROR) << profile_debug_name_ |
+ << ": SetupSyncForClear failed. Syncer status:\n" |
+ << status; |
+ } else { |
+ DVLOG(1) << profile_debug_name_ << ": SetupSyncForClear successful."; |
+ } |
+ return result; |
+} |
+ |
+bool ProfileSyncServiceHarness::SetupSyncForClear( |
pavely
2017/03/07 07:26:15
This function is awfully similar to SetupSync(). I
skym
2017/03/07 18:38:22
+1
wylieb
2017/03/07 19:52:22
Well that depends. If they want to change the the
|
+ syncer::ModelTypeSet synced_datatypes) { |
+ DCHECK(!profile_->IsLegacySupervised()) |
+ << "SetupSync should not be used for legacy supervised users."; |
+ |
+ // Initialize the sync client's profile sync service object. |
+ if (service() == nullptr) { |
+ LOG(ERROR) << "SetupSync(): service() is null."; |
+ return false; |
+ } |
+ |
+ // Tell the sync service that setup is in progress so we don't start syncing |
+ // until we've finished configuration. |
+ sync_blocker_ = service()->GetSetupInProgressHandle(); |
+ |
+ DCHECK(!username_.empty()); |
+ if (signin_type_ == SigninType::UI_SIGNIN) { |
+ Browser* browser = chrome::FindBrowserWithProfile(profile_); |
+ DCHECK(browser); |
+ if (!login_ui_test_utils::SignInWithUI(browser, username_, password_)) { |
+ LOG(ERROR) << "Could not sign in to GAIA servers."; |
+ return false; |
+ } |
+ } else if (signin_type_ == SigninType::FAKE_SIGNIN) { |
+ // Authenticate sync client using GAIA credentials. |
+ std::string gaia_id = GetGaiaIdForUsername(username_); |
+ service()->signin()->SetAuthenticatedAccountInfo(gaia_id, username_); |
+ std::string account_id = service()->signin()->GetAuthenticatedAccountId(); |
+ service()->GoogleSigninSucceeded(account_id, username_, password_); |
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_) |
+ ->UpdateCredentials(account_id, GenerateFakeOAuth2RefreshTokenString()); |
+ } else { |
+ LOG(ERROR) << "Unsupported profile signin type."; |
+ } |
+ |
+ // Now that auth is completed, request that sync actually start. |
+ service()->RequestStart(); |
+ |
+ if (!AwaitEngineInitializationForClear()) { |
+ return false; |
+ } |
+ |
+ // Choose the datatypes to be synced. If all datatypes are to be synced, |
+ // set sync_everything to true; otherwise, set it to false. |
+ bool sync_everything = (synced_datatypes == syncer::UserSelectableTypes()); |
+ service()->OnUserChoseDatatypes(sync_everything, synced_datatypes); |
+ |
+ // Notify ProfileSyncService that we are done with configuration. |
+ FinishSyncSetup(); |
+ |
+ if ((signin_type_ == SigninType::UI_SIGNIN) && |
+ !login_ui_test_utils::DismissSyncConfirmationDialog( |
+ chrome::FindBrowserWithProfile(profile_), |
+ base::TimeDelta::FromSeconds(30))) { |
+ LOG(ERROR) << "Failed to dismiss sync confirmation dialog."; |
+ return false; |
+ } |
+ |
+ // Wait for initial sync cycle to be completed. |
+ if (!AwaitSyncSetupCompletionForClear()) { |
+ LOG(ERROR) << "Initial sync cycle timed out."; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+bool ProfileSyncServiceHarness::RestartSyncService() { |
+ std::unique_ptr<syncer::SyncSetupInProgressHandle> blocker = |
skym
2017/03/07 18:38:22
Is there a reason that |sync_blocker_| isn't used?
wylieb
2017/03/07 19:52:22
Done.
|
+ service()->GetSetupInProgressHandle(); |
+ |
skym
2017/03/07 18:38:22
So
wylieb
2017/03/07 19:52:22
Ok
|
+ DVLOG(1) << "Requesting stop for service."; |
+ |
skym
2017/03/07 18:38:22
many
wylieb
2017/03/07 19:52:22
I
|
+ service()->RequestStop(ProfileSyncService::CLEAR_DATA); |
+ |
skym
2017/03/07 18:38:22
new
wylieb
2017/03/07 19:52:22
Fixed
|
+ DVLOG(1) << "Requesting start for service"; |
+ |
skym
2017/03/07 18:38:22
lines
wylieb
2017/03/07 19:52:22
It
|
+ service()->RequestStart(); |
+ if (!AwaitEngineInitialization()) { |
skym
2017/03/07 18:38:22
We should also always require a passphrase, right?
wylieb
2017/03/07 19:52:22
Done.
|
+ LOG(ERROR) << "AwaitEngineInitialization failed."; |
+ return false; |
+ } |
+ |
+ DVLOG(1) << "Releasing blocker and setting first setup complete"; |
+ |
+ blocker.reset(); |
+ service()->SetFirstSetupComplete(); |
+ |
+ return true; |
+} |
+ |
bool ProfileSyncServiceHarness::AwaitMutualSyncCycleCompletion( |
ProfileSyncServiceHarness* partner) { |
std::vector<ProfileSyncServiceHarness*> harnesses; |
@@ -272,6 +376,25 @@ bool ProfileSyncServiceHarness::AwaitEngineInitialization() { |
return true; |
} |
+bool ProfileSyncServiceHarness::AwaitEngineInitializationForClear() { |
+ if (!EngineInitializeChecker(service()).Wait()) { |
+ LOG(ERROR) << "EngineInitializeChecker timed out."; |
+ return false; |
+ } |
+ |
+ if (!service()->IsEngineInitialized()) { |
+ LOG(ERROR) << "Service engine not initialized."; |
+ return false; |
+ } |
+ |
+ if (HasAuthError(service())) { |
+ LOG(ERROR) << "Credentials were rejected. Sync cannot proceed."; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
bool ProfileSyncServiceHarness::AwaitSyncSetupCompletion() { |
skym
2017/03/07 18:38:22
Do you understand why this method even exists? As
skym
2017/03/07 18:47:44
Oooh, I missed that the first check was significan
wylieb
2017/03/07 19:52:22
Done.
wylieb
2017/03/07 19:52:22
Done.
|
if (!SyncSetupChecker(service()).Wait()) { |
LOG(ERROR) << "SyncSetupChecker timed out."; |
@@ -293,6 +416,20 @@ bool ProfileSyncServiceHarness::AwaitSyncSetupCompletion() { |
return true; |
} |
+bool ProfileSyncServiceHarness::AwaitSyncSetupCompletionForClear() { |
+ if (!SyncSetupChecker(service()).Wait()) { |
+ LOG(ERROR) << "SyncSetupChecker timed out."; |
+ return false; |
+ } |
+ |
+ if (HasAuthError(service())) { |
+ LOG(ERROR) << "Credentials were rejected. Sync cannot proceed."; |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
std::string ProfileSyncServiceHarness::GenerateFakeOAuth2RefreshTokenString() { |
return base::StringPrintf("oauth2_refresh_token_%d", |
++oauth2_refesh_token_number_); |