Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2662)

Unified Diff: chrome/browser/sync/test/integration/preferences_helper.cc

Issue 315823002: sync: Refactor TwoClientPreferencesSyncTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/test/integration/preferences_helper.cc
diff --git a/chrome/browser/sync/test/integration/preferences_helper.cc b/chrome/browser/sync/test/integration/preferences_helper.cc
index d29714c2ecb829fcfe7b7ae6e56fe4d36e9c2c81..f9f69528e2704396e178443122eeb7699d5ca734 100644
--- a/chrome/browser/sync/test/integration/preferences_helper.cc
+++ b/chrome/browser/sync/test/integration/preferences_helper.cc
@@ -4,9 +4,10 @@
#include "chrome/browser/sync/test/integration/preferences_helper.h"
+#include "base/prefs/pref_change_registrar.h"
#include "base/prefs/pref_service.h"
#include "base/prefs/scoped_user_pref_update.h"
-#include "base/values.h"
+#include "base/strings/stringprintf.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h"
#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
@@ -107,8 +108,8 @@ bool BooleanPrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetBoolean(pref_name)) {
- LOG(ERROR) << "Boolean preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "Boolean preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -124,8 +125,8 @@ bool IntegerPrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetInteger(pref_name)) {
- LOG(ERROR) << "Integer preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "Integer preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -141,8 +142,8 @@ bool Int64PrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetInt64(pref_name)) {
- LOG(ERROR) << "Integer preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "Integer preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -158,8 +159,8 @@ bool DoublePrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetDouble(pref_name)) {
- LOG(ERROR) << "Double preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "Double preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -175,8 +176,8 @@ bool StringPrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetString(pref_name)) {
- LOG(ERROR) << "String preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "String preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -192,8 +193,8 @@ bool FilePathPrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (reference_value != GetPrefs(i)->GetFilePath(pref_name)) {
- LOG(ERROR) << "base::FilePath preference " << pref_name
- << " mismatched in" << " profile " << i << ".";
+ DVLOG(1) << "base::FilePath preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -209,8 +210,8 @@ bool ListPrefMatches(const char* pref_name) {
}
for (int i = 0; i < test()->num_clients(); ++i) {
if (!reference_value->Equals(GetPrefs(i)->GetList(pref_name))) {
- LOG(ERROR) << "List preference " << pref_name << " mismatched in"
- << " profile " << i << ".";
+ DVLOG(1) << "List preference " << pref_name << " mismatched in"
+ << " profile " << i << ".";
return false;
}
}
@@ -220,37 +221,166 @@ bool ListPrefMatches(const char* pref_name) {
namespace {
-// Helper class used in the implementation of AwaitListPrefMatches.
-class ListPrefMatchStatusChecker : public MultiClientStatusChangeChecker {
+class PrefMatchChecker : public StatusChangeChecker {
public:
- explicit ListPrefMatchStatusChecker(const char* pref_name);
- virtual ~ListPrefMatchStatusChecker();
+ PrefMatchChecker(const char* path);
+ virtual ~PrefMatchChecker();
- virtual bool IsExitConditionSatisfied() OVERRIDE;
+ // StatusChangeChecker implementation.
+ virtual bool IsExitConditionSatisfied() = 0;
virtual std::string GetDebugMessage() const OVERRIDE;
+
+ // Wait for condition to become true.
+ void Wait();
+
+ protected:
+ const char* GetPath() const;
+
private:
- const char* pref_name_;
+ void RegisterPrefListener(PrefService* pref_service);
+
+ ScopedVector<PrefChangeRegistrar> pref_change_registrars_;
+ const char* path_;
};
-ListPrefMatchStatusChecker::ListPrefMatchStatusChecker(const char* pref_name)
- : MultiClientStatusChangeChecker(
- sync_datatype_helper::test()->GetSyncServices()),
- pref_name_(pref_name) {}
+PrefMatchChecker::PrefMatchChecker(const char* path) : path_(path) {
+}
-ListPrefMatchStatusChecker::~ListPrefMatchStatusChecker() {}
+PrefMatchChecker::~PrefMatchChecker() {
+}
+
+std::string PrefMatchChecker::GetDebugMessage() const {
+ return base::StringPrintf("Waiting for pref '%s' to match", GetPath());
+}
+
+void PrefMatchChecker::Wait() {
+ if (test()->use_verifier()) {
+ RegisterPrefListener(GetVerifierPrefs());
+ }
+
+ for (int i = 0; i < test()->num_clients(); ++i) {
+ RegisterPrefListener(GetPrefs(i));
+ }
+}
+
+const char* PrefMatchChecker::GetPath() const {
+ return path_;
+}
+
+void PrefMatchChecker::RegisterPrefListener(PrefService* pref_service) {
+ scoped_ptr<PrefChangeRegistrar> registrar(new PrefChangeRegistrar());
+ registrar->Init(pref_service);
+ registrar->Add(path_,
+ base::Bind(&PrefMatchChecker::CheckExitCondition,
+ base::Unretained(this)));
+ pref_change_registrars_.push_back(registrar.release());
+}
pval...(no longer on Chromium) 2014/06/04 18:06:31 add blank line after this one
rlarocque 2014/06/04 18:24:40 Done.
+// Helper class used in the implementation of AwaitListPrefMatches.
+class ListPrefMatchChecker : public PrefMatchChecker {
+ public:
+ explicit ListPrefMatchChecker(const char* path);
+ virtual ~ListPrefMatchChecker();
+
+ // Implementation of PrefMatchChecker.
+ virtual bool IsExitConditionSatisfied() OVERRIDE;
+};
+
+ListPrefMatchChecker::ListPrefMatchChecker(const char* path)
+ : PrefMatchChecker(path) {
+}
+
+ListPrefMatchChecker::~ListPrefMatchChecker() {
+}
+
+bool ListPrefMatchChecker::IsExitConditionSatisfied() {
+ return ListPrefMatches(GetPath());
+}
+
+// Helper class used in the implementation of AwaitBooleanPrefMatches.
+class BooleanPrefMatchChecker : public PrefMatchChecker {
+ public:
+ BooleanPrefMatchChecker(const char* path);
+ virtual ~BooleanPrefMatchChecker();
+
+ // Implementation of PrefMatchChecker.
+ virtual bool IsExitConditionSatisfied() OVERRIDE;
+};
-bool ListPrefMatchStatusChecker::IsExitConditionSatisfied() {
- return ListPrefMatches(pref_name_);
+BooleanPrefMatchChecker::BooleanPrefMatchChecker(const char* path)
+ : PrefMatchChecker(path) {
}
-std::string ListPrefMatchStatusChecker::GetDebugMessage() const {
- return "Waiting for matching preferences";
+BooleanPrefMatchChecker::~BooleanPrefMatchChecker() {
+}
+
+bool BooleanPrefMatchChecker::IsExitConditionSatisfied() {
+ return BooleanPrefMatches(GetPath());
+}
+
+// Helper class used in the implementation of AwaitIntegerPrefMatches.
+class IntegerPrefMatchChecker : public PrefMatchChecker {
+ public:
+ explicit IntegerPrefMatchChecker(const char* path);
+ virtual ~IntegerPrefMatchChecker();
+
+ // Implementation of PrefMatchChecker.
+ virtual bool IsExitConditionSatisfied() OVERRIDE;
+};
+
+IntegerPrefMatchChecker::IntegerPrefMatchChecker(const char* path)
+ : PrefMatchChecker(path) {
+}
+
+IntegerPrefMatchChecker::~IntegerPrefMatchChecker() {
+}
+
+bool IntegerPrefMatchChecker::IsExitConditionSatisfied() {
+ return IntegerPrefMatches(GetPath());
+}
+
+// Helper class used in the implementation of AwaitStringPrefMatches.
+class StringPrefMatchChecker : public PrefMatchChecker {
+ public:
+ explicit StringPrefMatchChecker(const char* path);
+ virtual ~StringPrefMatchChecker();
+
+ // Implementation of PrefMatchChecker.
+ virtual bool IsExitConditionSatisfied() OVERRIDE;
+};
+
+StringPrefMatchChecker::StringPrefMatchChecker(const char* path)
+ : PrefMatchChecker(path) {
+}
+
+StringPrefMatchChecker::~StringPrefMatchChecker() {
+}
+
+bool StringPrefMatchChecker::IsExitConditionSatisfied() {
+ return StringPrefMatches(GetPath());
}
} // namespace
bool AwaitListPrefMatches(const char* pref_name) {
- ListPrefMatchStatusChecker checker(pref_name);
+ ListPrefMatchChecker checker(pref_name);
+ checker.Wait();
+ return !checker.TimedOut();
+}
+
+bool AwaitBooleanPrefMatches(const char* pref_name) {
pval...(no longer on Chromium) 2014/06/04 18:06:31 It's unfortunate that the PrefService design force
rlarocque 2014/06/04 18:24:40 Templates: Too complicated. Often requires placin
pval...(no longer on Chromium) 2014/06/04 23:00:41 Sounds reasonable; 3 more methods isn't too bad.
+ BooleanPrefMatchChecker checker(pref_name);
+ checker.Wait();
+ return !checker.TimedOut();
+}
+
+bool AwaitIntegerPrefMatches(const char* pref_name) {
+ IntegerPrefMatchChecker checker(pref_name);
+ checker.Wait();
+ return !checker.TimedOut();
+}
+
+bool AwaitStringPrefMatches(const char* pref_name) {
+ StringPrefMatchChecker checker(pref_name);
checker.Wait();
return !checker.TimedOut();
}

Powered by Google App Engine
This is Rietveld 408576698