Index: chrome/browser/password_manager/password_manager_browsertest.cc |
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc |
index b2b5b52d3366091e78c8ddb6ae596cf75c42bce8..a3b9373b584fc8c4686c5d878189492e9d15dbec 100644 |
--- a/chrome/browser/password_manager/password_manager_browsertest.cc |
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc |
@@ -55,23 +55,13 @@ namespace { |
// Observer that waits for navigation to complete and for the password infobar |
// to be shown. |
-class NavigationObserver : public content::WebContentsObserver, |
- public infobars::InfoBarManager::Observer { |
+class NavigationObserver : public content::WebContentsObserver { |
public: |
explicit NavigationObserver(content::WebContents* web_contents) |
: content::WebContentsObserver(web_contents), |
- message_loop_runner_(new content::MessageLoopRunner), |
- infobar_shown_(false), |
- infobar_removed_(false), |
- should_automatically_accept_infobar_(true), |
- infobar_service_(InfoBarService::FromWebContents(web_contents)) { |
- infobar_service_->AddObserver(this); |
- } |
+ message_loop_runner_(new content::MessageLoopRunner) {} |
- virtual ~NavigationObserver() { |
- if (infobar_service_) |
- infobar_service_->RemoveObserver(this); |
- } |
+ virtual ~NavigationObserver() {} |
// Normally Wait() will not return until a main frame navigation occurs. |
// If a path is set, Wait() will return after this path has been seen, |
@@ -91,30 +81,91 @@ class NavigationObserver : public content::WebContentsObserver, |
} |
} |
- bool infobar_shown() const { return infobar_shown_; } |
- bool infobar_removed() const { return infobar_removed_; } |
+ void Wait() { message_loop_runner_->Run(); } |
+ |
+ private: |
+ std::string wait_for_path_; |
+ scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NavigationObserver); |
+}; |
+ |
+// Observes the save password prompt (bubble or infobar) for a specified |
+// WebContents, keeps track of whether or not it is currently shown, and allows |
+// accepting saving passwords through it. |
+class PromptObserver { |
+ public: |
+ virtual ~PromptObserver() {} |
+ |
+ // Checks if the prompt is being currently shown. |
+ virtual bool IsShowingPrompt() const = 0; |
+ |
+ // Expecting that the prompt is shown, saves the password. Checks that the |
+ // prompt is no longer visible afterwards. |
+ void Accept() const { |
+ EXPECT_TRUE(IsShowingPrompt()); |
+ AcceptImpl(); |
+ } |
+ |
+ // Chooses the right implementation of PromptObserver and creates an instance |
+ // of it. |
+ static scoped_ptr<PromptObserver> Create(content::WebContents* web_contents); |
+ |
+ protected: |
+ PromptObserver() {} |
- void disable_should_automatically_accept_infobar() { |
- should_automatically_accept_infobar_ = false; |
+ // Accepts the password. The implementation can assume that the prompt is |
+ // currently shown, but is required to verify that the prompt is eventually |
+ // closed. |
+ virtual void AcceptImpl() const = 0; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(PromptObserver); |
+}; |
+ |
+class InfoBarObserver : public PromptObserver, |
+ public infobars::InfoBarManager::Observer { |
+ public: |
+ explicit InfoBarObserver(content::WebContents* web_contents) |
+ : infobar_is_being_shown_(false), |
+ infobar_service_(InfoBarService::FromWebContents(web_contents)) { |
+ infobar_service_->AddObserver(this); |
} |
- void Wait() { |
- message_loop_runner_->Run(); |
+ virtual ~InfoBarObserver() { |
+ if (infobar_service_) |
+ infobar_service_->RemoveObserver(this); |
} |
private: |
+ // PromptObserver: |
+ virtual bool IsShowingPrompt() const OVERRIDE { |
+ return infobar_is_being_shown_; |
+ } |
+ |
+ virtual void AcceptImpl() const OVERRIDE { |
+ EXPECT_EQ(1u, infobar_service_->infobar_count()); |
+ if (!infobar_service_->infobar_count()) |
+ return; // Let the test finish to gather possibly more diagnostics. |
+ |
+ // ConfirmInfoBarDelegate::Accept returning true means the infobar is |
+ // immediately closed. Checking the return value is preferred to testing |
+ // IsShowingPrompt() here, for it avoids the delay until the closing |
+ // notification is received. |
+ EXPECT_TRUE(infobar_service_->infobar_at(0) |
+ ->delegate() |
+ ->AsConfirmInfoBarDelegate() |
+ ->Accept()); |
+ } |
+ |
// infobars::InfoBarManager::Observer: |
virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE { |
- if (should_automatically_accept_infobar_) { |
- infobar_service_->infobar_at(0)->delegate()-> |
- AsConfirmInfoBarDelegate()->Accept(); |
- } |
- infobar_shown_ = true; |
+ infobar_is_being_shown_ = true; |
} |
virtual void OnInfoBarRemoved(infobars::InfoBar* infobar, |
bool animate) OVERRIDE { |
- infobar_removed_ = true; |
+ infobar_is_being_shown_ = false; |
} |
virtual void OnManagerShuttingDown( |
@@ -124,18 +175,46 @@ class NavigationObserver : public content::WebContentsObserver, |
infobar_service_ = NULL; |
} |
- std::string wait_for_path_; |
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
- bool infobar_shown_; |
- bool infobar_removed_; |
- // If |should_automatically_accept_infobar_| is true, then whenever the test |
- // sees an infobar added, it will click its accepting button. Default = true. |
- bool should_automatically_accept_infobar_; |
+ bool infobar_is_being_shown_; |
InfoBarService* infobar_service_; |
- DISALLOW_COPY_AND_ASSIGN(NavigationObserver); |
+ DISALLOW_COPY_AND_ASSIGN(InfoBarObserver); |
+}; |
+ |
+class BubbleObserver : public PromptObserver { |
+ public: |
+ explicit BubbleObserver(content::WebContents* web_contents) |
+ : ui_controller_( |
+ ManagePasswordsUIController::FromWebContents(web_contents)) {} |
+ |
+ virtual ~BubbleObserver() {} |
+ |
+ private: |
+ // PromptObserver: |
+ virtual bool IsShowingPrompt() const OVERRIDE { |
+ return ui_controller_->PasswordPendingUserDecision(); |
+ } |
+ |
+ virtual void AcceptImpl() const OVERRIDE { |
+ ui_controller_->SavePassword(); |
+ EXPECT_FALSE(IsShowingPrompt()); |
+ } |
+ |
+ ManagePasswordsUIController* const ui_controller_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BubbleObserver); |
}; |
+// static |
+scoped_ptr<PromptObserver> PromptObserver::Create( |
+ content::WebContents* web_contents) { |
+ if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
+ return scoped_ptr<PromptObserver>(new BubbleObserver(web_contents)); |
+ } else { |
+ return scoped_ptr<PromptObserver>(new InfoBarObserver(web_contents)); |
+ } |
+} |
+ |
// Handles |request| to "/basic_auth". If "Authorization" header is present, |
// responds with a non-empty HTTP 200 page (regardless of its value). Otherwise |
// serves a Basic Auth challenge. |
@@ -196,10 +275,6 @@ class PasswordManagerBrowserTest : public InProcessBrowserTest { |
return WebContents()->GetRenderViewHost(); |
} |
- ManagePasswordsUIController* ui_controller() { |
- return ManagePasswordsUIController::FromWebContents(WebContents()); |
- } |
- |
// Wrapper around ui_test_utils::NavigateToURL that waits until |
// DidFinishLoad() fires. Normally this function returns after |
// DidStopLoading(), which caused flakiness as the NavigationObserver |
@@ -304,17 +379,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill a form and submit through a <input type="submit"> button. Nothing |
// special. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('input_submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -324,17 +397,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill a form and submit through a <input type="submit"> button. Nothing |
// special. The form does an in-page navigation before submitting. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('input_submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -345,17 +416,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
NavigateToFile("/password/password_form.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_unrelated').value = 'temp';" |
"document.getElementById('password_unrelated').value = 'random';" |
"document.getElementById('submit_unrelated').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, LoginFailed) { |
@@ -365,17 +434,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, LoginFailed) { |
NavigateToFile("/password/password_form.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_failed').value = 'temp';" |
"document.getElementById('password_failed').value = 'random';" |
"document.getElementById('submit_failed').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, Redirects) { |
@@ -384,29 +451,22 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, Redirects) { |
// Fill a form and submit through a <input type="submit"> button. The form |
// points to a redirection page. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_redirect').value = 'temp';" |
"document.getElementById('password_redirect').value = 'random';" |
"document.getElementById('submit_redirect').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
- observer.disable_should_automatically_accept_infobar(); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
// The redirection page now redirects via Javascript. We check that the |
// infobar stays. |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
"window.location.href = 'done.html';")); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_removed()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -417,17 +477,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// This should work regardless of the type of element, as long as submit() is |
// called. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
// Flaky: crbug.com/301547, observed on win and mac. Probably happens on all |
@@ -438,6 +496,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill the dynamic password form and submit. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('create_form_button').click();" |
"window.setTimeout(function() {" |
@@ -447,11 +507,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
"}, 0)"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptForNavigation) { |
@@ -459,14 +515,12 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptForNavigation) { |
// Don't fill the password form, just navigate away. Shouldn't prompt. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
"window.location.href = 'done.html';")); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -476,6 +530,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// If you are filling out a password form in one frame and a different frame |
// navigates, this should not trigger the infobar. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
observer.SetPathToWaitFor("/password/done.html"); |
std::string fill = |
"var first_frame = document.getElementById('first_frame');" |
@@ -489,11 +545,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -503,6 +555,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Make sure that we prompt to save password even if a sub-frame navigation |
// happens first. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
observer.SetPathToWaitFor("/password/done.html"); |
std::string navigate_frame = |
"var second_iframe = document.getElementById('second_frame');" |
@@ -517,11 +571,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F( |
@@ -532,6 +582,8 @@ IN_PROC_BROWSER_TEST_F( |
// Make sure that we don't prompt to save the password for a failed login |
// from the main frame with multiple frames in the same page. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_failed').value = 'temp';" |
"document.getElementById('password_failed').value = 'random';" |
@@ -539,7 +591,7 @@ IN_PROC_BROWSER_TEST_F( |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- EXPECT_FALSE(observer.infobar_shown()); |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F( |
@@ -550,6 +602,8 @@ IN_PROC_BROWSER_TEST_F( |
// Make sure that we don't prompt to save the password for a failed login |
// from a sub-frame with multiple frames in the same page. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"var first_frame = document.getElementById('first_frame');" |
"var frame_doc = first_frame.contentDocument;" |
@@ -560,11 +614,10 @@ IN_PROC_BROWSER_TEST_F( |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- EXPECT_FALSE(observer.infobar_shown()); |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
-IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
- PromptForXHRSubmit) { |
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, PromptForXHRSubmit) { |
#if defined(OS_WIN) && defined(USE_ASH) |
// Disable this test in Metro+Ash for now (http://crbug.com/262796). |
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
@@ -577,17 +630,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Note that calling 'submit()' on a form with javascript doesn't call |
// the onsubmit handler, so we click the submit button instead. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -597,37 +648,32 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Verify that if XHR navigation occurs and the form is properly filled out, |
// we try and save the password even though onsubmit hasn't been called. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_navigate = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"send_xhr()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_navigate)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
-IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
- NoPromptIfLinkClicked) { |
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptIfLinkClicked) { |
NavigateToFile("/password/password_form.html"); |
// Verify that if the user takes a direct action to leave the page, we don't |
// prompt to save the password even if the form is already filled out. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_click_link = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('link').click();"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_click_link)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
// TODO(jam): http://crbug.com/350550 |
@@ -645,6 +691,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Enter a password and save it. |
NavigationObserver first_observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('other_info').value = 'stuff';" |
"document.getElementById('username_field').value = 'my_username';" |
@@ -653,12 +701,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
first_observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- ASSERT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- ui_controller()->SavePassword(); |
- } else { |
- ASSERT_TRUE(first_observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
+ prompt_observer->Accept(); |
// Now navigate to a login form that has similar HTML markup. |
NavigateToFile("/password/password_form.html"); |
@@ -681,15 +725,13 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Submit the form and verify that there is no infobar (as the password |
// has already been saved). |
NavigationObserver second_observer(WebContents()); |
+ scoped_ptr<PromptObserver> second_prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string submit_form = |
"document.getElementById('input_submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit_form)); |
second_observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(second_observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(second_prompt_observer->IsShowingPrompt()); |
// Verify that we sent a ping to Autofill saying that the original form |
// was likely an account creation form since it has more than 2 text input |
@@ -712,6 +754,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, PromptForSubmitFromIframe) { |
// user gesture. We expect the save password prompt to be shown here, because |
// some pages use such iframes for login forms. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"var iframe = document.getElementById('test_iframe');" |
"var iframe_doc = iframe.contentDocument;" |
@@ -721,11 +765,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, PromptForSubmitFromIframe) { |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -735,17 +775,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
NavigateToFile("/password/password_form.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field_no_name').value = 'temp';" |
"document.getElementById('password_field_no_name').value = 'random';" |
"document.getElementById('input_submit_button_no_name').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -755,17 +793,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
NavigateToFile("/password/password_form.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementsByName('username_field_no_id')[0].value = 'temp';" |
"document.getElementsByName('password_field_no_id')[0].value = 'random';" |
"document.getElementsByName('input_submit_button_no_id')[0].click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -775,6 +811,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
NavigateToFile("/password/password_form.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"var form = document.getElementById('testform_elements_no_id_no_name');" |
"var username = form.children[0];" |
@@ -784,11 +822,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
"form.children[2].click()"; // form.children[2] is the submit button. |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, DeleteFrameBeforeSubmit) { |
@@ -830,18 +864,16 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, PasswordValueAccessible) { |
// Fill in the credentials, and make sure they are saved. |
NavigationObserver form_submit_observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('input_submit_button').click();"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
form_submit_observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- ui_controller()->SavePassword(); |
- } else { |
- EXPECT_TRUE(form_submit_observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
+ prompt_observer->Accept(); |
// Reload the original page to have the saved credentials autofilled. |
NavigationObserver reload_observer(WebContents()); |
@@ -873,18 +905,16 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill in the credentials, and make sure they are saved. |
NavigationObserver form_submit_observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random_secret';" |
"document.getElementById('input_submit_button').click();"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
form_submit_observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- ui_controller()->SavePassword(); |
- } else { |
- EXPECT_TRUE(form_submit_observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
+ prompt_observer->Accept(); |
// Reload the original page to have the saved credentials autofilled. |
NavigationObserver reload_observer(WebContents()); |
@@ -909,13 +939,11 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Don't prompt if we navigate away even if there is a password value since |
// it's not coming from the user. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
NavigateToFile("/password/done.html"); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -924,17 +952,15 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill a form and submit through a <input type="submit"> button. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
"document.getElementById('input_submit_button').click()"; |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
@@ -954,8 +980,9 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
// Fill a form and submit through a <input type="submit"> button. |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
// Make sure that the only passwords saved are the auto-saved ones. |
- observer.disable_should_automatically_accept_infobar(); |
std::string fill_and_submit = |
"document.getElementById('username_field').value = 'temp';" |
"document.getElementById('password_field').value = 'random';" |
@@ -964,18 +991,12 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
observer.Wait(); |
if (chrome::VersionInfo::GetChannel() == |
chrome::VersionInfo::CHANNEL_UNKNOWN) { |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ // Passwords getting auto-saved, no prompt. |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
EXPECT_FALSE(password_store->IsEmpty()); |
} else { |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ // Prompt shown, and no passwords saved automatically. |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
EXPECT_TRUE(password_store->IsEmpty()); |
} |
} |
@@ -990,16 +1011,14 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptWhenReloading) { |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
GURL url = embedded_test_server()->GetURL("/password/password_form.html"); |
chrome::NavigateParams params(browser(), url, |
content::PAGE_TRANSITION_RELOAD); |
ui_test_utils::NavigateToURL(¶ms); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_FALSE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_FALSE(observer.infobar_shown()); |
- } |
+ EXPECT_FALSE(prompt_observer->IsShowingPrompt()); |
} |
// Test that if a form gets dynamically added between the form parsing and |
@@ -1010,6 +1029,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
NavigateToFile("/password/between_parsing_and_rendering.html"); |
NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
std::string submit = |
"document.getElementById('username').value = 'temp';" |
"document.getElementById('password').value = 'random';" |
@@ -1017,11 +1038,7 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit)); |
observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- } else { |
- EXPECT_TRUE(observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
} |
// Test that if there was no previous page load then the PasswordManagerDriver |
@@ -1057,6 +1074,8 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoLastLoadGoodLastLoad) { |
content::NavigationController* nav_controller = |
&WebContents()->GetController(); |
NavigationObserver nav_observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
WindowedAuthNeededObserver auth_needed_observer(nav_controller); |
auth_needed_observer.Wait(); |
@@ -1071,12 +1090,9 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoLastLoadGoodLastLoad) { |
// The password manager should be working correctly. |
nav_observer.Wait(); |
- if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
- EXPECT_TRUE(ui_controller()->PasswordPendingUserDecision()); |
- ui_controller()->SavePassword(); |
- } else { |
- EXPECT_TRUE(nav_observer.infobar_shown()); |
- } |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
+ prompt_observer->Accept(); |
+ |
// Spin the message loop to make sure the password store had a chance to save |
// the password. |
base::RunLoop run_loop; |