| 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 |