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

Unified Diff: chrome/browser/autofill/autofill_interactive_uitest.cc

Issue 214823011: Autofill/rAc: dispatch "input"/"change" on <input>, <textarea>, and <select> (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: d'oh Created 6 years, 9 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
« no previous file with comments | « no previous file | components/autofill/content/renderer/form_autofill_util.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_interactive_uitest.cc
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index f1e2b6212832204039c01a6c5df955b3285ff8ee..65ee8ee97db49a3eea4f7366fed7b621c77123f1 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -58,12 +58,12 @@ using base::ASCIIToUTF16;
namespace autofill {
-static const char* kDataURIPrefix = "data:text/html;charset=utf-8,";
-static const char* kTestFormString =
+static const char kDataURIPrefix[] = "data:text/html;charset=utf-8,";
+static const char kTestFormString[] =
"<form action=\"http://www.example.com/\" method=\"POST\">"
"<label for=\"firstname\">First name:</label>"
" <input type=\"text\" id=\"firstname\""
- " onFocus=\"domAutomationController.send(true)\"><br>"
+ " onfocus=\"domAutomationController.send(true)\"><br>"
"<label for=\"lastname\">Last name:</label>"
" <input type=\"text\" id=\"lastname\"><br>"
"<label for=\"address1\">Address line 1:</label>"
@@ -489,13 +489,83 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillSelectViaTab) {
ExpectFilledTestForm();
}
+// Test that a JavaScript oninput event is fired after auto-filling a form.
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnInputAfterAutofill) {
+ CreateTestProfile();
+
+ const char kOnInputScript[] =
+ "<script>"
+ "focused_fired = false;"
+ "unfocused_fired = false;"
+ "changed_select_fired = false;"
+ "unchanged_select_fired = false;"
+ "document.getElementById('firstname').oninput = function() {"
+ " focused_fired = true;"
+ "};"
+ "document.getElementById('lastname').oninput = function() {"
+ " unfocused_fired = true;"
+ "};"
+ "document.getElementById('state').oninput = function() {"
+ " changed_select_fired = true;"
+ "};"
+ "document.getElementById('country').oninput = function() {"
+ " unchanged_select_fired = true;"
+ "};"
+ "document.getElementById('country').value = 'US';"
+ "</script>";
+
+ // Load the test page.
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
+ GURL(std::string(kDataURIPrefix) + kTestFormString + kOnInputScript)));
+
+ // Invoke Autofill.
+ FocusFirstNameField();
+
+ // Start filling the first name field with "M" and wait for the popup to be
+ // shown.
+ SendKeyToPageAndWait(ui::VKEY_M);
+
+ // Press the down arrow to select the suggestion and preview the autofilled
+ // form.
+ SendKeyToPopupAndWait(ui::VKEY_DOWN);
+
+ // Press Enter to accept the autofill suggestions.
+ SendKeyToPopupAndWait(ui::VKEY_RETURN);
+
+ // The form should be filled.
+ ExpectFilledTestForm();
+
+ bool focused_fired = false;
+ bool unfocused_fired = false;
+ bool changed_select_fired = false;
+ bool unchanged_select_fired = false;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+ GetRenderViewHost(),
+ "domAutomationController.send(focused_fired);",
+ &focused_fired));
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+ GetRenderViewHost(),
+ "domAutomationController.send(unfocused_fired);",
+ &unfocused_fired));
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+ GetRenderViewHost(),
+ "domAutomationController.send(changed_select_fired);",
+ &changed_select_fired));
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+ GetRenderViewHost(),
+ "domAutomationController.send(unchanged_select_fired);",
+ &unchanged_select_fired));
+ EXPECT_TRUE(focused_fired);
+ EXPECT_TRUE(unfocused_fired);
+ EXPECT_TRUE(changed_select_fired);
+ EXPECT_FALSE(unchanged_select_fired);
+}
+
// Test that a JavaScript onchange event is fired after auto-filling a form.
-// Temporarily disabled for crbug.com/353691.
-IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
- DISABLED_OnChangeAfterAutofill) {
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, OnChangeAfterAutofill) {
CreateTestProfile();
- const char* kOnChangeScript =
+ const char kOnChangeScript[] =
"<script>"
"focused_fired = false;"
"unfocused_fired = false;"
@@ -537,9 +607,6 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
// The form should be filled.
ExpectFilledTestForm();
- // The change event should have already fired for unfocused fields, both of
- // <input> and of <select> type. However, it should not yet have fired for the
- // focused field.
bool focused_fired = false;
bool unfocused_fired = false;
bool changed_select_fired = false;
@@ -560,17 +627,88 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
GetRenderViewHost(),
"domAutomationController.send(unchanged_select_fired);",
&unchanged_select_fired));
- EXPECT_FALSE(focused_fired);
+ EXPECT_TRUE(focused_fired);
EXPECT_TRUE(unfocused_fired);
EXPECT_TRUE(changed_select_fired);
EXPECT_FALSE(unchanged_select_fired);
+}
- // Unfocus the first name field. Its change event should fire.
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, InputFiresBeforeChange) {
+ CreateTestProfile();
+
+ const char kInputFiresBeforeChangeScript[] =
+ "<script>"
+ "inputElementEvents = [];"
+ "function recordInputElementEvent(e) {"
+ " if (e.target.tagName != 'INPUT') throw 'only <input> tags allowed';"
+ " inputElementEvents.push(e.type);"
+ "}"
+ "selectElementEvents = [];"
+ "function recordSelectElementEvent(e) {"
+ " if (e.target.tagName != 'SELECT') throw 'only <select> tags allowed';"
+ " selectElementEvents.push(e.type);"
+ "}"
+ "document.getElementById('lastname').oninput = recordInputElementEvent;"
+ "document.getElementById('lastname').onchange = recordInputElementEvent;"
+ "document.getElementById('country').oninput = recordSelectElementEvent;"
+ "document.getElementById('country').onchange = recordSelectElementEvent;"
+ "</script>";
+
+ // Load the test page.
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
+ GURL(std::string(kDataURIPrefix) + kTestFormString +
+ kInputFiresBeforeChangeScript)));
+
+ // Invoke and accept the Autofill popup and verify the form was filled.
+ FocusFirstNameField();
+ SendKeyToPageAndWait(ui::VKEY_M);
+ SendKeyToPopupAndWait(ui::VKEY_DOWN);
+ SendKeyToPopupAndWait(ui::VKEY_RETURN);
+ ExpectFilledTestForm();
+
+ int num_input_element_events = -1;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractInt(
GetRenderViewHost(),
- "document.getElementById('firstname').blur();"
- "domAutomationController.send(focused_fired);", &focused_fired));
- EXPECT_TRUE(focused_fired);
+ "domAutomationController.send(inputElementEvents.length);",
+ &num_input_element_events));
+ EXPECT_EQ(2, num_input_element_events);
+
+ std::vector<std::string> input_element_events;
+ input_element_events.resize(2);
+
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ GetRenderViewHost(),
+ "domAutomationController.send(inputElementEvents[0]);",
+ &input_element_events[0]));
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ GetRenderViewHost(),
+ "domAutomationController.send(inputElementEvents[1]);",
+ &input_element_events[1]));
+
+ EXPECT_EQ("input", input_element_events[0]);
+ EXPECT_EQ("change", input_element_events[1]);
+
+ int num_select_element_events = -1;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractInt(
+ GetRenderViewHost(),
+ "domAutomationController.send(selectElementEvents.length);",
+ &num_select_element_events));
+ EXPECT_EQ(2, num_select_element_events);
+
+ std::vector<std::string> select_element_events;
+ select_element_events.resize(2);
+
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ GetRenderViewHost(),
+ "domAutomationController.send(selectElementEvents[0]);",
+ &select_element_events[0]));
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ GetRenderViewHost(),
+ "domAutomationController.send(selectElementEvents[1]);",
+ &select_element_events[1]));
+
+ EXPECT_EQ("input", select_element_events[0]);
+ EXPECT_EQ("change", select_element_events[1]);
}
// Test that we can autofill forms distinguished only by their |id| attribute.
@@ -609,7 +747,7 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillFormWithRepeatedField) {
"<form action=\"http://www.example.com/\" method=\"POST\">"
"<label for=\"firstname\">First name:</label>"
" <input type=\"text\" id=\"firstname\""
- " onFocus=\"domAutomationController.send(true)\"><br>"
+ " onfocus=\"domAutomationController.send(true)\"><br>"
"<label for=\"lastname\">Last name:</label>"
" <input type=\"text\" id=\"lastname\"><br>"
"<label for=\"address1\">Address line 1:</label>"
@@ -655,7 +793,7 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest,
"<form action=\"http://www.example.com/\" method=\"POST\">"
"<label for=\"firstname\">First name:</label>"
" <input type=\"text\" id=\"firstname\""
- " onFocus=\"domAutomationController.send(true)\"><br>"
+ " onfocus=\"domAutomationController.send(true)\"><br>"
"<label for=\"middlename\">Middle name:</label>"
" <input type=\"text\" id=\"middlename\" autocomplete=\"off\" /><br>"
"<label for=\"lastname\">Last name:</label>"
@@ -735,10 +873,11 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DynamicFormFill) {
" input_element.setAttribute('id', name);"
" input_element.setAttribute('name', name);"
""
- " /* Add the onFocus listener to the 'firstname' field. */"
+ " /* Add the onfocus listener to the 'firstname' field. */"
" if (name === 'firstname') {"
- " input_element.setAttribute("
- " 'onFocus', 'domAutomationController.send(true)');"
+ " input_element.onfocus = function() {"
+ " domAutomationController.send(true);"
+ " };"
" }"
""
" form.appendChild(input_element);"
@@ -799,7 +938,7 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, AutofillAfterTranslate) {
"<form action=\"http://www.example.com/\" method=\"POST\">"
"<label for=\"fn\">なまえ</label>"
" <input type=\"text\" id=\"fn\""
- " onFocus=\"domAutomationController.send(true)\""
+ " onfocus=\"domAutomationController.send(true)\""
"><br>"
"<label for=\"ln\">みょうじ</label>"
" <input type=\"text\" id=\"ln\"><br>"
« no previous file with comments | « no previous file | components/autofill/content/renderer/form_autofill_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698