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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/autofill_download_unittest.cc
===================================================================
--- chrome/browser/autofill/autofill_download_unittest.cc (revision 72523)
+++ chrome/browser/autofill/autofill_download_unittest.cc (working copy)
@@ -53,6 +53,10 @@
download_manager.SetObserver(NULL);
}
+ void LimitCache(size_t cache_size) {
+ download_manager.set_max_form_cache_size(cache_size);
+ }
+
// AutoFillDownloadManager::Observer overridables:
virtual void OnLoadedAutoFillHeuristics(
const std::string& heuristic_xml) {
@@ -61,7 +65,6 @@
response.type_of_response = QUERY_SUCCESSFULL;
responses_.push_back(response);
};
-
virtual void OnUploadedAutoFillHeuristics(const std::string& form_signature) {
ResponseData response;
response.type_of_response = UPLOAD_SUCCESSFULL;
@@ -276,6 +279,16 @@
fetcher = factory.GetFetcherByID(3);
EXPECT_EQ(NULL, fetcher);
+ // Modify form structures to miss the cache.
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address line 2"),
+ ASCIIToUTF16("address2"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ form_structure = new FormStructure(form);
+ form_structures.push_back(form_structure);
+
// Request with id 3.
EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures,
@@ -329,3 +342,178 @@
// Make sure consumer of URLFetcher does the right thing.
URLFetcher::set_factory(NULL);
}
+
+TEST(AutoFillDownloadTest, CacheQueryTest) {
+ MessageLoopForUI message_loop;
+ AutoFillDownloadTestHelper helper;
+ // Create and register factory.
+ TestURLFetcherFactory factory;
+ URLFetcher::set_factory(&factory);
+
+ FormData form;
+ form.method = ASCIIToUTF16("post");
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("username"),
+ ASCIIToUTF16("username"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"),
+ ASCIIToUTF16("firstname"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"),
+ ASCIIToUTF16("lastname"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ FormStructure *form_structure = new FormStructure(form);
+ ScopedVector<FormStructure> form_structures0;
+ form_structures0.push_back(form_structure);
+
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email"),
+ ASCIIToUTF16("email"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ // Slightly different form - so different request.
+ form_structure = new FormStructure(form);
+ ScopedVector<FormStructure> form_structures1;
+ form_structures1.push_back(form_structure);
+
+ form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("email2"),
+ ASCIIToUTF16("email2"),
+ string16(),
+ ASCIIToUTF16("text"),
+ 0,
+ false));
+ // Slightly different form - so different request.
+ form_structure = new FormStructure(form);
+ ScopedVector<FormStructure> form_structures2;
+ form_structures2.push_back(form_structure);
+
+ // Limit cache to two forms.
+ helper.LimitCache(2);
+
+ const char *responses[] = {
+ "<autofillqueryresponse>"
+ "<field autofilltype=\"0\" />"
+ "<field autofilltype=\"3\" />"
+ "<field autofilltype=\"5\" />"
+ "</autofillqueryresponse>",
+ "<autofillqueryresponse>"
+ "<field autofilltype=\"0\" />"
+ "<field autofilltype=\"3\" />"
+ "<field autofilltype=\"5\" />"
+ "<field autofilltype=\"9\" />"
+ "</autofillqueryresponse>",
+ "<autofillqueryresponse>"
+ "<field autofilltype=\"0\" />"
+ "<field autofilltype=\"3\" />"
+ "<field autofilltype=\"5\" />"
+ "<field autofilltype=\"9\" />"
+ "<field autofilltype=\"0\" />"
+ "</autofillqueryresponse>",
+ };
+
+ // Request with id 0.
+ MockAutoFillMetrics mock_metric_logger;
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
+ mock_metric_logger));
+ // No responses yet
+ EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
+
+ TestURLFetcher* fetcher = factory.GetFetcherByID(0);
+ ASSERT_TRUE(fetcher);
+ fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
+ net::URLRequestStatus(),
+ 200, ResponseCookies(),
+ std::string(responses[0]));
+ ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
+ EXPECT_EQ(responses[0], helper.responses_.front().response);
+
+ helper.responses_.clear();
+
+ // No actual request - should be a cache hit.
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
+ mock_metric_logger));
+ // Data is available immediately from cache - no over-the-wire trip.
+ ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
+ EXPECT_EQ(responses[0], helper.responses_.front().response);
+ helper.responses_.clear();
+
+ // Request with id 1.
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures1,
+ mock_metric_logger));
+ // No responses yet
+ EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
+
+ fetcher = factory.GetFetcherByID(1);
+ ASSERT_TRUE(fetcher);
+ fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
+ net::URLRequestStatus(),
+ 200, ResponseCookies(),
+ std::string(responses[1]));
+ ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
+ EXPECT_EQ(responses[1], helper.responses_.front().response);
+
+ helper.responses_.clear();
+
+ // Request with id 2.
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures2,
+ mock_metric_logger));
+
+ fetcher = factory.GetFetcherByID(2);
+ ASSERT_TRUE(fetcher);
+ fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
+ net::URLRequestStatus(),
+ 200, ResponseCookies(),
+ std::string(responses[2]));
+ ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
+ EXPECT_EQ(responses[2], helper.responses_.front().response);
+
+ helper.responses_.clear();
+
+ // No actual requests - should be a cache hit.
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures1,
+ mock_metric_logger));
+
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures2,
+ mock_metric_logger));
+
+ ASSERT_EQ(static_cast<size_t>(2), helper.responses_.size());
+ EXPECT_EQ(responses[1], helper.responses_.front().response);
+ EXPECT_EQ(responses[2], helper.responses_.back().response);
+ helper.responses_.clear();
+
+ // The first structure should've expired.
+ // Request with id 3.
+ EXPECT_CALL(mock_metric_logger, Log(AutoFillMetrics::QUERY_SENT)).Times(1);
+ EXPECT_TRUE(helper.download_manager.StartQueryRequest(form_structures0,
+ mock_metric_logger));
+ // No responses yet
+ EXPECT_EQ(static_cast<size_t>(0), helper.responses_.size());
+
+ fetcher = factory.GetFetcherByID(3);
+ ASSERT_TRUE(fetcher);
+ fetcher->delegate()->OnURLFetchComplete(fetcher, GURL(),
+ net::URLRequestStatus(),
+ 200, ResponseCookies(),
+ std::string(responses[0]));
+ ASSERT_EQ(static_cast<size_t>(1), helper.responses_.size());
+ EXPECT_EQ(responses[0], helper.responses_.front().response);
+
+ // Make sure consumer of URLFetcher does the right thing.
+ URLFetcher::set_factory(NULL);
+}
+
« 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