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

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: Review feedback 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 2967
Ilya Sherman 2014/06/16 21:19:37 nit: I'd avoid these blank lines for the various e
Nikhil 2014/06/17 08:59:43 Done.
2968 WebInputElement lastname =
2969 web_frame->document().getElementById("lastname").to<WebInputElement>();
2970 lastname.setAutofilled(true);
2971
2972 WebInputElement no_autocomplete =
2973 web_frame->document().getElementById("noAC").to<WebInputElement>();
2974 no_autocomplete.setAutofilled(true);
Ilya Sherman 2014/06/16 21:19:37 It doesn't really make sense to set autofilled to
Nikhil 2014/06/17 08:59:43 Right! I've updated the behavior. Since these fiel
2975
2976 WebInputElement month =
2977 web_frame->document().getElementById("month").to<WebInputElement>();
2978 month.setAutofilled(true);
2979
2980 WebInputElement textarea =
2981 web_frame->document().getElementById("textarea").to<WebInputElement>();
2982 textarea.setAutofilled(true);
2983
2984 WebInputElement textarea_no_autocomplete =
2985 web_frame->document()
2986 .getElementById("textarea-noAC")
2987 .to<WebInputElement>();
2988 textarea_no_autocomplete.setAutofilled(true);
2989
2968 // Set the value of the disabled text input element. 2990 // Set the value of the disabled text input element.
2969 WebInputElement notenabled = 2991 WebInputElement notenabled =
2970 web_frame->document().getElementById("notenabled").to<WebInputElement>(); 2992 web_frame->document().getElementById("notenabled").to<WebInputElement>();
2971 notenabled.setValue(WebString::fromUTF8("no clear")); 2993 notenabled.setValue(WebString::fromUTF8("no clear"));
2972 2994
2973 // Clear the form. 2995 // Clear the form.
2974 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 2996 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
2975 2997
2976 // Verify that the auto-filled attribute has been turned off. 2998 // Verify that the auto-filled attribute has been turned off.
2977 EXPECT_FALSE(firstname.isAutofilled()); 2999 EXPECT_FALSE(firstname.isAutofilled());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
3057 "</FORM>"); 3079 "</FORM>");
3058 3080
3059 WebFrame* web_frame = GetMainFrame(); 3081 WebFrame* web_frame = GetMainFrame();
3060 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 3082 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
3061 3083
3062 FormCache form_cache; 3084 FormCache form_cache;
3063 std::vector<FormData> forms; 3085 std::vector<FormData> forms;
3064 form_cache.ExtractNewForms(*web_frame, &forms); 3086 form_cache.ExtractNewForms(*web_frame, &forms);
3065 ASSERT_EQ(1U, forms.size()); 3087 ASSERT_EQ(1U, forms.size());
3066 3088
3067 // Set the auto-filled attribute on the firstname element. 3089 // Set the auto-filled attribute.
3068 WebInputElement firstname = 3090 WebInputElement firstname =
3069 web_frame->document().getElementById("firstname").to<WebInputElement>(); 3091 web_frame->document().getElementById("firstname").to<WebInputElement>();
3070 firstname.setAutofilled(true); 3092 firstname.setAutofilled(true);
3071 3093
3094 WebInputElement lastname =
3095 web_frame->document().getElementById("lastname").to<WebInputElement>();
3096 lastname.setAutofilled(true);
3097
3098 WebInputElement state =
3099 web_frame->document().getElementById("state").to<WebInputElement>();
3100 state.setAutofilled(true);
3101
3072 // Set the value of the select-one. 3102 // Set the value of the select-one.
3073 WebSelectElement select_element = 3103 WebSelectElement select_element =
3074 web_frame->document().getElementById("state").to<WebSelectElement>(); 3104 web_frame->document().getElementById("state").to<WebSelectElement>();
3075 select_element.setValue(WebString::fromUTF8("AK")); 3105 select_element.setValue(WebString::fromUTF8("AK"));
3076 3106
3077 // Clear the form. 3107 // Clear the form.
3078 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 3108 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
3079 3109
3080 // Verify that the auto-filled attribute has been turned off. 3110 // Verify that the auto-filled attribute has been turned off.
3081 EXPECT_FALSE(firstname.isAutofilled()); 3111 EXPECT_FALSE(firstname.isAutofilled());
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
3315 EXPECT_TRUE(email.suggestedValue().isEmpty()); 3345 EXPECT_TRUE(email.suggestedValue().isEmpty());
3316 EXPECT_FALSE(email.isAutofilled()); 3346 EXPECT_FALSE(email.isAutofilled());
3317 EXPECT_TRUE(email2.value().isEmpty()); 3347 EXPECT_TRUE(email2.value().isEmpty());
3318 EXPECT_TRUE(email2.suggestedValue().isEmpty()); 3348 EXPECT_TRUE(email2.suggestedValue().isEmpty());
3319 EXPECT_FALSE(email2.isAutofilled()); 3349 EXPECT_FALSE(email2.isAutofilled());
3320 EXPECT_TRUE(phone.value().isEmpty()); 3350 EXPECT_TRUE(phone.value().isEmpty());
3321 EXPECT_TRUE(phone.suggestedValue().isEmpty()); 3351 EXPECT_TRUE(phone.suggestedValue().isEmpty());
3322 EXPECT_FALSE(phone.isAutofilled()); 3352 EXPECT_FALSE(phone.isAutofilled());
3323 } 3353 }
3324 3354
3355 // Autofill's "Clear Form" should clear only autofilled fields
3356 TEST_F(FormAutofillTest, ClearOnlyAutofilledFields) {
3357 // Load the form.
3358 LoadHTML(
3359 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
3360 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
3361 " <INPUT type=\"text\" id=\"lastname\" value=\"Earp\"/>"
3362 " <INPUT type=\"email\" id=\"email\" value=\"wyatt@earp.com\"/>"
3363 " <INPUT type=\"tel\" id=\"phone\" value=\"650-777-9999\"/>"
3364 " <INPUT type=\"submit\" value=\"Send\"/>"
3365 "</FORM>");
3366
3367 WebFrame* web_frame = GetMainFrame();
3368 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
3369
3370 FormCache form_cache;
3371 std::vector<FormData> forms;
3372 form_cache.ExtractNewForms(*web_frame, &forms);
3373 ASSERT_EQ(1U, forms.size());
3374
3375 // Set the autofilled attribute.
3376 WebInputElement firstname =
3377 web_frame->document().getElementById("firstname").to<WebInputElement>();
3378 firstname.setAutofilled(false);
3379 WebInputElement lastname =
3380 web_frame->document().getElementById("lastname").to<WebInputElement>();
3381 lastname.setAutofilled(true);
3382 WebInputElement email =
3383 web_frame->document().getElementById("email").to<WebInputElement>();
3384 email.setAutofilled(true);
3385 WebInputElement phone =
3386 web_frame->document().getElementById("phone").to<WebInputElement>();
3387 phone.setAutofilled(true);
3388
3389 // Clear the fields.
3390 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
3391
3392 // Verify only autofilled fields are cleared.
3393 EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value());
3394 EXPECT_TRUE(firstname.suggestedValue().isEmpty());
3395 EXPECT_FALSE(firstname.isAutofilled());
3396 EXPECT_TRUE(lastname.value().isEmpty());
3397 EXPECT_TRUE(lastname.suggestedValue().isEmpty());
3398 EXPECT_FALSE(lastname.isAutofilled());
3399 EXPECT_TRUE(email.value().isEmpty());
3400 EXPECT_TRUE(email.suggestedValue().isEmpty());
3401 EXPECT_FALSE(email.isAutofilled());
3402 EXPECT_TRUE(phone.value().isEmpty());
3403 EXPECT_TRUE(phone.suggestedValue().isEmpty());
3404 EXPECT_FALSE(phone.isAutofilled());
3405 }
3406
3325 TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) { 3407 TEST_F(FormAutofillTest, FormWithNodeIsAutofilled) {
3326 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 3408 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
3327 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 3409 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
3328 " <INPUT type=\"text\" id=\"lastname\"/>" 3410 " <INPUT type=\"text\" id=\"lastname\"/>"
3329 " <INPUT type=\"text\" id=\"email\"/>" 3411 " <INPUT type=\"text\" id=\"email\"/>"
3330 " <INPUT type=\"email\" id=\"email2\"/>" 3412 " <INPUT type=\"email\" id=\"email2\"/>"
3331 " <INPUT type=\"tel\" id=\"phone\"/>" 3413 " <INPUT type=\"tel\" id=\"phone\"/>"
3332 " <INPUT type=\"submit\" value=\"Send\"/>" 3414 " <INPUT type=\"submit\" value=\"Send\"/>"
3333 "</FORM>"); 3415 "</FORM>");
3334 3416
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
3494 expected.form_control_type = "text"; 3576 expected.form_control_type = "text";
3495 expected.max_length = WebInputElement::defaultMaxLength(); 3577 expected.max_length = WebInputElement::defaultMaxLength();
3496 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]); 3578 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
3497 3579
3498 expected.name = ASCIIToUTF16("country"); 3580 expected.name = ASCIIToUTF16("country");
3499 expected.value = ASCIIToUTF16("AL"); 3581 expected.value = ASCIIToUTF16("AL");
3500 expected.form_control_type = "select-one"; 3582 expected.form_control_type = "select-one";
3501 expected.max_length = 0; 3583 expected.max_length = 0;
3502 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); 3584 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
3503 } 3585 }
3504
3505 } // namespace autofill 3586 } // 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