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

Side by Side Diff: chrome/renderer/form_manager_browsertest.cc

Issue 3226001: Detecting form locale (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Unit test for top websites Created 10 years, 3 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 | « chrome/renderer/form_manager.cc ('k') | webkit/glue/dom_operations.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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/string_util.h" 5 #include "base/string_util.h"
6 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
7 #include "chrome/renderer/form_manager.h" 7 #include "chrome/renderer/form_manager.h"
8 #include "chrome/test/render_view_test.h" 8 #include "chrome/test/render_view_test.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" 10 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h"
(...skipping 14 matching lines...) Expand all
25 using WebKit::WebInputElement; 25 using WebKit::WebInputElement;
26 using WebKit::WebNode; 26 using WebKit::WebNode;
27 using WebKit::WebString; 27 using WebKit::WebString;
28 using WebKit::WebVector; 28 using WebKit::WebVector;
29 29
30 using webkit_glue::FormData; 30 using webkit_glue::FormData;
31 using webkit_glue::FormField; 31 using webkit_glue::FormField;
32 32
33 namespace { 33 namespace {
34 34
35 typedef RenderViewTest FormManagerTest; 35 class FormManagerTest : public RenderViewTest {
36 public:
37 // Load a single form from an HTML snippet.
38 void LoadForm(const char* const html, FormData *form);
39
40 // Test that we have extracted the default form data (disregarding the form
41 // fields).
42 void ExpectDefaultForm(const FormData& form);
43
44 // Test that the form loaded from |html| has locale |locale|.
45 void ExpectLocale(const char* const locale, const char* const html);
46 };
47
48 void FormManagerTest::LoadForm(const char* const html, FormData *form) {
49 LoadHTML(html);
50
51 WebFrame* web_frame = GetMainFrame();
52 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
53
54 FormManager form_manager;
55 form_manager.ExtractForms(web_frame);
56
57 std::vector<FormData> forms;
58 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
59 ASSERT_EQ(1U, forms.size());
60
61 *form = forms[0];
62 EXPECT_EQ(GURL(web_frame->url()), form->origin);
63 }
64
65 void FormManagerTest::ExpectDefaultForm(const FormData& form) {
66 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
67 EXPECT_EQ(ASCIIToUTF16("post"), form.method);
68 EXPECT_EQ(GURL("http://cnn.com"), form.action);
69 EXPECT_EQ(std::string(), form.locale);
70 }
71
72 void FormManagerTest::ExpectLocale(const char* const locale,
73 const char* const html) {
74 FormData form;
75 LoadForm(html, &form);
76 EXPECT_EQ(locale, form.locale);
77 }
36 78
37 TEST_F(FormManagerTest, WebFormElementToFormData) { 79 TEST_F(FormManagerTest, WebFormElementToFormData) {
38 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 80 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
39 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 81 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
40 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 82 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
41 " <INPUT type=\"hidden\" id=\"notvisible\" value=\"apple\"/>" 83 " <INPUT type=\"hidden\" id=\"notvisible\" value=\"apple\"/>"
42 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 84 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
43 "</FORM>"); 85 "</FORM>");
44 86
45 WebFrame* frame = GetMainFrame(); 87 WebFrame* frame = GetMainFrame();
46 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 88 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
47 89
48 WebVector<WebFormElement> forms; 90 WebVector<WebFormElement> forms;
49 frame->forms(forms); 91 frame->forms(forms);
50 ASSERT_EQ(1U, forms.size()); 92 ASSERT_EQ(1U, forms.size());
51 93
52 FormData form; 94 FormData form;
53 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], 95 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0],
54 FormManager::REQUIRE_NONE, 96 FormManager::REQUIRE_NONE,
55 true, 97 true,
56 &form)); 98 &form));
57 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
58 EXPECT_EQ(GURL(frame->url()), form.origin); 99 EXPECT_EQ(GURL(frame->url()), form.origin);
59 EXPECT_EQ(GURL("http://cnn.com"), form.action); 100 ExpectDefaultForm(form);
60 101
61 const std::vector<FormField>& fields = form.fields; 102 const std::vector<FormField>& fields = form.fields;
62 ASSERT_EQ(4U, fields.size()); 103 ASSERT_EQ(4U, fields.size());
63 EXPECT_TRUE(fields[0].StrictlyEqualsHack( 104 EXPECT_TRUE(fields[0].StrictlyEqualsHack(
64 FormField(string16(), 105 FormField(string16(),
65 ASCIIToUTF16("firstname"), 106 ASCIIToUTF16("firstname"),
66 ASCIIToUTF16("John"), 107 ASCIIToUTF16("John"),
67 ASCIIToUTF16("text"), 108 ASCIIToUTF16("text"),
68 20))); 109 20)));
69 EXPECT_TRUE(fields[1].StrictlyEqualsHack( 110 EXPECT_TRUE(fields[1].StrictlyEqualsHack(
70 FormField(string16(), 111 FormField(string16(),
71 ASCIIToUTF16("lastname"), 112 ASCIIToUTF16("lastname"),
72 ASCIIToUTF16("Smith"), 113 ASCIIToUTF16("Smith"),
73 ASCIIToUTF16("text"), 114 ASCIIToUTF16("text"),
74 20))); 115 20)));
75 EXPECT_TRUE(fields[2].StrictlyEqualsHack( 116 EXPECT_TRUE(fields[2].StrictlyEqualsHack(
76 FormField(string16(), 117 FormField(string16(),
77 ASCIIToUTF16("notvisible"), 118 ASCIIToUTF16("notvisible"),
78 ASCIIToUTF16("apple"), 119 ASCIIToUTF16("apple"),
79 ASCIIToUTF16("hidden"), 120 ASCIIToUTF16("hidden"),
80 0))); 121 0)));
81 EXPECT_TRUE(fields[3].StrictlyEqualsHack( 122 EXPECT_TRUE(fields[3].StrictlyEqualsHack(
82 FormField(string16(), 123 FormField(string16(),
83 ASCIIToUTF16("reply-send"), 124 ASCIIToUTF16("reply-send"),
84 string16(), 125 string16(),
85 ASCIIToUTF16("submit"), 126 ASCIIToUTF16("submit"),
86 0))); 127 0)));
87 } 128 }
88 129
130 // Ensure that form locales are correctly determined from the DOM.
131 // We are essentially duplicating a WebKit layout test here, but better safe
132 // than sorry.
133 TEST_F(FormManagerTest, FormLocale) {
134 // Test the default behavior, when no locale is specified.
135 ExpectLocale("",
136 "<FORM>"
137 " <INPUT type=\"text\" value=\"dummy\"/>"
138 "</FORM>");
139
140 // Test that we correctly detect the locale when it is directly specified.
141 ExpectLocale("fr-CA",
142 "<FORM lang=\"fr-CA\">"
143 " <INPUT type=\"text\" value=\"dummy\"/>"
144 "</FORM>");
145
146 // Test that the locale is properly inherited.
147 ExpectLocale("en-GB",
148 "<DIV lang=\"en-GB\">"
149 " <FORM>"
150 " <INPUT type=\"text\" value=\"dummy\"/>"
151 " </FORM>"
152 "</DIV>");
153
154 // Test that inheritance stops properly.
155 ExpectLocale("en-US",
156 "<DIV lang=\"en-GB\">"
157 " <FORM lang=\"en-US\">"
158 " <INPUT type=\"text\" value=\"dummy\"/>"
159 " </FORM>"
160 "</DIV>");
161
162 // Test that we use the Content-Language meta tag as a fallback.
163 ExpectLocale("en-GB",
164 "<HTML>"
165 " <HEAD>"
166 " <META http-equiv=\"Content-Language\" content=\"en-GB\" />"
167 " </HEAD>"
168 " <FORM>"
169 " <INPUT type=\"text\" value=\"dummy\"/>"
170 " </FORM>"
171 "</HTML>");
172
173 // WebKit does absolutely no validation of the lang attribute; we shouldn't
174 // validate here either.
175 ExpectLocale(" this is-not a meaningful_locale! ",
176 "<FORM lang=\" this is-not a meaningful_locale! \">"
177 " <INPUT type=\"text\" value=\"dummy\"/>"
178 "</FORM>");
179 }
180
89 TEST_F(FormManagerTest, ExtractForms) { 181 TEST_F(FormManagerTest, ExtractForms) {
90 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 182 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
91 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 183 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
92 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 184 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
93 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 185 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
94 "</FORM>"); 186 "</FORM>");
95 187
96 WebFrame* web_frame = GetMainFrame(); 188 WebFrame* web_frame = GetMainFrame();
97 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 189 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
98 190
99 FormManager form_manager; 191 FormManager form_manager;
100 form_manager.ExtractForms(web_frame); 192 form_manager.ExtractForms(web_frame);
101 193
102 std::vector<FormData> forms; 194 std::vector<FormData> forms;
103 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); 195 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
104 ASSERT_EQ(1U, forms.size()); 196 ASSERT_EQ(1U, forms.size());
105 197
106 const FormData& form = forms[0]; 198 const FormData& form = forms[0];
107 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
108 EXPECT_EQ(GURL(web_frame->url()), form.origin); 199 EXPECT_EQ(GURL(web_frame->url()), form.origin);
109 EXPECT_EQ(GURL("http://cnn.com"), form.action); 200 ExpectDefaultForm(form);
110 201
111 const std::vector<FormField>& fields = form.fields; 202 const std::vector<FormField>& fields = form.fields;
112 ASSERT_EQ(3U, fields.size()); 203 ASSERT_EQ(3U, fields.size());
113 EXPECT_EQ(FormField(string16(), 204 EXPECT_EQ(FormField(string16(),
114 ASCIIToUTF16("firstname"), 205 ASCIIToUTF16("firstname"),
115 ASCIIToUTF16("John"), 206 ASCIIToUTF16("John"),
116 ASCIIToUTF16("text"), 207 ASCIIToUTF16("text"),
117 20), 208 20),
118 fields[0]); 209 fields[0]);
119 EXPECT_EQ(FormField(string16(), 210 EXPECT_EQ(FormField(string16(),
(...skipping 25 matching lines...) Expand all
145 236
146 FormManager form_manager; 237 FormManager form_manager;
147 form_manager.ExtractForms(web_frame); 238 form_manager.ExtractForms(web_frame);
148 239
149 std::vector<FormData> forms; 240 std::vector<FormData> forms;
150 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); 241 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
151 ASSERT_EQ(2U, forms.size()); 242 ASSERT_EQ(2U, forms.size());
152 243
153 // First form. 244 // First form.
154 const FormData& form = forms[0]; 245 const FormData& form = forms[0];
155 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
156 EXPECT_EQ(GURL(web_frame->url()), form.origin); 246 EXPECT_EQ(GURL(web_frame->url()), form.origin);
157 EXPECT_EQ(GURL("http://cnn.com"), form.action); 247 ExpectDefaultForm(form);
158 248
159 const std::vector<FormField>& fields = form.fields; 249 const std::vector<FormField>& fields = form.fields;
160 ASSERT_EQ(2U, fields.size()); 250 ASSERT_EQ(2U, fields.size());
161 EXPECT_EQ(FormField(string16(), 251 EXPECT_EQ(FormField(string16(),
162 ASCIIToUTF16("firstname"), 252 ASCIIToUTF16("firstname"),
163 ASCIIToUTF16("John"), 253 ASCIIToUTF16("John"),
164 ASCIIToUTF16("text"), 254 ASCIIToUTF16("text"),
165 20), 255 20),
166 fields[0]); 256 fields[0]);
167 EXPECT_EQ(FormField(string16(), 257 EXPECT_EQ(FormField(string16(),
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 form_manager.ExtractForms(web_frame); 322 form_manager.ExtractForms(web_frame);
233 323
234 forms.clear(); 324 forms.clear();
235 form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms); 325 form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms);
236 ASSERT_EQ(1U, forms.size()); 326 ASSERT_EQ(1U, forms.size());
237 327
238 const FormData& form = forms[0]; 328 const FormData& form = forms[0];
239 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 329 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
240 EXPECT_EQ(GURL(web_frame->url()), form.origin); 330 EXPECT_EQ(GURL(web_frame->url()), form.origin);
241 EXPECT_EQ(GURL("http://abc.com"), form.action); 331 EXPECT_EQ(GURL("http://abc.com"), form.action);
332 EXPECT_EQ(std::string(), form.locale);
242 333
243 const std::vector<FormField>& fields = form.fields; 334 const std::vector<FormField>& fields = form.fields;
244 ASSERT_EQ(2U, fields.size()); 335 ASSERT_EQ(2U, fields.size());
245 EXPECT_EQ(FormField(string16(), 336 EXPECT_EQ(FormField(string16(),
246 ASCIIToUTF16("lastname"), 337 ASCIIToUTF16("lastname"),
247 ASCIIToUTF16("Smith"), 338 ASCIIToUTF16("Smith"),
248 ASCIIToUTF16("text"), 339 ASCIIToUTF16("text"),
249 20), 340 20),
250 fields[0]); 341 fields[0]);
251 EXPECT_EQ(FormField(string16(), 342 EXPECT_EQ(FormField(string16(),
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 707
617 // There should be no forms after the call to Reset. 708 // There should be no forms after the call to Reset.
618 form_manager.Reset(); 709 form_manager.Reset();
619 710
620 forms.clear(); 711 forms.clear();
621 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); 712 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
622 ASSERT_EQ(0U, forms.size()); 713 ASSERT_EQ(0U, forms.size());
623 } 714 }
624 715
625 TEST_F(FormManagerTest, Labels) { 716 TEST_F(FormManagerTest, Labels) {
626 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 717 FormData form;
718 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
627 " <LABEL for=\"firstname\"> First name: </LABEL>" 719 " <LABEL for=\"firstname\"> First name: </LABEL>"
628 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 720 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
629 " <LABEL for=\"lastname\"> Last name: </LABEL>" 721 " <LABEL for=\"lastname\"> Last name: </LABEL>"
630 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 722 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
631 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 723 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
632 "</FORM>"); 724 "</FORM>",
633 725 &form);
634 WebFrame* web_frame = GetMainFrame(); 726 ExpectDefaultForm(form);
635 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
636
637 FormManager form_manager;
638 form_manager.ExtractForms(web_frame);
639
640 std::vector<FormData> forms;
641 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
642 ASSERT_EQ(1U, forms.size());
643
644 const FormData& form = forms[0];
645 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
646 EXPECT_EQ(GURL(web_frame->url()), form.origin);
647 EXPECT_EQ(GURL("http://cnn.com"), form.action);
648 727
649 const std::vector<FormField>& fields = form.fields; 728 const std::vector<FormField>& fields = form.fields;
650 ASSERT_EQ(3U, fields.size()); 729 ASSERT_EQ(3U, fields.size());
651 EXPECT_TRUE(fields[0].StrictlyEqualsHack( 730 EXPECT_TRUE(fields[0].StrictlyEqualsHack(
652 FormField(ASCIIToUTF16("First name:"), 731 FormField(ASCIIToUTF16("First name:"),
653 ASCIIToUTF16("firstname"), 732 ASCIIToUTF16("firstname"),
654 ASCIIToUTF16("John"), 733 ASCIIToUTF16("John"),
655 ASCIIToUTF16("text"), 734 ASCIIToUTF16("text"),
656 20))); 735 20)));
657 EXPECT_TRUE(fields[1].StrictlyEqualsHack( 736 EXPECT_TRUE(fields[1].StrictlyEqualsHack(
658 FormField(ASCIIToUTF16("Last name:"), 737 FormField(ASCIIToUTF16("Last name:"),
659 ASCIIToUTF16("lastname"), 738 ASCIIToUTF16("lastname"),
660 ASCIIToUTF16("Smith"), 739 ASCIIToUTF16("Smith"),
661 ASCIIToUTF16("text"), 740 ASCIIToUTF16("text"),
662 20))); 741 20)));
663 EXPECT_TRUE(fields[2].StrictlyEqualsHack( 742 EXPECT_TRUE(fields[2].StrictlyEqualsHack(
664 FormField(string16(), 743 FormField(string16(),
665 ASCIIToUTF16("reply-send"), 744 ASCIIToUTF16("reply-send"),
666 string16(), 745 string16(),
667 ASCIIToUTF16("submit"), 746 ASCIIToUTF16("submit"),
668 0))); 747 0)));
669 } 748 }
670 749
671 TEST_F(FormManagerTest, LabelsWithSpans) { 750 TEST_F(FormManagerTest, LabelsWithSpans) {
672 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 751 FormData form;
752 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
673 " <LABEL for=\"firstname\"><span>First name: </span></LABEL>" 753 " <LABEL for=\"firstname\"><span>First name: </span></LABEL>"
674 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 754 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
675 " <LABEL for=\"lastname\"><span>Last name: </span></LABEL>" 755 " <LABEL for=\"lastname\"><span>Last name: </span></LABEL>"
676 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 756 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
677 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 757 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
678 "</FORM>"); 758 "</FORM>",
679 759 &form);
680 WebFrame* web_frame = GetMainFrame(); 760 ExpectDefaultForm(form);
681 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
682
683 FormManager form_manager;
684 form_manager.ExtractForms(web_frame);
685
686 std::vector<FormData> forms;
687 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
688 ASSERT_EQ(1U, forms.size());
689
690 const FormData& form = forms[0];
691 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
692 EXPECT_EQ(GURL(web_frame->url()), form.origin);
693 EXPECT_EQ(GURL("http://cnn.com"), form.action);
694 761
695 const std::vector<FormField>& fields = form.fields; 762 const std::vector<FormField>& fields = form.fields;
696 ASSERT_EQ(3U, fields.size()); 763 ASSERT_EQ(3U, fields.size());
697 EXPECT_TRUE(fields[0].StrictlyEqualsHack( 764 EXPECT_TRUE(fields[0].StrictlyEqualsHack(
698 FormField(ASCIIToUTF16("First name:"), 765 FormField(ASCIIToUTF16("First name:"),
699 ASCIIToUTF16("firstname"), 766 ASCIIToUTF16("firstname"),
700 ASCIIToUTF16("John"), 767 ASCIIToUTF16("John"),
701 ASCIIToUTF16("text"), 768 ASCIIToUTF16("text"),
702 20))); 769 20)));
703 EXPECT_TRUE(fields[1].StrictlyEqualsHack( 770 EXPECT_TRUE(fields[1].StrictlyEqualsHack(
704 FormField(ASCIIToUTF16("Last name:"), 771 FormField(ASCIIToUTF16("Last name:"),
705 ASCIIToUTF16("lastname"), 772 ASCIIToUTF16("lastname"),
706 ASCIIToUTF16("Smith"), 773 ASCIIToUTF16("Smith"),
707 ASCIIToUTF16("text"), 774 ASCIIToUTF16("text"),
708 20))); 775 20)));
709 EXPECT_TRUE(fields[2].StrictlyEqualsHack( 776 EXPECT_TRUE(fields[2].StrictlyEqualsHack(
710 FormField(string16(), 777 FormField(string16(),
711 ASCIIToUTF16("reply-send"), 778 ASCIIToUTF16("reply-send"),
712 string16(), 779 string16(),
713 ASCIIToUTF16("submit"), 780 ASCIIToUTF16("submit"),
714 0))); 781 0)));
715 } 782 }
716 783
717 // This test is different from FormManagerTest.Labels in that the label elements 784 // This test is different from FormManagerTest.Labels in that the label elements
718 // for= attribute is set to the name of the form control element it is a label 785 // for= attribute is set to the name of the form control element it is a label
719 // for instead of the id of the form control element. This is invalid because 786 // for instead of the id of the form control element. This is invalid because
720 // the for= attribute must be set to the id of the form control element. 787 // the for= attribute must be set to the id of the form control element.
721 TEST_F(FormManagerTest, InvalidLabels) { 788 TEST_F(FormManagerTest, InvalidLabels) {
722 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 789 FormData form;
790 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
723 " <LABEL for=\"firstname\"> First name: </LABEL>" 791 " <LABEL for=\"firstname\"> First name: </LABEL>"
724 " <INPUT type=\"text\" name=\"firstname\" value=\"John\"/>" 792 " <INPUT type=\"text\" name=\"firstname\" value=\"John\"/>"
725 " <LABEL for=\"lastname\"> Last name: </LABEL>" 793 " <LABEL for=\"lastname\"> Last name: </LABEL>"
726 " <INPUT type=\"text\" name=\"lastname\" value=\"Smith\"/>" 794 " <INPUT type=\"text\" name=\"lastname\" value=\"Smith\"/>"
727 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 795 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
728 "</FORM>"); 796 "</FORM>",
729 797 &form);
730 WebFrame* web_frame = GetMainFrame(); 798 ExpectDefaultForm(form);
731 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
732
733 FormManager form_manager;
734 form_manager.ExtractForms(web_frame);
735
736 std::vector<FormData> forms;
737 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
738 ASSERT_EQ(1U, forms.size());
739
740 const FormData& form = forms[0];
741 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
742 EXPECT_EQ(GURL(web_frame->url()), form.origin);
743 EXPECT_EQ(GURL("http://cnn.com"), form.action);
744 799
745 const std::vector<FormField>& fields = form.fields; 800 const std::vector<FormField>& fields = form.fields;
746 ASSERT_EQ(3U, fields.size()); 801 ASSERT_EQ(3U, fields.size());
747 EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), 802 EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(),
748 ASCIIToUTF16("firstname"), 803 ASCIIToUTF16("firstname"),
749 ASCIIToUTF16("John"), 804 ASCIIToUTF16("John"),
750 ASCIIToUTF16("text"), 805 ASCIIToUTF16("text"),
751 20))); 806 20)));
752 EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), 807 EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(),
753 ASCIIToUTF16("lastname"), 808 ASCIIToUTF16("lastname"),
(...skipping 25 matching lines...) Expand all
779 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 834 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
780 835
781 FormManager form_manager; 836 FormManager form_manager;
782 form_manager.ExtractForms(web_frame); 837 form_manager.ExtractForms(web_frame);
783 838
784 std::vector<FormData> forms; 839 std::vector<FormData> forms;
785 form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms); 840 form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms);
786 ASSERT_EQ(1U, forms.size()); 841 ASSERT_EQ(1U, forms.size());
787 842
788 const FormData& form = forms[0]; 843 const FormData& form = forms[0];
789 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
790 EXPECT_EQ(GURL(web_frame->url()), form.origin); 844 EXPECT_EQ(GURL(web_frame->url()), form.origin);
791 EXPECT_EQ(GURL("http://cnn.com"), form.action); 845 ExpectDefaultForm(form);
792 846
793 const std::vector<FormField>& fields = form.fields; 847 const std::vector<FormField>& fields = form.fields;
794 ASSERT_EQ(3U, fields.size()); 848 ASSERT_EQ(3U, fields.size());
795 EXPECT_EQ(FormField(ASCIIToUTF16("Middle name:"), 849 EXPECT_EQ(FormField(ASCIIToUTF16("Middle name:"),
796 ASCIIToUTF16("middlename"), 850 ASCIIToUTF16("middlename"),
797 string16(), 851 string16(),
798 ASCIIToUTF16("text"), 852 ASCIIToUTF16("text"),
799 20), 853 20),
800 fields[0]); 854 fields[0]);
801 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 855 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
802 ASCIIToUTF16("lastname"), 856 ASCIIToUTF16("lastname"),
803 string16(), 857 string16(),
804 ASCIIToUTF16("text"), 858 ASCIIToUTF16("text"),
805 20), 859 20),
806 fields[1]); 860 fields[1]);
807 EXPECT_EQ(FormField(string16(), 861 EXPECT_EQ(FormField(string16(),
808 ASCIIToUTF16("reply-send"), 862 ASCIIToUTF16("reply-send"),
809 ASCIIToUTF16("Send"), 863 ASCIIToUTF16("Send"),
810 ASCIIToUTF16("submit"), 864 ASCIIToUTF16("submit"),
811 0), 865 0),
812 fields[2]); 866 fields[2]);
813 } 867 }
814 868
815 TEST_F(FormManagerTest, LabelsInferredFromText) { 869 TEST_F(FormManagerTest, LabelsInferredFromText) {
816 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 870 FormData form;
871 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
817 " First name:" 872 " First name:"
818 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 873 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
819 " Last name:" 874 " Last name:"
820 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 875 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
821 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 876 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
822 "</FORM>"); 877 "</FORM>",
823 878 &form);
824 WebFrame* web_frame = GetMainFrame(); 879 ExpectDefaultForm(form);
825 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
826
827 FormManager form_manager;
828 form_manager.ExtractForms(web_frame);
829
830 std::vector<FormData> forms;
831 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
832 ASSERT_EQ(1U, forms.size());
833
834 const FormData& form = forms[0];
835 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
836 EXPECT_EQ(GURL(web_frame->url()), form.origin);
837 EXPECT_EQ(GURL("http://cnn.com"), form.action);
838 880
839 const std::vector<FormField>& fields = form.fields; 881 const std::vector<FormField>& fields = form.fields;
840 ASSERT_EQ(3U, fields.size()); 882 ASSERT_EQ(3U, fields.size());
841 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), 883 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"),
842 ASCIIToUTF16("firstname"), 884 ASCIIToUTF16("firstname"),
843 ASCIIToUTF16("John"), 885 ASCIIToUTF16("John"),
844 ASCIIToUTF16("text"), 886 ASCIIToUTF16("text"),
845 20), 887 20),
846 fields[0]); 888 fields[0]);
847 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 889 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
848 ASCIIToUTF16("lastname"), 890 ASCIIToUTF16("lastname"),
849 ASCIIToUTF16("Smith"), 891 ASCIIToUTF16("Smith"),
850 ASCIIToUTF16("text"), 892 ASCIIToUTF16("text"),
851 20), 893 20),
852 fields[1]); 894 fields[1]);
853 EXPECT_EQ(FormField(string16(), 895 EXPECT_EQ(FormField(string16(),
854 ASCIIToUTF16("reply-send"), 896 ASCIIToUTF16("reply-send"),
855 ASCIIToUTF16("Send"), 897 ASCIIToUTF16("Send"),
856 ASCIIToUTF16("submit"), 898 ASCIIToUTF16("submit"),
857 0), 899 0),
858 fields[2]); 900 fields[2]);
859 } 901 }
860 902
861 TEST_F(FormManagerTest, LabelsInferredFromTextHidden) { 903 TEST_F(FormManagerTest, LabelsInferredFromTextHidden) {
862 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 904 FormData form;
905 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
863 " First name:" 906 " First name:"
864 " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>" 907 " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>"
865 " Last name:" 908 " Last name:"
866 " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>" 909 " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>"
867 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 910 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
868 "</FORM>"); 911 "</FORM>",
869 912 &form);
870 WebFrame* web_frame = GetMainFrame(); 913 ExpectDefaultForm(form);
871 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
872
873 FormManager form_manager;
874 form_manager.ExtractForms(web_frame);
875
876 std::vector<FormData> forms;
877 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
878 ASSERT_EQ(1U, forms.size());
879
880 const FormData& form = forms[0];
881 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
882 EXPECT_EQ(GURL(web_frame->url()), form.origin);
883 EXPECT_EQ(GURL("http://cnn.com"), form.action);
884 914
885 const std::vector<FormField>& fields = form.fields; 915 const std::vector<FormField>& fields = form.fields;
886 ASSERT_EQ(3U, fields.size()); 916 ASSERT_EQ(3U, fields.size());
887 EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), 917 EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(),
888 ASCIIToUTF16("firstname"), 918 ASCIIToUTF16("firstname"),
889 ASCIIToUTF16("John"), 919 ASCIIToUTF16("John"),
890 ASCIIToUTF16("hidden"), 920 ASCIIToUTF16("hidden"),
891 0))); 921 0)));
892 EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), 922 EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(),
893 ASCIIToUTF16("lastname"), 923 ASCIIToUTF16("lastname"),
894 ASCIIToUTF16("Smith"), 924 ASCIIToUTF16("Smith"),
895 ASCIIToUTF16("hidden"), 925 ASCIIToUTF16("hidden"),
896 0))); 926 0)));
897 EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), 927 EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(),
898 ASCIIToUTF16("reply-send"), 928 ASCIIToUTF16("reply-send"),
899 string16(), 929 string16(),
900 ASCIIToUTF16("submit"), 930 ASCIIToUTF16("submit"),
901 0))); 931 0)));
902 } 932 }
903 933
904 TEST_F(FormManagerTest, LabelsInferredFromParagraph) { 934 TEST_F(FormManagerTest, LabelsInferredFromParagraph) {
905 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 935 FormData form;
936 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
906 " <P>First name:</P><INPUT type=\"text\" " 937 " <P>First name:</P><INPUT type=\"text\" "
907 " id=\"firstname\" value=\"John\"/>" 938 " id=\"firstname\" value=\"John\"/>"
908 " <P>Last name:</P>" 939 " <P>Last name:</P>"
909 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 940 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
910 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 941 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
911 "</FORM>"); 942 "</FORM>",
912 943 &form);
913 WebFrame* web_frame = GetMainFrame(); 944 ExpectDefaultForm(form);
914 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
915
916 FormManager form_manager;
917 form_manager.ExtractForms(web_frame);
918
919 std::vector<FormData> forms;
920 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
921 ASSERT_EQ(1U, forms.size());
922
923 const FormData& form = forms[0];
924 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
925 EXPECT_EQ(GURL(web_frame->url()), form.origin);
926 EXPECT_EQ(GURL("http://cnn.com"), form.action);
927 945
928 const std::vector<FormField>& fields = form.fields; 946 const std::vector<FormField>& fields = form.fields;
929 ASSERT_EQ(3U, fields.size()); 947 ASSERT_EQ(3U, fields.size());
930 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), 948 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"),
931 ASCIIToUTF16("firstname"), 949 ASCIIToUTF16("firstname"),
932 ASCIIToUTF16("John"), 950 ASCIIToUTF16("John"),
933 ASCIIToUTF16("text"), 951 ASCIIToUTF16("text"),
934 20), 952 20),
935 fields[0]); 953 fields[0]);
936 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 954 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
937 ASCIIToUTF16("lastname"), 955 ASCIIToUTF16("lastname"),
938 ASCIIToUTF16("Smith"), 956 ASCIIToUTF16("Smith"),
939 ASCIIToUTF16("text"), 957 ASCIIToUTF16("text"),
940 20), 958 20),
941 fields[1]); 959 fields[1]);
942 EXPECT_EQ(FormField(string16(), 960 EXPECT_EQ(FormField(string16(),
943 ASCIIToUTF16("reply-send"), 961 ASCIIToUTF16("reply-send"),
944 ASCIIToUTF16("Send"), 962 ASCIIToUTF16("Send"),
945 ASCIIToUTF16("submit"), 963 ASCIIToUTF16("submit"),
946 0), 964 0),
947 fields[2]); 965 fields[2]);
948 } 966 }
949 967
950 TEST_F(FormManagerTest, LabelsInferredFromTableCell) { 968 TEST_F(FormManagerTest, LabelsInferredFromTableCell) {
951 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 969 FormData form;
970 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
952 "<TABLE>" 971 "<TABLE>"
953 " <TR>" 972 " <TR>"
954 " <TD>First name:</TD>" 973 " <TD>First name:</TD>"
955 " <TD><INPUT type=\"text\" id=\"firstname\" value=\"John\"/></TD>" 974 " <TD><INPUT type=\"text\" id=\"firstname\" value=\"John\"/></TD>"
956 " </TR>" 975 " </TR>"
957 " <TR>" 976 " <TR>"
958 " <TD>Last name:</TD>" 977 " <TD>Last name:</TD>"
959 " <TD><INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/></TD>" 978 " <TD><INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/></TD>"
960 " </TR>" 979 " </TR>"
961 " <TR>" 980 " <TR>"
962 " <TD></TD>" 981 " <TD></TD>"
963 " <TD>" 982 " <TD>"
964 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 983 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
965 " </TD>" 984 " </TD>"
966 " </TR>" 985 " </TR>"
967 "</TABLE>" 986 "</TABLE>"
968 "</FORM>"); 987 "</FORM>",
969 988 &form);
970 WebFrame* web_frame = GetMainFrame(); 989 ExpectDefaultForm(form);
971 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
972
973 FormManager form_manager;
974 form_manager.ExtractForms(web_frame);
975
976 std::vector<FormData> forms;
977 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
978 ASSERT_EQ(1U, forms.size());
979
980 const FormData& form = forms[0];
981 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
982 EXPECT_EQ(GURL(web_frame->url()), form.origin);
983 EXPECT_EQ(GURL("http://cnn.com"), form.action);
984 990
985 const std::vector<FormField>& fields = form.fields; 991 const std::vector<FormField>& fields = form.fields;
986 ASSERT_EQ(3U, fields.size()); 992 ASSERT_EQ(3U, fields.size());
987 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), 993 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"),
988 ASCIIToUTF16("firstname"), 994 ASCIIToUTF16("firstname"),
989 ASCIIToUTF16("John"), 995 ASCIIToUTF16("John"),
990 ASCIIToUTF16("text"), 996 ASCIIToUTF16("text"),
991 20), 997 20),
992 fields[0]); 998 fields[0]);
993 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 999 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
994 ASCIIToUTF16("lastname"), 1000 ASCIIToUTF16("lastname"),
995 ASCIIToUTF16("Smith"), 1001 ASCIIToUTF16("Smith"),
996 ASCIIToUTF16("text"), 1002 ASCIIToUTF16("text"),
997 20), 1003 20),
998 fields[1]); 1004 fields[1]);
999 EXPECT_EQ(FormField(string16(), 1005 EXPECT_EQ(FormField(string16(),
1000 ASCIIToUTF16("reply-send"), 1006 ASCIIToUTF16("reply-send"),
1001 ASCIIToUTF16("Send"), 1007 ASCIIToUTF16("Send"),
1002 ASCIIToUTF16("submit"), 1008 ASCIIToUTF16("submit"),
1003 0), 1009 0),
1004 fields[2]); 1010 fields[2]);
1005 } 1011 }
1006 1012
1007 TEST_F(FormManagerTest, LabelsInferredFromTableCellNested) { 1013 TEST_F(FormManagerTest, LabelsInferredFromTableCellNested) {
1008 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 1014 FormData form;
1015 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
1009 "<TABLE>" 1016 "<TABLE>"
1010 " <TR>" 1017 " <TR>"
1011 " <TD>" 1018 " <TD>"
1012 " <FONT>" 1019 " <FONT>"
1013 " First name:" 1020 " First name:"
1014 " </FONT>" 1021 " </FONT>"
1015 " <FONT>" 1022 " <FONT>"
1016 " Bogus" 1023 " Bogus"
1017 " </FONT>" 1024 " </FONT>"
1018 " </TD>" 1025 " </TD>"
(...skipping 15 matching lines...) Expand all
1034 " </FONT>" 1041 " </FONT>"
1035 " </TD>" 1042 " </TD>"
1036 " </TR>" 1043 " </TR>"
1037 " <TR>" 1044 " <TR>"
1038 " <TD></TD>" 1045 " <TD></TD>"
1039 " <TD>" 1046 " <TD>"
1040 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 1047 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
1041 " </TD>" 1048 " </TD>"
1042 " </TR>" 1049 " </TR>"
1043 "</TABLE>" 1050 "</TABLE>"
1044 "</FORM>"); 1051 "</FORM>",
1045 1052 &form);
1046 WebFrame* web_frame = GetMainFrame(); 1053 ExpectDefaultForm(form);
1047 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
1048
1049 FormManager form_manager;
1050 form_manager.ExtractForms(web_frame);
1051
1052 std::vector<FormData> forms;
1053 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
1054 ASSERT_EQ(1U, forms.size());
1055
1056 const FormData& form = forms[0];
1057 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1058 EXPECT_EQ(GURL(web_frame->url()), form.origin);
1059 EXPECT_EQ(GURL("http://cnn.com"), form.action);
1060 1054
1061 const std::vector<FormField>& fields = form.fields; 1055 const std::vector<FormField>& fields = form.fields;
1062 ASSERT_EQ(3U, fields.size()); 1056 ASSERT_EQ(3U, fields.size());
1063 EXPECT_EQ(FormField(ASCIIToUTF16("First name:Bogus"), 1057 EXPECT_EQ(FormField(ASCIIToUTF16("First name:Bogus"),
1064 ASCIIToUTF16("firstname"), 1058 ASCIIToUTF16("firstname"),
1065 ASCIIToUTF16("John"), 1059 ASCIIToUTF16("John"),
1066 ASCIIToUTF16("text"), 1060 ASCIIToUTF16("text"),
1067 20), 1061 20),
1068 fields[0]); 1062 fields[0]);
1069 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 1063 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
1070 ASCIIToUTF16("lastname"), 1064 ASCIIToUTF16("lastname"),
1071 ASCIIToUTF16("Smith"), 1065 ASCIIToUTF16("Smith"),
1072 ASCIIToUTF16("text"), 1066 ASCIIToUTF16("text"),
1073 20), 1067 20),
1074 fields[1]); 1068 fields[1]);
1075 EXPECT_EQ(FormField(string16(), 1069 EXPECT_EQ(FormField(string16(),
1076 ASCIIToUTF16("reply-send"), 1070 ASCIIToUTF16("reply-send"),
1077 ASCIIToUTF16("Send"), 1071 ASCIIToUTF16("Send"),
1078 ASCIIToUTF16("submit"), 1072 ASCIIToUTF16("submit"),
1079 0), 1073 0),
1080 fields[2]); 1074 fields[2]);
1081 } 1075 }
1082 1076
1083 TEST_F(FormManagerTest, LabelsInferredFromDefinitionList) { 1077 TEST_F(FormManagerTest, LabelsInferredFromDefinitionList) {
1084 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 1078 FormData form;
1079 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
1085 "<DL>" 1080 "<DL>"
1086 " <DT>" 1081 " <DT>"
1087 " <SPAN>" 1082 " <SPAN>"
1088 " *" 1083 " *"
1089 " </SPAN>" 1084 " </SPAN>"
1090 " <SPAN>" 1085 " <SPAN>"
1091 " First name:" 1086 " First name:"
1092 " </SPAN>" 1087 " </SPAN>"
1093 " <SPAN>" 1088 " <SPAN>"
1094 " Bogus" 1089 " Bogus"
(...skipping 12 matching lines...) Expand all
1107 " <DD>" 1102 " <DD>"
1108 " <FONT>" 1103 " <FONT>"
1109 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 1104 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
1110 " </FONT>" 1105 " </FONT>"
1111 " </DD>" 1106 " </DD>"
1112 " <DT></DT>" 1107 " <DT></DT>"
1113 " <DD>" 1108 " <DD>"
1114 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 1109 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
1115 " </DD>" 1110 " </DD>"
1116 "</DL>" 1111 "</DL>"
1117 "</FORM>"); 1112 "</FORM>",
1118 1113 &form);
1119 WebFrame* web_frame = GetMainFrame(); 1114 ExpectDefaultForm(form);
1120 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
1121
1122 FormManager form_manager;
1123 form_manager.ExtractForms(web_frame);
1124
1125 std::vector<FormData> forms;
1126 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
1127 ASSERT_EQ(1U, forms.size());
1128
1129 const FormData& form = forms[0];
1130 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1131 EXPECT_EQ(GURL(web_frame->url()), form.origin);
1132 EXPECT_EQ(GURL("http://cnn.com"), form.action);
1133 1115
1134 const std::vector<FormField>& fields = form.fields; 1116 const std::vector<FormField>& fields = form.fields;
1135 ASSERT_EQ(3U, fields.size()); 1117 ASSERT_EQ(3U, fields.size());
1136 EXPECT_EQ(FormField(ASCIIToUTF16("*First name:Bogus"), 1118 EXPECT_EQ(FormField(ASCIIToUTF16("*First name:Bogus"),
1137 ASCIIToUTF16("firstname"), 1119 ASCIIToUTF16("firstname"),
1138 ASCIIToUTF16("John"), 1120 ASCIIToUTF16("John"),
1139 ASCIIToUTF16("text"), 1121 ASCIIToUTF16("text"),
1140 20), 1122 20),
1141 fields[0]); 1123 fields[0]);
1142 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), 1124 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"),
1143 ASCIIToUTF16("lastname"), 1125 ASCIIToUTF16("lastname"),
1144 ASCIIToUTF16("Smith"), 1126 ASCIIToUTF16("Smith"),
1145 ASCIIToUTF16("text"), 1127 ASCIIToUTF16("text"),
1146 20), 1128 20),
1147 fields[1]); 1129 fields[1]);
1148 EXPECT_EQ(FormField(string16(), 1130 EXPECT_EQ(FormField(string16(),
1149 ASCIIToUTF16("reply-send"), 1131 ASCIIToUTF16("reply-send"),
1150 ASCIIToUTF16("Send"), 1132 ASCIIToUTF16("Send"),
1151 ASCIIToUTF16("submit"), 1133 ASCIIToUTF16("submit"),
1152 0), 1134 0),
1153 fields[2]); 1135 fields[2]);
1154 } 1136 }
1155 1137
1156 TEST_F(FormManagerTest, LabelsInferredWithSameName) { 1138 TEST_F(FormManagerTest, LabelsInferredWithSameName) {
1157 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 1139 FormData form;
1140 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
1158 " Address Line 1:" 1141 " Address Line 1:"
1159 " <INPUT type=\"text\" name=\"Address\"/>" 1142 " <INPUT type=\"text\" name=\"Address\"/>"
1160 " Address Line 2:" 1143 " Address Line 2:"
1161 " <INPUT type=\"text\" name=\"Address\"/>" 1144 " <INPUT type=\"text\" name=\"Address\"/>"
1162 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 1145 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
1163 "</FORM>"); 1146 "</FORM>",
1164 1147 &form);
1165 WebFrame* web_frame = GetMainFrame(); 1148 ExpectDefaultForm(form);
1166 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
1167
1168 FormManager form_manager;
1169 form_manager.ExtractForms(web_frame);
1170
1171 std::vector<FormData> forms;
1172 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
1173 ASSERT_EQ(1U, forms.size());
1174
1175 const FormData& form = forms[0];
1176 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1177 EXPECT_EQ(GURL(web_frame->url()), form.origin);
1178 EXPECT_EQ(GURL("http://cnn.com"), form.action);
1179 1149
1180 const std::vector<FormField>& fields = form.fields; 1150 const std::vector<FormField>& fields = form.fields;
1181 ASSERT_EQ(3U, fields.size()); 1151 ASSERT_EQ(3U, fields.size());
1182 EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 1:"), 1152 EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 1:"),
1183 ASCIIToUTF16("Address"), 1153 ASCIIToUTF16("Address"),
1184 string16(), 1154 string16(),
1185 ASCIIToUTF16("text"), 1155 ASCIIToUTF16("text"),
1186 20), 1156 20),
1187 fields[0]); 1157 fields[0]);
1188 EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 2:"), 1158 EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 2:"),
1189 ASCIIToUTF16("Address"), 1159 ASCIIToUTF16("Address"),
1190 string16(), 1160 string16(),
1191 ASCIIToUTF16("text"), 1161 ASCIIToUTF16("text"),
1192 20), 1162 20),
1193 fields[1]); 1163 fields[1]);
1194 EXPECT_EQ(FormField(string16(), 1164 EXPECT_EQ(FormField(string16(),
1195 ASCIIToUTF16("reply-send"), 1165 ASCIIToUTF16("reply-send"),
1196 ASCIIToUTF16("Send"), 1166 ASCIIToUTF16("Send"),
1197 ASCIIToUTF16("submit"), 1167 ASCIIToUTF16("submit"),
1198 0), 1168 0),
1199 fields[2]); 1169 fields[2]);
1200 } 1170 }
1201 1171
1202 TEST_F(FormManagerTest, LabelsInferredWithImageTags) { 1172 TEST_F(FormManagerTest, LabelsInferredWithImageTags) {
1203 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 1173 FormData form;
1174 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
1204 " Phone:" 1175 " Phone:"
1205 " <input type=\"text\" name=\"dayphone1\">" 1176 " <input type=\"text\" name=\"dayphone1\">"
1206 " <img/>" 1177 " <img/>"
1207 " -" 1178 " -"
1208 " <img/>" 1179 " <img/>"
1209 " <input type=\"text\" name=\"dayphone2\">" 1180 " <input type=\"text\" name=\"dayphone2\">"
1210 " <img/>" 1181 " <img/>"
1211 " -" 1182 " -"
1212 " <img/>" 1183 " <img/>"
1213 " <input type=\"text\" name=\"dayphone3\">" 1184 " <input type=\"text\" name=\"dayphone3\">"
1214 " ext.:" 1185 " ext.:"
1215 " <input type=\"text\" name=\"dayphone4\">" 1186 " <input type=\"text\" name=\"dayphone4\">"
1216 " <input type=\"text\" name=\"dummy\">" 1187 " <input type=\"text\" name=\"dummy\">"
1217 " <input type=\"submit\" name=\"reply-send\" value=\"Send\">" 1188 " <input type=\"submit\" name=\"reply-send\" value=\"Send\">"
1218 "</FORM>"); 1189 "</FORM>",
1219 1190 &form);
1220 WebFrame* frame = GetMainFrame(); 1191 ExpectDefaultForm(form);
1221 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
1222
1223 WebVector<WebFormElement> forms;
1224 frame->forms(forms);
1225 ASSERT_EQ(1U, forms.size());
1226
1227 FormData form;
1228 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0],
1229 FormManager::REQUIRE_NONE,
1230 true,
1231 &form));
1232 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1233 EXPECT_EQ(GURL(frame->url()), form.origin);
1234 EXPECT_EQ(GURL("http://cnn.com"), form.action);
1235 1192
1236 const std::vector<FormField>& fields = form.fields; 1193 const std::vector<FormField>& fields = form.fields;
1237 ASSERT_EQ(6U, fields.size()); 1194 ASSERT_EQ(6U, fields.size());
1238 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), 1195 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"),
1239 ASCIIToUTF16("dayphone1"), 1196 ASCIIToUTF16("dayphone1"),
1240 string16(), 1197 string16(),
1241 ASCIIToUTF16("text"), 1198 ASCIIToUTF16("text"),
1242 20), 1199 20),
1243 fields[0]); 1200 fields[0]);
1244 EXPECT_EQ(FormField(ASCIIToUTF16("-"), 1201 EXPECT_EQ(FormField(ASCIIToUTF16("-"),
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 1957
2001 WebVector<WebFormElement> forms; 1958 WebVector<WebFormElement> forms;
2002 frame->forms(forms); 1959 frame->forms(forms);
2003 ASSERT_EQ(1U, forms.size()); 1960 ASSERT_EQ(1U, forms.size());
2004 1961
2005 FormData form; 1962 FormData form;
2006 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], 1963 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0],
2007 FormManager::REQUIRE_NONE, 1964 FormManager::REQUIRE_NONE,
2008 true, 1965 true,
2009 &form)); 1966 &form));
2010 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2011 EXPECT_EQ(GURL(frame->url()), form.origin); 1967 EXPECT_EQ(GURL(frame->url()), form.origin);
2012 EXPECT_EQ(GURL("http://cnn.com"), form.action); 1968 ExpectDefaultForm(form);
2013 1969
2014 const std::vector<FormField>& fields = form.fields; 1970 const std::vector<FormField>& fields = form.fields;
2015 ASSERT_EQ(5U, fields.size()); 1971 ASSERT_EQ(5U, fields.size());
2016 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), 1972 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"),
2017 ASCIIToUTF16("dayphone1"), 1973 ASCIIToUTF16("dayphone1"),
2018 string16(), 1974 string16(),
2019 ASCIIToUTF16("text"), 1975 ASCIIToUTF16("text"),
2020 20), 1976 20),
2021 fields[0]); 1977 fields[0]);
2022 EXPECT_EQ(FormField(ASCIIToUTF16("-"), 1978 EXPECT_EQ(FormField(ASCIIToUTF16("-"),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2067 2023
2068 WebVector<WebFormElement> forms; 2024 WebVector<WebFormElement> forms;
2069 frame->forms(forms); 2025 frame->forms(forms);
2070 ASSERT_EQ(1U, forms.size()); 2026 ASSERT_EQ(1U, forms.size());
2071 2027
2072 FormData form; 2028 FormData form;
2073 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], 2029 EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0],
2074 FormManager::REQUIRE_NONE, 2030 FormManager::REQUIRE_NONE,
2075 true, 2031 true,
2076 &form)); 2032 &form));
2077 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2078 EXPECT_EQ(GURL(frame->url()), form.origin); 2033 EXPECT_EQ(GURL(frame->url()), form.origin);
2079 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2034 ExpectDefaultForm(form);
2080 2035
2081 const std::vector<FormField>& fields = form.fields; 2036 const std::vector<FormField>& fields = form.fields;
2082 ASSERT_EQ(7U, fields.size()); 2037 ASSERT_EQ(7U, fields.size());
2083 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), 2038 EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"),
2084 ASCIIToUTF16("dayphone1"), 2039 ASCIIToUTF16("dayphone1"),
2085 string16(), 2040 string16(),
2086 ASCIIToUTF16("text"), 2041 ASCIIToUTF16("text"),
2087 3), 2042 3),
2088 fields[0]); 2043 fields[0]);
2089 EXPECT_EQ(FormField(ASCIIToUTF16("-"), 2044 EXPECT_EQ(FormField(ASCIIToUTF16("-"),
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
2380 // Auto-filled attribute not set yet. 2335 // Auto-filled attribute not set yet.
2381 EXPECT_FALSE(form_manager.FormWithNodeIsAutoFilled(firstname)); 2336 EXPECT_FALSE(form_manager.FormWithNodeIsAutoFilled(firstname));
2382 2337
2383 // Set the auto-filled attribute. 2338 // Set the auto-filled attribute.
2384 firstname.setAutofilled(true); 2339 firstname.setAutofilled(true);
2385 2340
2386 EXPECT_TRUE(form_manager.FormWithNodeIsAutoFilled(firstname)); 2341 EXPECT_TRUE(form_manager.FormWithNodeIsAutoFilled(firstname));
2387 } 2342 }
2388 2343
2389 TEST_F(FormManagerTest, LabelsHiddenFields) { 2344 TEST_F(FormManagerTest, LabelsHiddenFields) {
2390 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 2345 FormData form;
2346 LoadForm("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
2391 " <LABEL for=\"firstname\"> First name: </LABEL>" 2347 " <LABEL for=\"firstname\"> First name: </LABEL>"
2392 " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>" 2348 " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>"
2393 " <LABEL for=\"lastname\"> Last name: </LABEL>" 2349 " <LABEL for=\"lastname\"> Last name: </LABEL>"
2394 " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>" 2350 " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>"
2395 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 2351 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
2396 "</FORM>"); 2352 "</FORM>",
2397 2353 &form);
2398 WebFrame* web_frame = GetMainFrame(); 2354 ExpectDefaultForm(form);
2399 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2400
2401 FormManager form_manager;
2402 form_manager.ExtractForms(web_frame);
2403
2404 std::vector<FormData> forms;
2405 form_manager.GetForms(FormManager::REQUIRE_NONE, &forms);
2406 ASSERT_EQ(1U, forms.size());
2407
2408 const FormData& form = forms[0];
2409 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2410 EXPECT_EQ(GURL(web_frame->url()), form.origin);
2411 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2412 2355
2413 const std::vector<FormField>& fields = form.fields; 2356 const std::vector<FormField>& fields = form.fields;
2414 ASSERT_EQ(3U, fields.size()); 2357 ASSERT_EQ(3U, fields.size());
2415 EXPECT_TRUE(fields[0].StrictlyEqualsHack( 2358 EXPECT_TRUE(fields[0].StrictlyEqualsHack(
2416 FormField(string16(), 2359 FormField(string16(),
2417 ASCIIToUTF16("firstname"), 2360 ASCIIToUTF16("firstname"),
2418 ASCIIToUTF16("John"), 2361 ASCIIToUTF16("John"),
2419 ASCIIToUTF16("hidden"), 2362 ASCIIToUTF16("hidden"),
2420 0))); 2363 0)));
2421 EXPECT_TRUE(fields[1].StrictlyEqualsHack( 2364 EXPECT_TRUE(fields[1].StrictlyEqualsHack(
(...skipping 24 matching lines...) Expand all
2446 2389
2447 WebElement e = web_frame->document().getElementById("firstname"); 2390 WebElement e = web_frame->document().getElementById("firstname");
2448 WebFormControlElement firstname = e.to<WebFormControlElement>(); 2391 WebFormControlElement firstname = e.to<WebFormControlElement>();
2449 2392
2450 // Hidden form control element should not have a label set. 2393 // Hidden form control element should not have a label set.
2451 FormManager form_manager; 2394 FormManager form_manager;
2452 EXPECT_EQ(string16(), form_manager.LabelForElement(firstname)); 2395 EXPECT_EQ(string16(), form_manager.LabelForElement(firstname));
2453 } 2396 }
2454 2397
2455 } // namespace 2398 } // namespace
OLDNEW
« no previous file with comments | « chrome/renderer/form_manager.cc ('k') | webkit/glue/dom_operations.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698