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

Unified Diff: chrome/renderer/autofill/password_generation_agent_browsertest.cc

Issue 715733002: [Android] Show autofill popup after animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/autofill/password_generation_agent_browsertest.cc
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index b93cff6fdbac98503f5d2b71d3eb92e3431ba2ba..a093f32e9e8463c9772840af76ef9971f88b87ad 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -85,6 +85,14 @@ class PasswordGenerationAgentTest : public ChromeRenderViewTest {
password_generation_->clear_messages();
}
+ void LoadHTMLWithUserGesture(const char* html) {
+ LoadHTML(html);
+
+ // Enable show-ime event when element is focused by indicating that a user
+ // gesture has been processed since load.
+ EXPECT_TRUE(SimulateElementClick("dummy"));
+ }
+
private:
DISALLOW_COPY_AND_ASSIGN(PasswordGenerationAgentTest);
};
@@ -93,6 +101,7 @@ const char kSigninFormHTML[] =
"<FORM name = 'blah' action = 'http://www.random.com/'> "
" <INPUT type = 'text' id = 'username'/> "
" <INPUT type = 'password' id = 'password'/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
" <INPUT type = 'submit' value = 'LOGIN' />"
"</FORM>";
@@ -103,6 +112,19 @@ const char kAccountCreationFormHTML[] =
" autocomplete = 'off' size = 5/>"
" <INPUT type = 'password' id = 'second_password' size = 5/> "
" <INPUT type = 'text' id = 'address'/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
+ " <INPUT type = 'submit' value = 'LOGIN' />"
+ "</FORM>";
+
+const char kDisabledElementAccountCreationFormHTML[] =
+ "<FORM name = 'blah' action = 'http://www.random.com/'> "
+ " <INPUT type = 'text' id = 'username'/> "
+ " <INPUT type = 'password' id = 'first_password' "
+ " autocomplete = 'off' size = 5/>"
+ " <INPUT type = 'password' id = 'second_password' size = 5/> "
+ " <INPUT type = 'text' id = 'address'/> "
+ " <INPUT type = 'text' id = 'disabled' disabled/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
" <INPUT type = 'submit' value = 'LOGIN' />"
"</FORM>";
@@ -111,6 +133,7 @@ const char kHiddenPasswordAccountCreationFormHTML[] =
" <INPUT type = 'text' id = 'username'/> "
" <INPUT type = 'password' id = 'first_password'/> "
" <INPUT type = 'password' id = 'second_password' style='display:none'/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
" <INPUT type = 'submit' value = 'LOGIN' />"
"</FORM>";
@@ -119,6 +142,7 @@ const char kInvalidActionAccountCreationFormHTML[] =
" <INPUT type = 'text' id = 'username'/> "
" <INPUT type = 'password' id = 'first_password'/> "
" <INPUT type = 'password' id = 'second_password'/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
" <INPUT type = 'submit' value = 'LOGIN' />"
"</FORM>";
@@ -127,6 +151,7 @@ const char kMultipleAccountCreationFormHTML[] =
" <INPUT type = 'text' id = 'random'/> "
" <INPUT type = 'text' id = 'username'/> "
" <INPUT type = 'password' id = 'password'/> "
+ " <INPUT type = 'button' id = 'dummy'/> "
" <INPUT type = 'submit' value = 'LOGIN' />"
"</FORM>"
"<FORM name = 'signup' action = 'http://www.random.com/signup'> "
@@ -152,29 +177,29 @@ const char ChangeDetectionScript[] =
TEST_F(PasswordGenerationAgentTest, DetectionTest) {
// Don't shown the icon for non account creation forms.
- LoadHTML(kSigninFormHTML);
+ LoadHTMLWithUserGesture(kSigninFormHTML);
ExpectPasswordGenerationAvailable("password", false);
// We don't show the decoration yet because the feature isn't enabled.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
ExpectPasswordGenerationAvailable("first_password", false);
// Pretend like We have received message indicating site is not blacklisted,
// and we have received message indicating the form is classified as
// ACCOUNT_CREATION_FORM form Autofill server. We should show the icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", true);
// Hidden fields are not treated differently.
- LoadHTML(kHiddenPasswordAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kHiddenPasswordAccountCreationFormHTML);
SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", true);
// This doesn't trigger because the form action is invalid.
- LoadHTML(kInvalidActionAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kInvalidActionAccountCreationFormHTML);
SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", false);
@@ -184,7 +209,7 @@ TEST_F(PasswordGenerationAgentTest, FillTest) {
// Make sure that we are enabled before loading HTML.
std::string html = std::string(kAccountCreationFormHTML) +
ChangeDetectionScript;
- LoadHTML(html.c_str());
+ LoadHTMLWithUserGesture(html.c_str());
SetNotBlacklistedMessage(html.c_str());
SetAccountCreationFormsDetectedMessage(0);
@@ -234,7 +259,7 @@ TEST_F(PasswordGenerationAgentTest, FillTest) {
}
TEST_F(PasswordGenerationAgentTest, EditingTest) {
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
@@ -284,27 +309,27 @@ TEST_F(PasswordGenerationAgentTest, EditingTest) {
TEST_F(PasswordGenerationAgentTest, BlacklistedTest) {
// Did not receive not blacklisted message. Don't show password generation
// icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", false);
// Receive one not blacklisted message for non account creation form. Don't
// show password generation icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kSigninFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", false);
- // Receive one not blackliste message for account creation form. Show password
- // generation icon.
- LoadHTML(kAccountCreationFormHTML);
+ // Receive one not blacklisted message for account creation form. Show
+ // password generation icon.
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", true);
// Receive two not blacklisted messages, one is for account creation form and
// the other is not. Show password generation icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kSigninFormHTML);
SetAccountCreationFormsDetectedMessage(0);
@@ -312,15 +337,15 @@ TEST_F(PasswordGenerationAgentTest, BlacklistedTest) {
}
TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
- // Did not receive account creation forms detected messege. Don't show
+ // Did not receive account creation forms detected message. Don't show
// password generation icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
ExpectPasswordGenerationAvailable("first_password", false);
// Receive the account creation forms detected message. Show password
// generation icon.
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", true);
@@ -329,7 +354,7 @@ TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) {
base::HistogramTester histogram_tester;
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
ExpectPasswordGenerationAvailable("first_password", true);
@@ -397,14 +422,14 @@ TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) {
// Focusing the password field will bring up the generation UI again.
ExecuteJavaScript("document.getElementById('first_password').focus();");
- EXPECT_EQ(1u, password_generation_->messages().size());
+ ASSERT_EQ(1u, password_generation_->messages().size());
EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
password_generation_->messages()[0]->type());
password_generation_->clear_messages();
// Loading a different page triggers UMA stat upload. Verify that only one
// display event is sent even though
- LoadHTML(kSigninFormHTML);
+ LoadHTMLWithUserGesture(kSigninFormHTML);
histogram_tester.ExpectBucketCount(
"PasswordGeneration.Event",
@@ -413,7 +438,7 @@ TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) {
}
TEST_F(PasswordGenerationAgentTest, DynamicFormTest) {
- LoadHTML(kSigninFormHTML);
+ LoadHTMLWithUserGesture(kSigninFormHTML);
SetNotBlacklistedMessage(kSigninFormHTML);
ExecuteJavaScript(
@@ -438,7 +463,7 @@ TEST_F(PasswordGenerationAgentTest, DynamicFormTest) {
// This needs to come after the DOM has been modified.
SetAccountCreationFormsDetectedMessage(1);
- // TODO(gcasto): I'm slighty worried about flakes in this test where
+ // TODO(gcasto): I'm slightly worried about flakes in this test where
// didAssociateFormControls() isn't called. If this turns out to be a problem
// adding a call to OnDynamicFormsSeen(GetMainFrame()) will fix it, though
// it will weaken the test.
@@ -448,7 +473,7 @@ TEST_F(PasswordGenerationAgentTest, DynamicFormTest) {
TEST_F(PasswordGenerationAgentTest, MultiplePasswordFormsTest) {
// If two forms on the page looks like possible account creation forms, make
// sure to trigger on the one that is specified from Autofill.
- LoadHTML(kMultipleAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kMultipleAccountCreationFormHTML);
SetNotBlacklistedMessage(kMultipleAccountCreationFormHTML);
// Should trigger on the second form.
@@ -459,7 +484,7 @@ TEST_F(PasswordGenerationAgentTest, MultiplePasswordFormsTest) {
}
TEST_F(PasswordGenerationAgentTest, MessagesAfterAccountSignupFormFound) {
- LoadHTML(kAccountCreationFormHTML);
+ LoadHTMLWithUserGesture(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(0);
@@ -475,4 +500,20 @@ TEST_F(PasswordGenerationAgentTest, MessagesAfterAccountSignupFormFound) {
ExpectPasswordGenerationAvailable("first_password", true);
}
+// Losing focus should not trigger a password generation popup.
+TEST_F(PasswordGenerationAgentTest, BlurTest) {
+ LoadHTMLWithUserGesture(kDisabledElementAccountCreationFormHTML);
+ SetNotBlacklistedMessage(kDisabledElementAccountCreationFormHTML);
+ SetAccountCreationFormsDetectedMessage(0);
+
+ // Focus on the first password field: password generation popup should show
+ // up.
+ ExpectPasswordGenerationAvailable("first_password", true);
+
+ // Remove focus from everywhere by clicking an unfocusable element: password
+ // generation popup should not show up.
+ EXPECT_TRUE(SimulateElementClick("disabled"));
+ EXPECT_EQ(0u, password_generation_->messages().size());
+}
+
} // namespace autofill
« no previous file with comments | « chrome/renderer/autofill/page_click_tracker_browsertest.cc ('k') | components/autofill/content/renderer/autofill_agent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698