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 71b093a238c141cbabbc093cd902d933429f934c..3c8f7ec292e31f885cd30d47c7e991fb1103a2f5 100644 |
--- a/chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
+++ b/chrome/browser/sync/test/integration/profile_sync_service_harness.cc |
@@ -11,7 +11,6 @@ |
#include <sstream> |
#include <vector> |
-#include "base/base64.h" |
#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/compiler_specific.h" |
@@ -32,8 +31,10 @@ |
#include "chrome/browser/sync/backend_migrator.h" |
#include "chrome/browser/sync/profile_sync_service_factory.h" |
#include "chrome/browser/sync/test/integration/p2p_invalidation_forwarder.h" |
+#include "chrome/browser/sync/test/integration/quiesce_status_change_checker.h" |
#include "chrome/browser/sync/test/integration/single_client_status_change_checker.h" |
#include "chrome/browser/sync/test/integration/status_change_checker.h" |
+#include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "components/sync_driver/data_type_controller.h" |
@@ -172,7 +173,6 @@ ProfileSyncServiceHarness::ProfileSyncServiceHarness( |
P2PInvalidationService* p2p_invalidation_service) |
: profile_(profile), |
service_(ProfileSyncServiceFactory::GetForProfile(profile)), |
- progress_marker_partner_(NULL), |
username_(username), |
password_(password), |
oauth2_refesh_token_number_(0), |
@@ -355,14 +355,8 @@ bool ProfileSyncServiceHarness::AwaitBackendInitialized() { |
// an in-process C++ server, this function can be reimplemented without relying |
// on progress markers. |
bool ProfileSyncServiceHarness::AwaitCommitActivityCompletion() { |
- DVLOG(1) << GetClientInfoString("AwaitCommitActivityCompletion"); |
- CallbackStatusChecker latest_progress_markers_checker( |
- service(), |
- base::Bind(&ProfileSyncServiceHarness::HasLatestProgressMarkers, |
- base::Unretained(this)), |
- "HasLatestProgressMarkers"); |
- AwaitStatusChange(&latest_progress_markers_checker); |
- return HasLatestProgressMarkers(); |
+ UpdatedProgressMarkerChecker progress_marker_checker(service()); |
+ return AwaitStatusChange(&progress_marker_checker); |
} |
bool ProfileSyncServiceHarness::AwaitSyncDisabled() { |
@@ -386,78 +380,37 @@ bool ProfileSyncServiceHarness::AwaitSyncSetupCompletion() { |
bool ProfileSyncServiceHarness::AwaitMutualSyncCycleCompletion( |
ProfileSyncServiceHarness* partner) { |
- DVLOG(1) << GetClientInfoString("AwaitMutualSyncCycleCompletion"); |
- if (!AwaitCommitActivityCompletion()) |
- return false; |
- return partner->WaitUntilProgressMarkersMatch(this); |
+ std::vector<ProfileSyncServiceHarness*> harnesses; |
+ harnesses.push_back(this); |
+ harnesses.push_back(partner); |
+ return AwaitQuiescence(harnesses); |
} |
bool ProfileSyncServiceHarness::AwaitGroupSyncCycleCompletion( |
std::vector<ProfileSyncServiceHarness*>& partners) { |
- DVLOG(1) << GetClientInfoString("AwaitGroupSyncCycleCompletion"); |
- if (!AwaitCommitActivityCompletion()) |
- return false; |
- bool return_value = true; |
- for (std::vector<ProfileSyncServiceHarness*>::iterator it = |
- partners.begin(); it != partners.end(); ++it) { |
- if ((this != *it) && (!(*it)->IsSyncDisabled())) { |
- return_value = return_value && |
- (*it)->WaitUntilProgressMarkersMatch(this); |
- } |
- } |
- return return_value; |
+ return AwaitQuiescence(partners); |
} |
// static |
bool ProfileSyncServiceHarness::AwaitQuiescence( |
std::vector<ProfileSyncServiceHarness*>& clients) { |
- DVLOG(1) << "AwaitQuiescence."; |
- bool return_value = true; |
- for (std::vector<ProfileSyncServiceHarness*>::iterator it = |
- clients.begin(); it != clients.end(); ++it) { |
- if (!(*it)->IsSyncDisabled()) { |
- return_value = return_value && |
- (*it)->AwaitGroupSyncCycleCompletion(clients); |
- } |
+ std::vector<ProfileSyncService*> services; |
+ if (clients.empty()) { |
+ return true; |
} |
- return return_value; |
-} |
-bool ProfileSyncServiceHarness::WaitUntilProgressMarkersMatch( |
- ProfileSyncServiceHarness* partner) { |
- DVLOG(1) << GetClientInfoString("WaitUntilProgressMarkersMatch"); |
- |
- // TODO(rsimha): Replace the mechanism of matching up progress markers with |
- // one that doesn't require every client to have the same progress markers. |
- DCHECK(!progress_marker_partner_); |
- progress_marker_partner_ = partner; |
- bool return_value = false; |
- if (MatchesPartnerClient()) { |
- // Progress markers already match; don't wait. |
- return_value = true; |
- } else { |
- partner->service()->AddObserver(this); |
- CallbackStatusChecker matches_other_client_checker( |
- service(), |
- base::Bind(&ProfileSyncServiceHarness::MatchesPartnerClient, |
- base::Unretained(this)), |
- "MatchesPartnerClient"); |
- return_value = AwaitStatusChange(&matches_other_client_checker); |
- partner->service()->RemoveObserver(this); |
+ for (std::vector<ProfileSyncServiceHarness*>::iterator it = clients.begin(); |
+ it != clients.end(); ++it) { |
+ services.push_back((*it)->service()); |
} |
- progress_marker_partner_ = NULL; |
- return return_value; |
+ QuiesceStatusChangeChecker checker(services); |
+ return clients[0]->AwaitStatusChange(&checker); |
} |
bool ProfileSyncServiceHarness::AwaitStatusChange( |
StatusChangeChecker* checker) { |
DVLOG(1) << GetClientInfoString("AwaitStatusChange"); |
- if (IsSyncDisabled()) { |
- LOG(ERROR) << "Sync disabled for " << profile_debug_name_ << "."; |
- return false; |
- } |
- |
DCHECK(checker); |
if (checker->IsExitConditionSatisfied()) { |
DVLOG(1) << GetClientInfoString("AwaitStatusChange exiting early because " |
@@ -521,14 +474,6 @@ bool ProfileSyncServiceHarness::HasAuthError() const { |
GoogleServiceAuthError::REQUEST_CANCELED; |
} |
-// TODO(sync): Remove this method once we stop relying on self notifications and |
-// comparing progress markers. |
-bool ProfileSyncServiceHarness::HasLatestProgressMarkers() const { |
- const SyncSessionSnapshot& snap = GetLastSessionSnapshot(); |
- return snap.model_neutral_state().num_successful_commits == 0 && |
- !service()->HasUnsyncedItems(); |
-} |
- |
void ProfileSyncServiceHarness::FinishSyncSetup() { |
service()->SetSetupInProgress(false); |
service()->SetSyncSetupCompleted(); |
@@ -538,43 +483,6 @@ bool ProfileSyncServiceHarness::AutoStartEnabled() { |
return service()->auto_start_enabled(); |
} |
-bool ProfileSyncServiceHarness::MatchesPartnerClient() const { |
- DCHECK(progress_marker_partner_); |
- |
- // Only look for a match if we have at least one enabled datatype in |
- // common with the partner client. |
- const syncer::ModelTypeSet common_types = |
- Intersection(service()->GetActiveDataTypes(), |
- progress_marker_partner_->service()->GetActiveDataTypes()); |
- |
- DVLOG(2) << profile_debug_name_ << ", " |
- << progress_marker_partner_->profile_debug_name_ |
- << ": common types are " |
- << syncer::ModelTypeSetToString(common_types); |
- |
- for (syncer::ModelTypeSet::Iterator i = common_types.First(); |
- i.Good(); i.Inc()) { |
- const std::string marker = GetSerializedProgressMarker(i.Get()); |
- const std::string partner_marker = |
- progress_marker_partner_->GetSerializedProgressMarker(i.Get()); |
- if (marker != partner_marker) { |
- if (VLOG_IS_ON(2)) { |
- std::string marker_base64, partner_marker_base64; |
- base::Base64Encode(marker, &marker_base64); |
- base::Base64Encode(partner_marker, &partner_marker_base64); |
- DVLOG(2) << syncer::ModelTypeToString(i.Get()) << ": " |
- << profile_debug_name_ << " progress marker = " |
- << marker_base64 << ", " |
- << progress_marker_partner_->profile_debug_name_ |
- << " partner progress marker = " |
- << partner_marker_base64; |
- } |
- return false; |
- } |
- } |
- return true; |
-} |
- |
SyncSessionSnapshot ProfileSyncServiceHarness::GetLastSessionSnapshot() const { |
DCHECK(service() != NULL) << "Sync service has not yet been set up."; |
if (service()->sync_initialized()) { |