Commit b7d172c3 authored by vabr@chromium.org's avatar vabr@chromium.org

PasswordManager browser test: simplify checking for password prompt

Currently, every single test case needs to check whether the infobar or tha password bubble is used, and do different checks accordingly. Even worse, auto-saving behaviour is different for those two, so people modifying existing tests are very likely to have false expectations.

This CL creates a PromptObserver class by decoupling prompt observing from navigation observation. PromptObserver takes care of the differences between infobar and bubble automatically, and provides a clear API to check for the prompt being shown, and to instruct the prompt to save passwords, respectively.

BUG=392144

Review URL: https://codereview.chromium.org/378643006

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