Index: chrome/renderer/form_manager_unittest.cc |
=================================================================== |
--- chrome/renderer/form_manager_unittest.cc (revision 57231) |
+++ chrome/renderer/form_manager_unittest.cc (working copy) |
@@ -1,2456 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/string_util.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/renderer/form_manager.h" |
-#include "chrome/test/render_view_test.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebElement.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebFormControlElement.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebFormElement.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebInputElement.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebNode.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
-#include "third_party/WebKit/WebKit/chromium/public/WebVector.h" |
-#include "webkit/glue/form_data.h" |
- |
-using WebKit::WebDocument; |
-using WebKit::WebElement; |
-using WebKit::WebFormControlElement; |
-using WebKit::WebFormElement; |
-using WebKit::WebFrame; |
-using WebKit::WebInputElement; |
-using WebKit::WebNode; |
-using WebKit::WebString; |
-using WebKit::WebVector; |
- |
-using webkit_glue::FormData; |
-using webkit_glue::FormField; |
- |
-namespace { |
- |
-typedef RenderViewTest FormManagerTest; |
- |
-TEST_F(FormManagerTest, WebFormElementToFormData) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"hidden\" id=\"notvisible\" value=\"apple\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), frame); |
- |
- WebVector<WebFormElement> forms; |
- frame->forms(forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- FormData form; |
- EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], |
- FormManager::REQUIRE_NONE, |
- true, |
- &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(4U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("notvisible"), |
- ASCIIToUTF16("apple"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields[3].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, ExtractForms) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, ExtractMultipleForms) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>" |
- "<FORM name=\"TestForm2\" action=\"http://zoo.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"second\" value=\"Submit\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(2U, forms.size()); |
- |
- // First form. |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(2U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[1]); |
- |
- // Second form. |
- const FormData& form2 = forms[1]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm2"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://zoo.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(2U, fields2.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("second"), |
- ASCIIToUTF16("Submit"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields2[1]); |
-} |
- |
-TEST_F(FormManagerTest, GetFormsAutocomplete) { |
- // Form is not auto-completable due to autocomplete=off. |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\"" |
- " autocomplete=off>" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we did load the forms. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // autocomplete=off and we're requiring autocomplete, so no forms returned. |
- forms.clear(); |
- form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms); |
- ASSERT_EQ(0U, forms.size()); |
- |
- // The firstname element is not auto-completable due to autocomplete=off. |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://abc.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"" |
- " autocomplete=off>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- form_manager.Reset(); |
- form_manager.ExtractForms(web_frame); |
- |
- forms.clear(); |
- form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://abc.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(2U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[1]); |
-} |
- |
-TEST_F(FormManagerTest, GetFormsElementsEnabled) { |
- // The firstname element is not enabled due to disabled being set. |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://xyz.com\" method=\"post\">" |
- " <INPUT disabled type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_ENABLED, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://xyz.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(2U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("submit"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[1]); |
-} |
- |
-TEST_F(FormManagerTest, FindForm) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form and verify it's the correct form. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, FillForm) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"hidden\" id=\"imhidden\"/>" |
- " <INPUT type=\"text\" id=\"notempty\" value=\"Hi\"/>" |
- " <INPUT type=\"text\" autocomplete=\"off\" id=\"noautocomplete\"/>" |
- " <INPUT type=\"text\" disabled=\"disabled\" id=\"notenabled\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(7U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("imhidden"), |
- string16(), |
- ASCIIToUTF16("hidden"), |
- 0), |
- fields[2]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("notempty"), |
- ASCIIToUTF16("Hi"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[3]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("noautocomplete"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[4]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("notenabled"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[5]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[6]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Wyatt")); |
- form.fields[1].set_value(ASCIIToUTF16("Earp")); |
- form.fields[2].set_value(ASCIIToUTF16("Alpha")); |
- form.fields[3].set_value(ASCIIToUTF16("Beta")); |
- form.fields[4].set_value(ASCIIToUTF16("Gamma")); |
- form.fields[5].set_value(ASCIIToUTF16("Delta")); |
- EXPECT_TRUE(form_manager.FillForm(form, WebNode())); |
- |
- // Verify the filled elements. |
- WebDocument document = web_frame->document(); |
- WebInputElement firstname = |
- document.getElementById("firstname").to<WebInputElement>(); |
- EXPECT_TRUE(firstname.isAutofilled()); |
- EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value()); |
- |
- WebInputElement lastname = |
- document.getElementById("lastname").to<WebInputElement>(); |
- EXPECT_TRUE(lastname.isAutofilled()); |
- EXPECT_EQ(ASCIIToUTF16("Earp"), lastname.value()); |
- |
- // Hidden fields are not filled. |
- WebInputElement imhidden = |
- document.getElementById("imhidden").to<WebInputElement>(); |
- EXPECT_FALSE(imhidden.isAutofilled()); |
- EXPECT_TRUE(imhidden.value().isEmpty()); |
- |
- // Non-empty fields are not filled. |
- WebInputElement notempty = |
- document.getElementById("notempty").to<WebInputElement>(); |
- EXPECT_FALSE(notempty.isAutofilled()); |
- EXPECT_EQ(ASCIIToUTF16("Hi"), notempty.value()); |
- |
- // autocomplete=off fields are not filled. |
- WebInputElement noautocomplete = |
- document.getElementById("noautocomplete").to<WebInputElement>(); |
- EXPECT_FALSE(noautocomplete.isAutofilled()); |
- EXPECT_TRUE(noautocomplete.value().isEmpty()); |
- |
- // Disabled fields are not filled. |
- WebInputElement notenabled = |
- document.getElementById("notenabled").to<WebInputElement>(); |
- EXPECT_FALSE(notenabled.isAutofilled()); |
- EXPECT_TRUE(notenabled.value().isEmpty()); |
-} |
- |
-TEST_F(FormManagerTest, PreviewForm) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"hidden\" id=\"imhidden\"/>" |
- " <INPUT type=\"text\" id=\"notempty\" value=\"Hi\"/>" |
- " <INPUT type=\"text\" autocomplete=\"off\" id=\"noautocomplete\"/>" |
- " <INPUT type=\"text\" disabled=\"disabled\" id=\"notenabled\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(7U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("imhidden"), |
- string16(), |
- ASCIIToUTF16("hidden"), |
- 0), |
- fields[2]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("notempty"), |
- ASCIIToUTF16("Hi"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[3]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("noautocomplete"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[4]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("notenabled"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[5]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[6]); |
- |
- // Preview the form. |
- form.fields[0].set_value(ASCIIToUTF16("Wyatt")); |
- form.fields[1].set_value(ASCIIToUTF16("Earp")); |
- form.fields[2].set_value(ASCIIToUTF16("Alpha")); |
- form.fields[3].set_value(ASCIIToUTF16("Beta")); |
- form.fields[4].set_value(ASCIIToUTF16("Gamma")); |
- form.fields[5].set_value(ASCIIToUTF16("Delta")); |
- EXPECT_TRUE(form_manager.PreviewForm(form)); |
- |
- // Verify the previewed elements. |
- WebDocument document = web_frame->document(); |
- WebInputElement firstname = |
- document.getElementById("firstname").to<WebInputElement>(); |
- EXPECT_TRUE(firstname.isAutofilled()); |
- EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.suggestedValue()); |
- |
- WebInputElement lastname = |
- document.getElementById("lastname").to<WebInputElement>(); |
- EXPECT_TRUE(lastname.isAutofilled()); |
- EXPECT_EQ(ASCIIToUTF16("Earp"), lastname.suggestedValue()); |
- |
- // Hidden fields are not previewed. |
- WebInputElement imhidden = |
- document.getElementById("imhidden").to<WebInputElement>(); |
- EXPECT_FALSE(imhidden.isAutofilled()); |
- EXPECT_TRUE(imhidden.suggestedValue().isEmpty()); |
- |
- // Non-empty fields are not previewed. |
- WebInputElement notempty = |
- document.getElementById("notempty").to<WebInputElement>(); |
- EXPECT_FALSE(notempty.isAutofilled()); |
- EXPECT_TRUE(notempty.suggestedValue().isEmpty()); |
- |
- // autocomplete=off fields are not previewed. |
- WebInputElement noautocomplete = |
- document.getElementById("noautocomplete").to<WebInputElement>(); |
- EXPECT_FALSE(noautocomplete.isAutofilled()); |
- EXPECT_TRUE(noautocomplete.suggestedValue().isEmpty()); |
- |
- // Disabled fields are not previewed. |
- WebInputElement notenabled = |
- document.getElementById("notenabled").to<WebInputElement>(); |
- EXPECT_FALSE(notenabled.isAutofilled()); |
- EXPECT_TRUE(notenabled.suggestedValue().isEmpty()); |
-} |
- |
-TEST_F(FormManagerTest, Reset) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // There should be no forms after the call to Reset. |
- form_manager.Reset(); |
- |
- forms.clear(); |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(0U, forms.size()); |
-} |
- |
-TEST_F(FormManagerTest, Labels) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <LABEL for=\"firstname\"> First name: </LABEL>" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <LABEL for=\"lastname\"> Last name: </LABEL>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack( |
- FormField(ASCIIToUTF16("First name:"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack( |
- FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, LabelsWithSpans) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <LABEL for=\"firstname\"><span>First name: </span></LABEL>" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " <LABEL for=\"lastname\"><span>Last name: </span></LABEL>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack( |
- FormField(ASCIIToUTF16("First name:"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack( |
- FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test is different from FormManagerTest.Labels in that the label elements |
-// for= attribute is set to the name of the form control element it is a label |
-// for instead of the id of the form control element. This is invalid because |
-// the for= attribute must be set to the id of the form control element. |
-TEST_F(FormManagerTest, InvalidLabels) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <LABEL for=\"firstname\"> First name: </LABEL>" |
- " <INPUT type=\"text\" name=\"firstname\" value=\"John\"/>" |
- " <LABEL for=\"lastname\"> Last name: </LABEL>" |
- " <INPUT type=\"text\" name=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test has three form control elements, only one of which has a label |
-// element associated with it. The first element is disabled because of the |
-// autocomplete=off attribute. |
-TEST_F(FormManagerTest, OneLabelElementFirstControlElementDisabled) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " First name:" |
- " <INPUT type=\"text\" id=\"firstname\" autocomplete=\"off\"/>" |
- " <LABEL for=\"middlename\">Middle name: </LABEL>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " Last name:" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_AUTOCOMPLETE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Middle name:"), |
- ASCIIToUTF16("middlename"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-// Crashy, http://crbug.com/52731. |
-TEST_F(FormManagerTest, DISABLED_LabelsInferredFromText) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " First name:" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " Last name:" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredFromTextHidden) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " First name:" |
- " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>" |
- " Last name:" |
- " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredFromParagraph) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <P>First name:</P><INPUT type=\"text\" " |
- " id=\"firstname\" value=\"John\"/>" |
- " <P>Last name:</P>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredFromTableCell) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- "<TABLE>" |
- " <TR>" |
- " <TD>First name:</TD>" |
- " <TD><INPUT type=\"text\" id=\"firstname\" value=\"John\"/></TD>" |
- " </TR>" |
- " <TR>" |
- " <TD>Last name:</TD>" |
- " <TD><INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/></TD>" |
- " </TR>" |
- " <TR>" |
- " <TD></TD>" |
- " <TD>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- " </TD>" |
- " </TR>" |
- "</TABLE>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("First name:"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredFromTableCellNested) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- "<TABLE>" |
- " <TR>" |
- " <TD>" |
- " <FONT>" |
- " First name:" |
- " </FONT>" |
- " <FONT>" |
- " Bogus" |
- " </FONT>" |
- " </TD>" |
- " <TD>" |
- " <FONT>" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " </FONT>" |
- " </TD>" |
- " </TR>" |
- " <TR>" |
- " <TD>" |
- " <FONT>" |
- " Last name:" |
- " </FONT>" |
- " </TD>" |
- " <TD>" |
- " <FONT>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " </FONT>" |
- " </TD>" |
- " </TR>" |
- " <TR>" |
- " <TD></TD>" |
- " <TD>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- " </TD>" |
- " </TR>" |
- "</TABLE>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("First name:Bogus"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredFromDefinitionList) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- "<DL>" |
- " <DT>" |
- " <SPAN>" |
- " *" |
- " </SPAN>" |
- " <SPAN>" |
- " First name:" |
- " </SPAN>" |
- " <SPAN>" |
- " Bogus" |
- " </SPAN>" |
- " </DT>" |
- " <DD>" |
- " <FONT>" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" |
- " </FONT>" |
- " </DD>" |
- " <DT>" |
- " <SPAN>" |
- " Last name:" |
- " </SPAN>" |
- " </DT>" |
- " <DD>" |
- " <FONT>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" |
- " </FONT>" |
- " </DD>" |
- " <DT></DT>" |
- " <DD>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- " </DD>" |
- "</DL>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("*First name:Bogus"), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Last name:"), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredWithSameName) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " Address Line 1:" |
- " <INPUT type=\"text\" name=\"Address\"/>" |
- " Address Line 2:" |
- " <INPUT type=\"text\" name=\"Address\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 1:"), |
- ASCIIToUTF16("Address"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Address Line 2:"), |
- ASCIIToUTF16("Address"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
-} |
- |
-TEST_F(FormManagerTest, LabelsInferredWithImageTags) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " Phone:" |
- " <input type=\"text\" name=\"dayphone1\">" |
- " <img/>" |
- " -" |
- " <img/>" |
- " <input type=\"text\" name=\"dayphone2\">" |
- " <img/>" |
- " -" |
- " <img/>" |
- " <input type=\"text\" name=\"dayphone3\">" |
- " ext.:" |
- " <input type=\"text\" name=\"dayphone4\">" |
- " <input type=\"text\" name=\"dummy\">" |
- " <input type=\"submit\" name=\"reply-send\" value=\"Send\">" |
- "</FORM>"); |
- |
- WebFrame* frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), frame); |
- |
- WebVector<WebFormElement> forms; |
- frame->forms(forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- FormData form; |
- EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], |
- FormManager::REQUIRE_NONE, |
- true, |
- &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(6U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), |
- ASCIIToUTF16("dayphone1"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone2"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone3"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[2]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("ext.:"), |
- ASCIIToUTF16("dayphone4"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[3]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("dummy"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[4]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[5]); |
-} |
- |
-TEST_F(FormManagerTest, FillFormMaxLength) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" maxlength=\"5\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" maxlength=\"5\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Brother")); |
- form.fields[1].set_value(ASCIIToUTF16("Jonathan")); |
- EXPECT_TRUE(form_manager.FillForm(form, WebNode())); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- EXPECT_TRUE(fields2[0].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Broth"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[1].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonat"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test uses negative values of the maxlength attribute for input elements. |
-// In this case, the maxlength of the input elements is set to the default |
-// maxlength (defined in WebKit.) |
-TEST_F(FormManagerTest, FillFormNegativeMaxLength) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" maxlength=\"-1\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" maxlength=\"-10\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Brother")); |
- form.fields[1].set_value(ASCIIToUTF16("Jonathan")); |
- EXPECT_TRUE(form_manager.FillForm(form, WebNode())); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(3U, fields2.size()); |
- EXPECT_TRUE(fields2[0].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Brother"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[1].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonathan"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test sends a FormData object to FillForm with more fields than are in |
-// the cached WebFormElement. In this case, we only fill out the fields that |
-// match between the FormData object and the WebFormElement. |
-TEST_F(FormManagerTest, FillFormMoreFormDataFields) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // After the field modification, the fields in |form| will look like: |
- // prefix |
- // firstname |
- // hidden |
- // middlename |
- // second |
- // lastname |
- // postfix |
- FormData* form = &forms[0]; |
- |
- FormField field1(string16(), |
- ASCIIToUTF16("prefix"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20); |
- form->fields.insert(form->fields.begin(), field1); |
- |
- FormField field2(string16(), |
- ASCIIToUTF16("hidden"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20); |
- form->fields.insert(form->fields.begin() + 2, field2); |
- |
- FormField field3(string16(), |
- ASCIIToUTF16("second"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20); |
- form->fields.insert(form->fields.begin() + 4, field3); |
- |
- FormField field4(string16(), |
- ASCIIToUTF16("postfix"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20); |
- form->fields.insert(form->fields.begin() + 6, field4); |
- |
- // Fill the form. |
- form->fields[0].set_value(ASCIIToUTF16("Alpha")); |
- form->fields[1].set_value(ASCIIToUTF16("Brother")); |
- form->fields[2].set_value(ASCIIToUTF16("Abracadabra")); |
- form->fields[3].set_value(ASCIIToUTF16("Joseph")); |
- form->fields[4].set_value(ASCIIToUTF16("Beta")); |
- form->fields[5].set_value(ASCIIToUTF16("Jonathan")); |
- form->fields[6].set_value(ASCIIToUTF16("Omega")); |
- EXPECT_TRUE(form_manager.FillForm(*form, WebNode())); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields = form2.fields; |
- ASSERT_EQ(4U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Brother"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("middlename"), |
- ASCIIToUTF16("Joseph"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonathan"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[3].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test sends a FormData object to FillForm with fewer fields than are in |
-// the cached WebFormElement. In this case, we only fill out the fields that |
-// match between the FormData object and the WebFormElement. |
-TEST_F(FormManagerTest, FillFormFewerFormDataFields) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"prefix\"/>" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"hidden\"/>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " <INPUT type=\"text\" id=\"second\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"text\" id=\"postfix\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // After the field modification, the fields in |form| will look like: |
- // firstname |
- // middlename |
- // lastname |
- FormData* form = &forms[0]; |
- form->fields.erase(form->fields.begin()); |
- form->fields.erase(form->fields.begin() + 1); |
- form->fields.erase(form->fields.begin() + 2); |
- form->fields.erase(form->fields.begin() + 3); |
- |
- // Fill the form. |
- form->fields[0].set_value(ASCIIToUTF16("Brother")); |
- form->fields[1].set_value(ASCIIToUTF16("Joseph")); |
- form->fields[2].set_value(ASCIIToUTF16("Jonathan")); |
- EXPECT_TRUE(form_manager.FillForm(*form, WebNode())); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields = form2.fields; |
- ASSERT_EQ(8U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("prefix"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Brother"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("hidden"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[3].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("middlename"), |
- ASCIIToUTF16("Joseph"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[4].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("second"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[5].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonathan"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[6].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("postfix"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[7].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test sends a FormData object to FillForm with a field changed from |
-// those in the cached WebFormElement. In this case, we only fill out the |
-// fields that match between the FormData object and the WebFormElement. |
-TEST_F(FormManagerTest, FillFormChangedFormDataFields) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // After the field modification, the fields in |form| will look like: |
- // firstname |
- // middlename |
- // lastname |
- FormData* form = &forms[0]; |
- |
- // Fill the form. |
- form->fields[0].set_value(ASCIIToUTF16("Brother")); |
- form->fields[1].set_value(ASCIIToUTF16("Joseph")); |
- form->fields[2].set_value(ASCIIToUTF16("Jonathan")); |
- |
- // Alter the label and name used for matching. |
- form->fields[1].set_label(ASCIIToUTF16("bogus")); |
- form->fields[1].set_name(ASCIIToUTF16("bogus")); |
- |
- EXPECT_TRUE(form_manager.FillForm(*form, WebNode())); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields = form2.fields; |
- ASSERT_EQ(4U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Brother"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("middlename"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonathan"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[3].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-// This test sends a FormData object to FillForm with fewer fields than are in |
-// the cached WebFormElement. In this case, we only fill out the fields that |
-// match between the FormData object and the WebFormElement. |
-TEST_F(FormManagerTest, FillFormExtraFieldInCache) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"text\" id=\"postfix\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // After the field modification, the fields in |form| will look like: |
- // firstname |
- // middlename |
- // lastname |
- FormData* form = &forms[0]; |
- form->fields.pop_back(); |
- |
- // Fill the form. |
- form->fields[0].set_value(ASCIIToUTF16("Brother")); |
- form->fields[1].set_value(ASCIIToUTF16("Joseph")); |
- form->fields[2].set_value(ASCIIToUTF16("Jonathan")); |
- EXPECT_TRUE(form_manager.FillForm(*form, WebNode())); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields = form2.fields; |
- ASSERT_EQ(5U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Brother"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("middlename"), |
- ASCIIToUTF16("Joseph"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Jonathan"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[3].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("postfix"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields[4].StrictlyEqualsHack(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, FillFormEmptyName) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Wyatt")); |
- form.fields[1].set_value(ASCIIToUTF16("Earp")); |
- EXPECT_TRUE(form_manager.FillForm(form, WebNode())); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(3U, fields2.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Wyatt"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Earp"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields2[2]); |
-} |
- |
-TEST_F(FormManagerTest, FillFormEmptyFormNames) { |
- LoadHTML("<FORM action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"middlename\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>" |
- "<FORM action=\"http://abc.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"apple\"/>" |
- " <INPUT type=\"text\" id=\"banana\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(2U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("apple"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(string16(), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://abc.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("apple"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("banana"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Red")); |
- form.fields[1].set_value(ASCIIToUTF16("Yellow")); |
- EXPECT_TRUE(form_manager.FillForm(form, WebNode())); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(string16(), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://abc.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(3U, fields2.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("apple"), |
- ASCIIToUTF16("Red"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("banana"), |
- ASCIIToUTF16("Yellow"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields2[2]); |
-} |
- |
-TEST_F(FormManagerTest, ThreePartPhone) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " Phone:" |
- " <input type=\"text\" name=\"dayphone1\">" |
- " -" |
- " <input type=\"text\" name=\"dayphone2\">" |
- " -" |
- " <input type=\"text\" name=\"dayphone3\">" |
- " ext.:" |
- " <input type=\"text\" name=\"dayphone4\">" |
- " <input type=\"submit\" name=\"reply-send\" value=\"Send\">" |
- "</FORM>"); |
- |
- |
- WebFrame* frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), frame); |
- |
- WebVector<WebFormElement> forms; |
- frame->forms(forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- FormData form; |
- EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], |
- FormManager::REQUIRE_NONE, |
- true, |
- &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(5U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), |
- ASCIIToUTF16("dayphone1"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone2"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone3"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[2]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("ext.:"), |
- ASCIIToUTF16("dayphone4"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[3]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[4]); |
-} |
- |
- |
-TEST_F(FormManagerTest, SizeFields) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " Phone:" |
- " <input type=\"text\" size=\"3\" name=\"dayphone1\">" |
- " -" |
- " <input type=\"text\" size=\"3\" name=\"dayphone2\">" |
- " -" |
- " <input type=\"text\" size=\"4\" name=\"dayphone3\">" |
- " ext.:" |
- " <input type=\"text\" size=\"5\" name=\"dayphone4\">" |
- " <input type=\"text\" name=\"default1\">" |
- " <input type=\"text\" size=\"-1\" name=\"invalid1\">" |
- " <input type=\"submit\" name=\"reply-send\" value=\"Send\">" |
- "</FORM>"); |
- |
- |
- WebFrame* frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), frame); |
- |
- WebVector<WebFormElement> forms; |
- frame->forms(forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- FormData form; |
- EXPECT_TRUE(FormManager::WebFormElementToFormData(forms[0], |
- FormManager::REQUIRE_NONE, |
- true, |
- &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(7U, fields.size()); |
- EXPECT_EQ(FormField(ASCIIToUTF16("Phone:"), |
- ASCIIToUTF16("dayphone1"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 3), |
- fields[0]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone2"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 3), |
- fields[1]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("-"), |
- ASCIIToUTF16("dayphone3"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 4), |
- fields[2]); |
- EXPECT_EQ(FormField(ASCIIToUTF16("ext.:"), |
- ASCIIToUTF16("dayphone4"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 5), |
- fields[3]); |
- // When unspecified |size|, default is 20. |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("default1"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[4]); |
- // When invalid |size| same value is returned. |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("invalid1"), |
- string16(), |
- ASCIIToUTF16("text"), |
- -1), |
- fields[5]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[6]); |
-} |
- |
-// This test re-creates the experience of typing in a field then selecting a |
-// profile from the AutoFill suggestions popup. The field that is being typed |
-// into should be filled even though it's not technically empty. |
-TEST_F(FormManagerTest, FillFormNonEmptyField) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Get the input element we want to find. |
- WebElement element = web_frame->document().getElementById("firstname"); |
- WebInputElement input_element = element.to<WebInputElement>(); |
- |
- // Simulate typing by modifying the field value. |
- input_element.setValue(ASCIIToUTF16("Wy")); |
- |
- // Find the form that contains the input element. |
- FormData form; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20), |
- fields[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields[2]); |
- |
- // Fill the form. |
- form.fields[0].set_value(ASCIIToUTF16("Wyatt")); |
- form.fields[1].set_value(ASCIIToUTF16("Earp")); |
- EXPECT_TRUE(form_manager.FillForm(form, input_element)); |
- |
- // Find the newly-filled form that contains the input element. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- input_element, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(3U, fields2.size()); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("Wyatt"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[0]); |
- EXPECT_EQ(FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Earp"), |
- ASCIIToUTF16("text"), |
- 20), |
- fields2[1]); |
- EXPECT_EQ(FormField(string16(), |
- string16(), |
- ASCIIToUTF16("Send"), |
- ASCIIToUTF16("submit"), |
- 0), |
- fields2[2]); |
-} |
- |
-TEST_F(FormManagerTest, ClearFormWithNode) { |
- LoadHTML( |
- "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" |
- " <INPUT type=\"text\" id=\"lastname\" value=\"Earp\"/>" |
- " <INPUT type=\"text\" autocomplete=\"off\" id=\"noAC\" value=\"one\"/>" |
- " <INPUT type=\"text\" id=\"notenabled\" disabled=\"disabled\">" |
- " <INPUT type=\"hidden\" id=\"notvisible\" value=\"apple\">" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Set the auto-filled attribute on the firstname element. |
- WebInputElement firstname = |
- web_frame->document().getElementById("firstname").to<WebInputElement>(); |
- firstname.setAutofilled(true); |
- |
- // Set the value of the disabled attribute. |
- WebInputElement notenabled = |
- web_frame->document().getElementById("notenabled").to<WebInputElement>(); |
- notenabled.setValue(WebString::fromUTF8("no clear")); |
- |
- // Clear the form. |
- EXPECT_TRUE(form_manager.ClearFormWithNode(firstname)); |
- |
- // Verify that the auto-filled attribute has been turned off. |
- EXPECT_FALSE(firstname.isAutofilled()); |
- |
- // Verify the form is cleared. |
- FormData form2; |
- EXPECT_TRUE(form_manager.FindFormWithFormControlElement( |
- firstname, FormManager::REQUIRE_NONE, &form2)); |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); |
- EXPECT_EQ(GURL(web_frame->url()), form2.origin); |
- EXPECT_EQ(GURL("http://buh.com"), form2.action); |
- |
- const std::vector<FormField>& fields2 = form2.fields; |
- ASSERT_EQ(6U, fields2.size()); |
- EXPECT_TRUE(fields2[0].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[1].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("noAC"), |
- string16(), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[3].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("notenabled"), |
- ASCIIToUTF16("no clear"), |
- ASCIIToUTF16("text"), |
- 20))); |
- EXPECT_TRUE(fields2[4].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("notvisible"), |
- ASCIIToUTF16("apple"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields2[5].StrictlyEqualsHack( |
- FormField(string16(), |
- string16(), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, ClearPreviewedFormWithNode) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"text\" id=\"email\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- // Set the auto-filled attribute. |
- WebInputElement firstname = |
- web_frame->document().getElementById("firstname").to<WebInputElement>(); |
- firstname.setAutofilled(true); |
- WebInputElement lastname = |
- web_frame->document().getElementById("lastname").to<WebInputElement>(); |
- lastname.setAutofilled(true); |
- WebInputElement email = |
- web_frame->document().getElementById("email").to<WebInputElement>(); |
- email.setAutofilled(true); |
- |
- // Set the suggested values on two of the elements. |
- lastname.setSuggestedValue(ASCIIToUTF16("Earp")); |
- email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com")); |
- |
- // Clear the previewed fields. |
- EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(firstname)); |
- |
- // Fields with non-empty values are not modified. |
- EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value()); |
- EXPECT_TRUE(firstname.suggestedValue().isEmpty()); |
- EXPECT_TRUE(firstname.isAutofilled()); |
- |
- // Verify the previewed fields are cleared. |
- EXPECT_TRUE(lastname.value().isEmpty()); |
- EXPECT_TRUE(lastname.suggestedValue().isEmpty()); |
- EXPECT_FALSE(lastname.isAutofilled()); |
- EXPECT_TRUE(email.value().isEmpty()); |
- EXPECT_TRUE(email.suggestedValue().isEmpty()); |
- EXPECT_FALSE(email.isAutofilled()); |
-} |
- |
-TEST_F(FormManagerTest, FormWithNodeIsAutoFilled) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" |
- " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" |
- " <INPUT type=\"text\" id=\"lastname\"/>" |
- " <INPUT type=\"text\" id=\"email\"/>" |
- " <INPUT type=\"submit\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- // Verify that we have the form. |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- WebInputElement firstname = |
- web_frame->document().getElementById("firstname").to<WebInputElement>(); |
- |
- // Auto-filled attribute not set yet. |
- EXPECT_FALSE(form_manager.FormWithNodeIsAutoFilled(firstname)); |
- |
- // Set the auto-filled attribute. |
- firstname.setAutofilled(true); |
- |
- EXPECT_TRUE(form_manager.FormWithNodeIsAutoFilled(firstname)); |
-} |
- |
-TEST_F(FormManagerTest, LabelsHiddenFields) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <LABEL for=\"firstname\"> First name: </LABEL>" |
- " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>" |
- " <LABEL for=\"lastname\"> Last name: </LABEL>" |
- " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- FormManager form_manager; |
- form_manager.ExtractForms(web_frame); |
- |
- std::vector<FormData> forms; |
- form_manager.GetForms(FormManager::REQUIRE_NONE, &forms); |
- ASSERT_EQ(1U, forms.size()); |
- |
- const FormData& form = forms[0]; |
- EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); |
- EXPECT_EQ(GURL(web_frame->url()), form.origin); |
- EXPECT_EQ(GURL("http://cnn.com"), form.action); |
- |
- const std::vector<FormField>& fields = form.fields; |
- ASSERT_EQ(3U, fields.size()); |
- EXPECT_TRUE(fields[0].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("firstname"), |
- ASCIIToUTF16("John"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields[1].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("lastname"), |
- ASCIIToUTF16("Smith"), |
- ASCIIToUTF16("hidden"), |
- 0))); |
- EXPECT_TRUE(fields[2].StrictlyEqualsHack( |
- FormField(string16(), |
- ASCIIToUTF16("reply-send"), |
- string16(), |
- ASCIIToUTF16("submit"), |
- 0))); |
-} |
- |
-TEST_F(FormManagerTest, LabelForElementHidden) { |
- LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" |
- " <LABEL for=\"firstname\"> First name: </LABEL>" |
- " <INPUT type=\"hidden\" id=\"firstname\" value=\"John\"/>" |
- " <LABEL for=\"lastname\"> Last name: </LABEL>" |
- " <INPUT type=\"hidden\" id=\"lastname\" value=\"Smith\"/>" |
- " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" |
- "</FORM>"); |
- |
- WebFrame* web_frame = GetMainFrame(); |
- ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); |
- |
- WebElement e = web_frame->document().getElementById("firstname"); |
- WebFormControlElement firstname = e.to<WebFormControlElement>(); |
- |
- // Hidden form control element should not have a label set. |
- FormManager form_manager; |
- EXPECT_EQ(string16(), form_manager.LabelForElement(firstname)); |
-} |
- |
-} // namespace |