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

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

Issue 803673002: Autofill: one FormCache per WebFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 6 years 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/autofill_agent.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/strings/string16.h" 8 #include "base/strings/string16.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 const std::vector<std::string>& control_types) { 188 const std::vector<std::string>& control_types) {
189 ASSERT_EQ(labels.size(), names.size()); 189 ASSERT_EQ(labels.size(), names.size());
190 ASSERT_EQ(labels.size(), values.size()); 190 ASSERT_EQ(labels.size(), values.size());
191 ASSERT_EQ(labels.size(), control_types.size()); 191 ASSERT_EQ(labels.size(), control_types.size());
192 192
193 LoadHTML(html); 193 LoadHTML(html);
194 194
195 WebFrame* web_frame = GetMainFrame(); 195 WebFrame* web_frame = GetMainFrame();
196 ASSERT_NE(nullptr, web_frame); 196 ASSERT_NE(nullptr, web_frame);
197 197
198 FormCache form_cache; 198 FormCache form_cache(*web_frame);
199 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 199 std::vector<FormData> forms = form_cache.ExtractNewForms();
200 ASSERT_EQ(1U, forms.size()); 200 ASSERT_EQ(1U, forms.size());
201 201
202 const FormData& form = forms[0]; 202 const FormData& form = forms[0];
203 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 203 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
204 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 204 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
205 EXPECT_EQ(GURL("http://cnn.com"), form.action); 205 EXPECT_EQ(GURL("http://cnn.com"), form.action);
206 206
207 const std::vector<FormFieldData>& fields = form.fields; 207 const std::vector<FormFieldData>& fields = form.fields;
208 ASSERT_EQ(labels.size(), fields.size()); 208 ASSERT_EQ(labels.size(), fields.size());
209 for (size_t i = 0; i < labels.size(); ++i) { 209 for (size_t i = 0; i < labels.size(); ++i) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 bool unowned, 248 bool unowned,
249 const AutofillFieldCase* field_cases, 249 const AutofillFieldCase* field_cases,
250 size_t number_of_field_cases, 250 size_t number_of_field_cases,
251 FillFormFunction fill_form_function, 251 FillFormFunction fill_form_function,
252 GetValueFunction get_value_function) { 252 GetValueFunction get_value_function) {
253 LoadHTML(html); 253 LoadHTML(html);
254 254
255 WebFrame* web_frame = GetMainFrame(); 255 WebFrame* web_frame = GetMainFrame();
256 ASSERT_NE(nullptr, web_frame); 256 ASSERT_NE(nullptr, web_frame);
257 257
258 FormCache form_cache; 258 FormCache form_cache(*web_frame);
259 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 259 std::vector<FormData> forms = form_cache.ExtractNewForms();
260 ASSERT_EQ(1U, forms.size()); 260 ASSERT_EQ(1U, forms.size());
261 261
262 // Get the input element we want to find. 262 // Get the input element we want to find.
263 WebInputElement input_element = GetInputElementById("firstname"); 263 WebInputElement input_element = GetInputElementById("firstname");
264 264
265 // Find the form that contains the input element. 265 // Find the form that contains the input element.
266 FormData form_data; 266 FormData form_data;
267 FormFieldData field; 267 FormFieldData field;
268 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 268 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
269 input_element, &form_data, &field, REQUIRE_NONE)); 269 input_element, &form_data, &field, REQUIRE_NONE));
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 WebInputElement firstname = GetInputElementById("firstname"); 479 WebInputElement firstname = GetInputElementById("firstname");
480 EXPECT_EQ(0, firstname.selectionStart()); 480 EXPECT_EQ(0, firstname.selectionStart());
481 EXPECT_EQ(19, firstname.selectionEnd()); 481 EXPECT_EQ(19, firstname.selectionEnd());
482 } 482 }
483 483
484 void TestFindFormForInputElement(const char* html, bool unowned) { 484 void TestFindFormForInputElement(const char* html, bool unowned) {
485 LoadHTML(html); 485 LoadHTML(html);
486 WebFrame* web_frame = GetMainFrame(); 486 WebFrame* web_frame = GetMainFrame();
487 ASSERT_NE(nullptr, web_frame); 487 ASSERT_NE(nullptr, web_frame);
488 488
489 FormCache form_cache; 489 FormCache form_cache(*web_frame);
490 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 490 std::vector<FormData> forms = form_cache.ExtractNewForms();
491 ASSERT_EQ(1U, forms.size()); 491 ASSERT_EQ(1U, forms.size());
492 492
493 // Get the input element we want to find. 493 // Get the input element we want to find.
494 WebInputElement input_element = GetInputElementById("firstname"); 494 WebInputElement input_element = GetInputElementById("firstname");
495 495
496 // Find the form and verify it's the correct form. 496 // Find the form and verify it's the correct form.
497 FormData form; 497 FormData form;
498 FormFieldData field; 498 FormFieldData field;
499 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 499 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
500 input_element, &form, &field, REQUIRE_NONE)); 500 input_element, &form, &field, REQUIRE_NONE));
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 expected.name = ASCIIToUTF16("phone"); 559 expected.name = ASCIIToUTF16("phone");
560 expected.value = ASCIIToUTF16("1.800.555.1234"); 560 expected.value = ASCIIToUTF16("1.800.555.1234");
561 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 561 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
562 } 562 }
563 563
564 void TestFindFormForTextAreaElement(const char* html, bool unowned) { 564 void TestFindFormForTextAreaElement(const char* html, bool unowned) {
565 LoadHTML(html); 565 LoadHTML(html);
566 WebFrame* web_frame = GetMainFrame(); 566 WebFrame* web_frame = GetMainFrame();
567 ASSERT_NE(nullptr, web_frame); 567 ASSERT_NE(nullptr, web_frame);
568 568
569 FormCache form_cache; 569 FormCache form_cache(*web_frame);
570 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 570 std::vector<FormData> forms = form_cache.ExtractNewForms();
571 ASSERT_EQ(1U, forms.size()); 571 ASSERT_EQ(1U, forms.size());
572 572
573 // Get the textarea element we want to find. 573 // Get the textarea element we want to find.
574 WebElement element = web_frame->document().getElementById("street-address"); 574 WebElement element = web_frame->document().getElementById("street-address");
575 WebTextAreaElement textarea_element = element.to<WebTextAreaElement>(); 575 WebTextAreaElement textarea_element = element.to<WebTextAreaElement>();
576 576
577 // Find the form and verify it's the correct form. 577 // Find the form and verify it's the correct form.
578 FormData form; 578 FormData form;
579 FormFieldData field; 579 FormFieldData field;
580 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 580 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 expected.max_length = 0; 649 expected.max_length = 0;
650 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 650 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
651 EXPECT_FORM_FIELD_DATA_EQUALS(expected, field); 651 EXPECT_FORM_FIELD_DATA_EQUALS(expected, field);
652 } 652 }
653 653
654 void TestFillFormMaxLength(const char* html, bool unowned) { 654 void TestFillFormMaxLength(const char* html, bool unowned) {
655 LoadHTML(html); 655 LoadHTML(html);
656 WebFrame* web_frame = GetMainFrame(); 656 WebFrame* web_frame = GetMainFrame();
657 ASSERT_NE(nullptr, web_frame); 657 ASSERT_NE(nullptr, web_frame);
658 658
659 FormCache form_cache; 659 FormCache form_cache(*web_frame);
660 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 660 std::vector<FormData> forms = form_cache.ExtractNewForms();
661 ASSERT_EQ(1U, forms.size()); 661 ASSERT_EQ(1U, forms.size());
662 662
663 // Get the input element we want to find. 663 // Get the input element we want to find.
664 WebInputElement input_element = GetInputElementById("firstname"); 664 WebInputElement input_element = GetInputElementById("firstname");
665 665
666 // Find the form that contains the input element. 666 // Find the form that contains the input element.
667 FormData form; 667 FormData form;
668 FormFieldData field; 668 FormFieldData field;
669 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 669 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
670 input_element, &form, &field, REQUIRE_NONE)); 670 input_element, &form, &field, REQUIRE_NONE));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 expected.max_length = 9; 737 expected.max_length = 9;
738 expected.is_autofilled = true; 738 expected.is_autofilled = true;
739 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 739 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
740 } 740 }
741 741
742 void TestFillFormNegativeMaxLength(const char* html, bool unowned) { 742 void TestFillFormNegativeMaxLength(const char* html, bool unowned) {
743 LoadHTML(html); 743 LoadHTML(html);
744 WebFrame* web_frame = GetMainFrame(); 744 WebFrame* web_frame = GetMainFrame();
745 ASSERT_NE(nullptr, web_frame); 745 ASSERT_NE(nullptr, web_frame);
746 746
747 FormCache form_cache; 747 FormCache form_cache(*web_frame);
748 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 748 std::vector<FormData> forms = form_cache.ExtractNewForms();
749 ASSERT_EQ(1U, forms.size()); 749 ASSERT_EQ(1U, forms.size());
750 750
751 // Get the input element we want to find. 751 // Get the input element we want to find.
752 WebInputElement input_element = GetInputElementById("firstname"); 752 WebInputElement input_element = GetInputElementById("firstname");
753 753
754 // Find the form that contains the input element. 754 // Find the form that contains the input element.
755 FormData form; 755 FormData form;
756 FormFieldData field; 756 FormFieldData field;
757 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 757 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
758 input_element, &form, &field, REQUIRE_NONE)); 758 input_element, &form, &field, REQUIRE_NONE));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 expected.name = ASCIIToUTF16("email"); 809 expected.name = ASCIIToUTF16("email");
810 expected.value = ASCIIToUTF16("brotherj@example.com"); 810 expected.value = ASCIIToUTF16("brotherj@example.com");
811 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); 811 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
812 } 812 }
813 813
814 void TestFillFormEmptyName(const char* html, bool unowned) { 814 void TestFillFormEmptyName(const char* html, bool unowned) {
815 LoadHTML(html); 815 LoadHTML(html);
816 WebFrame* web_frame = GetMainFrame(); 816 WebFrame* web_frame = GetMainFrame();
817 ASSERT_NE(nullptr, web_frame); 817 ASSERT_NE(nullptr, web_frame);
818 818
819 FormCache form_cache; 819 FormCache form_cache(*web_frame);
820 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 820 std::vector<FormData> forms = form_cache.ExtractNewForms();
821 ASSERT_EQ(1U, forms.size()); 821 ASSERT_EQ(1U, forms.size());
822 822
823 // Get the input element we want to find. 823 // Get the input element we want to find.
824 WebInputElement input_element = GetInputElementById("firstname"); 824 WebInputElement input_element = GetInputElementById("firstname");
825 825
826 // Find the form that contains the input element. 826 // Find the form that contains the input element.
827 FormData form; 827 FormData form;
828 FormFieldData field; 828 FormFieldData field;
829 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 829 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
830 input_element, &form, &field, REQUIRE_NONE)); 830 input_element, &form, &field, REQUIRE_NONE));
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 expected.name = ASCIIToUTF16("email"); 884 expected.name = ASCIIToUTF16("email");
885 expected.value = ASCIIToUTF16("wyatt@example.com"); 885 expected.value = ASCIIToUTF16("wyatt@example.com");
886 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); 886 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
887 } 887 }
888 888
889 void TestFillFormEmptyFormNames(const char* html, bool unowned) { 889 void TestFillFormEmptyFormNames(const char* html, bool unowned) {
890 LoadHTML(html); 890 LoadHTML(html);
891 WebFrame* web_frame = GetMainFrame(); 891 WebFrame* web_frame = GetMainFrame();
892 ASSERT_NE(nullptr, web_frame); 892 ASSERT_NE(nullptr, web_frame);
893 893
894 FormCache form_cache; 894 FormCache form_cache(*web_frame);
895 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 895 std::vector<FormData> forms = form_cache.ExtractNewForms();
896 const size_t expected_size = unowned ? 1 : 2; 896 const size_t expected_size = unowned ? 1 : 2;
897 ASSERT_EQ(expected_size, forms.size()); 897 ASSERT_EQ(expected_size, forms.size());
898 898
899 // Get the input element we want to find. 899 // Get the input element we want to find.
900 WebInputElement input_element = GetInputElementById("apple"); 900 WebInputElement input_element = GetInputElementById("apple");
901 901
902 // Find the form that contains the input element. 902 // Find the form that contains the input element.
903 FormData form; 903 FormData form;
904 FormFieldData field; 904 FormFieldData field;
905 EXPECT_TRUE(FindFormAndFieldForFormControlElement( 905 EXPECT_TRUE(FindFormAndFieldForFormControlElement(
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 expected.value = ASCIIToUTF16("Also Yellow"); 967 expected.value = ASCIIToUTF16("Also Yellow");
968 expected.is_autofilled = true; 968 expected.is_autofilled = true;
969 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[unowned_offset + 2]); 969 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[unowned_offset + 2]);
970 } 970 }
971 971
972 void TestFillFormNonEmptyField(const char* html, bool unowned) { 972 void TestFillFormNonEmptyField(const char* html, bool unowned) {
973 LoadHTML(html); 973 LoadHTML(html);
974 WebFrame* web_frame = GetMainFrame(); 974 WebFrame* web_frame = GetMainFrame();
975 ASSERT_NE(nullptr, web_frame); 975 ASSERT_NE(nullptr, web_frame);
976 976
977 FormCache form_cache; 977 FormCache form_cache(*web_frame);
978 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 978 std::vector<FormData> forms = form_cache.ExtractNewForms();
979 ASSERT_EQ(1U, forms.size()); 979 ASSERT_EQ(1U, forms.size());
980 980
981 // Get the input element we want to find. 981 // Get the input element we want to find.
982 WebInputElement input_element = GetInputElementById("firstname"); 982 WebInputElement input_element = GetInputElementById("firstname");
983 983
984 // Simulate typing by modifying the field value. 984 // Simulate typing by modifying the field value.
985 input_element.setValue(ASCIIToUTF16("Wy")); 985 input_element.setValue(ASCIIToUTF16("Wy"));
986 986
987 // Find the form that contains the input element. 987 // Find the form that contains the input element.
988 FormData form; 988 FormData form;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 // Verify that the cursor position has been updated. 1063 // Verify that the cursor position has been updated.
1064 EXPECT_EQ(5, input_element.selectionStart()); 1064 EXPECT_EQ(5, input_element.selectionStart());
1065 EXPECT_EQ(5, input_element.selectionEnd()); 1065 EXPECT_EQ(5, input_element.selectionEnd());
1066 } 1066 }
1067 1067
1068 void TestClearFormWithNode(const char* html, bool unowned) { 1068 void TestClearFormWithNode(const char* html, bool unowned) {
1069 LoadHTML(html); 1069 LoadHTML(html);
1070 WebFrame* web_frame = GetMainFrame(); 1070 WebFrame* web_frame = GetMainFrame();
1071 ASSERT_NE(nullptr, web_frame); 1071 ASSERT_NE(nullptr, web_frame);
1072 1072
1073 FormCache form_cache; 1073 FormCache form_cache(*web_frame);
1074 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1074 std::vector<FormData> forms = form_cache.ExtractNewForms();
1075 ASSERT_EQ(1U, forms.size()); 1075 ASSERT_EQ(1U, forms.size());
1076 1076
1077 // Set the auto-filled attribute. 1077 // Set the auto-filled attribute.
1078 WebInputElement firstname = GetInputElementById("firstname"); 1078 WebInputElement firstname = GetInputElementById("firstname");
1079 firstname.setAutofilled(true); 1079 firstname.setAutofilled(true);
1080 WebInputElement lastname = GetInputElementById("lastname"); 1080 WebInputElement lastname = GetInputElementById("lastname");
1081 lastname.setAutofilled(true); 1081 lastname.setAutofilled(true);
1082 WebInputElement month = GetInputElementById("month"); 1082 WebInputElement month = GetInputElementById("month");
1083 month.setAutofilled(true); 1083 month.setAutofilled(true);
1084 WebInputElement textarea = GetInputElementById("textarea"); 1084 WebInputElement textarea = GetInputElementById("textarea");
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 EXPECT_EQ(0, firstname.selectionStart()); 1159 EXPECT_EQ(0, firstname.selectionStart());
1160 EXPECT_EQ(0, firstname.selectionEnd()); 1160 EXPECT_EQ(0, firstname.selectionEnd());
1161 } 1161 }
1162 1162
1163 void TestClearFormWithNodeContainingSelectOne(const char* html, 1163 void TestClearFormWithNodeContainingSelectOne(const char* html,
1164 bool unowned) { 1164 bool unowned) {
1165 LoadHTML(html); 1165 LoadHTML(html);
1166 WebFrame* web_frame = GetMainFrame(); 1166 WebFrame* web_frame = GetMainFrame();
1167 ASSERT_NE(nullptr, web_frame); 1167 ASSERT_NE(nullptr, web_frame);
1168 1168
1169 FormCache form_cache; 1169 FormCache form_cache(*web_frame);
1170 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1170 std::vector<FormData> forms = form_cache.ExtractNewForms();
1171 ASSERT_EQ(1U, forms.size()); 1171 ASSERT_EQ(1U, forms.size());
1172 1172
1173 // Set the auto-filled attribute. 1173 // Set the auto-filled attribute.
1174 WebInputElement firstname = GetInputElementById("firstname"); 1174 WebInputElement firstname = GetInputElementById("firstname");
1175 firstname.setAutofilled(true); 1175 firstname.setAutofilled(true);
1176 WebInputElement lastname = GetInputElementById("lastname"); 1176 WebInputElement lastname = GetInputElementById("lastname");
1177 lastname.setAutofilled(true); 1177 lastname.setAutofilled(true);
1178 1178
1179 // Set the value and auto-filled attribute of the state element. 1179 // Set the value and auto-filled attribute of the state element.
1180 WebSelectElement state = 1180 WebSelectElement state =
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 // Verify that the cursor position has been updated. 1225 // Verify that the cursor position has been updated.
1226 EXPECT_EQ(0, firstname.selectionStart()); 1226 EXPECT_EQ(0, firstname.selectionStart());
1227 EXPECT_EQ(0, firstname.selectionEnd()); 1227 EXPECT_EQ(0, firstname.selectionEnd());
1228 } 1228 }
1229 1229
1230 void TestClearPreviewedFormWithElement(const char* html) { 1230 void TestClearPreviewedFormWithElement(const char* html) {
1231 LoadHTML(html); 1231 LoadHTML(html);
1232 WebFrame* web_frame = GetMainFrame(); 1232 WebFrame* web_frame = GetMainFrame();
1233 ASSERT_NE(nullptr, web_frame); 1233 ASSERT_NE(nullptr, web_frame);
1234 1234
1235 FormCache form_cache; 1235 FormCache form_cache(*web_frame);
1236 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1236 std::vector<FormData> forms = form_cache.ExtractNewForms();
1237 ASSERT_EQ(1U, forms.size()); 1237 ASSERT_EQ(1U, forms.size());
1238 1238
1239 // Set the auto-filled attribute. 1239 // Set the auto-filled attribute.
1240 WebInputElement firstname = GetInputElementById("firstname"); 1240 WebInputElement firstname = GetInputElementById("firstname");
1241 firstname.setAutofilled(true); 1241 firstname.setAutofilled(true);
1242 WebInputElement lastname = GetInputElementById("lastname"); 1242 WebInputElement lastname = GetInputElementById("lastname");
1243 lastname.setAutofilled(true); 1243 lastname.setAutofilled(true);
1244 WebInputElement email = GetInputElementById("email"); 1244 WebInputElement email = GetInputElementById("email");
1245 email.setAutofilled(true); 1245 email.setAutofilled(true);
1246 WebInputElement email2 = GetInputElementById("email2"); 1246 WebInputElement email2 = GetInputElementById("email2");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 // Verify that the cursor position has been updated. 1279 // Verify that the cursor position has been updated.
1280 EXPECT_EQ(0, lastname.selectionStart()); 1280 EXPECT_EQ(0, lastname.selectionStart());
1281 EXPECT_EQ(0, lastname.selectionEnd()); 1281 EXPECT_EQ(0, lastname.selectionEnd());
1282 } 1282 }
1283 1283
1284 void TestClearPreviewedFormWithNonEmptyInitiatingNode(const char* html) { 1284 void TestClearPreviewedFormWithNonEmptyInitiatingNode(const char* html) {
1285 LoadHTML(html); 1285 LoadHTML(html);
1286 WebFrame* web_frame = GetMainFrame(); 1286 WebFrame* web_frame = GetMainFrame();
1287 ASSERT_NE(nullptr, web_frame); 1287 ASSERT_NE(nullptr, web_frame);
1288 1288
1289 FormCache form_cache; 1289 FormCache form_cache(*web_frame);
1290 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1290 std::vector<FormData> forms = form_cache.ExtractNewForms();
1291 ASSERT_EQ(1U, forms.size()); 1291 ASSERT_EQ(1U, forms.size());
1292 1292
1293 // Set the auto-filled attribute. 1293 // Set the auto-filled attribute.
1294 WebInputElement firstname = GetInputElementById("firstname"); 1294 WebInputElement firstname = GetInputElementById("firstname");
1295 firstname.setAutofilled(true); 1295 firstname.setAutofilled(true);
1296 WebInputElement lastname = GetInputElementById("lastname"); 1296 WebInputElement lastname = GetInputElementById("lastname");
1297 lastname.setAutofilled(true); 1297 lastname.setAutofilled(true);
1298 WebInputElement email = GetInputElementById("email"); 1298 WebInputElement email = GetInputElementById("email");
1299 email.setAutofilled(true); 1299 email.setAutofilled(true);
1300 WebInputElement email2 = GetInputElementById("email2"); 1300 WebInputElement email2 = GetInputElementById("email2");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 EXPECT_TRUE(phone.value().isEmpty()); 1333 EXPECT_TRUE(phone.value().isEmpty());
1334 EXPECT_TRUE(phone.suggestedValue().isEmpty()); 1334 EXPECT_TRUE(phone.suggestedValue().isEmpty());
1335 EXPECT_FALSE(phone.isAutofilled()); 1335 EXPECT_FALSE(phone.isAutofilled());
1336 } 1336 }
1337 1337
1338 void TestClearPreviewedFormWithAutofilledInitiatingNode(const char* html) { 1338 void TestClearPreviewedFormWithAutofilledInitiatingNode(const char* html) {
1339 LoadHTML(html); 1339 LoadHTML(html);
1340 WebFrame* web_frame = GetMainFrame(); 1340 WebFrame* web_frame = GetMainFrame();
1341 ASSERT_NE(nullptr, web_frame); 1341 ASSERT_NE(nullptr, web_frame);
1342 1342
1343 FormCache form_cache; 1343 FormCache form_cache(*web_frame);
1344 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1344 std::vector<FormData> forms = form_cache.ExtractNewForms();
1345 ASSERT_EQ(1U, forms.size()); 1345 ASSERT_EQ(1U, forms.size());
1346 1346
1347 // Set the auto-filled attribute. 1347 // Set the auto-filled attribute.
1348 WebInputElement firstname = GetInputElementById("firstname"); 1348 WebInputElement firstname = GetInputElementById("firstname");
1349 firstname.setAutofilled(true); 1349 firstname.setAutofilled(true);
1350 WebInputElement lastname = GetInputElementById("lastname"); 1350 WebInputElement lastname = GetInputElementById("lastname");
1351 lastname.setAutofilled(true); 1351 lastname.setAutofilled(true);
1352 WebInputElement email = GetInputElementById("email"); 1352 WebInputElement email = GetInputElementById("email");
1353 email.setAutofilled(true); 1353 email.setAutofilled(true);
1354 WebInputElement email2 = GetInputElementById("email2"); 1354 WebInputElement email2 = GetInputElementById("email2");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 EXPECT_TRUE(phone.suggestedValue().isEmpty()); 1387 EXPECT_TRUE(phone.suggestedValue().isEmpty());
1388 EXPECT_FALSE(phone.isAutofilled()); 1388 EXPECT_FALSE(phone.isAutofilled());
1389 } 1389 }
1390 1390
1391 void TestClearOnlyAutofilledFields(const char* html) { 1391 void TestClearOnlyAutofilledFields(const char* html) {
1392 LoadHTML(html); 1392 LoadHTML(html);
1393 1393
1394 WebFrame* web_frame = GetMainFrame(); 1394 WebFrame* web_frame = GetMainFrame();
1395 ASSERT_NE(nullptr, web_frame); 1395 ASSERT_NE(nullptr, web_frame);
1396 1396
1397 FormCache form_cache; 1397 FormCache form_cache(*web_frame);
1398 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 1398 std::vector<FormData> forms = form_cache.ExtractNewForms();
1399 ASSERT_EQ(1U, forms.size()); 1399 ASSERT_EQ(1U, forms.size());
1400 1400
1401 // Set the autofilled attribute. 1401 // Set the autofilled attribute.
1402 WebInputElement firstname = GetInputElementById("firstname"); 1402 WebInputElement firstname = GetInputElementById("firstname");
1403 firstname.setAutofilled(false); 1403 firstname.setAutofilled(false);
1404 WebInputElement lastname = GetInputElementById("lastname"); 1404 WebInputElement lastname = GetInputElementById("lastname");
1405 lastname.setAutofilled(true); 1405 lastname.setAutofilled(true);
1406 WebInputElement email = GetInputElementById("email"); 1406 WebInputElement email = GetInputElementById("email");
1407 email.setAutofilled(true); 1407 email.setAutofilled(true);
1408 WebInputElement phone = GetInputElementById("phone"); 1408 WebInputElement phone = GetInputElementById("phone");
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
2080 "<FORM name='TestForm2' action='http://zoo.com' method='post'>" 2080 "<FORM name='TestForm2' action='http://zoo.com' method='post'>"
2081 " <INPUT type='text' id='firstname' value='Jack'/>" 2081 " <INPUT type='text' id='firstname' value='Jack'/>"
2082 " <INPUT type='text' id='lastname' value='Adams'/>" 2082 " <INPUT type='text' id='lastname' value='Adams'/>"
2083 " <INPUT type='text' id='email' value='jack@example.com'/>" 2083 " <INPUT type='text' id='email' value='jack@example.com'/>"
2084 " <INPUT type='submit' name='reply-send' value='Send'/>" 2084 " <INPUT type='submit' name='reply-send' value='Send'/>"
2085 "</FORM>"); 2085 "</FORM>");
2086 2086
2087 WebFrame* web_frame = GetMainFrame(); 2087 WebFrame* web_frame = GetMainFrame();
2088 ASSERT_NE(nullptr, web_frame); 2088 ASSERT_NE(nullptr, web_frame);
2089 2089
2090 FormCache form_cache; 2090 FormCache form_cache(*web_frame);
2091 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2091 std::vector<FormData> forms = form_cache.ExtractNewForms();
2092 ASSERT_EQ(2U, forms.size()); 2092 ASSERT_EQ(2U, forms.size());
2093 2093
2094 // First form. 2094 // First form.
2095 const FormData& form = forms[0]; 2095 const FormData& form = forms[0];
2096 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2096 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2097 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 2097 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
2098 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2098 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2099 2099
2100 const std::vector<FormFieldData>& fields = form.fields; 2100 const std::vector<FormFieldData>& fields = form.fields;
2101 ASSERT_EQ(3U, fields.size()); 2101 ASSERT_EQ(3U, fields.size());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 "<FORM id='testform' action='http://cnn.com' method='post'>" 2143 "<FORM id='testform' action='http://cnn.com' method='post'>"
2144 " <INPUT type='text' id='firstname' value='John'/>" 2144 " <INPUT type='text' id='firstname' value='John'/>"
2145 " <INPUT type='text' id='lastname' value='Smith'/>" 2145 " <INPUT type='text' id='lastname' value='Smith'/>"
2146 " <INPUT type='text' id='email' value='john@example.com'/>" 2146 " <INPUT type='text' id='email' value='john@example.com'/>"
2147 " <INPUT type='submit' name='reply-send' value='Send'/>" 2147 " <INPUT type='submit' name='reply-send' value='Send'/>"
2148 "</FORM>"); 2148 "</FORM>");
2149 2149
2150 WebFrame* web_frame = GetMainFrame(); 2150 WebFrame* web_frame = GetMainFrame();
2151 ASSERT_NE(nullptr, web_frame); 2151 ASSERT_NE(nullptr, web_frame);
2152 2152
2153 FormCache form_cache; 2153 FormCache form_cache(*web_frame);
2154 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2154 std::vector<FormData> forms = form_cache.ExtractNewForms();
2155 ASSERT_EQ(1U, forms.size()); 2155 ASSERT_EQ(1U, forms.size());
2156 2156
2157 // Second call should give nothing as there are no new forms. 2157 // Second call should give nothing as there are no new forms.
2158 forms = form_cache.ExtractNewForms(*web_frame); 2158 forms = form_cache.ExtractNewForms();
2159 ASSERT_TRUE(forms.empty()); 2159 ASSERT_TRUE(forms.empty());
2160 2160
2161 // Append to the current form will re-extract. 2161 // Append to the current form will re-extract.
2162 ExecuteJavaScript( 2162 ExecuteJavaScript(
2163 "var newInput = document.createElement('input');" 2163 "var newInput = document.createElement('input');"
2164 "newInput.setAttribute('type', 'text');" 2164 "newInput.setAttribute('type', 'text');"
2165 "newInput.setAttribute('id', 'telephone');" 2165 "newInput.setAttribute('id', 'telephone');"
2166 "newInput.value = '12345';" 2166 "newInput.value = '12345';"
2167 "document.getElementById('testform').appendChild(newInput);"); 2167 "document.getElementById('testform').appendChild(newInput);");
2168 msg_loop_.RunUntilIdle(); 2168 msg_loop_.RunUntilIdle();
2169 2169
2170 forms = form_cache.ExtractNewForms(*web_frame); 2170 forms = form_cache.ExtractNewForms();
2171 ASSERT_EQ(1U, forms.size()); 2171 ASSERT_EQ(1U, forms.size());
2172 2172
2173 const std::vector<FormFieldData>& fields = forms[0].fields; 2173 const std::vector<FormFieldData>& fields = forms[0].fields;
2174 ASSERT_EQ(4U, fields.size()); 2174 ASSERT_EQ(4U, fields.size());
2175 2175
2176 FormFieldData expected; 2176 FormFieldData expected;
2177 expected.form_control_type = "text"; 2177 expected.form_control_type = "text";
2178 expected.max_length = WebInputElement::defaultMaxLength(); 2178 expected.max_length = WebInputElement::defaultMaxLength();
2179 2179
2180 expected.name = ASCIIToUTF16("firstname"); 2180 expected.name = ASCIIToUTF16("firstname");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 "newEmail.setAttribute('type', 'text');" 2213 "newEmail.setAttribute('type', 'text');"
2214 "newEmail.setAttribute('id', 'second_email');" 2214 "newEmail.setAttribute('id', 'second_email');"
2215 "newEmail.value = 'bobhope@example.com';" 2215 "newEmail.value = 'bobhope@example.com';"
2216 "newForm.appendChild(newFirstname);" 2216 "newForm.appendChild(newFirstname);"
2217 "newForm.appendChild(newLastname);" 2217 "newForm.appendChild(newLastname);"
2218 "newForm.appendChild(newEmail);" 2218 "newForm.appendChild(newEmail);"
2219 "document.body.appendChild(newForm);"); 2219 "document.body.appendChild(newForm);");
2220 msg_loop_.RunUntilIdle(); 2220 msg_loop_.RunUntilIdle();
2221 2221
2222 web_frame = GetMainFrame(); 2222 web_frame = GetMainFrame();
2223 forms = form_cache.ExtractNewForms(*web_frame); 2223 forms = form_cache.ExtractNewForms();
2224 ASSERT_EQ(1U, forms.size()); 2224 ASSERT_EQ(1U, forms.size());
2225 2225
2226 const std::vector<FormFieldData>& fields2 = forms[0].fields; 2226 const std::vector<FormFieldData>& fields2 = forms[0].fields;
2227 ASSERT_EQ(3U, fields2.size()); 2227 ASSERT_EQ(3U, fields2.size());
2228 2228
2229 expected.name = ASCIIToUTF16("second_firstname"); 2229 expected.name = ASCIIToUTF16("second_firstname");
2230 expected.value = ASCIIToUTF16("Bob"); 2230 expected.value = ASCIIToUTF16("Bob");
2231 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]); 2231 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
2232 2232
2233 expected.name = ASCIIToUTF16("second_lastname"); 2233 expected.name = ASCIIToUTF16("second_lastname");
2234 expected.value = ASCIIToUTF16("Hope"); 2234 expected.value = ASCIIToUTF16("Hope");
2235 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]); 2235 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
2236 2236
2237 expected.name = ASCIIToUTF16("second_email"); 2237 expected.name = ASCIIToUTF16("second_email");
2238 expected.value = ASCIIToUTF16("bobhope@example.com"); 2238 expected.value = ASCIIToUTF16("bobhope@example.com");
2239 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 2239 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
2240 } 2240 }
2241 2241
2242 // We should not extract a form if it has too few fillable fields. 2242 // We should not extract a form if it has too few fillable fields.
2243 TEST_F(FormAutofillTest, ExtractFormsTooFewFields) { 2243 TEST_F(FormAutofillTest, ExtractFormsTooFewFields) {
2244 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>" 2244 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>"
2245 " <INPUT type='text' id='firstname' value='John'/>" 2245 " <INPUT type='text' id='firstname' value='John'/>"
2246 " <INPUT type='text' id='lastname' value='Smith'/>" 2246 " <INPUT type='text' id='lastname' value='Smith'/>"
2247 " <INPUT type='submit' name='reply-send' value='Send'/>" 2247 " <INPUT type='submit' name='reply-send' value='Send'/>"
2248 "</FORM>"); 2248 "</FORM>");
2249 2249
2250 WebFrame* web_frame = GetMainFrame(); 2250 WebFrame* web_frame = GetMainFrame();
2251 ASSERT_NE(nullptr, web_frame); 2251 ASSERT_NE(nullptr, web_frame);
2252 2252
2253 FormCache form_cache; 2253 FormCache form_cache(*web_frame);
2254 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2254 std::vector<FormData> forms = form_cache.ExtractNewForms();
2255 ASSERT_TRUE(forms.empty()); 2255 ASSERT_TRUE(forms.empty());
2256 } 2256 }
2257 2257
2258 // We should not report additional forms for empty forms. 2258 // We should not report additional forms for empty forms.
2259 TEST_F(FormAutofillTest, ExtractFormsSkippedForms) { 2259 TEST_F(FormAutofillTest, ExtractFormsSkippedForms) {
2260 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>" 2260 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>"
2261 " <INPUT type='text' id='firstname' value='John'/>" 2261 " <INPUT type='text' id='firstname' value='John'/>"
2262 " <INPUT type='text' id='lastname' value='Smith'/>" 2262 " <INPUT type='text' id='lastname' value='Smith'/>"
2263 "</FORM>"); 2263 "</FORM>");
2264 2264
2265 WebFrame* web_frame = GetMainFrame(); 2265 WebFrame* web_frame = GetMainFrame();
2266 ASSERT_NE(nullptr, web_frame); 2266 ASSERT_NE(nullptr, web_frame);
2267 2267
2268 FormCache form_cache; 2268 FormCache form_cache(*web_frame);
2269 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2269 std::vector<FormData> forms = form_cache.ExtractNewForms();
2270 ASSERT_TRUE(forms.empty()); 2270 ASSERT_TRUE(forms.empty());
2271 } 2271 }
2272 2272
2273 // We should not report additional forms for empty forms. 2273 // We should not report additional forms for empty forms.
2274 TEST_F(FormAutofillTest, ExtractFormsNoFields) { 2274 TEST_F(FormAutofillTest, ExtractFormsNoFields) {
2275 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>" 2275 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>"
2276 "</FORM>"); 2276 "</FORM>");
2277 2277
2278 WebFrame* web_frame = GetMainFrame(); 2278 WebFrame* web_frame = GetMainFrame();
2279 ASSERT_NE(nullptr, web_frame); 2279 ASSERT_NE(nullptr, web_frame);
2280 2280
2281 FormCache form_cache; 2281 FormCache form_cache(*web_frame);
2282 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2282 std::vector<FormData> forms = form_cache.ExtractNewForms();
2283 ASSERT_TRUE(forms.empty()); 2283 ASSERT_TRUE(forms.empty());
2284 } 2284 }
2285 2285
2286 // We should not extract a form if it has too few fillable fields. 2286 // We should not extract a form if it has too few fillable fields.
2287 // Make sure radio and checkbox fields don't count. 2287 // Make sure radio and checkbox fields don't count.
2288 TEST_F(FormAutofillTest, ExtractFormsTooFewFieldsSkipsCheckable) { 2288 TEST_F(FormAutofillTest, ExtractFormsTooFewFieldsSkipsCheckable) {
2289 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>" 2289 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'>"
2290 " <INPUT type='text' id='firstname' value='John'/>" 2290 " <INPUT type='text' id='firstname' value='John'/>"
2291 " <INPUT type='text' id='lastname' value='Smith'/>" 2291 " <INPUT type='text' id='lastname' value='Smith'/>"
2292 " <INPUT type='radio' id='a_radio' value='0'/>" 2292 " <INPUT type='radio' id='a_radio' value='0'/>"
2293 " <INPUT type='checkbox' id='a_check' value='1'/>" 2293 " <INPUT type='checkbox' id='a_check' value='1'/>"
2294 " <INPUT type='submit' name='reply-send' value='Send'/>" 2294 " <INPUT type='submit' name='reply-send' value='Send'/>"
2295 "</FORM>"); 2295 "</FORM>");
2296 2296
2297 WebFrame* web_frame = GetMainFrame(); 2297 WebFrame* web_frame = GetMainFrame();
2298 ASSERT_NE(nullptr, web_frame); 2298 ASSERT_NE(nullptr, web_frame);
2299 2299
2300 FormCache form_cache; 2300 FormCache form_cache(*web_frame);
2301 std::vector<FormData> forms = form_cache.ExtractNewForms(*web_frame); 2301 std::vector<FormData> forms = form_cache.ExtractNewForms();
2302 ASSERT_TRUE(forms.empty()); 2302 ASSERT_TRUE(forms.empty());
2303 } 2303 }
2304 2304
2305 TEST_F(FormAutofillTest, WebFormElementToFormDataAutocomplete) { 2305 TEST_F(FormAutofillTest, WebFormElementToFormDataAutocomplete) {
2306 { 2306 {
2307 // Form is not auto-completable due to autocomplete=off. 2307 // Form is not auto-completable due to autocomplete=off.
2308 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'" 2308 LoadHTML("<FORM name='TestForm' action='http://cnn.com' method='post'"
2309 " autocomplete=off>" 2309 " autocomplete=off>"
2310 " <INPUT type='text' id='firstname' value='John'/>" 2310 " <INPUT type='text' id='firstname' value='John'/>"
2311 " <INPUT type='text' id='lastname' value='Smith'/>" 2311 " <INPUT type='text' id='lastname' value='Smith'/>"
(...skipping 1774 matching lines...) Expand 10 before | Expand all | Expand 10 after
4086 ASSERT_TRUE(control_elements.empty()); 4086 ASSERT_TRUE(control_elements.empty());
4087 ASSERT_TRUE(fieldsets.empty()); 4087 ASSERT_TRUE(fieldsets.empty());
4088 4088
4089 FormData form; 4089 FormData form;
4090 EXPECT_FALSE(UnownedFormElementsAndFieldSetsToFormData( 4090 EXPECT_FALSE(UnownedFormElementsAndFieldSetsToFormData(
4091 fieldsets, control_elements, nullptr, dummy_origin, REQUIRE_NONE, 4091 fieldsets, control_elements, nullptr, dummy_origin, REQUIRE_NONE,
4092 extract_mask, &form, nullptr)); 4092 extract_mask, &form, nullptr));
4093 } 4093 }
4094 4094
4095 } // namespace autofill 4095 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/content/renderer/autofill_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698