Chromium Code Reviews| Index: chrome/browser/sync/test/integration/passwords_helper.cc |
| diff --git a/chrome/browser/sync/test/integration/passwords_helper.cc b/chrome/browser/sync/test/integration/passwords_helper.cc |
| index 7fd71e12a79472c8670003e25d97ac74f7af18e3..3d9ed616bd056abbd32030bd181e2823239e4516 100644 |
| --- a/chrome/browser/sync/test/integration/passwords_helper.cc |
| +++ b/chrome/browser/sync/test/integration/passwords_helper.cc |
| @@ -14,6 +14,7 @@ |
| #include "chrome/browser/sync/profile_sync_service_factory.h" |
| #include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h" |
| #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" |
| +#include "chrome/browser/sync/test/integration/single_client_status_change_checker.h" |
| #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "components/password_manager/core/browser/password_form_data.h" |
| @@ -177,8 +178,8 @@ bool ProfilesContainSamePasswordForms(int index_a, int index_b) { |
| bool AllProfilesContainSamePasswordFormsAsVerifier() { |
| for (int i = 0; i < test()->num_clients(); ++i) { |
| if (!ProfileContainsSamePasswordFormsAsVerifier(i)) { |
| - LOG(ERROR) << "Profile " << i << " does not contain the same password" |
| - " forms as the verifier."; |
| + LOG(INFO) << "Profile " << i << " does not contain the same password" |
|
Nicolas Zea
2014/05/06 00:16:37
any reason this was changed?
rlarocque
2014/05/06 00:33:36
ERROR isn't quite right anymore. In some ways it
Nicolas Zea
2014/05/06 18:42:15
If it's expected for this to be called, I think it
rlarocque
2014/05/06 23:40:47
Done.
|
| + " forms as the verifier."; |
| return false; |
| } |
| } |
| @@ -188,8 +189,8 @@ bool AllProfilesContainSamePasswordFormsAsVerifier() { |
| bool AllProfilesContainSamePasswordForms() { |
| for (int i = 1; i < test()->num_clients(); ++i) { |
| if (!ProfilesContainSamePasswordForms(0, i)) { |
| - LOG(ERROR) << "Profile " << i << " does not contain the same password" |
| - " forms as Profile 0."; |
| + LOG(INFO) << "Profile " << i << " does not contain the same password" |
| + " forms as Profile 0."; |
| return false; |
| } |
| } |
| @@ -265,6 +266,69 @@ bool AwaitAllProfilesContainSamePasswordForms() { |
| return !checker.TimedOut(); |
| } |
| +namespace { |
| + |
| +// Helper class used in the implementation of |
| +// AwaitProfileContainSamePasswordFormsAsVerifier. |
| +class SamePasswordFormsAsVerifierChecker |
| + : public SingleClientStatusChangeChecker { |
| + public: |
| + explicit SamePasswordFormsAsVerifierChecker(int index); |
| + virtual ~SamePasswordFormsAsVerifierChecker(); |
| + |
| + virtual bool IsExitConditionSatisfied() OVERRIDE; |
| + virtual std::string GetDebugMessage() const OVERRIDE; |
| + |
| + private: |
| + int index_; |
| + |
| + bool in_progress_; |
| + bool needs_recheck_; |
| +}; |
| + |
| +SamePasswordFormsAsVerifierChecker::SamePasswordFormsAsVerifierChecker(int i) |
| + : SingleClientStatusChangeChecker( |
| + sync_datatype_helper::test()->GetSyncService(i)), |
| + index_(i), |
| + in_progress_(false), |
| + needs_recheck_(false) { |
| +} |
| + |
| +SamePasswordFormsAsVerifierChecker::~SamePasswordFormsAsVerifierChecker() { |
| +} |
| + |
| +// This method uses the same re-entrancy prevention trick as |
| +// the SamePasswordFormsChecker. |
| +bool SamePasswordFormsAsVerifierChecker::IsExitConditionSatisfied() { |
| + if (in_progress_) { |
| + LOG(WARNING) << "Setting flag and returning early to prevent nesting."; |
| + needs_recheck_ = true; |
| + return false; |
| + } |
| + |
| + // Keep retrying until we get a good reading. |
| + bool result = false; |
| + in_progress_ = true; |
| + do { |
| + needs_recheck_ = false; |
| + result = ProfileContainsSamePasswordFormsAsVerifier(index_); |
| + } while (needs_recheck_); |
| + in_progress_ = false; |
| + return result; |
| +} |
| + |
| +std::string SamePasswordFormsAsVerifierChecker::GetDebugMessage() const { |
| + return "Waiting for passwords to match verifier"; |
| +} |
| + |
| +} // namespace |
| + |
| +bool AwaitProfileContainsSamePasswordFormsAsVerifier(int index) { |
| + SamePasswordFormsAsVerifierChecker checker(index); |
| + checker.Wait(); |
| + return !checker.TimedOut(); |
| +} |
| + |
| int GetPasswordCount(int index) { |
| std::vector<PasswordForm> forms; |
| GetLogins(GetPasswordStore(index), forms); |