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

Side by Side Diff: components/autofill/core/browser/autofill_download_manager_unittest.cc

Issue 1624543002: [Autofill] Remove GZIP compression since requests are now in proto (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/autofill/core/browser/autofill_download_manager.h" 5 #include "components/autofill/core/browser/autofill_download_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <list> 9 #include <list>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "base/test/histogram_tester.h" 15 #include "base/test/histogram_tester.h"
16 #include "base/test/test_timeouts.h" 16 #include "base/test/test_timeouts.h"
17 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
18 #include "components/autofill/core/browser/autofill_field.h" 18 #include "components/autofill/core/browser/autofill_field.h"
19 #include "components/autofill/core/browser/autofill_metrics.h" 19 #include "components/autofill/core/browser/autofill_metrics.h"
20 #include "components/autofill/core/browser/autofill_type.h" 20 #include "components/autofill/core/browser/autofill_type.h"
21 #include "components/autofill/core/browser/form_structure.h" 21 #include "components/autofill/core/browser/form_structure.h"
22 #include "components/autofill/core/browser/test_autofill_driver.h" 22 #include "components/autofill/core/browser/test_autofill_driver.h"
23 #include "components/autofill/core/common/form_data.h" 23 #include "components/autofill/core/common/form_data.h"
24 #include "net/http/http_request_headers.h"
25 #include "net/http/http_status_code.h" 24 #include "net/http/http_status_code.h"
26 #include "net/url_request/test_url_fetcher_factory.h" 25 #include "net/url_request/test_url_fetcher_factory.h"
27 #include "net/url_request/url_request_status.h" 26 #include "net/url_request/url_request_status.h"
28 #include "net/url_request/url_request_test_util.h" 27 #include "net/url_request/url_request_test_util.h"
29 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
31 #include "third_party/zlib/google/compression_utils.h"
32 30
33 using base::ASCIIToUTF16; 31 using base::ASCIIToUTF16;
34 32
35 namespace autofill { 33 namespace autofill {
36 34
37 namespace { 35 namespace {
38 36
39 // Call |fetcher->OnURLFetchComplete()| as the URLFetcher would when 37 // Call |fetcher->OnURLFetchComplete()| as the URLFetcher would when
40 // a response is received. Params allow caller to set fake status. 38 // a response is received. Params allow caller to set fake status.
41 void FakeOnURLFetchComplete(net::TestURLFetcher* fetcher, 39 void FakeOnURLFetchComplete(net::TestURLFetcher* fetcher,
42 int response_code, 40 int response_code,
43 const std::string& response_body) { 41 const std::string& response_body) {
44 fetcher->set_url(GURL()); 42 fetcher->set_url(GURL());
45 fetcher->set_status(net::URLRequestStatus()); 43 fetcher->set_status(net::URLRequestStatus());
46 fetcher->set_response_code(response_code); 44 fetcher->set_response_code(response_code);
47 fetcher->SetResponseString(response_body); 45 fetcher->SetResponseString(response_body);
48 46
49 fetcher->delegate()->OnURLFetchComplete(fetcher); 47 fetcher->delegate()->OnURLFetchComplete(fetcher);
50 } 48 }
51 49
52 // Compresses |data| and returns the result.
53 std::string Compress(const std::string& data) {
54 std::string compressed_data;
55 EXPECT_TRUE(compression::GzipCompress(data, &compressed_data));
56 return compressed_data;
57 }
58
59 } // namespace 50 } // namespace
60 51
61 // This tests AutofillDownloadManager. AutofillDownloadManagerTest implements 52 // This tests AutofillDownloadManager. AutofillDownloadManagerTest implements
62 // AutofillDownloadManager::Observer and creates an instance of 53 // AutofillDownloadManager::Observer and creates an instance of
63 // AutofillDownloadManager. Then it records responses to different initiated 54 // AutofillDownloadManager. Then it records responses to different initiated
64 // requests, which are verified later. To mock network requests 55 // requests, which are verified later. To mock network requests
65 // TestURLFetcherFactory is used, which creates URLFetchers that do not 56 // TestURLFetcherFactory is used, which creates URLFetchers that do not
66 // go over the wire, but allow calling back HTTP responses directly. 57 // go over the wire, but allow calling back HTTP responses directly.
67 // The responses in test are out of order and verify: successful query request, 58 // The responses in test are out of order and verify: successful query request,
68 // successful upload request, failed upload request. 59 // successful upload request, failed upload request.
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 // No responses yet 633 // No responses yet
643 EXPECT_EQ(0U, responses_.size()); 634 EXPECT_EQ(0U, responses_.size());
644 635
645 fetcher = factory.GetFetcherByID(3); 636 fetcher = factory.GetFetcherByID(3);
646 ASSERT_TRUE(fetcher); 637 ASSERT_TRUE(fetcher);
647 FakeOnURLFetchComplete(fetcher, 200, std::string(responses[0])); 638 FakeOnURLFetchComplete(fetcher, 200, std::string(responses[0]));
648 ASSERT_EQ(1U, responses_.size()); 639 ASSERT_EQ(1U, responses_.size());
649 EXPECT_EQ(responses[0], responses_.front().response); 640 EXPECT_EQ(responses[0], responses_.front().response);
650 } 641 }
651 642
652 TEST_F(AutofillDownloadManagerTest, QueryRequestIsGzipped) {
653 // Expected query (uncompressed for visual verification).
654 AutofillQueryContents query;
655 query.set_client_version("6.1.1715.1442/en (GGLL)");
656 AutofillQueryContents::Form* query_form = query.add_form();
657 query_form->set_signature(14546501144368603154U);
658
659 query_form->add_field()->set_signature(239111655U);
660 query_form->add_field()->set_signature(3763331450U);
661 query_form->add_field()->set_signature(3494530716U);
662
663 std::string expected_query_string;
664 ASSERT_TRUE(query.SerializeToString(&expected_query_string));
665
666 // Create and register factory.
667 net::TestURLFetcherFactory factory;
668
669 FormData form;
670
671 FormFieldData field;
672 field.form_control_type = "text";
673
674 field.label = ASCIIToUTF16("username");
675 field.name = ASCIIToUTF16("username");
676 form.fields.push_back(field);
677
678 field.label = ASCIIToUTF16("First Name");
679 field.name = ASCIIToUTF16("firstname");
680 form.fields.push_back(field);
681
682 field.label = ASCIIToUTF16("Last Name");
683 field.name = ASCIIToUTF16("lastname");
684 form.fields.push_back(field);
685
686 FormStructure* form_structure = new FormStructure(form);
687 ScopedVector<FormStructure> form_structures;
688 form_structures.push_back(form_structure);
689
690 base::HistogramTester histogram;
691 // Request with id 0.
692 EXPECT_TRUE(download_manager_.StartQueryRequest(form_structures.get()));
693 histogram.ExpectUniqueSample("Autofill.ServerQueryResponse",
694 AutofillMetrics::QUERY_SENT, 1);
695
696 // Request payload is gzipped.
697 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
698 ASSERT_TRUE(fetcher);
699 EXPECT_EQ(Compress(expected_query_string), fetcher->upload_data());
700
701 // Proper content-encoding header is defined.
702 net::HttpRequestHeaders headers;
703 fetcher->GetExtraRequestHeaders(&headers);
704 std::string header;
705 EXPECT_TRUE(headers.GetHeader("content-encoding", &header));
706 EXPECT_EQ("gzip", header);
707
708 // TODO(http://crbug.com/580102) The >100% compression ratio is a known
709 // problem.
710 // Expect that the compression is logged.
711 // NOTE: To get the expected value, run tests with --vmodule=autofill*=1 and
712 // watch for the VLOG which indicates compression.
713 histogram.ExpectUniqueSample("Autofill.PayloadCompressionRatio.Query", 133,
714 1);
715 }
716
717 TEST_F(AutofillDownloadManagerTest, UploadRequestIsGzipped) {
718 // Expected upload (uncompressed for visual verification).
719 AutofillUploadContents upload;
720 upload.set_submission(true);
721 upload.set_client_version("6.1.1715.1442/en (GGLL)");
722 upload.set_form_signature(14546501144368603154U);
723 upload.set_autofill_used(true);
724 upload.set_data_present("");
725
726 std::string expected_upload_string;
727 ASSERT_TRUE(upload.SerializeToString(&expected_upload_string));
728
729 // Create and register factory.
730 net::TestURLFetcherFactory factory;
731
732 FormData form;
733
734 FormFieldData field;
735 field.form_control_type = "text";
736
737 field.label = ASCIIToUTF16("username");
738 field.name = ASCIIToUTF16("username");
739 form.fields.push_back(field);
740
741 field.label = ASCIIToUTF16("First Name");
742 field.name = ASCIIToUTF16("firstname");
743 form.fields.push_back(field);
744
745 field.label = ASCIIToUTF16("Last Name");
746 field.name = ASCIIToUTF16("lastname");
747 form.fields.push_back(field);
748
749 FormStructure* form_structure = new FormStructure(form);
750 ScopedVector<FormStructure> form_structures;
751 form_structures.push_back(form_structure);
752
753 base::HistogramTester histogram;
754 // Request with id 0.
755 EXPECT_TRUE(download_manager_.StartUploadRequest(
756 *(form_structures[0]), true, ServerFieldTypeSet(), std::string(), true));
757
758 // Request payload is gzipped.
759 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
760 ASSERT_TRUE(fetcher);
761 EXPECT_EQ(Compress(expected_upload_string), fetcher->upload_data());
762
763 // Proper content-encoding header is defined.
764 net::HttpRequestHeaders headers;
765 fetcher->GetExtraRequestHeaders(&headers);
766 std::string header;
767 EXPECT_TRUE(headers.GetHeader("content-encoding", &header));
768 EXPECT_EQ("gzip", header);
769
770 // TODO(http://crbug.com/580102) The >100% compression ratio is a known
771 // problem.
772 // Expect that the compression is logged.
773 // NOTE: To get the expected value, run tests with --vmodule=autofill*=1 and
774 // watch for the VLOG which indicates compression.
775 histogram.ExpectUniqueSample("Autofill.PayloadCompressionRatio.Upload", 150,
776 1);
777 }
778
779 } // namespace autofill 643 } // namespace autofill
OLDNEW
« no previous file with comments | « components/autofill/core/browser/autofill_download_manager.cc ('k') | components/autofill/core/browser/autofill_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698