Commit 1e015df3 authored by n.bansal@samsung.com's avatar n.bansal@samsung.com

Autofill's "Clear Form" should clear only autofilled fields

Updated ClearFormWithElement() to ignore fields that were not
autofilled.

BUG=379969

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277902 0039d316-1c4b-4281-b951-d872f2087c98
parent df847ef9
...@@ -2960,10 +2960,19 @@ TEST_F(FormAutofillTest, ClearFormWithNode) { ...@@ -2960,10 +2960,19 @@ TEST_F(FormAutofillTest, ClearFormWithNode) {
form_cache.ExtractNewForms(*web_frame, &forms); form_cache.ExtractNewForms(*web_frame, &forms);
ASSERT_EQ(1U, forms.size()); ASSERT_EQ(1U, forms.size());
// Set the auto-filled attribute on the firstname element. // Set the auto-filled attribute.
WebInputElement firstname = WebInputElement firstname =
web_frame->document().getElementById("firstname").to<WebInputElement>(); web_frame->document().getElementById("firstname").to<WebInputElement>();
firstname.setAutofilled(true); firstname.setAutofilled(true);
WebInputElement lastname =
web_frame->document().getElementById("lastname").to<WebInputElement>();
lastname.setAutofilled(true);
WebInputElement month =
web_frame->document().getElementById("month").to<WebInputElement>();
month.setAutofilled(true);
WebInputElement textarea =
web_frame->document().getElementById("textarea").to<WebInputElement>();
textarea.setAutofilled(true);
// Set the value of the disabled text input element. // Set the value of the disabled text input element.
WebInputElement notenabled = WebInputElement notenabled =
...@@ -3003,7 +3012,7 @@ TEST_F(FormAutofillTest, ClearFormWithNode) { ...@@ -3003,7 +3012,7 @@ TEST_F(FormAutofillTest, ClearFormWithNode) {
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]); EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
expected.name = ASCIIToUTF16("noAC"); expected.name = ASCIIToUTF16("noAC");
expected.value = base::string16(); expected.value = ASCIIToUTF16("one");
expected.autocomplete_attribute = "off"; expected.autocomplete_attribute = "off";
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
expected.autocomplete_attribute = std::string(); // reset expected.autocomplete_attribute = std::string(); // reset
...@@ -3032,7 +3041,7 @@ TEST_F(FormAutofillTest, ClearFormWithNode) { ...@@ -3032,7 +3041,7 @@ TEST_F(FormAutofillTest, ClearFormWithNode) {
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[7]); EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[7]);
expected.name = ASCIIToUTF16("textarea-noAC"); expected.name = ASCIIToUTF16("textarea-noAC");
expected.value = base::string16(); expected.value = ASCIIToUTF16("Carrot?");
expected.autocomplete_attribute = "off"; expected.autocomplete_attribute = "off";
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[8]); EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[8]);
expected.autocomplete_attribute = std::string(); // reset expected.autocomplete_attribute = std::string(); // reset
...@@ -3064,10 +3073,16 @@ TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) { ...@@ -3064,10 +3073,16 @@ TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) {
form_cache.ExtractNewForms(*web_frame, &forms); form_cache.ExtractNewForms(*web_frame, &forms);
ASSERT_EQ(1U, forms.size()); ASSERT_EQ(1U, forms.size());
// Set the auto-filled attribute on the firstname element. // Set the auto-filled attribute.
WebInputElement firstname = WebInputElement firstname =
web_frame->document().getElementById("firstname").to<WebInputElement>(); web_frame->document().getElementById("firstname").to<WebInputElement>();
firstname.setAutofilled(true); firstname.setAutofilled(true);
WebInputElement lastname =
web_frame->document().getElementById("lastname").to<WebInputElement>();
lastname.setAutofilled(true);
WebInputElement state =
web_frame->document().getElementById("state").to<WebInputElement>();
state.setAutofilled(true);
// Set the value of the select-one. // Set the value of the select-one.
WebSelectElement select_element = WebSelectElement select_element =
...@@ -3322,6 +3337,58 @@ TEST_F(FormAutofillTest, ClearPreviewedFormWithAutofilledInitiatingNode) { ...@@ -3322,6 +3337,58 @@ TEST_F(FormAutofillTest, ClearPreviewedFormWithAutofilledInitiatingNode) {
EXPECT_FALSE(phone.isAutofilled()); EXPECT_FALSE(phone.isAutofilled());
} }
// Autofill's "Clear Form" should clear only autofilled fields
TEST_F(FormAutofillTest, ClearOnlyAutofilledFields) {
// Load the form.
LoadHTML(
"<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
" <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
" <INPUT type=\"text\" id=\"lastname\" value=\"Earp\"/>"
" <INPUT type=\"email\" id=\"email\" value=\"wyatt@earp.com\"/>"
" <INPUT type=\"tel\" id=\"phone\" value=\"650-777-9999\"/>"
" <INPUT type=\"submit\" value=\"Send\"/>"
"</FORM>");
WebFrame* web_frame = GetMainFrame();
ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
FormCache form_cache;
std::vector<FormData> forms;
form_cache.ExtractNewForms(*web_frame, &forms);
ASSERT_EQ(1U, forms.size());
// Set the autofilled attribute.
WebInputElement firstname =
web_frame->document().getElementById("firstname").to<WebInputElement>();
firstname.setAutofilled(false);
WebInputElement lastname =
web_frame->document().getElementById("lastname").to<WebInputElement>();
lastname.setAutofilled(true);
WebInputElement email =
web_frame->document().getElementById("email").to<WebInputElement>();
email.setAutofilled(true);
WebInputElement phone =
web_frame->document().getElementById("phone").to<WebInputElement>();
phone.setAutofilled(true);
// Clear the fields.
EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
// Verify only autofilled fields are cleared.
EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value());
EXPECT_TRUE(firstname.suggestedValue().isEmpty());
EXPECT_FALSE(firstname.isAutofilled());
EXPECT_TRUE(lastname.value().isEmpty());
EXPECT_TRUE(lastname.suggestedValue().isEmpty());
EXPECT_FALSE(lastname.isAutofilled());
EXPECT_TRUE(email.value().isEmpty());
EXPECT_TRUE(email.suggestedValue().isEmpty());
EXPECT_FALSE(email.isAutofilled());
EXPECT_TRUE(phone.value().isEmpty());
EXPECT_TRUE(phone.suggestedValue().isEmpty());
EXPECT_FALSE(phone.isAutofilled());
}
TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) { TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
" <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
...@@ -3501,5 +3568,4 @@ TEST_F(FormAutofillTest, SelectOneAsText) { ...@@ -3501,5 +3568,4 @@ TEST_F(FormAutofillTest, SelectOneAsText) {
expected.max_length = 0; expected.max_length = 0;
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
} }
} // namespace autofill } // namespace autofill
...@@ -201,6 +201,10 @@ bool FormCache::ClearFormWithElement(const WebFormControlElement& element) { ...@@ -201,6 +201,10 @@ bool FormCache::ClearFormWithElement(const WebFormControlElement& element) {
if (!control_element.isEnabled()) if (!control_element.isEnabled())
continue; continue;
// Don't clear field that was not autofilled
if (!control_element.isAutofilled())
continue;
control_element.setAutofilled(false); control_element.setAutofilled(false);
WebInputElement* input_element = toWebInputElement(&control_element); WebInputElement* input_element = toWebInputElement(&control_element);
......
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