OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <list> | 5 #include <list> |
6 | 6 |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "base/test/test_timeouts.h" | 8 #include "base/test/test_timeouts.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/autofill/autofill_download.h" | 10 #include "chrome/browser/autofill/autofill_download.h" |
11 #include "chrome/browser/autofill/autofill_field.h" | 11 #include "chrome/browser/autofill/autofill_field.h" |
12 #include "chrome/browser/autofill/autofill_metrics.h" | 12 #include "chrome/browser/autofill/autofill_metrics.h" |
13 #include "chrome/browser/autofill/autofill_type.h" | 13 #include "chrome/browser/autofill/autofill_type.h" |
14 #include "chrome/browser/autofill/form_structure.h" | 14 #include "chrome/browser/autofill/form_structure.h" |
15 #include "chrome/test/base/test_url_request_context_getter.h" | 15 #include "chrome/test/base/test_url_request_context_getter.h" |
16 #include "chrome/test/base/testing_profile.h" | 16 #include "chrome/test/base/testing_profile.h" |
17 #include "chrome/test/testing_browser_process.h" | 17 #include "chrome/test/testing_browser_process.h" |
18 #include "chrome/test/testing_browser_process_test.h" | 18 #include "chrome/test/testing_browser_process_test.h" |
19 #include "content/test/test_url_fetcher_factory.h" | 19 #include "content/test/test_url_fetcher_factory.h" |
20 #include "net/url_request/url_request_status.h" | 20 #include "net/url_request/url_request_status.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" | 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h" |
24 #include "webkit/glue/form_data.h" | 24 #include "webkit/glue/form_data.h" |
25 | 25 |
26 using webkit_glue::FormData; | 26 using webkit_glue::FormData; |
| 27 using webkit_glue::FormField; |
27 using WebKit::WebInputElement; | 28 using WebKit::WebInputElement; |
28 | 29 |
29 namespace { | 30 namespace { |
30 | 31 |
31 class MockAutofillMetrics : public AutofillMetrics { | 32 class MockAutofillMetrics : public AutofillMetrics { |
32 public: | 33 public: |
33 MockAutofillMetrics() {} | 34 MockAutofillMetrics() {} |
34 MOCK_CONST_METHOD1(LogServerQueryMetric, void(ServerQueryMetric metric)); | 35 MOCK_CONST_METHOD1(LogServerQueryMetric, void(ServerQueryMetric metric)); |
35 | 36 |
36 private: | 37 private: |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 typedef TestingBrowserProcessTest AutofillDownloadTest; | 118 typedef TestingBrowserProcessTest AutofillDownloadTest; |
118 | 119 |
119 TEST_F(AutofillDownloadTest, QueryAndUploadTest) { | 120 TEST_F(AutofillDownloadTest, QueryAndUploadTest) { |
120 MessageLoopForUI message_loop; | 121 MessageLoopForUI message_loop; |
121 // Create and register factory. | 122 // Create and register factory. |
122 AutofillDownloadTestHelper helper; | 123 AutofillDownloadTestHelper helper; |
123 TestURLFetcherFactory factory; | 124 TestURLFetcherFactory factory; |
124 | 125 |
125 FormData form; | 126 FormData form; |
126 form.method = ASCIIToUTF16("post"); | 127 form.method = ASCIIToUTF16("post"); |
127 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 128 |
128 ASCIIToUTF16("username"), | 129 FormField field; |
129 string16(), | 130 field.label = ASCIIToUTF16("username"); |
130 ASCIIToUTF16("text"), | 131 field.name = ASCIIToUTF16("username"); |
131 0, | 132 field.form_control_type = ASCIIToUTF16("text"); |
132 false)); | 133 form.fields.push_back(field); |
133 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 134 |
134 ASCIIToUTF16("firstname"), | 135 field.label = ASCIIToUTF16("First Name"); |
135 string16(), | 136 field.name = ASCIIToUTF16("firstname"); |
136 ASCIIToUTF16("text"), | 137 field.form_control_type = ASCIIToUTF16("text"); |
137 0, | 138 form.fields.push_back(field); |
138 false)); | 139 |
139 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 140 field.label = ASCIIToUTF16("Last Name"); |
140 ASCIIToUTF16("lastname"), | 141 field.name = ASCIIToUTF16("lastname"); |
141 string16(), | 142 field.form_control_type = ASCIIToUTF16("text"); |
142 ASCIIToUTF16("text"), | 143 form.fields.push_back(field); |
143 0, | 144 |
144 false)); | 145 field.label = ASCIIToUTF16("email"); |
145 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"), | 146 field.name = ASCIIToUTF16("email"); |
146 ASCIIToUTF16("email"), | 147 field.form_control_type = ASCIIToUTF16("text"); |
147 string16(), | 148 form.fields.push_back(field); |
148 ASCIIToUTF16("text"), | 149 |
149 0, | 150 field.label = ASCIIToUTF16("email2"); |
150 false)); | 151 field.name = ASCIIToUTF16("email2"); |
151 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email2"), | 152 field.form_control_type = ASCIIToUTF16("text"); |
152 ASCIIToUTF16("email2"), | 153 form.fields.push_back(field); |
153 string16(), | 154 |
154 ASCIIToUTF16("text"), | 155 field.label = ASCIIToUTF16("password"); |
155 0, | 156 field.name = ASCIIToUTF16("password"); |
156 false)); | 157 field.form_control_type = ASCIIToUTF16("password"); |
157 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("password"), | 158 form.fields.push_back(field); |
158 ASCIIToUTF16("password"), | 159 |
159 string16(), | 160 field.label = string16(); |
160 ASCIIToUTF16("password"), | 161 field.name = ASCIIToUTF16("Submit"); |
161 0, | 162 field.form_control_type = ASCIIToUTF16("submit"); |
162 false)); | 163 form.fields.push_back(field); |
163 form.fields.push_back(webkit_glue::FormField(string16(), | |
164 ASCIIToUTF16("Submit"), | |
165 string16(), | |
166 ASCIIToUTF16("submit"), | |
167 0, | |
168 false)); | |
169 | 164 |
170 FormStructure *form_structure = new FormStructure(form); | 165 FormStructure *form_structure = new FormStructure(form); |
171 ScopedVector<FormStructure> form_structures; | 166 ScopedVector<FormStructure> form_structures; |
172 form_structures.push_back(form_structure); | 167 form_structures.push_back(form_structure); |
173 | 168 |
174 form.fields.clear(); | 169 form.fields.clear(); |
175 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("address"), | 170 |
176 ASCIIToUTF16("address"), | 171 field.label = ASCIIToUTF16("address"); |
177 string16(), | 172 field.name = ASCIIToUTF16("address"); |
178 ASCIIToUTF16("text"), | 173 field.form_control_type = ASCIIToUTF16("text"); |
179 0, | 174 form.fields.push_back(field); |
180 false)); | 175 |
181 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("address2"), | 176 field.label = ASCIIToUTF16("address2"); |
182 ASCIIToUTF16("address2"), | 177 field.name = ASCIIToUTF16("address2"); |
183 string16(), | 178 field.form_control_type = ASCIIToUTF16("text"); |
184 ASCIIToUTF16("text"), | 179 form.fields.push_back(field); |
185 0, | 180 |
186 false)); | 181 field.label = ASCIIToUTF16("city"); |
187 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("city"), | 182 field.name = ASCIIToUTF16("city"); |
188 ASCIIToUTF16("city"), | 183 field.form_control_type = ASCIIToUTF16("text"); |
189 string16(), | 184 form.fields.push_back(field); |
190 ASCIIToUTF16("text"), | 185 |
191 0, | 186 field.label = string16(); |
192 false)); | 187 field.name = ASCIIToUTF16("Submit"); |
193 form.fields.push_back(webkit_glue::FormField(string16(), | 188 field.form_control_type = ASCIIToUTF16("submit"); |
194 ASCIIToUTF16("Submit"), | 189 form.fields.push_back(field); |
195 string16(), | 190 |
196 ASCIIToUTF16("submit"), | |
197 0, | |
198 false)); | |
199 form_structure = new FormStructure(form); | 191 form_structure = new FormStructure(form); |
200 form_structures.push_back(form_structure); | 192 form_structures.push_back(form_structure); |
201 | 193 |
202 // Request with id 0. | 194 // Request with id 0. |
203 MockAutofillMetrics mock_metric_logger; | 195 MockAutofillMetrics mock_metric_logger; |
204 EXPECT_CALL(mock_metric_logger, | 196 EXPECT_CALL(mock_metric_logger, |
205 LogServerQueryMetric(AutofillMetrics::QUERY_SENT)).Times(2); | 197 LogServerQueryMetric(AutofillMetrics::QUERY_SENT)).Times(2); |
206 // First one will fail because context is not set up. | 198 // First one will fail because context is not set up. |
207 EXPECT_FALSE(helper.download_manager.StartQueryRequest(form_structures, | 199 EXPECT_FALSE(helper.download_manager.StartQueryRequest(form_structures, |
208 mock_metric_logger)); | 200 mock_metric_logger)); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]), | 285 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]), |
294 true, | 286 true, |
295 FieldTypeSet())); | 287 FieldTypeSet())); |
296 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[1]), | 288 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[1]), |
297 false, | 289 false, |
298 FieldTypeSet())); | 290 FieldTypeSet())); |
299 fetcher = factory.GetFetcherByID(3); | 291 fetcher = factory.GetFetcherByID(3); |
300 EXPECT_EQ(NULL, fetcher); | 292 EXPECT_EQ(NULL, fetcher); |
301 | 293 |
302 // Modify form structures to miss the cache. | 294 // Modify form structures to miss the cache. |
303 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address line 2"), | 295 field.label = ASCIIToUTF16("Address line 2"); |
304 ASCIIToUTF16("address2"), | 296 field.name = ASCIIToUTF16("address2"); |
305 string16(), | 297 field.form_control_type = ASCIIToUTF16("text"); |
306 ASCIIToUTF16("text"), | 298 form.fields.push_back(field); |
307 0, | |
308 false)); | |
309 form_structure = new FormStructure(form); | 299 form_structure = new FormStructure(form); |
310 form_structures.push_back(form_structure); | 300 form_structures.push_back(form_structure); |
311 | 301 |
312 // Request with id 3. | 302 // Request with id 3. |
313 EXPECT_CALL(mock_metric_logger, | 303 EXPECT_CALL(mock_metric_logger, |
314 LogServerQueryMetric(AutofillMetrics::QUERY_SENT)).Times(1); | 304 LogServerQueryMetric(AutofillMetrics::QUERY_SENT)).Times(1); |
315 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures, | 305 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures, |
316 mock_metric_logger)); | 306 mock_metric_logger)); |
317 fetcher = factory.GetFetcherByID(3); | 307 fetcher = factory.GetFetcherByID(3); |
318 ASSERT_TRUE(fetcher); | 308 ASSERT_TRUE(fetcher); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 | 356 |
367 TEST_F(AutofillDownloadTest, CacheQueryTest) { | 357 TEST_F(AutofillDownloadTest, CacheQueryTest) { |
368 MessageLoopForUI message_loop; | 358 MessageLoopForUI message_loop; |
369 AutofillDownloadTestHelper helper; | 359 AutofillDownloadTestHelper helper; |
370 // Create and register factory. | 360 // Create and register factory. |
371 TestURLFetcherFactory factory; | 361 TestURLFetcherFactory factory; |
372 helper.InitContextGetter(); | 362 helper.InitContextGetter(); |
373 | 363 |
374 FormData form; | 364 FormData form; |
375 form.method = ASCIIToUTF16("post"); | 365 form.method = ASCIIToUTF16("post"); |
376 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"), | 366 |
377 ASCIIToUTF16("username"), | 367 FormField field; |
378 string16(), | 368 field.form_control_type = ASCIIToUTF16("text"); |
379 ASCIIToUTF16("text"), | 369 |
380 0, | 370 field.label = ASCIIToUTF16("username"); |
381 false)); | 371 field.name = ASCIIToUTF16("username"); |
382 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), | 372 form.fields.push_back(field); |
383 ASCIIToUTF16("firstname"), | 373 |
384 string16(), | 374 field.label = ASCIIToUTF16("First Name"); |
385 ASCIIToUTF16("text"), | 375 field.name = ASCIIToUTF16("firstname"); |
386 0, | 376 form.fields.push_back(field); |
387 false)); | 377 |
388 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), | 378 field.label = ASCIIToUTF16("Last Name"); |
389 ASCIIToUTF16("lastname"), | 379 field.name = ASCIIToUTF16("lastname"); |
390 string16(), | 380 form.fields.push_back(field); |
391 ASCIIToUTF16("text"), | 381 |
392 0, | |
393 false)); | |
394 FormStructure *form_structure = new FormStructure(form); | 382 FormStructure *form_structure = new FormStructure(form); |
395 ScopedVector<FormStructure> form_structures0; | 383 ScopedVector<FormStructure> form_structures0; |
396 form_structures0.push_back(form_structure); | 384 form_structures0.push_back(form_structure); |
397 | 385 |
398 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"), | 386 // Add a slightly different form, which should result in a different request. |
399 ASCIIToUTF16("email"), | 387 field.label = ASCIIToUTF16("email"); |
400 string16(), | 388 field.name = ASCIIToUTF16("email"); |
401 ASCIIToUTF16("text"), | 389 form.fields.push_back(field); |
402 0, | |
403 false)); | |
404 // Slightly different form - so different request. | |
405 form_structure = new FormStructure(form); | 390 form_structure = new FormStructure(form); |
406 ScopedVector<FormStructure> form_structures1; | 391 ScopedVector<FormStructure> form_structures1; |
407 form_structures1.push_back(form_structure); | 392 form_structures1.push_back(form_structure); |
408 | 393 |
409 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email2"), | 394 // Add another slightly different form, which should also result in a |
410 ASCIIToUTF16("email2"), | 395 // different request. |
411 string16(), | 396 field.label = ASCIIToUTF16("email2"); |
412 ASCIIToUTF16("text"), | 397 field.name = ASCIIToUTF16("email2"); |
413 0, | 398 form.fields.push_back(field); |
414 false)); | |
415 // Slightly different form - so different request. | |
416 form_structure = new FormStructure(form); | 399 form_structure = new FormStructure(form); |
417 ScopedVector<FormStructure> form_structures2; | 400 ScopedVector<FormStructure> form_structures2; |
418 form_structures2.push_back(form_structure); | 401 form_structures2.push_back(form_structure); |
419 | 402 |
420 // Limit cache to two forms. | 403 // Limit cache to two forms. |
421 helper.LimitCache(2); | 404 helper.LimitCache(2); |
422 | 405 |
423 const char *responses[] = { | 406 const char *responses[] = { |
424 "<autofillqueryresponse>" | 407 "<autofillqueryresponse>" |
425 "<field autofilltype=\"0\" />" | 408 "<field autofilltype=\"0\" />" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 fetcher = factory.GetFetcherByID(3); | 518 fetcher = factory.GetFetcherByID(3); |
536 ASSERT_TRUE(fetcher); | 519 ASSERT_TRUE(fetcher); |
537 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(), | 520 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(), |
538 net::URLRequestStatus(), | 521 net::URLRequestStatus(), |
539 200, net::ResponseCookies(), | 522 200, net::ResponseCookies(), |
540 std::string(responses[0])); | 523 std::string(responses[0])); |
541 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size()); | 524 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size()); |
542 EXPECT_EQ(responses[0], helper.responses_.front().response); | 525 EXPECT_EQ(responses[0], helper.responses_.front().response); |
543 } | 526 } |
544 | 527 |
OLD | NEW |