OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/data_use_measurement/content/data_use_measurement.h" | 5 #include "components/data_use_measurement/content/data_use_measurement.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 public: | 31 public: |
32 DataUseMeasurementTest() | 32 DataUseMeasurementTest() |
33 : data_use_measurement_( | 33 : data_use_measurement_( |
34 base::Bind(&DataUseMeasurementTest::FakeDataUseforwarder, | 34 base::Bind(&DataUseMeasurementTest::FakeDataUseforwarder, |
35 base::Unretained(this))) { | 35 base::Unretained(this))) { |
36 // During the test it is expected to not have cellular connection. | 36 // During the test it is expected to not have cellular connection. |
37 DCHECK(!net::NetworkChangeNotifier::IsConnectionCellular( | 37 DCHECK(!net::NetworkChangeNotifier::IsConnectionCellular( |
38 net::NetworkChangeNotifier::GetConnectionType())); | 38 net::NetworkChangeNotifier::GetConnectionType())); |
39 } | 39 } |
40 | 40 |
41 // Sends a request and reports data use attaching either user data or service | 41 // Creates a test request. |
42 // data based on |is_user_request|. | 42 std::unique_ptr<net::URLRequest> CreateTestRequest(bool is_user_request) { |
43 void SendRequest(bool is_user_request) { | |
44 net::TestDelegate test_delegate; | 43 net::TestDelegate test_delegate; |
45 InitializeContext(); | 44 InitializeContext(); |
46 net::MockRead reads[] = {net::MockRead("HTTP/1.1 200 OK\r\n" | 45 net::MockRead reads[] = {net::MockRead("HTTP/1.1 200 OK\r\n" |
47 "Content-Length: 12\r\n\r\n"), | 46 "Content-Length: 12\r\n\r\n"), |
48 net::MockRead("Test Content")}; | 47 net::MockRead("Test Content")}; |
49 net::StaticSocketDataProvider socket_data(reads, arraysize(reads), nullptr, | 48 net::StaticSocketDataProvider socket_data(reads, arraysize(reads), nullptr, |
50 0); | 49 0); |
51 socket_factory_->AddSocketDataProvider(&socket_data); | 50 socket_factory_->AddSocketDataProvider(&socket_data); |
52 | 51 |
53 std::unique_ptr<net::URLRequest> request(context_->CreateRequest( | 52 std::unique_ptr<net::URLRequest> request(context_->CreateRequest( |
54 GURL("http://foo.com"), net::DEFAULT_PRIORITY, &test_delegate)); | 53 GURL("http://foo.com"), net::DEFAULT_PRIORITY, &test_delegate)); |
55 if (is_user_request) { | 54 if (is_user_request) { |
56 request->SetUserData( | 55 request->SetUserData( |
57 data_use_measurement::DataUseUserData::kUserDataKey, | 56 data_use_measurement::DataUseUserData::kUserDataKey, |
58 new data_use_measurement::DataUseUserData( | 57 new data_use_measurement::DataUseUserData( |
59 data_use_measurement::DataUseUserData::SUGGESTIONS, | 58 data_use_measurement::DataUseUserData::SUGGESTIONS, |
60 data_use_measurement_.CurrentAppState())); | 59 data_use_measurement_.CurrentAppState())); |
61 } else { | 60 } else { |
62 content::ResourceRequestInfo::AllocateForTesting( | 61 content::ResourceRequestInfo::AllocateForTesting( |
63 request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2, | 62 request.get(), content::RESOURCE_TYPE_MAIN_FRAME, nullptr, -2, -2, -2, |
64 true, false, true, true, false); | 63 true, false, true, true, false); |
65 } | 64 } |
66 | 65 |
67 request->Start(); | 66 request->Start(); |
68 base::RunLoop().RunUntilIdle(); | 67 base::RunLoop().RunUntilIdle(); |
| 68 return request; |
| 69 } |
69 | 70 |
| 71 // Sends a request and reports data use attaching either user data or service |
| 72 // data based on |is_user_request|. |
| 73 void SendRequest(bool is_user_request) { |
| 74 std::unique_ptr<net::URLRequest> request = |
| 75 CreateTestRequest(is_user_request); |
| 76 data_use_measurement_.OnBeforeURLRequest(request.get()); |
| 77 data_use_measurement_.OnNetworkBytesReceived(*request, 1000); |
| 78 data_use_measurement_.OnNetworkBytesSent(*request, 100); |
70 data_use_measurement_.OnCompleted(*request, true); | 79 data_use_measurement_.OnCompleted(*request, true); |
71 } | 80 } |
72 | 81 |
73 // This function makes a user request and confirms that its effect is | 82 // This function makes a user request and confirms that its effect is |
74 // reflected in proper histograms. | 83 // reflected in proper histograms. |
75 void TestForAUserRequest(const std::string& target_dimension) { | 84 void TestForAUserRequest(const std::string& target_dimension) { |
76 base::HistogramTester histogram_tester; | 85 base::HistogramTester histogram_tester; |
77 SendRequest(true); | 86 SendRequest(true); |
78 histogram_tester.ExpectTotalCount("DataUse.TrafficSize.System.Downstream." + | 87 histogram_tester.ExpectTotalCount("DataUse.TrafficSize.System.Downstream." + |
79 target_dimension + kConnectionType, | 88 target_dimension + kConnectionType, |
(...skipping 23 matching lines...) Expand all Loading... |
103 histogram_tester.ExpectTotalCount( | 112 histogram_tester.ExpectTotalCount( |
104 "DataUse.MessageSize.AllServices.Downstream." + target_dimension + | 113 "DataUse.MessageSize.AllServices.Downstream." + target_dimension + |
105 kConnectionType, | 114 kConnectionType, |
106 0); | 115 0); |
107 } | 116 } |
108 | 117 |
109 DataUseMeasurement* data_use_measurement() { return &data_use_measurement_; } | 118 DataUseMeasurement* data_use_measurement() { return &data_use_measurement_; } |
110 | 119 |
111 bool IsDataUseForwarderCalled() { return is_data_use_forwarder_called_; } | 120 bool IsDataUseForwarderCalled() { return is_data_use_forwarder_called_; } |
112 | 121 |
113 private: | 122 protected: |
114 void InitializeContext() { | 123 void InitializeContext() { |
115 context_.reset(new net::TestURLRequestContext(true)); | 124 context_.reset(new net::TestURLRequestContext(true)); |
116 socket_factory_.reset(new net::MockClientSocketFactory()); | 125 socket_factory_.reset(new net::MockClientSocketFactory()); |
117 context_->set_client_socket_factory(socket_factory_.get()); | 126 context_->set_client_socket_factory(socket_factory_.get()); |
118 context_->Init(); | 127 context_->Init(); |
119 } | 128 } |
120 | 129 |
121 void FakeDataUseforwarder(const std::string& service_name, | 130 void FakeDataUseforwarder(const std::string& service_name, |
122 int message_size, | 131 int message_size, |
123 bool is_celllular) { | 132 bool is_celllular) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 TestForAUserRequest("Background."); | 168 TestForAUserRequest("Background."); |
160 } | 169 } |
161 #endif | 170 #endif |
162 | 171 |
163 TEST_F(DataUseMeasurementTest, DataUseForwarderIsCalled) { | 172 TEST_F(DataUseMeasurementTest, DataUseForwarderIsCalled) { |
164 EXPECT_FALSE(IsDataUseForwarderCalled()); | 173 EXPECT_FALSE(IsDataUseForwarderCalled()); |
165 SendRequest(true); | 174 SendRequest(true); |
166 EXPECT_TRUE(IsDataUseForwarderCalled()); | 175 EXPECT_TRUE(IsDataUseForwarderCalled()); |
167 } | 176 } |
168 | 177 |
| 178 #if defined(OS_ANDROID) |
| 179 TEST_F(DataUseMeasurementTest, AppStateUnknown) { |
| 180 base::HistogramTester histogram_tester; |
| 181 std::unique_ptr<net::URLRequest> request = CreateTestRequest(false); |
| 182 data_use_measurement_.OnBeforeURLRequest(request.get()); |
| 183 |
| 184 { |
| 185 base::HistogramTester histogram_tester; |
| 186 data_use_measurement()->OnApplicationStateChangeForTesting( |
| 187 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); |
| 188 data_use_measurement_.OnNetworkBytesSent(*request, 100); |
| 189 data_use_measurement_.OnNetworkBytesReceived(*request, 1000); |
| 190 histogram_tester.ExpectTotalCount( |
| 191 "DataUse.TrafficSize.User.Downstream.Foreground." + kConnectionType, 1); |
| 192 histogram_tester.ExpectTotalCount( |
| 193 "DataUse.TrafficSize.User.Upstream.Foreground." + kConnectionType, 1); |
| 194 } |
| 195 |
| 196 { |
| 197 base::HistogramTester histogram_tester; |
| 198 data_use_measurement()->OnApplicationStateChangeForTesting( |
| 199 base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES); |
| 200 data_use_measurement_.OnNetworkBytesReceived(*request, 1000); |
| 201 histogram_tester.ExpectTotalCount( |
| 202 "DataUse.TrafficSize.User.Downstream.Unknown." + kConnectionType, 1); |
| 203 } |
| 204 |
| 205 { |
| 206 base::HistogramTester histogram_tester; |
| 207 data_use_measurement()->OnApplicationStateChangeForTesting( |
| 208 base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES); |
| 209 data_use_measurement_.OnNetworkBytesReceived(*request, 1000); |
| 210 histogram_tester.ExpectTotalCount( |
| 211 "DataUse.TrafficSize.User.Downstream.Background." + kConnectionType, 1); |
| 212 } |
| 213 } |
| 214 #endif |
| 215 |
169 } // namespace data_use_measurement | 216 } // namespace data_use_measurement |
OLD | NEW |