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

Side by Side Diff: chrome/browser/autofill/autofill_download_unittest.cc

Issue 6366014: Fix for: Autofill should not ping the server again for the same form... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
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"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 AutoFillDownloadTestHelper() 46 AutoFillDownloadTestHelper()
47 : download_manager(&profile) { 47 : download_manager(&profile) {
48 download_manager.SetObserver(this); 48 download_manager.SetObserver(this);
49 // For chromium builds forces Start*Request to actually execute. 49 // For chromium builds forces Start*Request to actually execute.
50 download_manager.is_testing_ = true; 50 download_manager.is_testing_ = true;
51 } 51 }
52 ~AutoFillDownloadTestHelper() { 52 ~AutoFillDownloadTestHelper() {
53 download_manager.SetObserver(NULL); 53 download_manager.SetObserver(NULL);
54 } 54 }
55 55
56 void LimitCache(size_t cache_size) {
57 download_manager.set_max_form_cache_size(cache_size);
58 }
59
56 // AutoFillDownloadManager::Observer overridables: 60 // AutoFillDownloadManager::Observer overridables:
57 virtual void OnLoadedAutoFillHeuristics( 61 virtual void OnLoadedAutoFillHeuristics(
58 const std::string& heuristic_xml) { 62 const std::string& heuristic_xml) {
59 ResponseData response; 63 ResponseData response;
60 response.response = heuristic_xml; 64 response.response = heuristic_xml;
61 response.type_of_response = QUERY_SUCCESSFULL; 65 response.type_of_response = QUERY_SUCCESSFULL;
62 responses_.push_back(response); 66 responses_.push_back(response);
63 }; 67 };
64
65 virtual void OnUploadedAutoFillHeuristics(const std::string& form_signature) { 68 virtual void OnUploadedAutoFillHeuristics(const std::string& form_signature) {
66 ResponseData response; 69 ResponseData response;
67 response.type_of_response = UPLOAD_SUCCESSFULL; 70 response.type_of_response = UPLOAD_SUCCESSFULL;
68 responses_.push_back(response); 71 responses_.push_back(response);
69 } 72 }
70 virtual void OnHeuristicsRequestError( 73 virtual void OnHeuristicsRequestError(
71 const std::string& form_signature, 74 const std::string& form_signature,
72 AutoFillDownloadManager::AutoFillRequestType request_type, 75 AutoFillDownloadManager::AutoFillRequestType request_type,
73 int http_error) { 76 int http_error) {
74 ResponseData response; 77 ResponseData response;
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 helper.download_manager.SetPositiveUploadRate(0.0); 272 helper.download_manager.SetPositiveUploadRate(0.0);
270 helper.download_manager.SetNegativeUploadRate(0.0); 273 helper.download_manager.SetNegativeUploadRate(0.0);
271 // No actual requests for the next two calls, as we set upload rate to 0%. 274 // No actual requests for the next two calls, as we set upload rate to 0%.
272 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]), 275 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]),
273 true)); 276 true));
274 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[1]), 277 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[1]),
275 false)); 278 false));
276 fetcher = factory.GetFetcherByID(3); 279 fetcher = factory.GetFetcherByID(3);
277 EXPECT_EQ(NULL, fetcher); 280 EXPECT_EQ(NULL, fetcher);
278 281
282 // Modify form structures to miss the cache.
283 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address line 2"),
284 ASCIIToUTF16("address2"),
285 string16(),
286 ASCIIToUTF16("text"),
287 0,
288 false));
289 form_structure = new FormStructure(form);
290 form_structures.push_back(form_structure);
291
279 // Request with id 3. 292 // Request with id 3.
280 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1); 293 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
281 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures, 294 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures,
282 mock_metric_logger)); 295 mock_metric_logger));
283 fetcher = factory.GetFetcherByID(3); 296 fetcher = factory.GetFetcherByID(3);
284 ASSERT_TRUE(fetcher); 297 ASSERT_TRUE(fetcher);
285 fetcher->set_backoff_delay( 298 fetcher->set_backoff_delay(
286 base::TimeDelta::FromMilliseconds(TestTimeouts::action_max_timeout_ms())); 299 base::TimeDelta::FromMilliseconds(TestTimeouts::action_max_timeout_ms()));
287 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(), 300 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
288 net::URLRequestStatus(), 301 net::URLRequestStatus(),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 335
323 // Upload requests should be ignored for the next 10 seconds. 336 // Upload requests should be ignored for the next 10 seconds.
324 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]), 337 EXPECT_FALSE(helper.download_manager.StartUploadRequest(*(form_structures[0]),
325 true)); 338 true));
326 fetcher = factory.GetFetcherByID(5); 339 fetcher = factory.GetFetcherByID(5);
327 EXPECT_EQ(NULL, fetcher); 340 EXPECT_EQ(NULL, fetcher);
328 341
329 // Make sure consumer of URLFetcher does the right thing. 342 // Make sure consumer of URLFetcher does the right thing.
330 URLFetcher::set_factory(NULL); 343 URLFetcher::set_factory(NULL);
331 } 344 }
345
346 TEST(AutoFillDownloadTest, CacheQueryTest) {
347 MessageLoopForUI message_loop;
348 AutoFillDownloadTestHelper helper;
349 // Create and register factory.
350 TestURLFetcherFactory factory;
351 URLFetcher::set_factory(&factory);
352
353 FormData form;
354 form.method = ASCIIToUTF16("post");
355 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"),
356 ASCIIToUTF16("username"),
357 string16(),
358 ASCIIToUTF16("text"),
359 0,
360 false));
361 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"),
362 ASCIIToUTF16("firstname"),
363 string16(),
364 ASCIIToUTF16("text"),
365 0,
366 false));
367 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"),
368 ASCIIToUTF16("lastname"),
369 string16(),
370 ASCIIToUTF16("text"),
371 0,
372 false));
373 FormStructure *form_structure = new FormStructure(form);
374 ScopedVector<FormStructure> form_structures0;
375 form_structures0.push_back(form_structure);
376
377 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"),
378 ASCIIToUTF16("email"),
379 string16(),
380 ASCIIToUTF16("text"),
381 0,
382 false));
383 // Slightly different form - so different request.
384 form_structure = new FormStructure(form);
385 ScopedVector<FormStructure> form_structures1;
386 form_structures1.push_back(form_structure);
387
388 form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email2"),
389 ASCIIToUTF16("email2"),
390 string16(),
391 ASCIIToUTF16("text"),
392 0,
393 false));
394 // Slightly different form - so different request.
395 form_structure = new FormStructure(form);
396 ScopedVector<FormStructure> form_structures2;
397 form_structures2.push_back(form_structure);
398
399 // Limit cache to two forms.
400 helper.LimitCache(2);
401
402 const char *responses[] = {
403 "<autofillqueryresponse>"
404 "<field autofilltype=\"0\" />"
405 "<field autofilltype=\"3\" />"
406 "<field autofilltype=\"5\" />"
407 "</autofillqueryresponse>",
408 "<autofillqueryresponse>"
409 "<field autofilltype=\"0\" />"
410 "<field autofilltype=\"3\" />"
411 "<field autofilltype=\"5\" />"
412 "<field autofilltype=\"9\" />"
413 "</autofillqueryresponse>",
414 "<autofillqueryresponse>"
415 "<field autofilltype=\"0\" />"
416 "<field autofilltype=\"3\" />"
417 "<field autofilltype=\"5\" />"
418 "<field autofilltype=\"9\" />"
419 "<field autofilltype=\"0\" />"
420 "</autofillqueryresponse>",
421 };
422
423 // Request with id 0.
424 MockAutoFillMetrics mock_metric_logger;
425 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
426 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
427 mock_metric_logger));
428 // No responses yet
429 EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
430
431 TestURLFetcher* fetcher = factory.GetFetcherByID(0);
432 ASSERT_TRUE(fetcher);
433 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
434 net::URLRequestStatus(),
435 200, ResponseCookies(),
436 std::string(responses[0]));
437 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
438 EXPECT_EQ(responses[0], helper.responses_.front().response);
439
440 helper.responses_.clear();
441
442 // No actual request - should be a cache hit.
443 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
444 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
445 mock_metric_logger));
446 // Data is available immediately from cache - no over-the-wire trip.
447 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
448 EXPECT_EQ(responses[0], helper.responses_.front().response);
449 helper.responses_.clear();
450
451 // Request with id 1.
452 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
453 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures1,
454 mock_metric_logger));
455 // No responses yet
456 EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
457
458 fetcher = factory.GetFetcherByID(1);
459 ASSERT_TRUE(fetcher);
460 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
461 net::URLRequestStatus(),
462 200, ResponseCookies(),
463 std::string(responses[1]));
464 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
465 EXPECT_EQ(responses[1], helper.responses_.front().response);
466
467 helper.responses_.clear();
468
469 // Request with id 2.
470 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
471 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures2,
472 mock_metric_logger));
473
474 fetcher = factory.GetFetcherByID(2);
475 ASSERT_TRUE(fetcher);
476 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
477 net::URLRequestStatus(),
478 200, ResponseCookies(),
479 std::string(responses[2]));
480 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
481 EXPECT_EQ(responses[2], helper.responses_.front().response);
482
483 helper.responses_.clear();
484
485 // No actual requests - should be a cache hit.
486 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
487 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures1,
488 mock_metric_logger));
489
490 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
491 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures2,
492 mock_metric_logger));
493
494 ASSERT_EQ(static_cast<size_t>(2), helper.responses_.size());
495 EXPECT_EQ(responses[1], helper.responses_.front().response);
496 EXPECT_EQ(responses[2], helper.responses_.back().response);
497 helper.responses_.clear();
498
499 // The first structure should've expired.
500 // Request with id 3.
501 EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
502 EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
503 mock_metric_logger));
504 // No responses yet
505 EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
506
507 fetcher = factory.GetFetcherByID(3);
508 ASSERT_TRUE(fetcher);
509 fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
510 net::URLRequestStatus(),
511 200, ResponseCookies(),
512 std::string(responses[0]));
513 ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
514 EXPECT_EQ(responses[0], helper.responses_.front().response);
515
516 // Make sure consumer of URLFetcher does the right thing.
517 URLFetcher::set_factory(NULL);
518 }
519
OLDNEW
« chrome/browser/autofill/autofill_download.h ('K') | « chrome/browser/autofill/autofill_download.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698