| 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 |