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

Side by Side Diff: chrome/renderer/autofill/form_autofill_browsertest.cc

Issue 316853006: Autofill's "Clear Form" should clear only autofilled fields (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated test case Created 6 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | components/autofill/content/renderer/form_cache.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 2942 matching lines...) Expand 10 before | Expand all | Expand 10 after
2953 "</FORM>"); 2953 "</FORM>");
2954 2954
2955 WebFrame* web_frame = GetMainFrame(); 2955 WebFrame* web_frame = GetMainFrame();
2956 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 2956 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2957 2957
2958 FormCache form_cache; 2958 FormCache form_cache;
2959 std::vector<FormData> forms; 2959 std::vector<FormData> forms;
2960 form_cache.ExtractNewForms(*web_frame, &forms); 2960 form_cache.ExtractNewForms(*web_frame, &forms);
2961 ASSERT_EQ(1U, forms.size()); 2961 ASSERT_EQ(1U, forms.size());
2962 2962
2963 // Set the auto-filled attribute on the firstname element. 2963 // Set the auto-filled attribute.
2964 WebInputElement firstname = 2964 WebInputElement firstname =
2965 web_frame->document().getElementById("firstname").to<WebInputElement>(); 2965 web_frame->document().getElementById("firstname").to<WebInputElement>();
2966 firstname.setAutofilled(true); 2966 firstname.setAutofilled(true);
2967 WebInputElement lastname =
2968 web_frame->document().getElementById("lastname").to<WebInputElement>();
2969 lastname.setAutofilled(true);
2970 WebInputElement month =
2971 web_frame->document().getElementById("month").to<WebInputElement>();
2972 month.setAutofilled(true);
2973 WebInputElement textarea =
2974 web_frame->document().getElementById("textarea").to<WebInputElement>();
2975 textarea.setAutofilled(true);
2967 2976
2968 // Set the value of the disabled text input element. 2977 // Set the value of the disabled text input element.
2969 WebInputElement notenabled = 2978 WebInputElement notenabled =
2970 web_frame->document().getElementById("notenabled").to<WebInputElement>(); 2979 web_frame->document().getElementById("notenabled").to<WebInputElement>();
2971 notenabled.setValue(WebString::fromUTF8("no clear")); 2980 notenabled.setValue(WebString::fromUTF8("no clear"));
2972 2981
2973 // Clear the form. 2982 // Clear the form.
2974 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 2983 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
2975 2984
2976 // Verify that the auto-filled attribute has been turned off. 2985 // Verify that the auto-filled attribute has been turned off.
(...skipping 19 matching lines...) Expand all
2996 3005
2997 expected.name = ASCIIToUTF16("firstname"); 3006 expected.name = ASCIIToUTF16("firstname");
2998 expected.value = base::string16(); 3007 expected.value = base::string16();
2999 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]); 3008 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
3000 3009
3001 expected.name = ASCIIToUTF16("lastname"); 3010 expected.name = ASCIIToUTF16("lastname");
3002 expected.value = base::string16(); 3011 expected.value = base::string16();
3003 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]); 3012 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
3004 3013
3005 expected.name = ASCIIToUTF16("noAC"); 3014 expected.name = ASCIIToUTF16("noAC");
3006 expected.value = base::string16(); 3015 expected.value = ASCIIToUTF16("one");
3007 expected.autocomplete_attribute = "off"; 3016 expected.autocomplete_attribute = "off";
3008 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 3017 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
3009 expected.autocomplete_attribute = std::string(); // reset 3018 expected.autocomplete_attribute = std::string(); // reset
3010 3019
3011 expected.name = ASCIIToUTF16("notenabled"); 3020 expected.name = ASCIIToUTF16("notenabled");
3012 expected.value = ASCIIToUTF16("no clear"); 3021 expected.value = ASCIIToUTF16("no clear");
3013 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[3]); 3022 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[3]);
3014 3023
3015 expected.form_control_type = "month"; 3024 expected.form_control_type = "month";
3016 expected.max_length = 0; 3025 expected.max_length = 0;
3017 expected.name = ASCIIToUTF16("month"); 3026 expected.name = ASCIIToUTF16("month");
3018 expected.value = base::string16(); 3027 expected.value = base::string16();
3019 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[4]); 3028 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[4]);
3020 3029
3021 expected.name = ASCIIToUTF16("month-disabled"); 3030 expected.name = ASCIIToUTF16("month-disabled");
3022 expected.value = ASCIIToUTF16("2012-11"); 3031 expected.value = ASCIIToUTF16("2012-11");
3023 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[5]); 3032 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[5]);
3024 3033
3025 expected.form_control_type = "textarea"; 3034 expected.form_control_type = "textarea";
3026 expected.name = ASCIIToUTF16("textarea"); 3035 expected.name = ASCIIToUTF16("textarea");
3027 expected.value = base::string16(); 3036 expected.value = base::string16();
3028 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[6]); 3037 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[6]);
3029 3038
3030 expected.name = ASCIIToUTF16("textarea-disabled"); 3039 expected.name = ASCIIToUTF16("textarea-disabled");
3031 expected.value = ASCIIToUTF16(" Banana! "); 3040 expected.value = ASCIIToUTF16(" Banana! ");
3032 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[7]); 3041 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[7]);
3033 3042
3034 expected.name = ASCIIToUTF16("textarea-noAC"); 3043 expected.name = ASCIIToUTF16("textarea-noAC");
3035 expected.value = base::string16(); 3044 expected.value = ASCIIToUTF16("Carrot?");
3036 expected.autocomplete_attribute = "off"; 3045 expected.autocomplete_attribute = "off";
3037 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[8]); 3046 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[8]);
3038 expected.autocomplete_attribute = std::string(); // reset 3047 expected.autocomplete_attribute = std::string(); // reset
3039 3048
3040 // Verify that the cursor position has been updated. 3049 // Verify that the cursor position has been updated.
3041 EXPECT_EQ(0, firstname.selectionStart()); 3050 EXPECT_EQ(0, firstname.selectionStart());
3042 EXPECT_EQ(0, firstname.selectionEnd()); 3051 EXPECT_EQ(0, firstname.selectionEnd());
3043 } 3052 }
3044 3053
3045 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) { 3054 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) {
(...skipping 11 matching lines...) Expand all
3057 "</FORM>"); 3066 "</FORM>");
3058 3067
3059 WebFrame* web_frame = GetMainFrame(); 3068 WebFrame* web_frame = GetMainFrame();
3060 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 3069 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
3061 3070
3062 FormCache form_cache; 3071 FormCache form_cache;
3063 std::vector<FormData> forms; 3072 std::vector<FormData> forms;
3064 form_cache.ExtractNewForms(*web_frame, &forms); 3073 form_cache.ExtractNewForms(*web_frame, &forms);
3065 ASSERT_EQ(1U, forms.size()); 3074 ASSERT_EQ(1U, forms.size());
3066 3075
3067 // Set the auto-filled attribute on the firstname element. 3076 // Set the auto-filled attribute.
3068 WebInputElement firstname = 3077 WebInputElement firstname =
3069 web_frame->document().getElementById("firstname").to<WebInputElement>(); 3078 web_frame->document().getElementById("firstname").to<WebInputElement>();
3070 firstname.setAutofilled(true); 3079 firstname.setAutofilled(true);
3080 WebInputElement lastname =
3081 web_frame->document().getElementById("lastname").to<WebInputElement>();
3082 lastname.setAutofilled(true);
3083 WebInputElement state =
3084 web_frame->document().getElementById("state").to<WebInputElement>();
3085 state.setAutofilled(true);
3071 3086
3072 // Set the value of the select-one. 3087 // Set the value of the select-one.
3073 WebSelectElement select_element = 3088 WebSelectElement select_element =
3074 web_frame->document().getElementById("state").to<WebSelectElement>(); 3089 web_frame->document().getElementById("state").to<WebSelectElement>();
3075 select_element.setValue(WebString::fromUTF8("AK")); 3090 select_element.setValue(WebString::fromUTF8("AK"));
3076 3091
3077 // Clear the form. 3092 // Clear the form.
3078 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 3093 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
3079 3094
3080 // Verify that the auto-filled attribute has been turned off. 3095 // Verify that the auto-filled attribute has been turned off.
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
3315 EXPECT_TRUE(email.suggestedValue().isEmpty()); 3330 EXPECT_TRUE(email.suggestedValue().isEmpty());
3316 EXPECT_FALSE(email.isAutofilled()); 3331 EXPECT_FALSE(email.isAutofilled());
3317 EXPECT_TRUE(email2.value().isEmpty()); 3332 EXPECT_TRUE(email2.value().isEmpty());
3318 EXPECT_TRUE(email2.suggestedValue().isEmpty()); 3333 EXPECT_TRUE(email2.suggestedValue().isEmpty());
3319 EXPECT_FALSE(email2.isAutofilled()); 3334 EXPECT_FALSE(email2.isAutofilled());
3320 EXPECT_TRUE(phone.value().isEmpty()); 3335 EXPECT_TRUE(phone.value().isEmpty());
3321 EXPECT_TRUE(phone.suggestedValue().isEmpty()); 3336 EXPECT_TRUE(phone.suggestedValue().isEmpty());
3322 EXPECT_FALSE(phone.isAutofilled()); 3337 EXPECT_FALSE(phone.isAutofilled());
3323 } 3338 }
3324 3339
3340 // Autofill's "Clear Form" should clear only autofilled fields
3341 TEST_F(FormAutofillTest, ClearOnlyAutofilledFields) {
3342 // Load the form.
3343 LoadHTML(
3344 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
3345 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
3346 " <INPUT type=\"text\" id=\"lastname\" value=\"Earp\"/>"
3347 " <INPUT type=\"email\" id=\"email\" value=\"wyatt@earp.com\"/>"
3348 " <INPUT type=\"tel\" id=\"phone\" value=\"650-777-9999\"/>"
3349 " <INPUT type=\"submit\" value=\"Send\"/>"
3350 "</FORM>");
3351
3352 WebFrame* web_frame = GetMainFrame();
3353 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
3354
3355 FormCache form_cache;
3356 std::vector<FormData> forms;
3357 form_cache.ExtractNewForms(*web_frame, &forms);
3358 ASSERT_EQ(1U, forms.size());
3359
3360 // Set the autofilled attribute.
3361 WebInputElement firstname =
3362 web_frame->document().getElementById("firstname").to<WebInputElement>();
3363 firstname.setAutofilled(false);
3364 WebInputElement lastname =
3365 web_frame->document().getElementById("lastname").to<WebInputElement>();
3366 lastname.setAutofilled(true);
3367 WebInputElement email =
3368 web_frame->document().getElementById("email").to<WebInputElement>();
3369 email.setAutofilled(true);
3370 WebInputElement phone =
3371 web_frame->document().getElementById("phone").to<WebInputElement>();
3372 phone.setAutofilled(true);
3373
3374 // Clear the fields.
3375 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
3376
3377 // Verify only autofilled fields are cleared.
3378 EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value());
3379 EXPECT_TRUE(firstname.suggestedValue().isEmpty());
3380 EXPECT_FALSE(firstname.isAutofilled());
3381 EXPECT_TRUE(lastname.value().isEmpty());
3382 EXPECT_TRUE(lastname.suggestedValue().isEmpty());
3383 EXPECT_FALSE(lastname.isAutofilled());
3384 EXPECT_TRUE(email.value().isEmpty());
3385 EXPECT_TRUE(email.suggestedValue().isEmpty());
3386 EXPECT_FALSE(email.isAutofilled());
3387 EXPECT_TRUE(phone.value().isEmpty());
3388 EXPECT_TRUE(phone.suggestedValue().isEmpty());
3389 EXPECT_FALSE(phone.isAutofilled());
3390 }
3391
3325 TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) { 3392 TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) {
3326 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 3393 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
3327 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 3394 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
3328 " <INPUT type=\"text\" id=\"lastname\"/>" 3395 " <INPUT type=\"text\" id=\"lastname\"/>"
3329 " <INPUT type=\"text\" id=\"email\"/>" 3396 " <INPUT type=\"text\" id=\"email\"/>"
3330 " <INPUT type=\"email\" id=\"email2\"/>" 3397 " <INPUT type=\"email\" id=\"email2\"/>"
3331 " <INPUT type=\"tel\" id=\"phone\"/>" 3398 " <INPUT type=\"tel\" id=\"phone\"/>"
3332 " <INPUT type=\"submit\" value=\"Send\"/>" 3399 " <INPUT type=\"submit\" value=\"Send\"/>"
3333 "</FORM>"); 3400 "</FORM>");
3334 3401
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
3494 expected.form_control_type = "text"; 3561 expected.form_control_type = "text";
3495 expected.max_length = WebInputElement::defaultMaxLength(); 3562 expected.max_length = WebInputElement::defaultMaxLength();
3496 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]); 3563 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
3497 3564
3498 expected.name = ASCIIToUTF16("country"); 3565 expected.name = ASCIIToUTF16("country");
3499 expected.value = ASCIIToUTF16("AL"); 3566 expected.value = ASCIIToUTF16("AL");
3500 expected.form_control_type = "select-one"; 3567 expected.form_control_type = "select-one";
3501 expected.max_length = 0; 3568 expected.max_length = 0;
3502 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); 3569 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
3503 } 3570 }
3504
3505 } // namespace autofill 3571 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/content/renderer/form_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698