OLD | NEW |
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 "chrome/renderer/form_manager.h" | 5 #include "chrome/renderer/form_manager.h" |
6 #include "chrome/test/render_view_test.h" | 6 #include "chrome/test/render_view_test.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" | 8 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" |
9 #include "third_party/WebKit/WebKit/chromium/public/WebElement.h" | 9 #include "third_party/WebKit/WebKit/chromium/public/WebElement.h" |
10 #include "third_party/WebKit/WebKit/chromium/public/WebInputElement.h" | 10 #include "third_party/WebKit/WebKit/chromium/public/WebInputElement.h" |
11 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" | 11 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
12 #include "webkit/glue/form_data.h" | 12 #include "webkit/glue/form_data.h" |
13 | 13 |
14 using WebKit::WebElement; | 14 using WebKit::WebElement; |
15 using WebKit::WebFrame; | 15 using WebKit::WebFrame; |
16 using WebKit::WebInputElement; | 16 using WebKit::WebInputElement; |
17 using WebKit::WebString; | 17 using WebKit::WebString; |
18 | 18 |
19 using webkit_glue::FormData; | 19 using webkit_glue::FormData; |
20 using webkit_glue::FormField; | 20 using webkit_glue::FormField; |
21 | 21 |
22 class FormManagerTest : public RenderViewTest { | 22 namespace { |
23 public: | 23 |
24 FormManagerTest() {} | 24 typedef RenderViewTest FormManagerTest; |
25 }; | |
26 | 25 |
27 TEST_F(FormManagerTest, ExtractForms) { | 26 TEST_F(FormManagerTest, ExtractForms) { |
28 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" | 27 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
29 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 28 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
30 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 29 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
31 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 30 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
32 "</FORM>"); | 31 "</FORM>"); |
33 | 32 |
34 WebFrame* web_frame = GetMainFrame(); | 33 WebFrame* web_frame = GetMainFrame(); |
35 ASSERT_TRUE(web_frame); | 34 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
36 | 35 |
37 FormManager form_manager; | 36 FormManager form_manager; |
38 form_manager.ExtractForms(web_frame); | 37 form_manager.ExtractForms(web_frame); |
39 | 38 |
40 std::vector<FormData> forms; | 39 std::vector<FormData> forms; |
41 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 40 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
42 ASSERT_EQ(1U, forms.size()); | 41 ASSERT_EQ(1U, forms.size()); |
43 | 42 |
44 const FormData& form = forms[0]; | 43 const FormData& form = forms[0]; |
45 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); | 44 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
(...skipping 14 matching lines...) Expand all Loading... |
60 WebInputElement::Text), fields[1]); | 59 WebInputElement::Text), fields[1]); |
61 EXPECT_EQ(FormField(string16(), | 60 EXPECT_EQ(FormField(string16(), |
62 ASCIIToUTF16("reply-send"), | 61 ASCIIToUTF16("reply-send"), |
63 ASCIIToUTF16("Send"), | 62 ASCIIToUTF16("Send"), |
64 ASCIIToUTF16("submit"), | 63 ASCIIToUTF16("submit"), |
65 WebInputElement::Submit), fields[2]); | 64 WebInputElement::Submit), fields[2]); |
66 } | 65 } |
67 | 66 |
68 TEST_F(FormManagerTest, ExtractMultipleForms) { | 67 TEST_F(FormManagerTest, ExtractMultipleForms) { |
69 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" | 68 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
70 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 69 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
71 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 70 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
72 "</FORM>" | 71 "</FORM>" |
73 "<FORM name=\"TestForm2\" action=\"http://zoo.com\" method=\"post\">" | 72 "<FORM name=\"TestForm2\" action=\"http://zoo.com\" method=\"post\">" |
74 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 73 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
75 " <INPUT type=\"submit\" name=\"second\" value=\"Submit\">" | 74 " <INPUT type=\"submit\" name=\"second\" value=\"Submit\"/>" |
76 "</FORM>"); | 75 "</FORM>"); |
77 | 76 |
78 WebFrame* web_frame = GetMainFrame(); | 77 WebFrame* web_frame = GetMainFrame(); |
79 ASSERT_TRUE(web_frame); | 78 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
80 | 79 |
81 FormManager form_manager; | 80 FormManager form_manager; |
82 form_manager.ExtractForms(web_frame); | 81 form_manager.ExtractForms(web_frame); |
83 | 82 |
84 std::vector<FormData> forms; | 83 std::vector<FormData> forms; |
85 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 84 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
86 ASSERT_EQ(2U, forms.size()); | 85 ASSERT_EQ(2U, forms.size()); |
87 | 86 |
88 // First form. | 87 // First form. |
89 const FormData& form = forms[0]; | 88 const FormData& form = forms[0]; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 ASCIIToUTF16("second"), | 120 ASCIIToUTF16("second"), |
122 ASCIIToUTF16("Submit"), | 121 ASCIIToUTF16("Submit"), |
123 ASCIIToUTF16("submit"), | 122 ASCIIToUTF16("submit"), |
124 WebInputElement::Submit), fields2[1]); | 123 WebInputElement::Submit), fields2[1]); |
125 } | 124 } |
126 | 125 |
127 TEST_F(FormManagerTest, GetFormsAutocomplete) { | 126 TEST_F(FormManagerTest, GetFormsAutocomplete) { |
128 // Form is not auto-completable due to autocomplete=off. | 127 // Form is not auto-completable due to autocomplete=off. |
129 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\"" | 128 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\"" |
130 " autocomplete=off>" | 129 " autocomplete=off>" |
131 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 130 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
132 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 131 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
133 "</FORM>"); | 132 "</FORM>"); |
134 | 133 |
135 WebFrame* web_frame = GetMainFrame(); | 134 WebFrame* web_frame = GetMainFrame(); |
136 ASSERT_TRUE(web_frame); | 135 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
137 | 136 |
138 FormManager form_manager; | 137 FormManager form_manager; |
139 form_manager.ExtractForms(web_frame); | 138 form_manager.ExtractForms(web_frame); |
140 | 139 |
141 // Verify that we did load the forms. | 140 // Verify that we did load the forms. |
142 std::vector<FormData> forms; | 141 std::vector<FormData> forms; |
143 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 142 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
144 ASSERT_EQ(1U, forms.size()); | 143 ASSERT_EQ(1U, forms.size()); |
145 | 144 |
146 // autocomplete=off and we're requiring autocomplete, so no forms returned. | 145 // autocomplete=off and we're requiring autocomplete, so no forms returned. |
147 forms.clear(); | 146 forms.clear(); |
148 form_manager.GetForms(&forms, FormManager::REQUIRE_AUTOCOMPLETE); | 147 form_manager.GetForms(&forms, FormManager::REQUIRE_AUTOCOMPLETE); |
149 ASSERT_EQ(0U, forms.size()); | 148 ASSERT_EQ(0U, forms.size()); |
150 | 149 |
151 // The firstname element is not auto-completable due to autocomplete=off. | 150 // The firstname element is not auto-completable due to autocomplete=off. |
152 LoadHTML("<FORM name=\"TestForm\" action=\"http://abc.com\" method=\"post\">" | 151 LoadHTML("<FORM name=\"TestForm\" action=\"http://abc.com\" method=\"post\">" |
153 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"" | 152 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"" |
154 " autocomplete=off>" | 153 " autocomplete=off>" |
155 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 154 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
156 " <INPUT type=\"submit\" name=\"reply\" value=\"Send\">" | 155 " <INPUT type=\"submit\" name=\"reply\" value=\"Send\"/>" |
157 "</FORM>"); | 156 "</FORM>"); |
158 | 157 |
159 web_frame = GetMainFrame(); | 158 web_frame = GetMainFrame(); |
160 ASSERT_TRUE(web_frame); | 159 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
161 | 160 |
162 form_manager.Reset(); | 161 form_manager.Reset(); |
163 form_manager.ExtractForms(web_frame); | 162 form_manager.ExtractForms(web_frame); |
164 | 163 |
165 forms.clear(); | 164 forms.clear(); |
166 form_manager.GetForms(&forms, FormManager::REQUIRE_AUTOCOMPLETE); | 165 form_manager.GetForms(&forms, FormManager::REQUIRE_AUTOCOMPLETE); |
167 ASSERT_EQ(1U, forms.size()); | 166 ASSERT_EQ(1U, forms.size()); |
168 | 167 |
169 const FormData& form = forms[0]; | 168 const FormData& form = forms[0]; |
170 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); | 169 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
(...skipping 10 matching lines...) Expand all Loading... |
181 EXPECT_EQ(FormField(string16(), | 180 EXPECT_EQ(FormField(string16(), |
182 ASCIIToUTF16("reply"), | 181 ASCIIToUTF16("reply"), |
183 ASCIIToUTF16("Send"), | 182 ASCIIToUTF16("Send"), |
184 ASCIIToUTF16("submit"), | 183 ASCIIToUTF16("submit"), |
185 WebInputElement::Submit), fields[1]); | 184 WebInputElement::Submit), fields[1]); |
186 } | 185 } |
187 | 186 |
188 TEST_F(FormManagerTest, GetFormsElementsEnabled) { | 187 TEST_F(FormManagerTest, GetFormsElementsEnabled) { |
189 // The firstname element is not enabled due to disabled being set. | 188 // The firstname element is not enabled due to disabled being set. |
190 LoadHTML("<FORM name=\"TestForm\" action=\"http://xyz.com\" method=\"post\">" | 189 LoadHTML("<FORM name=\"TestForm\" action=\"http://xyz.com\" method=\"post\">" |
191 " <INPUT disabled type=\"text\" id=\"firstname\" value=\"John\">" | 190 " <INPUT disabled type=\"text\" id=\"firstname\" value=\"John\"/>" |
192 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 191 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
193 " <INPUT type=\"submit\" name=\"submit\" value=\"Send\">" | 192 " <INPUT type=\"submit\" name=\"submit\" value=\"Send\"/>" |
194 "</FORM>"); | 193 "</FORM>"); |
195 | 194 |
196 WebFrame* web_frame = GetMainFrame(); | 195 WebFrame* web_frame = GetMainFrame(); |
197 ASSERT_TRUE(web_frame); | 196 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
198 | 197 |
199 FormManager form_manager; | 198 FormManager form_manager; |
200 form_manager.ExtractForms(web_frame); | 199 form_manager.ExtractForms(web_frame); |
201 | 200 |
202 std::vector<FormData> forms; | 201 std::vector<FormData> forms; |
203 form_manager.GetForms(&forms, FormManager::REQUIRE_ELEMENTS_ENABLED); | 202 form_manager.GetForms(&forms, FormManager::REQUIRE_ELEMENTS_ENABLED); |
204 ASSERT_EQ(1U, forms.size()); | 203 ASSERT_EQ(1U, forms.size()); |
205 | 204 |
206 const FormData& form = forms[0]; | 205 const FormData& form = forms[0]; |
207 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); | 206 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
208 EXPECT_EQ(GURL(web_frame->url()), form.origin); | 207 EXPECT_EQ(GURL(web_frame->url()), form.origin); |
209 EXPECT_EQ(GURL("http://xyz.com"), form.action); | 208 EXPECT_EQ(GURL("http://xyz.com"), form.action); |
210 | 209 |
211 const std::vector<FormField>& fields = form.fields; | 210 const std::vector<FormField>& fields = form.fields; |
212 ASSERT_EQ(2U, fields.size()); | 211 ASSERT_EQ(2U, fields.size()); |
213 EXPECT_EQ(FormField(string16(), | 212 EXPECT_EQ(FormField(string16(), |
214 ASCIIToUTF16("lastname"), | 213 ASCIIToUTF16("lastname"), |
215 ASCIIToUTF16("Smith"), | 214 ASCIIToUTF16("Smith"), |
216 ASCIIToUTF16("text"), | 215 ASCIIToUTF16("text"), |
217 WebInputElement::Text), fields[0]); | 216 WebInputElement::Text), fields[0]); |
218 EXPECT_EQ(FormField(string16(), | 217 EXPECT_EQ(FormField(string16(), |
219 ASCIIToUTF16("submit"), | 218 ASCIIToUTF16("submit"), |
220 ASCIIToUTF16("Send"), | 219 ASCIIToUTF16("Send"), |
221 ASCIIToUTF16("submit"), | 220 ASCIIToUTF16("submit"), |
222 WebInputElement::Submit), fields[1]); | 221 WebInputElement::Submit), fields[1]); |
223 } | 222 } |
224 | 223 |
225 TEST_F(FormManagerTest, FindForm) { | 224 TEST_F(FormManagerTest, FindForm) { |
226 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" | 225 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
227 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 226 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
228 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 227 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
229 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 228 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
230 "</FORM>"); | 229 "</FORM>"); |
231 | 230 |
232 WebFrame* web_frame = GetMainFrame(); | 231 WebFrame* web_frame = GetMainFrame(); |
233 ASSERT_TRUE(web_frame); | 232 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
234 | 233 |
235 FormManager form_manager; | 234 FormManager form_manager; |
236 form_manager.ExtractForms(web_frame); | 235 form_manager.ExtractForms(web_frame); |
237 | 236 |
238 // Verify that we have the form. | 237 // Verify that we have the form. |
239 std::vector<FormData> forms; | 238 std::vector<FormData> forms; |
240 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 239 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
241 ASSERT_EQ(1U, forms.size()); | 240 ASSERT_EQ(1U, forms.size()); |
242 | 241 |
243 // Get the input element we want to find. | 242 // Get the input element we want to find. |
(...skipping 22 matching lines...) Expand all Loading... |
266 WebInputElement::Text), fields[1]); | 265 WebInputElement::Text), fields[1]); |
267 EXPECT_EQ(FormField(string16(), | 266 EXPECT_EQ(FormField(string16(), |
268 ASCIIToUTF16("reply-send"), | 267 ASCIIToUTF16("reply-send"), |
269 ASCIIToUTF16("Send"), | 268 ASCIIToUTF16("Send"), |
270 ASCIIToUTF16("submit"), | 269 ASCIIToUTF16("submit"), |
271 WebInputElement::Submit), fields[2]); | 270 WebInputElement::Submit), fields[2]); |
272 } | 271 } |
273 | 272 |
274 TEST_F(FormManagerTest, FillForm) { | 273 TEST_F(FormManagerTest, FillForm) { |
275 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" | 274 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
276 " <INPUT type=\"text\" id=\"firstname\">" | 275 " <INPUT type=\"text\" id=\"firstname\"/>" |
277 " <INPUT type=\"text\" id=\"lastname\">" | 276 " <INPUT type=\"text\" id=\"lastname\"/>" |
278 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 277 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
279 "</FORM>"); | 278 "</FORM>"); |
280 | 279 |
281 WebFrame* web_frame = GetMainFrame(); | 280 WebFrame* web_frame = GetMainFrame(); |
282 ASSERT_TRUE(web_frame); | 281 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
283 | 282 |
284 FormManager form_manager; | 283 FormManager form_manager; |
285 form_manager.ExtractForms(web_frame); | 284 form_manager.ExtractForms(web_frame); |
286 | 285 |
287 // Verify that we have the form. | 286 // Verify that we have the form. |
288 std::vector<FormData> forms; | 287 std::vector<FormData> forms; |
289 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 288 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
290 ASSERT_EQ(1U, forms.size()); | 289 ASSERT_EQ(1U, forms.size()); |
291 | 290 |
292 // Get the input element we want to find. | 291 // Get the input element we want to find. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 WebInputElement::Text), fields2[1]); | 344 WebInputElement::Text), fields2[1]); |
346 EXPECT_EQ(FormField(string16(), | 345 EXPECT_EQ(FormField(string16(), |
347 ASCIIToUTF16("reply-send"), | 346 ASCIIToUTF16("reply-send"), |
348 ASCIIToUTF16("Send"), | 347 ASCIIToUTF16("Send"), |
349 ASCIIToUTF16("submit"), | 348 ASCIIToUTF16("submit"), |
350 WebInputElement::Submit), fields2[2]); | 349 WebInputElement::Submit), fields2[2]); |
351 } | 350 } |
352 | 351 |
353 TEST_F(FormManagerTest, Reset) { | 352 TEST_F(FormManagerTest, Reset) { |
354 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" | 353 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
355 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 354 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
356 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 355 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
357 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 356 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
358 "</FORM>"); | 357 "</FORM>"); |
359 | 358 |
360 WebFrame* web_frame = GetMainFrame(); | 359 WebFrame* web_frame = GetMainFrame(); |
361 ASSERT_TRUE(web_frame); | 360 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
362 | 361 |
363 FormManager form_manager; | 362 FormManager form_manager; |
364 form_manager.ExtractForms(web_frame); | 363 form_manager.ExtractForms(web_frame); |
365 | 364 |
366 std::vector<FormData> forms; | 365 std::vector<FormData> forms; |
367 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 366 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
368 ASSERT_EQ(1U, forms.size()); | 367 ASSERT_EQ(1U, forms.size()); |
369 | 368 |
370 // There should be no forms after the call to Reset. | 369 // There should be no forms after the call to Reset. |
371 form_manager.Reset(); | 370 form_manager.Reset(); |
372 | 371 |
373 forms.clear(); | 372 forms.clear(); |
374 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 373 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
375 ASSERT_EQ(0U, forms.size()); | 374 ASSERT_EQ(0U, forms.size()); |
376 } | 375 } |
377 | 376 |
378 TEST_F(FormManagerTest, Labels) { | 377 TEST_F(FormManagerTest, Labels) { |
379 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" | 378 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
380 " <LABEL for=\"firstname\"> First name: </LABEL>" | 379 " <LABEL for=\"firstname\"> First name: </LABEL>" |
381 " <INPUT type=\"text\" id=\"firstname\" value=\"John\">" | 380 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
382 " <LABEL for=\"lastname\"> Last name: </LABEL>" | 381 " <LABEL for=\"lastname\"> Last name: </LABEL>" |
383 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\">" | 382 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
384 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\">" | 383 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
385 "</FORM>"); | 384 "</FORM>"); |
386 | 385 |
387 WebFrame* web_frame = GetMainFrame(); | 386 WebFrame* web_frame = GetMainFrame(); |
388 ASSERT_TRUE(web_frame); | 387 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
389 | 388 |
390 FormManager form_manager; | 389 FormManager form_manager; |
391 form_manager.ExtractForms(web_frame); | 390 form_manager.ExtractForms(web_frame); |
392 | 391 |
393 std::vector<FormData> forms; | 392 std::vector<FormData> forms; |
394 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); | 393 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
395 ASSERT_EQ(1U, forms.size()); | 394 ASSERT_EQ(1U, forms.size()); |
396 | 395 |
397 const FormData& form = forms[0]; | 396 const FormData& form = forms[0]; |
398 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); | 397 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
(...skipping 11 matching lines...) Expand all Loading... |
410 ASCIIToUTF16("lastname"), | 409 ASCIIToUTF16("lastname"), |
411 ASCIIToUTF16("Smith"), | 410 ASCIIToUTF16("Smith"), |
412 ASCIIToUTF16("text"), | 411 ASCIIToUTF16("text"), |
413 WebInputElement::Text), fields[1]); | 412 WebInputElement::Text), fields[1]); |
414 EXPECT_EQ(FormField(string16(), | 413 EXPECT_EQ(FormField(string16(), |
415 ASCIIToUTF16("reply-send"), | 414 ASCIIToUTF16("reply-send"), |
416 ASCIIToUTF16("Send"), | 415 ASCIIToUTF16("Send"), |
417 ASCIIToUTF16("submit"), | 416 ASCIIToUTF16("submit"), |
418 WebInputElement::Submit), fields[2]); | 417 WebInputElement::Submit), fields[2]); |
419 } | 418 } |
| 419 |
| 420 TEST_F(FormManagerTest, LabelsFromInferredText) { |
| 421 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
| 422 " First name:" |
| 423 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
| 424 " Last name:" |
| 425 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
| 426 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
| 427 "</FORM>"); |
| 428 |
| 429 WebFrame* web_frame = GetMainFrame(); |
| 430 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
| 431 |
| 432 FormManager form_manager; |
| 433 form_manager.ExtractForms(web_frame); |
| 434 |
| 435 std::vector<FormData> forms; |
| 436 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
| 437 ASSERT_EQ(1U, forms.size()); |
| 438 |
| 439 const FormData& form = forms[0]; |
| 440 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
| 441 EXPECT_EQ(GURL(web_frame->url()), form.origin); |
| 442 EXPECT_EQ(GURL("http://cnn.com"), form.action); |
| 443 |
| 444 const std::vector<FormField>& fields = form.fields; |
| 445 ASSERT_EQ(3U, fields.size()); |
| 446 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), |
| 447 ASCIIToUTF16("firstname"), |
| 448 ASCIIToUTF16("John"), |
| 449 ASCIIToUTF16("text"), |
| 450 WebInputElement::Text), fields[0]); |
| 451 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
| 452 ASCIIToUTF16("lastname"), |
| 453 ASCIIToUTF16("Smith"), |
| 454 ASCIIToUTF16("text"), |
| 455 WebInputElement::Text), fields[1]); |
| 456 EXPECT_EQ(FormField(string16(), |
| 457 ASCIIToUTF16("reply-send"), |
| 458 ASCIIToUTF16("Send"), |
| 459 ASCIIToUTF16("submit"), |
| 460 WebInputElement::Submit), fields[2]); |
| 461 } |
| 462 |
| 463 TEST_F(FormManagerTest, LabelsFromInferredParagraph) { |
| 464 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
| 465 " <P>First name:</P><INPUT type=\"text\" " |
| 466 " id=\"firstname\" value=\"John\"/>" |
| 467 " <P>Last name:</P>" |
| 468 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
| 469 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
| 470 "</FORM>"); |
| 471 |
| 472 WebFrame* web_frame = GetMainFrame(); |
| 473 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
| 474 |
| 475 FormManager form_manager; |
| 476 form_manager.ExtractForms(web_frame); |
| 477 |
| 478 std::vector<FormData> forms; |
| 479 form_manager.GetForms(&forms, FormManager::REQUIRE_NONE); |
| 480 ASSERT_EQ(1U, forms.size()); |
| 481 |
| 482 const FormData& form = forms[0]; |
| 483 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
| 484 EXPECT_EQ(GURL(web_frame->url()), form.origin); |
| 485 EXPECT_EQ(GURL("http://cnn.com"), form.action); |
| 486 |
| 487 const std::vector<FormField>& fields = form.fields; |
| 488 ASSERT_EQ(3U, fields.size()); |
| 489 EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), |
| 490 ASCIIToUTF16("firstname"), |
| 491 ASCIIToUTF16("John"), |
| 492 ASCIIToUTF16("text"), |
| 493 WebInputElement::Text), fields[0]); |
| 494 EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
| 495 ASCIIToUTF16("lastname"), |
| 496 ASCIIToUTF16("Smith"), |
| 497 ASCIIToUTF16("text"), |
| 498 WebInputElement::Text), fields[1]); |
| 499 EXPECT_EQ(FormField(string16(), |
| 500 ASCIIToUTF16("reply-send"), |
| 501 ASCIIToUTF16("Send"), |
| 502 ASCIIToUTF16("submit"), |
| 503 WebInputElement::Submit), fields[2]); |
| 504 } |
| 505 |
| 506 } // namespace |
OLD | NEW |