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

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

Issue 11000016: Move forms/ out of webkit/. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Response to review Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "chrome/common/form_data.h"
12 #include "chrome/renderer/autofill/form_autofill_util.h" 13 #include "chrome/renderer/autofill/form_autofill_util.h"
13 #include "chrome/renderer/autofill/form_cache.h" 14 #include "chrome/renderer/autofill/form_cache.h"
14 #include "chrome/test/base/chrome_render_view_test.h" 15 #include "chrome/test/base/chrome_render_view_test.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFormControlElement .h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFormControlElement .h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFormElement.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFormElement.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h" 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSelectElement.h" 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSelectElement.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" 24 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" 25 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h"
25 #include "webkit/forms/form_data.h"
26 #include "webkit/glue/web_io_operators.h" 26 #include "webkit/glue/web_io_operators.h"
27 27
28 using WebKit::WebDocument; 28 using WebKit::WebDocument;
29 using WebKit::WebElement; 29 using WebKit::WebElement;
30 using WebKit::WebFormControlElement; 30 using WebKit::WebFormControlElement;
31 using WebKit::WebFormElement; 31 using WebKit::WebFormElement;
32 using WebKit::WebFrame; 32 using WebKit::WebFrame;
33 using WebKit::WebInputElement; 33 using WebKit::WebInputElement;
34 using WebKit::WebSelectElement; 34 using WebKit::WebSelectElement;
35 using WebKit::WebNode; 35 using WebKit::WebNode;
36 using WebKit::WebString; 36 using WebKit::WebString;
37 using WebKit::WebVector; 37 using WebKit::WebVector;
38 38
39 using autofill::ClearPreviewedFormWithElement; 39 using autofill::ClearPreviewedFormWithElement;
40 using autofill::FillForm; 40 using autofill::FillForm;
41 using autofill::FindFormAndFieldForInputElement; 41 using autofill::FindFormAndFieldForInputElement;
42 using autofill::FormWithElementIsAutofilled; 42 using autofill::FormWithElementIsAutofilled;
43 using autofill::FormCache; 43 using autofill::FormCache;
44 using autofill::PreviewForm; 44 using autofill::PreviewForm;
45 using autofill::WebFormControlElementToFormField; 45 using autofill::WebFormControlElementToFormField;
46 46
47 using webkit::forms::FormData;
48 using webkit::forms::FormField;
49
50 class FormAutofillTest : public ChromeRenderViewTest { 47 class FormAutofillTest : public ChromeRenderViewTest {
51 public: 48 public:
52 FormAutofillTest() : ChromeRenderViewTest() {} 49 FormAutofillTest() : ChromeRenderViewTest() {}
53 virtual ~FormAutofillTest() {} 50 virtual ~FormAutofillTest() {}
54 51
55 void ExpectLabels(const char* html, 52 void ExpectLabels(const char* html,
56 const std::vector<string16>& labels, 53 const std::vector<string16>& labels,
57 const std::vector<string16>& names, 54 const std::vector<string16>& names,
58 const std::vector<string16>& values) { 55 const std::vector<string16>& values) {
59 std::vector<string16> control_types(labels.size(), ASCIIToUTF16("text")); 56 std::vector<string16> control_types(labels.size(), ASCIIToUTF16("text"));
(...skipping 17 matching lines...) Expand all
77 FormCache form_cache; 74 FormCache form_cache;
78 std::vector<FormData> forms; 75 std::vector<FormData> forms;
79 form_cache.ExtractForms(*web_frame, &forms); 76 form_cache.ExtractForms(*web_frame, &forms);
80 ASSERT_EQ(1U, forms.size()); 77 ASSERT_EQ(1U, forms.size());
81 78
82 const FormData& form = forms[0]; 79 const FormData& form = forms[0];
83 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 80 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
84 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 81 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
85 EXPECT_EQ(GURL("http://cnn.com"), form.action); 82 EXPECT_EQ(GURL("http://cnn.com"), form.action);
86 83
87 const std::vector<FormField>& fields = form.fields; 84 const std::vector<FormFieldData>& fields = form.fields;
88 ASSERT_EQ(labels.size(), fields.size()); 85 ASSERT_EQ(labels.size(), fields.size());
89 for (size_t i = 0; i < labels.size(); ++i) { 86 for (size_t i = 0; i < labels.size(); ++i) {
90 int max_length = control_types[i] == ASCIIToUTF16("text") ? 87 int max_length = control_types[i] == ASCIIToUTF16("text") ?
91 WebInputElement::defaultMaxLength() : 0; 88 WebInputElement::defaultMaxLength() : 0;
92 FormField expected; 89 FormFieldData expected;
93 expected.label = labels[i]; 90 expected.label = labels[i];
94 expected.name = names[i]; 91 expected.name = names[i];
95 expected.value = values[i]; 92 expected.value = values[i];
96 expected.form_control_type = control_types[i]; 93 expected.form_control_type = control_types[i];
97 expected.max_length = max_length; 94 expected.max_length = max_length;
98 SCOPED_TRACE(StringPrintf("i: %" PRIuS, i)); 95 SCOPED_TRACE(StringPrintf("i: %" PRIuS, i));
99 EXPECT_FORM_FIELD_EQUALS(expected, fields[i]); 96 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[i]);
100 } 97 }
101 } 98 }
102 99
103 void ExpectJohnSmithLabels(const char* html) { 100 void ExpectJohnSmithLabels(const char* html) {
104 std::vector<string16> labels, names, values; 101 std::vector<string16> labels, names, values;
105 102
106 labels.push_back(ASCIIToUTF16("First name:")); 103 labels.push_back(ASCIIToUTF16("First name:"));
107 names.push_back(ASCIIToUTF16("firstname")); 104 names.push_back(ASCIIToUTF16("firstname"));
108 values.push_back(ASCIIToUTF16("John")); 105 values.push_back(ASCIIToUTF16("John"));
109 106
(...skipping 14 matching lines...) Expand all
124 121
125 // We should be able to extract a normal text field. 122 // We should be able to extract a normal text field.
126 TEST_F(FormAutofillTest, WebFormControlElementToFormField) { 123 TEST_F(FormAutofillTest, WebFormControlElementToFormField) {
127 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"/>"); 124 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"/>");
128 125
129 WebFrame* frame = GetMainFrame(); 126 WebFrame* frame = GetMainFrame();
130 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 127 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
131 128
132 WebElement web_element = frame->document().getElementById("element"); 129 WebElement web_element = frame->document().getElementById("element");
133 WebFormControlElement element = web_element.to<WebFormControlElement>(); 130 WebFormControlElement element = web_element.to<WebFormControlElement>();
134 FormField result1; 131 FormFieldData result1;
135 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result1); 132 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result1);
136 133
137 FormField expected; 134 FormFieldData expected;
138 expected.form_control_type = ASCIIToUTF16("text"); 135 expected.form_control_type = ASCIIToUTF16("text");
139 expected.max_length = WebInputElement::defaultMaxLength(); 136 expected.max_length = WebInputElement::defaultMaxLength();
140 137
141 expected.name = ASCIIToUTF16("element"); 138 expected.name = ASCIIToUTF16("element");
142 expected.value = string16(); 139 expected.value = string16();
143 EXPECT_FORM_FIELD_EQUALS(expected, result1); 140 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result1);
144 141
145 FormField result2; 142 FormFieldData result2;
146 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result2); 143 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result2);
147 144
148 expected.name = ASCIIToUTF16("element"); 145 expected.name = ASCIIToUTF16("element");
149 expected.value = ASCIIToUTF16("value"); 146 expected.value = ASCIIToUTF16("value");
150 EXPECT_FORM_FIELD_EQUALS(expected, result2); 147 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result2);
151 } 148 }
152 149
153 // We should be able to extract a text field with autocomplete="off". 150 // We should be able to extract a text field with autocomplete="off".
154 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutocompleteOff) { 151 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutocompleteOff) {
155 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"" 152 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\""
156 " autocomplete=\"off\"/>"); 153 " autocomplete=\"off\"/>");
157 154
158 WebFrame* frame = GetMainFrame(); 155 WebFrame* frame = GetMainFrame();
159 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 156 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
160 157
161 WebElement web_element = frame->document().getElementById("element"); 158 WebElement web_element = frame->document().getElementById("element");
162 WebFormControlElement element = web_element.to<WebFormControlElement>(); 159 WebFormControlElement element = web_element.to<WebFormControlElement>();
163 FormField result; 160 FormFieldData result;
164 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 161 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
165 162
166 FormField expected; 163 FormFieldData expected;
167 expected.name = ASCIIToUTF16("element"); 164 expected.name = ASCIIToUTF16("element");
168 expected.value = ASCIIToUTF16("value"); 165 expected.value = ASCIIToUTF16("value");
169 expected.form_control_type = ASCIIToUTF16("text"); 166 expected.form_control_type = ASCIIToUTF16("text");
170 expected.max_length = WebInputElement::defaultMaxLength(); 167 expected.max_length = WebInputElement::defaultMaxLength();
171 EXPECT_FORM_FIELD_EQUALS(expected, result); 168 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
172 } 169 }
173 170
174 // We should be able to extract a text field with maxlength specified. 171 // We should be able to extract a text field with maxlength specified.
175 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldMaxLength) { 172 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldMaxLength) {
176 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"" 173 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\""
177 " maxlength=\"5\"/>"); 174 " maxlength=\"5\"/>");
178 175
179 WebFrame* frame = GetMainFrame(); 176 WebFrame* frame = GetMainFrame();
180 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 177 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
181 178
182 WebElement web_element = frame->document().getElementById("element"); 179 WebElement web_element = frame->document().getElementById("element");
183 WebFormControlElement element = web_element.to<WebFormControlElement>(); 180 WebFormControlElement element = web_element.to<WebFormControlElement>();
184 FormField result; 181 FormFieldData result;
185 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 182 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
186 183
187 FormField expected; 184 FormFieldData expected;
188 expected.name = ASCIIToUTF16("element"); 185 expected.name = ASCIIToUTF16("element");
189 expected.value = ASCIIToUTF16("value"); 186 expected.value = ASCIIToUTF16("value");
190 expected.form_control_type = ASCIIToUTF16("text"); 187 expected.form_control_type = ASCIIToUTF16("text");
191 expected.max_length = 5; 188 expected.max_length = 5;
192 EXPECT_FORM_FIELD_EQUALS(expected, result); 189 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
193 } 190 }
194 191
195 // We should be able to extract a text field that has been autofilled. 192 // We should be able to extract a text field that has been autofilled.
196 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutofilled) { 193 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutofilled) {
197 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"/>"); 194 LoadHTML("<INPUT type=\"text\" id=\"element\" value=\"value\"/>");
198 195
199 WebFrame* frame = GetMainFrame(); 196 WebFrame* frame = GetMainFrame();
200 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 197 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
201 198
202 WebElement web_element = frame->document().getElementById("element"); 199 WebElement web_element = frame->document().getElementById("element");
203 WebInputElement element = web_element.to<WebInputElement>(); 200 WebInputElement element = web_element.to<WebInputElement>();
204 element.setAutofilled(true); 201 element.setAutofilled(true);
205 FormField result; 202 FormFieldData result;
206 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 203 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
207 204
208 FormField expected; 205 FormFieldData expected;
209 expected.name = ASCIIToUTF16("element"); 206 expected.name = ASCIIToUTF16("element");
210 expected.value = ASCIIToUTF16("value"); 207 expected.value = ASCIIToUTF16("value");
211 expected.form_control_type = ASCIIToUTF16("text"); 208 expected.form_control_type = ASCIIToUTF16("text");
212 expected.max_length = WebInputElement::defaultMaxLength(); 209 expected.max_length = WebInputElement::defaultMaxLength();
213 expected.is_autofilled = true; 210 expected.is_autofilled = true;
214 EXPECT_FORM_FIELD_EQUALS(expected, result); 211 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
215 } 212 }
216 213
217 // We should be able to extract a <select> field. 214 // We should be able to extract a <select> field.
218 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldSelect) { 215 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldSelect) {
219 LoadHTML("<SELECT id=\"element\"/>" 216 LoadHTML("<SELECT id=\"element\"/>"
220 " <OPTION value=\"CA\">California</OPTION>" 217 " <OPTION value=\"CA\">California</OPTION>"
221 " <OPTION value=\"TX\">Texas</OPTION>" 218 " <OPTION value=\"TX\">Texas</OPTION>"
222 "</SELECT>"); 219 "</SELECT>");
223 220
224 WebFrame* frame = GetMainFrame(); 221 WebFrame* frame = GetMainFrame();
225 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 222 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
226 223
227 WebElement web_element = frame->document().getElementById("element"); 224 WebElement web_element = frame->document().getElementById("element");
228 WebFormControlElement element = web_element.to<WebFormControlElement>(); 225 WebFormControlElement element = web_element.to<WebFormControlElement>();
229 FormField result1; 226 FormFieldData result1;
230 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result1); 227 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result1);
231 228
232 FormField expected; 229 FormFieldData expected;
233 expected.name = ASCIIToUTF16("element"); 230 expected.name = ASCIIToUTF16("element");
234 expected.max_length = 0; 231 expected.max_length = 0;
235 expected.form_control_type = ASCIIToUTF16("select-one"); 232 expected.form_control_type = ASCIIToUTF16("select-one");
236 233
237 expected.value = ASCIIToUTF16("CA"); 234 expected.value = ASCIIToUTF16("CA");
238 EXPECT_FORM_FIELD_EQUALS(expected, result1); 235 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result1);
239 236
240 FormField result2; 237 FormFieldData result2;
241 WebFormControlElementToFormField( 238 WebFormControlElementToFormField(
242 element, 239 element,
243 static_cast<autofill::ExtractMask>(autofill::EXTRACT_VALUE | 240 static_cast<autofill::ExtractMask>(autofill::EXTRACT_VALUE |
244 autofill::EXTRACT_OPTION_TEXT), 241 autofill::EXTRACT_OPTION_TEXT),
245 &result2); 242 &result2);
246 expected.value = ASCIIToUTF16("California"); 243 expected.value = ASCIIToUTF16("California");
247 EXPECT_FORM_FIELD_EQUALS(expected, result2); 244 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result2);
248 245
249 FormField result3; 246 FormFieldData result3;
250 WebFormControlElementToFormField(element, autofill::EXTRACT_OPTIONS, 247 WebFormControlElementToFormField(element, autofill::EXTRACT_OPTIONS,
251 &result3); 248 &result3);
252 expected.value = string16(); 249 expected.value = string16();
253 EXPECT_FORM_FIELD_EQUALS(expected, result3); 250 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result3);
254 251
255 ASSERT_EQ(2U, result3.option_values.size()); 252 ASSERT_EQ(2U, result3.option_values.size());
256 ASSERT_EQ(2U, result3.option_contents.size()); 253 ASSERT_EQ(2U, result3.option_contents.size());
257 EXPECT_EQ(ASCIIToUTF16("CA"), result3.option_values[0]); 254 EXPECT_EQ(ASCIIToUTF16("CA"), result3.option_values[0]);
258 EXPECT_EQ(ASCIIToUTF16("California"), result3.option_contents[0]); 255 EXPECT_EQ(ASCIIToUTF16("California"), result3.option_contents[0]);
259 EXPECT_EQ(ASCIIToUTF16("TX"), result3.option_values[1]); 256 EXPECT_EQ(ASCIIToUTF16("TX"), result3.option_values[1]);
260 EXPECT_EQ(ASCIIToUTF16("Texas"), result3.option_contents[1]); 257 EXPECT_EQ(ASCIIToUTF16("Texas"), result3.option_contents[1]);
261 } 258 }
262 259
263 // We should not extract the value for non-text and non-select fields. 260 // We should not extract the value for non-text and non-select fields.
264 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldInvalidType) { 261 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldInvalidType) {
265 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 262 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
266 " <INPUT type=\"hidden\" id=\"hidden\" value=\"apple\"/>" 263 " <INPUT type=\"hidden\" id=\"hidden\" value=\"apple\"/>"
267 " <INPUT type=\"password\" id=\"password\" value=\"secret\"/>" 264 " <INPUT type=\"password\" id=\"password\" value=\"secret\"/>"
268 " <INPUT type=\"checkbox\" id=\"checkbox\" value=\"mail\"/>" 265 " <INPUT type=\"checkbox\" id=\"checkbox\" value=\"mail\"/>"
269 " <INPUT type=\"radio\" id=\"radio\" value=\"male\"/>" 266 " <INPUT type=\"radio\" id=\"radio\" value=\"male\"/>"
270 " <INPUT type=\"submit\" id=\"submit\" value=\"Send\"/>" 267 " <INPUT type=\"submit\" id=\"submit\" value=\"Send\"/>"
271 "</FORM>"); 268 "</FORM>");
272 269
273 WebFrame* frame = GetMainFrame(); 270 WebFrame* frame = GetMainFrame();
274 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 271 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
275 272
276 WebElement web_element = frame->document().getElementById("hidden"); 273 WebElement web_element = frame->document().getElementById("hidden");
277 WebFormControlElement element = web_element.to<WebFormControlElement>(); 274 WebFormControlElement element = web_element.to<WebFormControlElement>();
278 FormField result; 275 FormFieldData result;
279 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 276 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
280 277
281 FormField expected; 278 FormFieldData expected;
282 expected.max_length = 0; 279 expected.max_length = 0;
283 280
284 expected.name = ASCIIToUTF16("hidden"); 281 expected.name = ASCIIToUTF16("hidden");
285 expected.form_control_type = ASCIIToUTF16("hidden"); 282 expected.form_control_type = ASCIIToUTF16("hidden");
286 EXPECT_FORM_FIELD_EQUALS(expected, result); 283 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
287 284
288 web_element = frame->document().getElementById("password"); 285 web_element = frame->document().getElementById("password");
289 element = web_element.to<WebFormControlElement>(); 286 element = web_element.to<WebFormControlElement>();
290 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 287 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
291 expected.name = ASCIIToUTF16("password"); 288 expected.name = ASCIIToUTF16("password");
292 expected.form_control_type = ASCIIToUTF16("password"); 289 expected.form_control_type = ASCIIToUTF16("password");
293 EXPECT_FORM_FIELD_EQUALS(expected, result); 290 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
294 291
295 web_element = frame->document().getElementById("checkbox"); 292 web_element = frame->document().getElementById("checkbox");
296 element = web_element.to<WebFormControlElement>(); 293 element = web_element.to<WebFormControlElement>();
297 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 294 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
298 expected.name = ASCIIToUTF16("checkbox"); 295 expected.name = ASCIIToUTF16("checkbox");
299 expected.form_control_type = ASCIIToUTF16("checkbox"); 296 expected.form_control_type = ASCIIToUTF16("checkbox");
300 EXPECT_FORM_FIELD_EQUALS(expected, result); 297 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
301 298
302 web_element = frame->document().getElementById("radio"); 299 web_element = frame->document().getElementById("radio");
303 element = web_element.to<WebFormControlElement>(); 300 element = web_element.to<WebFormControlElement>();
304 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 301 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
305 expected.name = ASCIIToUTF16("radio"); 302 expected.name = ASCIIToUTF16("radio");
306 expected.form_control_type = ASCIIToUTF16("radio"); 303 expected.form_control_type = ASCIIToUTF16("radio");
307 EXPECT_FORM_FIELD_EQUALS(expected, result); 304 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
308 305
309 306
310 web_element = frame->document().getElementById("submit"); 307 web_element = frame->document().getElementById("submit");
311 element = web_element.to<WebFormControlElement>(); 308 element = web_element.to<WebFormControlElement>();
312 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result); 309 WebFormControlElementToFormField(element, autofill::EXTRACT_VALUE, &result);
313 expected.name = ASCIIToUTF16("submit"); 310 expected.name = ASCIIToUTF16("submit");
314 expected.form_control_type = ASCIIToUTF16("submit"); 311 expected.form_control_type = ASCIIToUTF16("submit");
315 EXPECT_FORM_FIELD_EQUALS(expected, result); 312 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result);
316 } 313 }
317 314
318 // We should be able to extract the autocompletetype attribute. 315 // We should be able to extract the autocompletetype attribute.
319 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutocompletetype) { 316 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldAutocompletetype) {
320 std::string html = 317 std::string html =
321 "<INPUT type=\"text\" id=\"absent\"/>" 318 "<INPUT type=\"text\" id=\"absent\"/>"
322 "<INPUT type=\"text\" id=\"empty\" x-autocompletetype=\"\"/>" 319 "<INPUT type=\"text\" id=\"empty\" x-autocompletetype=\"\"/>"
323 "<INPUT type=\"text\" id=\"whitespace\" x-autocompletetype=\" \"/>" 320 "<INPUT type=\"text\" id=\"whitespace\" x-autocompletetype=\" \"/>"
324 "<INPUT type=\"text\" id=\"regular\" x-autocompletetype=\"email\"/>" 321 "<INPUT type=\"text\" id=\"regular\" x-autocompletetype=\"email\"/>"
325 "<INPUT type=\"text\" id=\"multi-valued\" " 322 "<INPUT type=\"text\" id=\"multi-valued\" "
326 " x-autocompletetype=\"x-confirm-email email\"/>" 323 " x-autocompletetype=\"x-confirm-email email\"/>"
327 "<INPUT type=\"text\" id=\"unprefixed\" autocompletetype=\"email\"/>" 324 "<INPUT type=\"text\" id=\"unprefixed\" autocompletetype=\"email\"/>"
328 "<SELECT id=\"select\" x-autocompletetype=\"state\"/>" 325 "<SELECT id=\"select\" x-autocompletetype=\"state\"/>"
329 " <OPTION value=\"CA\">California</OPTION>" 326 " <OPTION value=\"CA\">California</OPTION>"
330 " <OPTION value=\"TX\">Texas</OPTION>" 327 " <OPTION value=\"TX\">Texas</OPTION>"
331 "</SELECT>"; 328 "</SELECT>";
332 html += 329 html +=
333 "<INPUT type=\"text\" id=\"malicious\" x-autocompletetype=\"" + 330 "<INPUT type=\"text\" id=\"malicious\" x-autocompletetype=\"" +
334 std::string(10000, 'x') + "\"/>"; 331 std::string(10000, 'x') + "\"/>";
335 LoadHTML(html.c_str()); 332 LoadHTML(html.c_str());
336 333
337 WebFrame* frame = GetMainFrame(); 334 WebFrame* frame = GetMainFrame();
338 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 335 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
339 336
340 // An absent attribute is equivalent to an empty one. 337 // An absent attribute is equivalent to an empty one.
341 WebElement web_element = frame->document().getElementById("absent"); 338 WebElement web_element = frame->document().getElementById("absent");
342 WebFormControlElement element = web_element.to<WebFormControlElement>(); 339 WebFormControlElement element = web_element.to<WebFormControlElement>();
343 FormField result1; 340 FormFieldData result1;
344 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result1); 341 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result1);
345 342
346 FormField expected; 343 FormFieldData expected;
347 expected.name = ASCIIToUTF16("absent"); 344 expected.name = ASCIIToUTF16("absent");
348 expected.form_control_type = ASCIIToUTF16("text"); 345 expected.form_control_type = ASCIIToUTF16("text");
349 expected.autocomplete_type = string16(); 346 expected.autocomplete_type = string16();
350 expected.max_length = WebInputElement::defaultMaxLength(); 347 expected.max_length = WebInputElement::defaultMaxLength();
351 EXPECT_FORM_FIELD_EQUALS(expected, result1); 348 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result1);
352 349
353 web_element = frame->document().getElementById("empty"); 350 web_element = frame->document().getElementById("empty");
354 element = web_element.to<WebFormControlElement>(); 351 element = web_element.to<WebFormControlElement>();
355 FormField result2; 352 FormFieldData result2;
356 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result2); 353 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result2);
357 expected.name = ASCIIToUTF16("empty"); 354 expected.name = ASCIIToUTF16("empty");
358 expected.form_control_type = ASCIIToUTF16("text"); 355 expected.form_control_type = ASCIIToUTF16("text");
359 expected.autocomplete_type = string16(); 356 expected.autocomplete_type = string16();
360 expected.max_length = WebInputElement::defaultMaxLength(); 357 expected.max_length = WebInputElement::defaultMaxLength();
361 EXPECT_FORM_FIELD_EQUALS(expected, result2); 358 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result2);
362 359
363 // The renderer should trim whitespace. 360 // The renderer should trim whitespace.
364 web_element = frame->document().getElementById("whitespace"); 361 web_element = frame->document().getElementById("whitespace");
365 element = web_element.to<WebFormControlElement>(); 362 element = web_element.to<WebFormControlElement>();
366 FormField result3; 363 FormFieldData result3;
367 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result3); 364 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result3);
368 expected.name = ASCIIToUTF16("whitespace"); 365 expected.name = ASCIIToUTF16("whitespace");
369 expected.form_control_type = ASCIIToUTF16("text"); 366 expected.form_control_type = ASCIIToUTF16("text");
370 expected.autocomplete_type = string16(); 367 expected.autocomplete_type = string16();
371 expected.max_length = WebInputElement::defaultMaxLength(); 368 expected.max_length = WebInputElement::defaultMaxLength();
372 EXPECT_FORM_FIELD_EQUALS(expected, result3); 369 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result3);
373 370
374 // Common case: exactly one type specified. 371 // Common case: exactly one type specified.
375 web_element = frame->document().getElementById("regular"); 372 web_element = frame->document().getElementById("regular");
376 element = web_element.to<WebFormControlElement>(); 373 element = web_element.to<WebFormControlElement>();
377 FormField result4; 374 FormFieldData result4;
378 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result4); 375 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result4);
379 expected.name = ASCIIToUTF16("regular"); 376 expected.name = ASCIIToUTF16("regular");
380 expected.form_control_type = ASCIIToUTF16("text"); 377 expected.form_control_type = ASCIIToUTF16("text");
381 expected.autocomplete_type = ASCIIToUTF16("email"); 378 expected.autocomplete_type = ASCIIToUTF16("email");
382 expected.max_length = WebInputElement::defaultMaxLength(); 379 expected.max_length = WebInputElement::defaultMaxLength();
383 EXPECT_FORM_FIELD_EQUALS(expected, result4); 380 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result4);
384 381
385 // Verify that we correctly extract fallback types as well. 382 // Verify that we correctly extract fallback types as well.
386 web_element = frame->document().getElementById("multi-valued"); 383 web_element = frame->document().getElementById("multi-valued");
387 element = web_element.to<WebFormControlElement>(); 384 element = web_element.to<WebFormControlElement>();
388 FormField result5; 385 FormFieldData result5;
389 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result5); 386 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result5);
390 expected.name = ASCIIToUTF16("multi-valued"); 387 expected.name = ASCIIToUTF16("multi-valued");
391 expected.form_control_type = ASCIIToUTF16("text"); 388 expected.form_control_type = ASCIIToUTF16("text");
392 expected.autocomplete_type = ASCIIToUTF16("x-confirm-email email"); 389 expected.autocomplete_type = ASCIIToUTF16("x-confirm-email email");
393 expected.max_length = WebInputElement::defaultMaxLength(); 390 expected.max_length = WebInputElement::defaultMaxLength();
394 EXPECT_FORM_FIELD_EQUALS(expected, result5); 391 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result5);
395 392
396 // The attribute is not yet part of the HTML standard, so we only recognize 393 // The attribute is not yet part of the HTML standard, so we only recognize
397 // the prefixed version -- 'x-autocompletetype' -- and not the unprefixed one. 394 // the prefixed version -- 'x-autocompletetype' -- and not the unprefixed one.
398 web_element = frame->document().getElementById("unprefixed"); 395 web_element = frame->document().getElementById("unprefixed");
399 element = web_element.to<WebFormControlElement>(); 396 element = web_element.to<WebFormControlElement>();
400 FormField result6; 397 FormFieldData result6;
401 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result6); 398 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result6);
402 expected.name = ASCIIToUTF16("unprefixed"); 399 expected.name = ASCIIToUTF16("unprefixed");
403 expected.form_control_type = ASCIIToUTF16("text"); 400 expected.form_control_type = ASCIIToUTF16("text");
404 expected.autocomplete_type = string16(); 401 expected.autocomplete_type = string16();
405 expected.max_length = WebInputElement::defaultMaxLength(); 402 expected.max_length = WebInputElement::defaultMaxLength();
406 EXPECT_FORM_FIELD_EQUALS(expected, result6); 403 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result6);
407 404
408 // <select> elements should behave no differently from text fields here. 405 // <select> elements should behave no differently from text fields here.
409 web_element = frame->document().getElementById("select"); 406 web_element = frame->document().getElementById("select");
410 element = web_element.to<WebFormControlElement>(); 407 element = web_element.to<WebFormControlElement>();
411 FormField result7; 408 FormFieldData result7;
412 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result7); 409 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result7);
413 expected.name = ASCIIToUTF16("select"); 410 expected.name = ASCIIToUTF16("select");
414 expected.form_control_type = ASCIIToUTF16("select-one"); 411 expected.form_control_type = ASCIIToUTF16("select-one");
415 expected.autocomplete_type = ASCIIToUTF16("state"); 412 expected.autocomplete_type = ASCIIToUTF16("state");
416 expected.max_length = 0; 413 expected.max_length = 0;
417 EXPECT_FORM_FIELD_EQUALS(expected, result7); 414 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result7);
418 415
419 // Very long attribute values should be replaced by a default string, to 416 // Very long attribute values should be replaced by a default string, to
420 // prevent malicious websites from DOSing the browser process. 417 // prevent malicious websites from DOSing the browser process.
421 web_element = frame->document().getElementById("malicious"); 418 web_element = frame->document().getElementById("malicious");
422 element = web_element.to<WebFormControlElement>(); 419 element = web_element.to<WebFormControlElement>();
423 FormField result8; 420 FormFieldData result8;
424 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result8); 421 WebFormControlElementToFormField(element, autofill::EXTRACT_NONE, &result8);
425 expected.name = ASCIIToUTF16("malicious"); 422 expected.name = ASCIIToUTF16("malicious");
426 expected.form_control_type = ASCIIToUTF16("text"); 423 expected.form_control_type = ASCIIToUTF16("text");
427 expected.autocomplete_type = ASCIIToUTF16("x-max-data-length-exceeded"); 424 expected.autocomplete_type = ASCIIToUTF16("x-max-data-length-exceeded");
428 expected.max_length = WebInputElement::defaultMaxLength(); 425 expected.max_length = WebInputElement::defaultMaxLength();
429 EXPECT_FORM_FIELD_EQUALS(expected, result8); 426 EXPECT_FORM_FIELD_DATA_EQUALS(expected, result8);
430 } 427 }
431 428
432 TEST_F(FormAutofillTest, WebFormElementToFormData) { 429 TEST_F(FormAutofillTest, WebFormElementToFormData) {
433 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 430 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
434 " <LABEL for=\"firstname\">First name:</LABEL>" 431 " <LABEL for=\"firstname\">First name:</LABEL>"
435 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 432 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
436 " <LABEL for=\"lastname\">Last name:</LABEL>" 433 " <LABEL for=\"lastname\">Last name:</LABEL>"
437 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 434 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
438 " <LABEL for=\"state\">State:</LABEL>" 435 " <LABEL for=\"state\">State:</LABEL>"
439 " <SELECT id=\"state\"/>" 436 " <SELECT id=\"state\"/>"
(...skipping 12 matching lines...) Expand all
452 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 449 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
453 450
454 WebVector<WebFormElement> forms; 451 WebVector<WebFormElement> forms;
455 frame->document().forms(forms); 452 frame->document().forms(forms);
456 ASSERT_EQ(1U, forms.size()); 453 ASSERT_EQ(1U, forms.size());
457 454
458 WebElement element = frame->document().getElementById("firstname"); 455 WebElement element = frame->document().getElementById("firstname");
459 WebInputElement input_element = element.to<WebInputElement>(); 456 WebInputElement input_element = element.to<WebInputElement>();
460 457
461 FormData form; 458 FormData form;
462 FormField field; 459 FormFieldData field;
463 EXPECT_TRUE(WebFormElementToFormData(forms[0], 460 EXPECT_TRUE(WebFormElementToFormData(forms[0],
464 input_element, 461 input_element,
465 autofill::REQUIRE_NONE, 462 autofill::REQUIRE_NONE,
466 autofill::EXTRACT_VALUE, 463 autofill::EXTRACT_VALUE,
467 &form, 464 &form,
468 &field)); 465 &field));
469 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 466 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
470 EXPECT_EQ(GURL(frame->document().url()), form.origin); 467 EXPECT_EQ(GURL(frame->document().url()), form.origin);
471 EXPECT_EQ(GURL("http://cnn.com"), form.action); 468 EXPECT_EQ(GURL("http://cnn.com"), form.action);
472 469
473 const std::vector<FormField>& fields = form.fields; 470 const std::vector<FormFieldData>& fields = form.fields;
474 ASSERT_EQ(3U, fields.size()); 471 ASSERT_EQ(3U, fields.size());
475 472
476 FormField expected; 473 FormFieldData expected;
477 expected.name = ASCIIToUTF16("firstname"); 474 expected.name = ASCIIToUTF16("firstname");
478 expected.value = ASCIIToUTF16("John"); 475 expected.value = ASCIIToUTF16("John");
479 expected.label = ASCIIToUTF16("First name:"); 476 expected.label = ASCIIToUTF16("First name:");
480 expected.form_control_type = ASCIIToUTF16("text"); 477 expected.form_control_type = ASCIIToUTF16("text");
481 expected.max_length = WebInputElement::defaultMaxLength(); 478 expected.max_length = WebInputElement::defaultMaxLength();
482 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 479 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
483 480
484 expected.name = ASCIIToUTF16("lastname"); 481 expected.name = ASCIIToUTF16("lastname");
485 expected.value = ASCIIToUTF16("Smith"); 482 expected.value = ASCIIToUTF16("Smith");
486 expected.label = ASCIIToUTF16("Last name:"); 483 expected.label = ASCIIToUTF16("Last name:");
487 expected.form_control_type = ASCIIToUTF16("text"); 484 expected.form_control_type = ASCIIToUTF16("text");
488 expected.max_length = WebInputElement::defaultMaxLength(); 485 expected.max_length = WebInputElement::defaultMaxLength();
489 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 486 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
490 487
491 expected.name = ASCIIToUTF16("state"); 488 expected.name = ASCIIToUTF16("state");
492 expected.value = ASCIIToUTF16("CA"); 489 expected.value = ASCIIToUTF16("CA");
493 expected.label = ASCIIToUTF16("State:"); 490 expected.label = ASCIIToUTF16("State:");
494 expected.form_control_type = ASCIIToUTF16("select-one"); 491 expected.form_control_type = ASCIIToUTF16("select-one");
495 expected.max_length = 0; 492 expected.max_length = 0;
496 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 493 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
497 } 494 }
498 495
499 // We should not be able to serialize a form with too many fillable fields. 496 // We should not be able to serialize a form with too many fillable fields.
500 TEST_F(FormAutofillTest, WebFormElementToFormDataTooManyFields) { 497 TEST_F(FormAutofillTest, WebFormElementToFormDataTooManyFields) {
501 std::string html = 498 std::string html =
502 "<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"; 499 "<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">";
503 for (size_t i = 0; i < (autofill::kMaxParseableFields + 1); ++i) { 500 for (size_t i = 0; i < (autofill::kMaxParseableFields + 1); ++i) {
504 html += "<INPUT type=\"text\"/>"; 501 html += "<INPUT type=\"text\"/>";
505 } 502 }
506 html += "</FORM>"; 503 html += "</FORM>";
507 LoadHTML(html.c_str()); 504 LoadHTML(html.c_str());
508 505
509 WebFrame* frame = GetMainFrame(); 506 WebFrame* frame = GetMainFrame();
510 ASSERT_NE(static_cast<WebFrame*>(NULL), frame); 507 ASSERT_NE(static_cast<WebFrame*>(NULL), frame);
511 508
512 WebVector<WebFormElement> forms; 509 WebVector<WebFormElement> forms;
513 frame->document().forms(forms); 510 frame->document().forms(forms);
514 ASSERT_EQ(1U, forms.size()); 511 ASSERT_EQ(1U, forms.size());
515 512
516 WebElement element = frame->document().getElementById("firstname"); 513 WebElement element = frame->document().getElementById("firstname");
517 WebInputElement input_element = element.to<WebInputElement>(); 514 WebInputElement input_element = element.to<WebInputElement>();
518 515
519 FormData form; 516 FormData form;
520 FormField field; 517 FormFieldData field;
521 EXPECT_FALSE(WebFormElementToFormData(forms[0], 518 EXPECT_FALSE(WebFormElementToFormData(forms[0],
522 input_element, 519 input_element,
523 autofill::REQUIRE_NONE, 520 autofill::REQUIRE_NONE,
524 autofill::EXTRACT_VALUE, 521 autofill::EXTRACT_VALUE,
525 &form, 522 &form,
526 &field)); 523 &field));
527 } 524 }
528 525
529 TEST_F(FormAutofillTest, ExtractForms) { 526 TEST_F(FormAutofillTest, ExtractForms) {
530 ExpectJohnSmithLabels( 527 ExpectJohnSmithLabels(
(...skipping 26 matching lines...) Expand all
557 std::vector<FormData> forms; 554 std::vector<FormData> forms;
558 form_cache.ExtractForms(*web_frame, &forms); 555 form_cache.ExtractForms(*web_frame, &forms);
559 ASSERT_EQ(2U, forms.size()); 556 ASSERT_EQ(2U, forms.size());
560 557
561 // First form. 558 // First form.
562 const FormData& form = forms[0]; 559 const FormData& form = forms[0];
563 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 560 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
564 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 561 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
565 EXPECT_EQ(GURL("http://cnn.com"), form.action); 562 EXPECT_EQ(GURL("http://cnn.com"), form.action);
566 563
567 const std::vector<FormField>& fields = form.fields; 564 const std::vector<FormFieldData>& fields = form.fields;
568 ASSERT_EQ(3U, fields.size()); 565 ASSERT_EQ(3U, fields.size());
569 566
570 FormField expected; 567 FormFieldData expected;
571 expected.form_control_type = ASCIIToUTF16("text"); 568 expected.form_control_type = ASCIIToUTF16("text");
572 expected.max_length = WebInputElement::defaultMaxLength(); 569 expected.max_length = WebInputElement::defaultMaxLength();
573 570
574 expected.name = ASCIIToUTF16("firstname"); 571 expected.name = ASCIIToUTF16("firstname");
575 expected.value = ASCIIToUTF16("John"); 572 expected.value = ASCIIToUTF16("John");
576 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 573 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
577 574
578 expected.name = ASCIIToUTF16("lastname"); 575 expected.name = ASCIIToUTF16("lastname");
579 expected.value = ASCIIToUTF16("Smith"); 576 expected.value = ASCIIToUTF16("Smith");
580 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 577 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
581 578
582 expected.name = ASCIIToUTF16("email"); 579 expected.name = ASCIIToUTF16("email");
583 expected.value = ASCIIToUTF16("john@example.com"); 580 expected.value = ASCIIToUTF16("john@example.com");
584 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 581 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
585 582
586 // Second form. 583 // Second form.
587 const FormData& form2 = forms[1]; 584 const FormData& form2 = forms[1];
588 EXPECT_EQ(ASCIIToUTF16("TestForm2"), form2.name); 585 EXPECT_EQ(ASCIIToUTF16("TestForm2"), form2.name);
589 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 586 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
590 EXPECT_EQ(GURL("http://zoo.com"), form2.action); 587 EXPECT_EQ(GURL("http://zoo.com"), form2.action);
591 588
592 const std::vector<FormField>& fields2 = form2.fields; 589 const std::vector<FormFieldData>& fields2 = form2.fields;
593 ASSERT_EQ(3U, fields2.size()); 590 ASSERT_EQ(3U, fields2.size());
594 591
595 expected.name = ASCIIToUTF16("firstname"); 592 expected.name = ASCIIToUTF16("firstname");
596 expected.value = ASCIIToUTF16("Jack"); 593 expected.value = ASCIIToUTF16("Jack");
597 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 594 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
598 595
599 expected.name = ASCIIToUTF16("lastname"); 596 expected.name = ASCIIToUTF16("lastname");
600 expected.value = ASCIIToUTF16("Adams"); 597 expected.value = ASCIIToUTF16("Adams");
601 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 598 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
602 599
603 expected.name = ASCIIToUTF16("email"); 600 expected.name = ASCIIToUTF16("email");
604 expected.value = ASCIIToUTF16("jack@example.com"); 601 expected.value = ASCIIToUTF16("jack@example.com");
605 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 602 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
606 } 603 }
607 604
608 // We should not extract a form if it has too few fillable fields. 605 // We should not extract a form if it has too few fillable fields.
609 TEST_F(FormAutofillTest, ExtractFormsTooFewFields) { 606 TEST_F(FormAutofillTest, ExtractFormsTooFewFields) {
610 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 607 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
611 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 608 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
612 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 609 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
613 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 610 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
614 "</FORM>"); 611 "</FORM>");
615 612
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 669
673 FormData form; 670 FormData form;
674 EXPECT_TRUE(WebFormElementToFormData( 671 EXPECT_TRUE(WebFormElementToFormData(
675 web_form, WebFormControlElement(), autofill::REQUIRE_AUTOCOMPLETE, 672 web_form, WebFormControlElement(), autofill::REQUIRE_AUTOCOMPLETE,
676 autofill::EXTRACT_VALUE, &form, NULL)); 673 autofill::EXTRACT_VALUE, &form, NULL));
677 674
678 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 675 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
679 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 676 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
680 EXPECT_EQ(GURL("http://abc.com"), form.action); 677 EXPECT_EQ(GURL("http://abc.com"), form.action);
681 678
682 const std::vector<FormField>& fields = form.fields; 679 const std::vector<FormFieldData>& fields = form.fields;
683 ASSERT_EQ(3U, fields.size()); 680 ASSERT_EQ(3U, fields.size());
684 681
685 FormField expected; 682 FormFieldData expected;
686 expected.form_control_type = ASCIIToUTF16("text"); 683 expected.form_control_type = ASCIIToUTF16("text");
687 expected.max_length = WebInputElement::defaultMaxLength(); 684 expected.max_length = WebInputElement::defaultMaxLength();
688 685
689 expected.name = ASCIIToUTF16("middlename"); 686 expected.name = ASCIIToUTF16("middlename");
690 expected.value = ASCIIToUTF16("Jack"); 687 expected.value = ASCIIToUTF16("Jack");
691 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 688 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
692 689
693 expected.name = ASCIIToUTF16("lastname"); 690 expected.name = ASCIIToUTF16("lastname");
694 expected.value = ASCIIToUTF16("Smith"); 691 expected.value = ASCIIToUTF16("Smith");
695 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 692 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
696 693
697 expected.name = ASCIIToUTF16("email"); 694 expected.name = ASCIIToUTF16("email");
698 expected.value = ASCIIToUTF16("john@example.com"); 695 expected.value = ASCIIToUTF16("john@example.com");
699 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 696 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
700 } 697 }
701 } 698 }
702 699
703 TEST_F(FormAutofillTest, FindForm) { 700 TEST_F(FormAutofillTest, FindForm) {
704 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 701 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
705 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>" 702 " <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
706 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>" 703 " <INPUT type=\"text\" id=\"lastname\" value=\"Smith\"/>"
707 " <INPUT type=\"text\" id=\"email\" value=\"john@example.com\"" 704 " <INPUT type=\"text\" id=\"email\" value=\"john@example.com\""
708 "autocomplete=\"off\" />" 705 "autocomplete=\"off\" />"
709 " <INPUT type=\"text\" id=\"phone\" value=\"1.800.555.1234\"/>" 706 " <INPUT type=\"text\" id=\"phone\" value=\"1.800.555.1234\"/>"
710 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 707 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
711 "</FORM>"); 708 "</FORM>");
712 709
713 WebFrame* web_frame = GetMainFrame(); 710 WebFrame* web_frame = GetMainFrame();
714 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 711 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
715 712
716 FormCache form_cache; 713 FormCache form_cache;
717 std::vector<FormData> forms; 714 std::vector<FormData> forms;
718 form_cache.ExtractForms(*web_frame, &forms); 715 form_cache.ExtractForms(*web_frame, &forms);
719 ASSERT_EQ(1U, forms.size()); 716 ASSERT_EQ(1U, forms.size());
720 717
721 // Get the input element we want to find. 718 // Get the input element we want to find.
722 WebElement element = web_frame->document().getElementById("firstname"); 719 WebElement element = web_frame->document().getElementById("firstname");
723 WebInputElement input_element = element.to<WebInputElement>(); 720 WebInputElement input_element = element.to<WebInputElement>();
724 721
725 // Find the form and verify it's the correct form. 722 // Find the form and verify it's the correct form.
726 FormData form; 723 FormData form;
727 FormField field; 724 FormFieldData field;
728 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 725 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
729 autofill::REQUIRE_NONE)); 726 autofill::REQUIRE_NONE));
730 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 727 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
731 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 728 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
732 EXPECT_EQ(GURL("http://buh.com"), form.action); 729 EXPECT_EQ(GURL("http://buh.com"), form.action);
733 730
734 const std::vector<FormField>& fields = form.fields; 731 const std::vector<FormFieldData>& fields = form.fields;
735 ASSERT_EQ(4U, fields.size()); 732 ASSERT_EQ(4U, fields.size());
736 733
737 FormField expected; 734 FormFieldData expected;
738 expected.form_control_type = ASCIIToUTF16("text"); 735 expected.form_control_type = ASCIIToUTF16("text");
739 expected.max_length = WebInputElement::defaultMaxLength(); 736 expected.max_length = WebInputElement::defaultMaxLength();
740 737
741 expected.name = ASCIIToUTF16("firstname"); 738 expected.name = ASCIIToUTF16("firstname");
742 expected.value = ASCIIToUTF16("John"); 739 expected.value = ASCIIToUTF16("John");
743 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 740 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
744 EXPECT_FORM_FIELD_EQUALS(expected, field); 741 EXPECT_FORM_FIELD_DATA_EQUALS(expected, field);
745 742
746 expected.name = ASCIIToUTF16("lastname"); 743 expected.name = ASCIIToUTF16("lastname");
747 expected.value = ASCIIToUTF16("Smith"); 744 expected.value = ASCIIToUTF16("Smith");
748 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 745 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
749 746
750 expected.name = ASCIIToUTF16("email"); 747 expected.name = ASCIIToUTF16("email");
751 expected.value = ASCIIToUTF16("john@example.com"); 748 expected.value = ASCIIToUTF16("john@example.com");
752 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 749 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
753 750
754 expected.name = ASCIIToUTF16("phone"); 751 expected.name = ASCIIToUTF16("phone");
755 expected.value = ASCIIToUTF16("1.800.555.1234"); 752 expected.value = ASCIIToUTF16("1.800.555.1234");
756 EXPECT_FORM_FIELD_EQUALS(expected, fields[3]); 753 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[3]);
757 754
758 // Try again, but require autocomplete. 755 // Try again, but require autocomplete.
759 FormData form2; 756 FormData form2;
760 FormField field2; 757 FormFieldData field2;
761 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 758 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
762 autofill::REQUIRE_AUTOCOMPLETE)); 759 autofill::REQUIRE_AUTOCOMPLETE));
763 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 760 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
764 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 761 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
765 EXPECT_EQ(GURL("http://buh.com"), form2.action); 762 EXPECT_EQ(GURL("http://buh.com"), form2.action);
766 763
767 const std::vector<FormField>& fields2 = form2.fields; 764 const std::vector<FormFieldData>& fields2 = form2.fields;
768 ASSERT_EQ(3U, fields2.size()); 765 ASSERT_EQ(3U, fields2.size());
769 766
770 expected.form_control_type = ASCIIToUTF16("text"); 767 expected.form_control_type = ASCIIToUTF16("text");
771 expected.max_length = WebInputElement::defaultMaxLength(); 768 expected.max_length = WebInputElement::defaultMaxLength();
772 769
773 expected.name = ASCIIToUTF16("firstname"); 770 expected.name = ASCIIToUTF16("firstname");
774 expected.value = ASCIIToUTF16("John"); 771 expected.value = ASCIIToUTF16("John");
775 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 772 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
776 EXPECT_FORM_FIELD_EQUALS(expected, field); 773 EXPECT_FORM_FIELD_DATA_EQUALS(expected, field);
777 774
778 expected.name = ASCIIToUTF16("lastname"); 775 expected.name = ASCIIToUTF16("lastname");
779 expected.value = ASCIIToUTF16("Smith"); 776 expected.value = ASCIIToUTF16("Smith");
780 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 777 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
781 778
782 expected.name = ASCIIToUTF16("phone"); 779 expected.name = ASCIIToUTF16("phone");
783 expected.value = ASCIIToUTF16("1.800.555.1234"); 780 expected.value = ASCIIToUTF16("1.800.555.1234");
784 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 781 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
785 } 782 }
786 783
787 TEST_F(FormAutofillTest, FillForm) { 784 TEST_F(FormAutofillTest, FillForm) {
788 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 785 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
789 " <INPUT type=\"text\" id=\"firstname\"/>" 786 " <INPUT type=\"text\" id=\"firstname\"/>"
790 " <INPUT type=\"text\" id=\"lastname\"/>" 787 " <INPUT type=\"text\" id=\"lastname\"/>"
791 " <INPUT type=\"hidden\" id=\"imhidden\"/>" 788 " <INPUT type=\"hidden\" id=\"imhidden\"/>"
792 " <INPUT type=\"text\" id=\"notempty\" value=\"Hi\"/>" 789 " <INPUT type=\"text\" id=\"notempty\" value=\"Hi\"/>"
793 " <INPUT type=\"text\" autocomplete=\"off\" id=\"noautocomplete\"/>" 790 " <INPUT type=\"text\" autocomplete=\"off\" id=\"noautocomplete\"/>"
794 " <INPUT type=\"text\" disabled=\"disabled\" id=\"notenabled\"/>" 791 " <INPUT type=\"text\" disabled=\"disabled\" id=\"notenabled\"/>"
(...skipping 11 matching lines...) Expand all
806 std::vector<FormData> forms; 803 std::vector<FormData> forms;
807 form_cache.ExtractForms(*web_frame, &forms); 804 form_cache.ExtractForms(*web_frame, &forms);
808 ASSERT_EQ(1U, forms.size()); 805 ASSERT_EQ(1U, forms.size());
809 806
810 // Get the input element we want to find. 807 // Get the input element we want to find.
811 WebElement element = web_frame->document().getElementById("firstname"); 808 WebElement element = web_frame->document().getElementById("firstname");
812 WebInputElement input_element = element.to<WebInputElement>(); 809 WebInputElement input_element = element.to<WebInputElement>();
813 810
814 // Find the form that contains the input element. 811 // Find the form that contains the input element.
815 FormData form; 812 FormData form;
816 FormField field; 813 FormFieldData field;
817 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 814 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
818 autofill::REQUIRE_AUTOCOMPLETE)); 815 autofill::REQUIRE_AUTOCOMPLETE));
819 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 816 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
820 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 817 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
821 EXPECT_EQ(GURL("http://buh.com"), form.action); 818 EXPECT_EQ(GURL("http://buh.com"), form.action);
822 819
823 const std::vector<FormField>& fields = form.fields; 820 const std::vector<FormFieldData>& fields = form.fields;
824 ASSERT_EQ(7U, fields.size()); 821 ASSERT_EQ(7U, fields.size());
825 822
826 FormField expected; 823 FormFieldData expected;
827 expected.form_control_type = ASCIIToUTF16("text"); 824 expected.form_control_type = ASCIIToUTF16("text");
828 expected.max_length = WebInputElement::defaultMaxLength(); 825 expected.max_length = WebInputElement::defaultMaxLength();
829 826
830 expected.name = ASCIIToUTF16("firstname"); 827 expected.name = ASCIIToUTF16("firstname");
831 expected.value = string16(); 828 expected.value = string16();
832 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 829 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
833 830
834 expected.name = ASCIIToUTF16("lastname"); 831 expected.name = ASCIIToUTF16("lastname");
835 expected.value = string16(); 832 expected.value = string16();
836 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 833 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
837 834
838 expected.name = ASCIIToUTF16("notempty"); 835 expected.name = ASCIIToUTF16("notempty");
839 expected.value = ASCIIToUTF16("Hi"); 836 expected.value = ASCIIToUTF16("Hi");
840 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 837 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
841 838
842 expected.name = ASCIIToUTF16("notenabled"); 839 expected.name = ASCIIToUTF16("notenabled");
843 expected.value = string16(); 840 expected.value = string16();
844 EXPECT_FORM_FIELD_EQUALS(expected, fields[3]); 841 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[3]);
845 842
846 expected.name = ASCIIToUTF16("readonly"); 843 expected.name = ASCIIToUTF16("readonly");
847 expected.value = string16(); 844 expected.value = string16();
848 EXPECT_FORM_FIELD_EQUALS(expected, fields[4]); 845 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[4]);
849 846
850 expected.name = ASCIIToUTF16("invisible"); 847 expected.name = ASCIIToUTF16("invisible");
851 expected.value = string16(); 848 expected.value = string16();
852 EXPECT_FORM_FIELD_EQUALS(expected, fields[5]); 849 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[5]);
853 850
854 expected.name = ASCIIToUTF16("displaynone"); 851 expected.name = ASCIIToUTF16("displaynone");
855 expected.value = string16(); 852 expected.value = string16();
856 EXPECT_FORM_FIELD_EQUALS(expected, fields[6]); 853 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[6]);
857 854
858 // Fill the form. 855 // Fill the form.
859 form.fields[0].value = ASCIIToUTF16("Wyatt"); 856 form.fields[0].value = ASCIIToUTF16("Wyatt");
860 form.fields[1].value = ASCIIToUTF16("Earp"); 857 form.fields[1].value = ASCIIToUTF16("Earp");
861 form.fields[2].value = ASCIIToUTF16("Alpha"); 858 form.fields[2].value = ASCIIToUTF16("Alpha");
862 form.fields[3].value = ASCIIToUTF16("Beta"); 859 form.fields[3].value = ASCIIToUTF16("Beta");
863 form.fields[4].value = ASCIIToUTF16("Gamma"); 860 form.fields[4].value = ASCIIToUTF16("Gamma");
864 form.fields[5].value = ASCIIToUTF16("Delta"); 861 form.fields[5].value = ASCIIToUTF16("Delta");
865 form.fields[6].value = ASCIIToUTF16("Epsilon"); 862 form.fields[6].value = ASCIIToUTF16("Epsilon");
866 FillForm(form, input_element); 863 FillForm(form, input_element);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 std::vector<FormData> forms; 930 std::vector<FormData> forms;
934 form_cache.ExtractForms(*web_frame, &forms); 931 form_cache.ExtractForms(*web_frame, &forms);
935 ASSERT_EQ(1U, forms.size()); 932 ASSERT_EQ(1U, forms.size());
936 933
937 // Get the input element we want to find. 934 // Get the input element we want to find.
938 WebElement element = web_frame->document().getElementById("firstname"); 935 WebElement element = web_frame->document().getElementById("firstname");
939 WebInputElement input_element = element.to<WebInputElement>(); 936 WebInputElement input_element = element.to<WebInputElement>();
940 937
941 // Find the form that contains the input element. 938 // Find the form that contains the input element.
942 FormData form; 939 FormData form;
943 FormField field; 940 FormFieldData field;
944 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 941 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
945 autofill::REQUIRE_AUTOCOMPLETE)); 942 autofill::REQUIRE_AUTOCOMPLETE));
946 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 943 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
947 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 944 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
948 EXPECT_EQ(GURL("http://buh.com"), form.action); 945 EXPECT_EQ(GURL("http://buh.com"), form.action);
949 946
950 const std::vector<FormField>& fields = form.fields; 947 const std::vector<FormFieldData>& fields = form.fields;
951 ASSERT_EQ(4U, fields.size()); 948 ASSERT_EQ(4U, fields.size());
952 949
953 FormField expected; 950 FormFieldData expected;
954 expected.form_control_type = ASCIIToUTF16("text"); 951 expected.form_control_type = ASCIIToUTF16("text");
955 expected.max_length = WebInputElement::defaultMaxLength(); 952 expected.max_length = WebInputElement::defaultMaxLength();
956 953
957 expected.name = ASCIIToUTF16("firstname"); 954 expected.name = ASCIIToUTF16("firstname");
958 expected.value = string16(); 955 expected.value = string16();
959 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 956 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
960 957
961 expected.name = ASCIIToUTF16("lastname"); 958 expected.name = ASCIIToUTF16("lastname");
962 expected.value = string16(); 959 expected.value = string16();
963 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 960 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
964 961
965 expected.name = ASCIIToUTF16("notempty"); 962 expected.name = ASCIIToUTF16("notempty");
966 expected.value = ASCIIToUTF16("Hi"); 963 expected.value = ASCIIToUTF16("Hi");
967 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 964 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
968 965
969 expected.name = ASCIIToUTF16("notenabled"); 966 expected.name = ASCIIToUTF16("notenabled");
970 expected.value = string16(); 967 expected.value = string16();
971 EXPECT_FORM_FIELD_EQUALS(expected, fields[3]); 968 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[3]);
972 969
973 // Preview the form. 970 // Preview the form.
974 form.fields[0].value = ASCIIToUTF16("Wyatt"); 971 form.fields[0].value = ASCIIToUTF16("Wyatt");
975 form.fields[1].value = ASCIIToUTF16("Earp"); 972 form.fields[1].value = ASCIIToUTF16("Earp");
976 form.fields[2].value = ASCIIToUTF16("Alpha"); 973 form.fields[2].value = ASCIIToUTF16("Alpha");
977 form.fields[3].value = ASCIIToUTF16("Beta"); 974 form.fields[3].value = ASCIIToUTF16("Beta");
978 PreviewForm(form, input_element); 975 PreviewForm(form, input_element);
979 976
980 // Verify the previewed elements. 977 // Verify the previewed elements.
981 WebDocument document = web_frame->document(); 978 WebDocument document = web_frame->document();
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after
1884 std::vector<FormData> forms; 1881 std::vector<FormData> forms;
1885 form_cache.ExtractForms(*web_frame, &forms); 1882 form_cache.ExtractForms(*web_frame, &forms);
1886 ASSERT_EQ(1U, forms.size()); 1883 ASSERT_EQ(1U, forms.size());
1887 1884
1888 // Get the input element we want to find. 1885 // Get the input element we want to find.
1889 WebElement element = web_frame->document().getElementById("firstname"); 1886 WebElement element = web_frame->document().getElementById("firstname");
1890 WebInputElement input_element = element.to<WebInputElement>(); 1887 WebInputElement input_element = element.to<WebInputElement>();
1891 1888
1892 // Find the form that contains the input element. 1889 // Find the form that contains the input element.
1893 FormData form; 1890 FormData form;
1894 FormField field; 1891 FormFieldData field;
1895 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 1892 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
1896 autofill::REQUIRE_NONE)); 1893 autofill::REQUIRE_NONE));
1897 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 1894 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1898 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 1895 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
1899 EXPECT_EQ(GURL("http://buh.com"), form.action); 1896 EXPECT_EQ(GURL("http://buh.com"), form.action);
1900 1897
1901 const std::vector<FormField>& fields = form.fields; 1898 const std::vector<FormFieldData>& fields = form.fields;
1902 ASSERT_EQ(3U, fields.size()); 1899 ASSERT_EQ(3U, fields.size());
1903 1900
1904 FormField expected; 1901 FormFieldData expected;
1905 expected.form_control_type = ASCIIToUTF16("text"); 1902 expected.form_control_type = ASCIIToUTF16("text");
1906 1903
1907 expected.name = ASCIIToUTF16("firstname"); 1904 expected.name = ASCIIToUTF16("firstname");
1908 expected.max_length = 5; 1905 expected.max_length = 5;
1909 expected.is_autofilled = false; 1906 expected.is_autofilled = false;
1910 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 1907 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
1911 1908
1912 expected.name = ASCIIToUTF16("lastname"); 1909 expected.name = ASCIIToUTF16("lastname");
1913 expected.max_length = 7; 1910 expected.max_length = 7;
1914 expected.is_autofilled = false; 1911 expected.is_autofilled = false;
1915 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 1912 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
1916 1913
1917 expected.name = ASCIIToUTF16("email"); 1914 expected.name = ASCIIToUTF16("email");
1918 expected.max_length = 9; 1915 expected.max_length = 9;
1919 expected.is_autofilled = false; 1916 expected.is_autofilled = false;
1920 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 1917 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
1921 1918
1922 // Fill the form. 1919 // Fill the form.
1923 form.fields[0].value = ASCIIToUTF16("Brother"); 1920 form.fields[0].value = ASCIIToUTF16("Brother");
1924 form.fields[1].value = ASCIIToUTF16("Jonathan"); 1921 form.fields[1].value = ASCIIToUTF16("Jonathan");
1925 form.fields[2].value = ASCIIToUTF16("brotherj@example.com"); 1922 form.fields[2].value = ASCIIToUTF16("brotherj@example.com");
1926 FillForm(form, input_element); 1923 FillForm(form, input_element);
1927 1924
1928 // Find the newly-filled form that contains the input element. 1925 // Find the newly-filled form that contains the input element.
1929 FormData form2; 1926 FormData form2;
1930 FormField field2; 1927 FormFieldData field2;
1931 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 1928 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
1932 autofill::REQUIRE_NONE)); 1929 autofill::REQUIRE_NONE));
1933 1930
1934 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 1931 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
1935 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 1932 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
1936 EXPECT_EQ(GURL("http://buh.com"), form2.action); 1933 EXPECT_EQ(GURL("http://buh.com"), form2.action);
1937 1934
1938 const std::vector<FormField>& fields2 = form2.fields; 1935 const std::vector<FormFieldData>& fields2 = form2.fields;
1939 ASSERT_EQ(3U, fields2.size()); 1936 ASSERT_EQ(3U, fields2.size());
1940 1937
1941 expected.form_control_type = ASCIIToUTF16("text"); 1938 expected.form_control_type = ASCIIToUTF16("text");
1942 1939
1943 expected.name = ASCIIToUTF16("firstname"); 1940 expected.name = ASCIIToUTF16("firstname");
1944 expected.value = ASCIIToUTF16("Broth"); 1941 expected.value = ASCIIToUTF16("Broth");
1945 expected.max_length = 5; 1942 expected.max_length = 5;
1946 expected.is_autofilled = true; 1943 expected.is_autofilled = true;
1947 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 1944 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
1948 1945
1949 expected.name = ASCIIToUTF16("lastname"); 1946 expected.name = ASCIIToUTF16("lastname");
1950 expected.value = ASCIIToUTF16("Jonatha"); 1947 expected.value = ASCIIToUTF16("Jonatha");
1951 expected.max_length = 7; 1948 expected.max_length = 7;
1952 expected.is_autofilled = true; 1949 expected.is_autofilled = true;
1953 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 1950 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
1954 1951
1955 expected.name = ASCIIToUTF16("email"); 1952 expected.name = ASCIIToUTF16("email");
1956 expected.value = ASCIIToUTF16("brotherj@"); 1953 expected.value = ASCIIToUTF16("brotherj@");
1957 expected.max_length = 9; 1954 expected.max_length = 9;
1958 expected.is_autofilled = true; 1955 expected.is_autofilled = true;
1959 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 1956 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
1960 } 1957 }
1961 1958
1962 // This test uses negative values of the maxlength attribute for input elements. 1959 // This test uses negative values of the maxlength attribute for input elements.
1963 // In this case, the maxlength of the input elements is set to the default 1960 // In this case, the maxlength of the input elements is set to the default
1964 // maxlength (defined in WebKit.) 1961 // maxlength (defined in WebKit.)
1965 TEST_F(FormAutofillTest, FillFormNegativeMaxLength) { 1962 TEST_F(FormAutofillTest, FillFormNegativeMaxLength) {
1966 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 1963 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
1967 " <INPUT type=\"text\" id=\"firstname\" maxlength=\"-1\"/>" 1964 " <INPUT type=\"text\" id=\"firstname\" maxlength=\"-1\"/>"
1968 " <INPUT type=\"text\" id=\"lastname\" maxlength=\"-10\"/>" 1965 " <INPUT type=\"text\" id=\"lastname\" maxlength=\"-10\"/>"
1969 " <INPUT type=\"text\" id=\"email\" maxlength=\"-13\"/>" 1966 " <INPUT type=\"text\" id=\"email\" maxlength=\"-13\"/>"
1970 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" 1967 " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
1971 "</FORM>"); 1968 "</FORM>");
1972 1969
1973 WebFrame* web_frame = GetMainFrame(); 1970 WebFrame* web_frame = GetMainFrame();
1974 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 1971 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
1975 1972
1976 FormCache form_cache; 1973 FormCache form_cache;
1977 std::vector<FormData> forms; 1974 std::vector<FormData> forms;
1978 form_cache.ExtractForms(*web_frame, &forms); 1975 form_cache.ExtractForms(*web_frame, &forms);
1979 ASSERT_EQ(1U, forms.size()); 1976 ASSERT_EQ(1U, forms.size());
1980 1977
1981 // Get the input element we want to find. 1978 // Get the input element we want to find.
1982 WebElement element = web_frame->document().getElementById("firstname"); 1979 WebElement element = web_frame->document().getElementById("firstname");
1983 WebInputElement input_element = element.to<WebInputElement>(); 1980 WebInputElement input_element = element.to<WebInputElement>();
1984 1981
1985 // Find the form that contains the input element. 1982 // Find the form that contains the input element.
1986 FormData form; 1983 FormData form;
1987 FormField field; 1984 FormFieldData field;
1988 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 1985 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
1989 autofill::REQUIRE_NONE)); 1986 autofill::REQUIRE_NONE));
1990 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 1987 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
1991 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 1988 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
1992 EXPECT_EQ(GURL("http://buh.com"), form.action); 1989 EXPECT_EQ(GURL("http://buh.com"), form.action);
1993 1990
1994 const std::vector<FormField>& fields = form.fields; 1991 const std::vector<FormFieldData>& fields = form.fields;
1995 ASSERT_EQ(3U, fields.size()); 1992 ASSERT_EQ(3U, fields.size());
1996 1993
1997 FormField expected; 1994 FormFieldData expected;
1998 expected.form_control_type = ASCIIToUTF16("text"); 1995 expected.form_control_type = ASCIIToUTF16("text");
1999 expected.max_length = WebInputElement::defaultMaxLength(); 1996 expected.max_length = WebInputElement::defaultMaxLength();
2000 1997
2001 expected.name = ASCIIToUTF16("firstname"); 1998 expected.name = ASCIIToUTF16("firstname");
2002 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 1999 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2003 2000
2004 expected.name = ASCIIToUTF16("lastname"); 2001 expected.name = ASCIIToUTF16("lastname");
2005 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2002 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2006 2003
2007 expected.name = ASCIIToUTF16("email"); 2004 expected.name = ASCIIToUTF16("email");
2008 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2005 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2009 2006
2010 // Fill the form. 2007 // Fill the form.
2011 form.fields[0].value = ASCIIToUTF16("Brother"); 2008 form.fields[0].value = ASCIIToUTF16("Brother");
2012 form.fields[1].value = ASCIIToUTF16("Jonathan"); 2009 form.fields[1].value = ASCIIToUTF16("Jonathan");
2013 form.fields[2].value = ASCIIToUTF16("brotherj@example.com"); 2010 form.fields[2].value = ASCIIToUTF16("brotherj@example.com");
2014 FillForm(form, input_element); 2011 FillForm(form, input_element);
2015 2012
2016 // Find the newly-filled form that contains the input element. 2013 // Find the newly-filled form that contains the input element.
2017 FormData form2; 2014 FormData form2;
2018 FormField field2; 2015 FormFieldData field2;
2019 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 2016 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
2020 autofill::REQUIRE_NONE)); 2017 autofill::REQUIRE_NONE));
2021 2018
2022 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 2019 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
2023 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2020 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2024 EXPECT_EQ(GURL("http://buh.com"), form2.action); 2021 EXPECT_EQ(GURL("http://buh.com"), form2.action);
2025 2022
2026 const std::vector<FormField>& fields2 = form2.fields; 2023 const std::vector<FormFieldData>& fields2 = form2.fields;
2027 ASSERT_EQ(3U, fields2.size()); 2024 ASSERT_EQ(3U, fields2.size());
2028 2025
2029 expected.name = ASCIIToUTF16("firstname"); 2026 expected.name = ASCIIToUTF16("firstname");
2030 expected.value = ASCIIToUTF16("Brother"); 2027 expected.value = ASCIIToUTF16("Brother");
2031 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2028 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2032 2029
2033 expected.name = ASCIIToUTF16("lastname"); 2030 expected.name = ASCIIToUTF16("lastname");
2034 expected.value = ASCIIToUTF16("Jonathan"); 2031 expected.value = ASCIIToUTF16("Jonathan");
2035 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2032 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2036 2033
2037 expected.name = ASCIIToUTF16("email"); 2034 expected.name = ASCIIToUTF16("email");
2038 expected.value = ASCIIToUTF16("brotherj@example.com"); 2035 expected.value = ASCIIToUTF16("brotherj@example.com");
2039 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2036 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2040 } 2037 }
2041 2038
2042 TEST_F(FormAutofillTest, FillFormEmptyName) { 2039 TEST_F(FormAutofillTest, FillFormEmptyName) {
2043 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2040 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2044 " <INPUT type=\"text\" id=\"firstname\"/>" 2041 " <INPUT type=\"text\" id=\"firstname\"/>"
2045 " <INPUT type=\"text\" id=\"lastname\"/>" 2042 " <INPUT type=\"text\" id=\"lastname\"/>"
2046 " <INPUT type=\"text\" id=\"email\"/>" 2043 " <INPUT type=\"text\" id=\"email\"/>"
2047 " <INPUT type=\"submit\" value=\"Send\"/>" 2044 " <INPUT type=\"submit\" value=\"Send\"/>"
2048 "</FORM>"); 2045 "</FORM>");
2049 2046
2050 WebFrame* web_frame = GetMainFrame(); 2047 WebFrame* web_frame = GetMainFrame();
2051 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 2048 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2052 2049
2053 FormCache form_cache; 2050 FormCache form_cache;
2054 std::vector<FormData> forms; 2051 std::vector<FormData> forms;
2055 form_cache.ExtractForms(*web_frame, &forms); 2052 form_cache.ExtractForms(*web_frame, &forms);
2056 ASSERT_EQ(1U, forms.size()); 2053 ASSERT_EQ(1U, forms.size());
2057 2054
2058 // Get the input element we want to find. 2055 // Get the input element we want to find.
2059 WebElement element = web_frame->document().getElementById("firstname"); 2056 WebElement element = web_frame->document().getElementById("firstname");
2060 WebInputElement input_element = element.to<WebInputElement>(); 2057 WebInputElement input_element = element.to<WebInputElement>();
2061 2058
2062 // Find the form that contains the input element. 2059 // Find the form that contains the input element.
2063 FormData form; 2060 FormData form;
2064 FormField field; 2061 FormFieldData field;
2065 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 2062 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
2066 autofill::REQUIRE_NONE)); 2063 autofill::REQUIRE_NONE));
2067 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2064 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2068 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 2065 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
2069 EXPECT_EQ(GURL("http://buh.com"), form.action); 2066 EXPECT_EQ(GURL("http://buh.com"), form.action);
2070 2067
2071 const std::vector<FormField>& fields = form.fields; 2068 const std::vector<FormFieldData>& fields = form.fields;
2072 ASSERT_EQ(3U, fields.size()); 2069 ASSERT_EQ(3U, fields.size());
2073 2070
2074 FormField expected; 2071 FormFieldData expected;
2075 expected.form_control_type = ASCIIToUTF16("text"); 2072 expected.form_control_type = ASCIIToUTF16("text");
2076 expected.max_length = WebInputElement::defaultMaxLength(); 2073 expected.max_length = WebInputElement::defaultMaxLength();
2077 2074
2078 expected.name = ASCIIToUTF16("firstname"); 2075 expected.name = ASCIIToUTF16("firstname");
2079 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2076 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2080 2077
2081 expected.name = ASCIIToUTF16("lastname"); 2078 expected.name = ASCIIToUTF16("lastname");
2082 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2079 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2083 2080
2084 expected.name = ASCIIToUTF16("email"); 2081 expected.name = ASCIIToUTF16("email");
2085 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2082 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2086 2083
2087 // Fill the form. 2084 // Fill the form.
2088 form.fields[0].value = ASCIIToUTF16("Wyatt"); 2085 form.fields[0].value = ASCIIToUTF16("Wyatt");
2089 form.fields[1].value = ASCIIToUTF16("Earp"); 2086 form.fields[1].value = ASCIIToUTF16("Earp");
2090 form.fields[2].value = ASCIIToUTF16("wyatt@example.com"); 2087 form.fields[2].value = ASCIIToUTF16("wyatt@example.com");
2091 FillForm(form, input_element); 2088 FillForm(form, input_element);
2092 2089
2093 // Find the newly-filled form that contains the input element. 2090 // Find the newly-filled form that contains the input element.
2094 FormData form2; 2091 FormData form2;
2095 FormField field2; 2092 FormFieldData field2;
2096 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 2093 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
2097 autofill::REQUIRE_NONE)); 2094 autofill::REQUIRE_NONE));
2098 2095
2099 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 2096 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
2100 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2097 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2101 EXPECT_EQ(GURL("http://buh.com"), form2.action); 2098 EXPECT_EQ(GURL("http://buh.com"), form2.action);
2102 2099
2103 const std::vector<FormField>& fields2 = form2.fields; 2100 const std::vector<FormFieldData>& fields2 = form2.fields;
2104 ASSERT_EQ(3U, fields2.size()); 2101 ASSERT_EQ(3U, fields2.size());
2105 2102
2106 expected.form_control_type = ASCIIToUTF16("text"); 2103 expected.form_control_type = ASCIIToUTF16("text");
2107 expected.max_length = WebInputElement::defaultMaxLength(); 2104 expected.max_length = WebInputElement::defaultMaxLength();
2108 2105
2109 expected.name = ASCIIToUTF16("firstname"); 2106 expected.name = ASCIIToUTF16("firstname");
2110 expected.value = ASCIIToUTF16("Wyatt"); 2107 expected.value = ASCIIToUTF16("Wyatt");
2111 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2108 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2112 2109
2113 expected.name = ASCIIToUTF16("lastname"); 2110 expected.name = ASCIIToUTF16("lastname");
2114 expected.value = ASCIIToUTF16("Earp"); 2111 expected.value = ASCIIToUTF16("Earp");
2115 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2112 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2116 2113
2117 expected.name = ASCIIToUTF16("email"); 2114 expected.name = ASCIIToUTF16("email");
2118 expected.value = ASCIIToUTF16("wyatt@example.com"); 2115 expected.value = ASCIIToUTF16("wyatt@example.com");
2119 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2116 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2120 } 2117 }
2121 2118
2122 TEST_F(FormAutofillTest, FillFormEmptyFormNames) { 2119 TEST_F(FormAutofillTest, FillFormEmptyFormNames) {
2123 LoadHTML("<FORM action=\"http://buh.com\" method=\"post\">" 2120 LoadHTML("<FORM action=\"http://buh.com\" method=\"post\">"
2124 " <INPUT type=\"text\" id=\"firstname\"/>" 2121 " <INPUT type=\"text\" id=\"firstname\"/>"
2125 " <INPUT type=\"text\" id=\"middlename\"/>" 2122 " <INPUT type=\"text\" id=\"middlename\"/>"
2126 " <INPUT type=\"text\" id=\"lastname\"/>" 2123 " <INPUT type=\"text\" id=\"lastname\"/>"
2127 " <INPUT type=\"submit\" value=\"Send\"/>" 2124 " <INPUT type=\"submit\" value=\"Send\"/>"
2128 "</FORM>" 2125 "</FORM>"
2129 "<FORM action=\"http://abc.com\" method=\"post\">" 2126 "<FORM action=\"http://abc.com\" method=\"post\">"
(...skipping 10 matching lines...) Expand all
2140 std::vector<FormData> forms; 2137 std::vector<FormData> forms;
2141 form_cache.ExtractForms(*web_frame, &forms); 2138 form_cache.ExtractForms(*web_frame, &forms);
2142 ASSERT_EQ(2U, forms.size()); 2139 ASSERT_EQ(2U, forms.size());
2143 2140
2144 // Get the input element we want to find. 2141 // Get the input element we want to find.
2145 WebElement element = web_frame->document().getElementById("apple"); 2142 WebElement element = web_frame->document().getElementById("apple");
2146 WebInputElement input_element = element.to<WebInputElement>(); 2143 WebInputElement input_element = element.to<WebInputElement>();
2147 2144
2148 // Find the form that contains the input element. 2145 // Find the form that contains the input element.
2149 FormData form; 2146 FormData form;
2150 FormField field; 2147 FormFieldData field;
2151 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 2148 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
2152 autofill::REQUIRE_NONE)); 2149 autofill::REQUIRE_NONE));
2153 EXPECT_EQ(string16(), form.name); 2150 EXPECT_EQ(string16(), form.name);
2154 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 2151 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
2155 EXPECT_EQ(GURL("http://abc.com"), form.action); 2152 EXPECT_EQ(GURL("http://abc.com"), form.action);
2156 2153
2157 const std::vector<FormField>& fields = form.fields; 2154 const std::vector<FormFieldData>& fields = form.fields;
2158 ASSERT_EQ(3U, fields.size()); 2155 ASSERT_EQ(3U, fields.size());
2159 2156
2160 FormField expected; 2157 FormFieldData expected;
2161 expected.form_control_type = ASCIIToUTF16("text"); 2158 expected.form_control_type = ASCIIToUTF16("text");
2162 expected.max_length = WebInputElement::defaultMaxLength(); 2159 expected.max_length = WebInputElement::defaultMaxLength();
2163 2160
2164 expected.name = ASCIIToUTF16("apple"); 2161 expected.name = ASCIIToUTF16("apple");
2165 expected.is_autofilled = false; 2162 expected.is_autofilled = false;
2166 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2163 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2167 2164
2168 expected.name = ASCIIToUTF16("banana"); 2165 expected.name = ASCIIToUTF16("banana");
2169 expected.is_autofilled = false; 2166 expected.is_autofilled = false;
2170 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2167 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2171 2168
2172 expected.name = ASCIIToUTF16("cantelope"); 2169 expected.name = ASCIIToUTF16("cantelope");
2173 expected.is_autofilled = false; 2170 expected.is_autofilled = false;
2174 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2171 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2175 2172
2176 // Fill the form. 2173 // Fill the form.
2177 form.fields[0].value = ASCIIToUTF16("Red"); 2174 form.fields[0].value = ASCIIToUTF16("Red");
2178 form.fields[1].value = ASCIIToUTF16("Yellow"); 2175 form.fields[1].value = ASCIIToUTF16("Yellow");
2179 form.fields[2].value = ASCIIToUTF16("Also Yellow"); 2176 form.fields[2].value = ASCIIToUTF16("Also Yellow");
2180 FillForm(form, input_element); 2177 FillForm(form, input_element);
2181 2178
2182 // Find the newly-filled form that contains the input element. 2179 // Find the newly-filled form that contains the input element.
2183 FormData form2; 2180 FormData form2;
2184 FormField field2; 2181 FormFieldData field2;
2185 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 2182 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
2186 autofill::REQUIRE_NONE)); 2183 autofill::REQUIRE_NONE));
2187 2184
2188 EXPECT_EQ(string16(), form2.name); 2185 EXPECT_EQ(string16(), form2.name);
2189 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2186 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2190 EXPECT_EQ(GURL("http://abc.com"), form2.action); 2187 EXPECT_EQ(GURL("http://abc.com"), form2.action);
2191 2188
2192 const std::vector<FormField>& fields2 = form2.fields; 2189 const std::vector<FormFieldData>& fields2 = form2.fields;
2193 ASSERT_EQ(3U, fields2.size()); 2190 ASSERT_EQ(3U, fields2.size());
2194 2191
2195 expected.name = ASCIIToUTF16("apple"); 2192 expected.name = ASCIIToUTF16("apple");
2196 expected.value = ASCIIToUTF16("Red"); 2193 expected.value = ASCIIToUTF16("Red");
2197 expected.is_autofilled = true; 2194 expected.is_autofilled = true;
2198 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 2195 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
2199 2196
2200 expected.name = ASCIIToUTF16("banana"); 2197 expected.name = ASCIIToUTF16("banana");
2201 expected.value = ASCIIToUTF16("Yellow"); 2198 expected.value = ASCIIToUTF16("Yellow");
2202 expected.is_autofilled = true; 2199 expected.is_autofilled = true;
2203 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 2200 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
2204 2201
2205 expected.name = ASCIIToUTF16("cantelope"); 2202 expected.name = ASCIIToUTF16("cantelope");
2206 expected.value = ASCIIToUTF16("Also Yellow"); 2203 expected.value = ASCIIToUTF16("Also Yellow");
2207 expected.is_autofilled = true; 2204 expected.is_autofilled = true;
2208 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 2205 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
2209 } 2206 }
2210 2207
2211 TEST_F(FormAutofillTest, ThreePartPhone) { 2208 TEST_F(FormAutofillTest, ThreePartPhone) {
2212 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 2209 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
2213 " Phone:" 2210 " Phone:"
2214 " <input type=\"text\" name=\"dayphone1\">" 2211 " <input type=\"text\" name=\"dayphone1\">"
2215 " -" 2212 " -"
2216 " <input type=\"text\" name=\"dayphone2\">" 2213 " <input type=\"text\" name=\"dayphone2\">"
2217 " -" 2214 " -"
2218 " <input type=\"text\" name=\"dayphone3\">" 2215 " <input type=\"text\" name=\"dayphone3\">"
(...skipping 14 matching lines...) Expand all
2233 EXPECT_TRUE(WebFormElementToFormData(forms[0], 2230 EXPECT_TRUE(WebFormElementToFormData(forms[0],
2234 WebFormControlElement(), 2231 WebFormControlElement(),
2235 autofill::REQUIRE_NONE, 2232 autofill::REQUIRE_NONE,
2236 autofill::EXTRACT_VALUE, 2233 autofill::EXTRACT_VALUE,
2237 &form, 2234 &form,
2238 NULL)); 2235 NULL));
2239 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2236 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2240 EXPECT_EQ(GURL(frame->document().url()), form.origin); 2237 EXPECT_EQ(GURL(frame->document().url()), form.origin);
2241 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2238 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2242 2239
2243 const std::vector<FormField>& fields = form.fields; 2240 const std::vector<FormFieldData>& fields = form.fields;
2244 ASSERT_EQ(4U, fields.size()); 2241 ASSERT_EQ(4U, fields.size());
2245 2242
2246 FormField expected; 2243 FormFieldData expected;
2247 expected.form_control_type = ASCIIToUTF16("text"); 2244 expected.form_control_type = ASCIIToUTF16("text");
2248 expected.max_length = WebInputElement::defaultMaxLength(); 2245 expected.max_length = WebInputElement::defaultMaxLength();
2249 2246
2250 expected.label = ASCIIToUTF16("Phone:"); 2247 expected.label = ASCIIToUTF16("Phone:");
2251 expected.name = ASCIIToUTF16("dayphone1"); 2248 expected.name = ASCIIToUTF16("dayphone1");
2252 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2249 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2253 2250
2254 expected.label = ASCIIToUTF16("-"); 2251 expected.label = ASCIIToUTF16("-");
2255 expected.name = ASCIIToUTF16("dayphone2"); 2252 expected.name = ASCIIToUTF16("dayphone2");
2256 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2253 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2257 2254
2258 expected.label = ASCIIToUTF16("-"); 2255 expected.label = ASCIIToUTF16("-");
2259 expected.name = ASCIIToUTF16("dayphone3"); 2256 expected.name = ASCIIToUTF16("dayphone3");
2260 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2257 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2261 2258
2262 expected.label = ASCIIToUTF16("ext.:"); 2259 expected.label = ASCIIToUTF16("ext.:");
2263 expected.name = ASCIIToUTF16("dayphone4"); 2260 expected.name = ASCIIToUTF16("dayphone4");
2264 EXPECT_FORM_FIELD_EQUALS(expected, fields[3]); 2261 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[3]);
2265 } 2262 }
2266 2263
2267 2264
2268 TEST_F(FormAutofillTest, MaxLengthFields) { 2265 TEST_F(FormAutofillTest, MaxLengthFields) {
2269 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" 2266 LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
2270 " Phone:" 2267 " Phone:"
2271 " <input type=\"text\" maxlength=\"3\" name=\"dayphone1\">" 2268 " <input type=\"text\" maxlength=\"3\" name=\"dayphone1\">"
2272 " -" 2269 " -"
2273 " <input type=\"text\" maxlength=\"3\" name=\"dayphone2\">" 2270 " <input type=\"text\" maxlength=\"3\" name=\"dayphone2\">"
2274 " -" 2271 " -"
(...skipping 17 matching lines...) Expand all
2292 EXPECT_TRUE(WebFormElementToFormData(forms[0], 2289 EXPECT_TRUE(WebFormElementToFormData(forms[0],
2293 WebFormControlElement(), 2290 WebFormControlElement(),
2294 autofill::REQUIRE_NONE, 2291 autofill::REQUIRE_NONE,
2295 autofill::EXTRACT_VALUE, 2292 autofill::EXTRACT_VALUE,
2296 &form, 2293 &form,
2297 NULL)); 2294 NULL));
2298 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2295 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2299 EXPECT_EQ(GURL(frame->document().url()), form.origin); 2296 EXPECT_EQ(GURL(frame->document().url()), form.origin);
2300 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2297 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2301 2298
2302 const std::vector<FormField>& fields = form.fields; 2299 const std::vector<FormFieldData>& fields = form.fields;
2303 ASSERT_EQ(6U, fields.size()); 2300 ASSERT_EQ(6U, fields.size());
2304 2301
2305 FormField expected; 2302 FormFieldData expected;
2306 expected.form_control_type = ASCIIToUTF16("text"); 2303 expected.form_control_type = ASCIIToUTF16("text");
2307 2304
2308 expected.label = ASCIIToUTF16("Phone:"); 2305 expected.label = ASCIIToUTF16("Phone:");
2309 expected.name = ASCIIToUTF16("dayphone1"); 2306 expected.name = ASCIIToUTF16("dayphone1");
2310 expected.max_length = 3; 2307 expected.max_length = 3;
2311 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2308 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2312 2309
2313 expected.label = ASCIIToUTF16("-"); 2310 expected.label = ASCIIToUTF16("-");
2314 expected.name = ASCIIToUTF16("dayphone2"); 2311 expected.name = ASCIIToUTF16("dayphone2");
2315 expected.max_length = 3; 2312 expected.max_length = 3;
2316 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2313 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2317 2314
2318 expected.label = ASCIIToUTF16("-"); 2315 expected.label = ASCIIToUTF16("-");
2319 expected.name = ASCIIToUTF16("dayphone3"); 2316 expected.name = ASCIIToUTF16("dayphone3");
2320 expected.max_length = 4; 2317 expected.max_length = 4;
2321 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2318 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2322 2319
2323 expected.label = ASCIIToUTF16("ext.:"); 2320 expected.label = ASCIIToUTF16("ext.:");
2324 expected.name = ASCIIToUTF16("dayphone4"); 2321 expected.name = ASCIIToUTF16("dayphone4");
2325 expected.max_length = 5; 2322 expected.max_length = 5;
2326 EXPECT_FORM_FIELD_EQUALS(expected, fields[3]); 2323 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[3]);
2327 2324
2328 // When unspecified |size|, default is returned. 2325 // When unspecified |size|, default is returned.
2329 expected.label = string16(); 2326 expected.label = string16();
2330 expected.name = ASCIIToUTF16("default1"); 2327 expected.name = ASCIIToUTF16("default1");
2331 expected.max_length = WebInputElement::defaultMaxLength(); 2328 expected.max_length = WebInputElement::defaultMaxLength();
2332 EXPECT_FORM_FIELD_EQUALS(expected, fields[4]); 2329 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[4]);
2333 2330
2334 // When invalid |size|, default is returned. 2331 // When invalid |size|, default is returned.
2335 expected.label = string16(); 2332 expected.label = string16();
2336 expected.name = ASCIIToUTF16("invalid1"); 2333 expected.name = ASCIIToUTF16("invalid1");
2337 expected.max_length = WebInputElement::defaultMaxLength(); 2334 expected.max_length = WebInputElement::defaultMaxLength();
2338 EXPECT_FORM_FIELD_EQUALS(expected, fields[5]); 2335 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[5]);
2339 } 2336 }
2340 2337
2341 // This test re-creates the experience of typing in a field then selecting a 2338 // This test re-creates the experience of typing in a field then selecting a
2342 // profile from the Autofill suggestions popup. The field that is being typed 2339 // profile from the Autofill suggestions popup. The field that is being typed
2343 // into should be filled even though it's not technically empty. 2340 // into should be filled even though it's not technically empty.
2344 TEST_F(FormAutofillTest, FillFormNonEmptyField) { 2341 TEST_F(FormAutofillTest, FillFormNonEmptyField) {
2345 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2342 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2346 " <INPUT type=\"text\" id=\"firstname\"/>" 2343 " <INPUT type=\"text\" id=\"firstname\"/>"
2347 " <INPUT type=\"text\" id=\"lastname\"/>" 2344 " <INPUT type=\"text\" id=\"lastname\"/>"
2348 " <INPUT type=\"text\" id=\"email\"/>" 2345 " <INPUT type=\"text\" id=\"email\"/>"
(...skipping 10 matching lines...) Expand all
2359 2356
2360 // Get the input element we want to find. 2357 // Get the input element we want to find.
2361 WebElement element = web_frame->document().getElementById("firstname"); 2358 WebElement element = web_frame->document().getElementById("firstname");
2362 WebInputElement input_element = element.to<WebInputElement>(); 2359 WebInputElement input_element = element.to<WebInputElement>();
2363 2360
2364 // Simulate typing by modifying the field value. 2361 // Simulate typing by modifying the field value.
2365 input_element.setValue(ASCIIToUTF16("Wy")); 2362 input_element.setValue(ASCIIToUTF16("Wy"));
2366 2363
2367 // Find the form that contains the input element. 2364 // Find the form that contains the input element.
2368 FormData form; 2365 FormData form;
2369 FormField field; 2366 FormFieldData field;
2370 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field, 2367 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form, &field,
2371 autofill::REQUIRE_NONE)); 2368 autofill::REQUIRE_NONE));
2372 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2369 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2373 EXPECT_EQ(GURL(web_frame->document().url()), form.origin); 2370 EXPECT_EQ(GURL(web_frame->document().url()), form.origin);
2374 EXPECT_EQ(GURL("http://buh.com"), form.action); 2371 EXPECT_EQ(GURL("http://buh.com"), form.action);
2375 2372
2376 const std::vector<FormField>& fields = form.fields; 2373 const std::vector<FormFieldData>& fields = form.fields;
2377 ASSERT_EQ(3U, fields.size()); 2374 ASSERT_EQ(3U, fields.size());
2378 2375
2379 FormField expected; 2376 FormFieldData expected;
2380 expected.form_control_type = ASCIIToUTF16("text"); 2377 expected.form_control_type = ASCIIToUTF16("text");
2381 expected.max_length = WebInputElement::defaultMaxLength(); 2378 expected.max_length = WebInputElement::defaultMaxLength();
2382 2379
2383 expected.name = ASCIIToUTF16("firstname"); 2380 expected.name = ASCIIToUTF16("firstname");
2384 expected.value = ASCIIToUTF16("Wy"); 2381 expected.value = ASCIIToUTF16("Wy");
2385 expected.is_autofilled = false; 2382 expected.is_autofilled = false;
2386 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2383 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2387 2384
2388 expected.name = ASCIIToUTF16("lastname"); 2385 expected.name = ASCIIToUTF16("lastname");
2389 expected.value = string16(); 2386 expected.value = string16();
2390 expected.is_autofilled = false; 2387 expected.is_autofilled = false;
2391 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2388 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2392 2389
2393 expected.name = ASCIIToUTF16("email"); 2390 expected.name = ASCIIToUTF16("email");
2394 expected.value = string16(); 2391 expected.value = string16();
2395 expected.is_autofilled = false; 2392 expected.is_autofilled = false;
2396 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2393 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2397 2394
2398 // Preview the form and verify that the cursor position has been updated. 2395 // Preview the form and verify that the cursor position has been updated.
2399 form.fields[0].value = ASCIIToUTF16("Wyatt"); 2396 form.fields[0].value = ASCIIToUTF16("Wyatt");
2400 form.fields[1].value = ASCIIToUTF16("Earp"); 2397 form.fields[1].value = ASCIIToUTF16("Earp");
2401 form.fields[2].value = ASCIIToUTF16("wyatt@example.com"); 2398 form.fields[2].value = ASCIIToUTF16("wyatt@example.com");
2402 PreviewForm(form, input_element); 2399 PreviewForm(form, input_element);
2403 EXPECT_EQ(2, input_element.selectionStart()); 2400 EXPECT_EQ(2, input_element.selectionStart());
2404 EXPECT_EQ(5, input_element.selectionEnd()); 2401 EXPECT_EQ(5, input_element.selectionEnd());
2405 2402
2406 // Fill the form. 2403 // Fill the form.
2407 FillForm(form, input_element); 2404 FillForm(form, input_element);
2408 2405
2409 // Find the newly-filled form that contains the input element. 2406 // Find the newly-filled form that contains the input element.
2410 FormData form2; 2407 FormData form2;
2411 FormField field2; 2408 FormFieldData field2;
2412 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2, 2409 EXPECT_TRUE(FindFormAndFieldForInputElement(input_element, &form2, &field2,
2413 autofill::REQUIRE_NONE)); 2410 autofill::REQUIRE_NONE));
2414 2411
2415 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 2412 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
2416 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2413 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2417 EXPECT_EQ(GURL("http://buh.com"), form2.action); 2414 EXPECT_EQ(GURL("http://buh.com"), form2.action);
2418 2415
2419 const std::vector<FormField>& fields2 = form2.fields; 2416 const std::vector<FormFieldData>& fields2 = form2.fields;
2420 ASSERT_EQ(3U, fields2.size()); 2417 ASSERT_EQ(3U, fields2.size());
2421 2418
2422 expected.name = ASCIIToUTF16("firstname"); 2419 expected.name = ASCIIToUTF16("firstname");
2423 expected.value = ASCIIToUTF16("Wyatt"); 2420 expected.value = ASCIIToUTF16("Wyatt");
2424 expected.is_autofilled = true; 2421 expected.is_autofilled = true;
2425 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 2422 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
2426 2423
2427 expected.name = ASCIIToUTF16("lastname"); 2424 expected.name = ASCIIToUTF16("lastname");
2428 expected.value = ASCIIToUTF16("Earp"); 2425 expected.value = ASCIIToUTF16("Earp");
2429 expected.is_autofilled = true; 2426 expected.is_autofilled = true;
2430 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 2427 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
2431 2428
2432 expected.name = ASCIIToUTF16("email"); 2429 expected.name = ASCIIToUTF16("email");
2433 expected.value = ASCIIToUTF16("wyatt@example.com"); 2430 expected.value = ASCIIToUTF16("wyatt@example.com");
2434 expected.is_autofilled = true; 2431 expected.is_autofilled = true;
2435 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 2432 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
2436 2433
2437 // Verify that the cursor position has been updated. 2434 // Verify that the cursor position has been updated.
2438 EXPECT_EQ(5, input_element.selectionStart()); 2435 EXPECT_EQ(5, input_element.selectionStart());
2439 EXPECT_EQ(5, input_element.selectionEnd()); 2436 EXPECT_EQ(5, input_element.selectionEnd());
2440 } 2437 }
2441 2438
2442 TEST_F(FormAutofillTest, ClearFormWithNode) { 2439 TEST_F(FormAutofillTest, ClearFormWithNode) {
2443 LoadHTML( 2440 LoadHTML(
2444 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2441 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2445 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 2442 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
(...skipping 22 matching lines...) Expand all
2468 notenabled.setValue(WebString::fromUTF8("no clear")); 2465 notenabled.setValue(WebString::fromUTF8("no clear"));
2469 2466
2470 // Clear the form. 2467 // Clear the form.
2471 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 2468 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
2472 2469
2473 // Verify that the auto-filled attribute has been turned off. 2470 // Verify that the auto-filled attribute has been turned off.
2474 EXPECT_FALSE(firstname.isAutofilled()); 2471 EXPECT_FALSE(firstname.isAutofilled());
2475 2472
2476 // Verify the form is cleared. 2473 // Verify the form is cleared.
2477 FormData form2; 2474 FormData form2;
2478 FormField field2; 2475 FormFieldData field2;
2479 EXPECT_TRUE(FindFormAndFieldForInputElement(firstname, &form2, &field2, 2476 EXPECT_TRUE(FindFormAndFieldForInputElement(firstname, &form2, &field2,
2480 autofill::REQUIRE_NONE)); 2477 autofill::REQUIRE_NONE));
2481 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 2478 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
2482 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2479 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2483 EXPECT_EQ(GURL("http://buh.com"), form2.action); 2480 EXPECT_EQ(GURL("http://buh.com"), form2.action);
2484 2481
2485 const std::vector<FormField>& fields2 = form2.fields; 2482 const std::vector<FormFieldData>& fields2 = form2.fields;
2486 ASSERT_EQ(4U, fields2.size()); 2483 ASSERT_EQ(4U, fields2.size());
2487 2484
2488 FormField expected; 2485 FormFieldData expected;
2489 expected.form_control_type = ASCIIToUTF16("text"); 2486 expected.form_control_type = ASCIIToUTF16("text");
2490 expected.max_length = WebInputElement::defaultMaxLength(); 2487 expected.max_length = WebInputElement::defaultMaxLength();
2491 2488
2492 expected.name = ASCIIToUTF16("firstname"); 2489 expected.name = ASCIIToUTF16("firstname");
2493 expected.value = string16(); 2490 expected.value = string16();
2494 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 2491 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
2495 2492
2496 expected.name = ASCIIToUTF16("lastname"); 2493 expected.name = ASCIIToUTF16("lastname");
2497 expected.value = string16(); 2494 expected.value = string16();
2498 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 2495 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
2499 2496
2500 expected.name = ASCIIToUTF16("noAC"); 2497 expected.name = ASCIIToUTF16("noAC");
2501 expected.value = string16(); 2498 expected.value = string16();
2502 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 2499 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
2503 2500
2504 expected.name = ASCIIToUTF16("notenabled"); 2501 expected.name = ASCIIToUTF16("notenabled");
2505 expected.value = ASCIIToUTF16("no clear"); 2502 expected.value = ASCIIToUTF16("no clear");
2506 EXPECT_FORM_FIELD_EQUALS(expected, fields2[3]); 2503 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[3]);
2507 2504
2508 // Verify that the cursor position has been updated. 2505 // Verify that the cursor position has been updated.
2509 EXPECT_EQ(0, firstname.selectionStart()); 2506 EXPECT_EQ(0, firstname.selectionStart());
2510 EXPECT_EQ(0, firstname.selectionEnd()); 2507 EXPECT_EQ(0, firstname.selectionEnd());
2511 } 2508 }
2512 2509
2513 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) { 2510 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) {
2514 LoadHTML( 2511 LoadHTML(
2515 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2512 "<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2516 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 2513 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
(...skipping 26 matching lines...) Expand all
2543 select_element.setValue(WebString::fromUTF8("AK")); 2540 select_element.setValue(WebString::fromUTF8("AK"));
2544 2541
2545 // Clear the form. 2542 // Clear the form.
2546 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname)); 2543 EXPECT_TRUE(form_cache.ClearFormWithElement(firstname));
2547 2544
2548 // Verify that the auto-filled attribute has been turned off. 2545 // Verify that the auto-filled attribute has been turned off.
2549 EXPECT_FALSE(firstname.isAutofilled()); 2546 EXPECT_FALSE(firstname.isAutofilled());
2550 2547
2551 // Verify the form is cleared. 2548 // Verify the form is cleared.
2552 FormData form2; 2549 FormData form2;
2553 FormField field2; 2550 FormFieldData field2;
2554 EXPECT_TRUE(FindFormAndFieldForInputElement(firstname, &form2, &field2, 2551 EXPECT_TRUE(FindFormAndFieldForInputElement(firstname, &form2, &field2,
2555 autofill::REQUIRE_NONE)); 2552 autofill::REQUIRE_NONE));
2556 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 2553 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
2557 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 2554 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
2558 EXPECT_EQ(GURL("http://buh.com"), form2.action); 2555 EXPECT_EQ(GURL("http://buh.com"), form2.action);
2559 2556
2560 const std::vector<FormField>& fields2 = form2.fields; 2557 const std::vector<FormFieldData>& fields2 = form2.fields;
2561 ASSERT_EQ(3U, fields2.size()); 2558 ASSERT_EQ(3U, fields2.size());
2562 2559
2563 FormField expected; 2560 FormFieldData expected;
2564 2561
2565 expected.name = ASCIIToUTF16("firstname"); 2562 expected.name = ASCIIToUTF16("firstname");
2566 expected.value = string16(); 2563 expected.value = string16();
2567 expected.form_control_type = ASCIIToUTF16("text"); 2564 expected.form_control_type = ASCIIToUTF16("text");
2568 expected.max_length = WebInputElement::defaultMaxLength(); 2565 expected.max_length = WebInputElement::defaultMaxLength();
2569 EXPECT_FORM_FIELD_EQUALS(expected, fields2[0]); 2566 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
2570 2567
2571 expected.name = ASCIIToUTF16("lastname"); 2568 expected.name = ASCIIToUTF16("lastname");
2572 expected.value = string16(); 2569 expected.value = string16();
2573 expected.form_control_type = ASCIIToUTF16("text"); 2570 expected.form_control_type = ASCIIToUTF16("text");
2574 expected.max_length = WebInputElement::defaultMaxLength(); 2571 expected.max_length = WebInputElement::defaultMaxLength();
2575 EXPECT_FORM_FIELD_EQUALS(expected, fields2[1]); 2572 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
2576 2573
2577 expected.name = ASCIIToUTF16("state"); 2574 expected.name = ASCIIToUTF16("state");
2578 expected.value = ASCIIToUTF16("?"); 2575 expected.value = ASCIIToUTF16("?");
2579 expected.form_control_type = ASCIIToUTF16("select-one"); 2576 expected.form_control_type = ASCIIToUTF16("select-one");
2580 expected.max_length = 0; 2577 expected.max_length = 0;
2581 EXPECT_FORM_FIELD_EQUALS(expected, fields2[2]); 2578 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
2582 2579
2583 // Verify that the cursor position has been updated. 2580 // Verify that the cursor position has been updated.
2584 EXPECT_EQ(0, firstname.selectionStart()); 2581 EXPECT_EQ(0, firstname.selectionStart());
2585 EXPECT_EQ(0, firstname.selectionEnd()); 2582 EXPECT_EQ(0, firstname.selectionEnd());
2586 } 2583 }
2587 2584
2588 TEST_F(FormAutofillTest, ClearPreviewedFormWithElement) { 2585 TEST_F(FormAutofillTest, ClearPreviewedFormWithElement) {
2589 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2586 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2590 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 2587 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
2591 " <INPUT type=\"text\" id=\"lastname\"/>" 2588 " <INPUT type=\"text\" id=\"lastname\"/>"
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
2879 // Extract the country select-one value as text. 2876 // Extract the country select-one value as text.
2880 EXPECT_TRUE(WebFormElementToFormData( 2877 EXPECT_TRUE(WebFormElementToFormData(
2881 forms[0], WebFormControlElement(), autofill::REQUIRE_NONE, 2878 forms[0], WebFormControlElement(), autofill::REQUIRE_NONE,
2882 static_cast<autofill::ExtractMask>( 2879 static_cast<autofill::ExtractMask>(
2883 autofill::EXTRACT_VALUE | autofill::EXTRACT_OPTION_TEXT), 2880 autofill::EXTRACT_VALUE | autofill::EXTRACT_OPTION_TEXT),
2884 &form, NULL)); 2881 &form, NULL));
2885 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2882 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2886 EXPECT_EQ(GURL(frame->document().url()), form.origin); 2883 EXPECT_EQ(GURL(frame->document().url()), form.origin);
2887 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2884 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2888 2885
2889 const std::vector<FormField>& fields = form.fields; 2886 const std::vector<FormFieldData>& fields = form.fields;
2890 ASSERT_EQ(3U, fields.size()); 2887 ASSERT_EQ(3U, fields.size());
2891 2888
2892 FormField expected; 2889 FormFieldData expected;
2893 2890
2894 expected.name = ASCIIToUTF16("firstname"); 2891 expected.name = ASCIIToUTF16("firstname");
2895 expected.value = ASCIIToUTF16("John"); 2892 expected.value = ASCIIToUTF16("John");
2896 expected.form_control_type = ASCIIToUTF16("text"); 2893 expected.form_control_type = ASCIIToUTF16("text");
2897 expected.max_length = WebInputElement::defaultMaxLength(); 2894 expected.max_length = WebInputElement::defaultMaxLength();
2898 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2895 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2899 2896
2900 expected.name = ASCIIToUTF16("lastname"); 2897 expected.name = ASCIIToUTF16("lastname");
2901 expected.value = ASCIIToUTF16("Smith"); 2898 expected.value = ASCIIToUTF16("Smith");
2902 expected.form_control_type = ASCIIToUTF16("text"); 2899 expected.form_control_type = ASCIIToUTF16("text");
2903 expected.max_length = WebInputElement::defaultMaxLength(); 2900 expected.max_length = WebInputElement::defaultMaxLength();
2904 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2901 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2905 2902
2906 expected.name = ASCIIToUTF16("country"); 2903 expected.name = ASCIIToUTF16("country");
2907 expected.value = ASCIIToUTF16("Albania"); 2904 expected.value = ASCIIToUTF16("Albania");
2908 expected.form_control_type = ASCIIToUTF16("select-one"); 2905 expected.form_control_type = ASCIIToUTF16("select-one");
2909 expected.max_length = 0; 2906 expected.max_length = 0;
2910 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2907 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2911 2908
2912 form.fields.clear(); 2909 form.fields.clear();
2913 // Extract the country select-one value as value. 2910 // Extract the country select-one value as value.
2914 EXPECT_TRUE(WebFormElementToFormData(forms[0], 2911 EXPECT_TRUE(WebFormElementToFormData(forms[0],
2915 WebFormControlElement(), 2912 WebFormControlElement(),
2916 autofill::REQUIRE_NONE, 2913 autofill::REQUIRE_NONE,
2917 autofill::EXTRACT_VALUE, 2914 autofill::EXTRACT_VALUE,
2918 &form, 2915 &form,
2919 NULL)); 2916 NULL));
2920 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name); 2917 EXPECT_EQ(ASCIIToUTF16("TestForm"), form.name);
2921 EXPECT_EQ(GURL(frame->document().url()), form.origin); 2918 EXPECT_EQ(GURL(frame->document().url()), form.origin);
2922 EXPECT_EQ(GURL("http://cnn.com"), form.action); 2919 EXPECT_EQ(GURL("http://cnn.com"), form.action);
2923 2920
2924 ASSERT_EQ(3U, fields.size()); 2921 ASSERT_EQ(3U, fields.size());
2925 2922
2926 expected.name = ASCIIToUTF16("firstname"); 2923 expected.name = ASCIIToUTF16("firstname");
2927 expected.value = ASCIIToUTF16("John"); 2924 expected.value = ASCIIToUTF16("John");
2928 expected.form_control_type = ASCIIToUTF16("text"); 2925 expected.form_control_type = ASCIIToUTF16("text");
2929 expected.max_length = WebInputElement::defaultMaxLength(); 2926 expected.max_length = WebInputElement::defaultMaxLength();
2930 EXPECT_FORM_FIELD_EQUALS(expected, fields[0]); 2927 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[0]);
2931 2928
2932 expected.name = ASCIIToUTF16("lastname"); 2929 expected.name = ASCIIToUTF16("lastname");
2933 expected.value = ASCIIToUTF16("Smith"); 2930 expected.value = ASCIIToUTF16("Smith");
2934 expected.form_control_type = ASCIIToUTF16("text"); 2931 expected.form_control_type = ASCIIToUTF16("text");
2935 expected.max_length = WebInputElement::defaultMaxLength(); 2932 expected.max_length = WebInputElement::defaultMaxLength();
2936 EXPECT_FORM_FIELD_EQUALS(expected, fields[1]); 2933 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
2937 2934
2938 expected.name = ASCIIToUTF16("country"); 2935 expected.name = ASCIIToUTF16("country");
2939 expected.value = ASCIIToUTF16("AL"); 2936 expected.value = ASCIIToUTF16("AL");
2940 expected.form_control_type = ASCIIToUTF16("select-one"); 2937 expected.form_control_type = ASCIIToUTF16("select-one");
2941 expected.max_length = 0; 2938 expected.max_length = 0;
2942 EXPECT_FORM_FIELD_EQUALS(expected, fields[2]); 2939 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
2943 } 2940 }
OLDNEW
« no previous file with comments | « chrome/renderer/autofill/form_autocomplete_browsertest.cc ('k') | chrome/renderer/autofill/form_autofill_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698