Index: chrome/browser/autofill/autofill_uitest_util.cc |
diff --git a/chrome/browser/autofill/autofill_uitest_util.cc b/chrome/browser/autofill/autofill_uitest_util.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7aeeba49e40b2cae6fe82cad061dfb4e06fa81e7 |
--- /dev/null |
+++ b/chrome/browser/autofill/autofill_uitest_util.cc |
@@ -0,0 +1,80 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/autofill/autofill_uitest_util.h" |
+#include "chrome/browser/autofill/personal_data_manager_factory.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "components/autofill/core/browser/autofill_test_utils.h" |
+#include "components/autofill/core/browser/personal_data_manager.h" |
+#include "content/public/test/test_utils.h" |
+ |
+namespace autofill { |
+ |
+WindowedPersonalDataManagerObserver::WindowedPersonalDataManagerObserver( |
+ Browser* browser) |
+ : alerted_(false), |
+ has_run_message_loop_(false), |
+ browser_(browser), |
+ infobar_service_(InfoBarService::FromWebContents( |
+ browser_->tab_strip_model()->GetActiveWebContents())) { |
+ PersonalDataManagerFactory::GetForProfile(browser_->profile())->AddObserver( |
+ this); |
+ infobar_service_->AddObserver(this); |
+} |
+ |
+WindowedPersonalDataManagerObserver::~WindowedPersonalDataManagerObserver() { |
+ while (infobar_service_->infobar_count() > 0) { |
+ infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); |
+ } |
+ infobar_service_->RemoveObserver(this); |
+} |
+ |
+void WindowedPersonalDataManagerObserver::OnPersonalDataChanged() { |
+ if (has_run_message_loop_) { |
+ base::MessageLoopForUI::current()->Quit(); |
+ has_run_message_loop_ = false; |
+ } |
+ alerted_ = true; |
+} |
+ |
+void WindowedPersonalDataManagerObserver::OnInsufficientFormData() { |
+ OnPersonalDataChanged(); |
+} |
+ |
+void WindowedPersonalDataManagerObserver::Wait() { |
+ if (!alerted_) { |
+ has_run_message_loop_ = true; |
+ content::RunMessageLoop(); |
+ } |
+ PersonalDataManagerFactory::GetForProfile(browser_->profile())-> |
+ RemoveObserver(this); |
+} |
+ |
+void WindowedPersonalDataManagerObserver::OnInfoBarAdded( |
+ infobars::InfoBar* infobar) { |
+ infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate()-> |
+ Accept(); |
+} |
+ |
+PersonalDataManager* GetPersonalDataManager(Browser* browser) { |
Dan Beam
2015/01/29 19:31:44
nit: ask for a Profile* instead of a Browser*
bondd
2015/01/30 04:10:35
Done.
|
+ return PersonalDataManagerFactory::GetForProfile(browser->profile()); |
+} |
+ |
+void CreateTestProfile(Browser* browser) { |
+ AutofillProfile profile; |
+ test::SetProfileInfo( |
Evan Stade
2015/01/29 22:20:11
why not GetFullProfile()?
bondd
2015/01/30 04:10:35
Some tests in autofill_interactive_uitest.cc expec
|
+ &profile, "Milton", "C.", "Waddams", |
+ "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", |
+ "Basement", "Austin", "Texas", "78744", "US", "5125551234"); |
+ |
+ WindowedPersonalDataManagerObserver observer(browser); |
+ GetPersonalDataManager(browser)->AddProfile(profile); |
+ |
+ // AddProfile is asynchronous. Wait for it to finish before continuing the |
+ // tests. |
+ observer.Wait(); |
+} |
+ |
+} // namespace autofill |