OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/core/data_use_network_delegate.h" | 5 #include "components/data_use_measurement/core/data_use_network_delegate.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/test/histogram_tester.h" | 9 #include "base/test/histogram_tester.h" |
10 #include "components/data_use_measurement/core/data_use_ascriber.h" | 10 #include "components/data_use_measurement/core/data_use_ascriber.h" |
11 #include "components/data_use_measurement/core/url_request_classifier.h" | 11 #include "components/data_use_measurement/core/url_request_classifier.h" |
12 #include "components/metrics/data_use_tracker.h" | 12 #include "components/metrics/data_use_tracker.h" |
13 #include "net/socket/socket_test_util.h" | 13 #include "net/socket/socket_test_util.h" |
14 #include "net/url_request/url_request.h" | 14 #include "net/url_request/url_request.h" |
15 #include "net/url_request/url_request_test_util.h" | 15 #include "net/url_request/url_request_test_util.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "url/gurl.h" | 17 #include "url/gurl.h" |
18 | 18 |
19 namespace data_use_measurement { | 19 namespace data_use_measurement { |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 class UserRequestUserDataForTesting : public base::SupportsUserData::Data, | 23 class TestURLRequestClassifier : public base::SupportsUserData::Data, |
24 public URLRequestClassifier { | 24 public URLRequestClassifier { |
25 public: | 25 public: |
26 static const void* const kUserDataKey; | 26 static const void* const kUserDataKey; |
27 | 27 |
28 bool IsUserRequest(const net::URLRequest& request) const override { | 28 bool IsUserRequest(const net::URLRequest& request) const override { |
29 return request.GetUserData(kUserDataKey) != nullptr; | 29 return request.GetUserData(kUserDataKey) != nullptr; |
30 } | 30 } |
31 | 31 |
32 static void MarkAsUserRequest(net::URLRequest* request) { | 32 static void MarkAsUserRequest(net::URLRequest* request) { |
33 request->SetUserData(kUserDataKey, new UserRequestUserDataForTesting()); | 33 request->SetUserData(kUserDataKey, new TestURLRequestClassifier()); |
| 34 } |
| 35 |
| 36 DataUseUserData::DataUseContentType GetContentType( |
| 37 const net::URLRequest& request, |
| 38 const net::HttpResponseHeaders& response_headers) const override { |
| 39 return DataUseUserData::OTHER; |
34 } | 40 } |
35 }; | 41 }; |
36 | 42 |
37 class TestDataUseAscriber : public DataUseAscriber { | 43 class TestDataUseAscriber : public DataUseAscriber { |
38 public: | 44 public: |
39 TestDataUseAscriber() {} | 45 TestDataUseAscriber() {} |
40 | 46 |
41 DataUseRecorder* GetOrCreateDataUseRecorder( | 47 DataUseRecorder* GetOrCreateDataUseRecorder( |
42 net::URLRequest* request) override { | 48 net::URLRequest* request) override { |
43 return nullptr; | 49 return nullptr; |
44 } | 50 } |
45 DataUseRecorder* GetDataUseRecorder(const net::URLRequest& request) override { | 51 DataUseRecorder* GetDataUseRecorder(const net::URLRequest& request) override { |
46 return nullptr; | 52 return nullptr; |
47 } | 53 } |
48 | 54 |
49 std::unique_ptr<URLRequestClassifier> CreateURLRequestClassifier() | 55 std::unique_ptr<URLRequestClassifier> CreateURLRequestClassifier() |
50 const override { | 56 const override { |
51 return nullptr; | 57 return nullptr; |
52 } | 58 } |
53 }; | 59 }; |
54 | 60 |
55 // static | 61 // static |
56 const void* const UserRequestUserDataForTesting::kUserDataKey = | 62 const void* const TestURLRequestClassifier::kUserDataKey = |
57 &UserRequestUserDataForTesting::kUserDataKey; | 63 &TestURLRequestClassifier::kUserDataKey; |
58 | 64 |
59 // This function requests a URL, and makes it return a known response. If | 65 // This function requests a URL, and makes it return a known response. If |
60 // |from_user| is true, it attaches a ResourceRequestInfo to the URLRequest, | 66 // |from_user| is true, it attaches a ResourceRequestInfo to the URLRequest, |
61 // because requests from users have this info. If |from_user| is false, the | 67 // because requests from users have this info. If |from_user| is false, the |
62 // request is presumed to be from a service, and the service name is set in the | 68 // request is presumed to be from a service, and the service name is set in the |
63 // request's user data. (As an example suggestions service tag is attached). if | 69 // request's user data. (As an example suggestions service tag is attached). if |
64 // |redirect| is true, it adds necessary socket data to have it follow redirect | 70 // |redirect| is true, it adds necessary socket data to have it follow redirect |
65 // before getting the final response. | 71 // before getting the final response. |
66 std::unique_ptr<net::URLRequest> RequestURL( | 72 std::unique_ptr<net::URLRequest> RequestURL( |
67 net::URLRequestContext* context, | 73 net::URLRequestContext* context, |
(...skipping 16 matching lines...) Expand all Loading... |
84 }; | 90 }; |
85 net::StaticSocketDataProvider response_socket_data_provider( | 91 net::StaticSocketDataProvider response_socket_data_provider( |
86 response_mock_reads, arraysize(response_mock_reads), nullptr, 0); | 92 response_mock_reads, arraysize(response_mock_reads), nullptr, 0); |
87 socket_factory->AddSocketDataProvider(&response_socket_data_provider); | 93 socket_factory->AddSocketDataProvider(&response_socket_data_provider); |
88 net::TestDelegate test_delegate; | 94 net::TestDelegate test_delegate; |
89 test_delegate.set_quit_on_complete(true); | 95 test_delegate.set_quit_on_complete(true); |
90 std::unique_ptr<net::URLRequest> request(context->CreateRequest( | 96 std::unique_ptr<net::URLRequest> request(context->CreateRequest( |
91 GURL("http://example.com"), net::DEFAULT_PRIORITY, &test_delegate)); | 97 GURL("http://example.com"), net::DEFAULT_PRIORITY, &test_delegate)); |
92 | 98 |
93 if (from_user) { | 99 if (from_user) { |
94 UserRequestUserDataForTesting::MarkAsUserRequest(request.get()); | 100 TestURLRequestClassifier::MarkAsUserRequest(request.get()); |
95 } else { | 101 } else { |
96 request->SetUserData( | 102 request->SetUserData( |
97 data_use_measurement::DataUseUserData::kUserDataKey, | 103 data_use_measurement::DataUseUserData::kUserDataKey, |
98 new data_use_measurement::DataUseUserData( | 104 new data_use_measurement::DataUseUserData( |
99 data_use_measurement::DataUseUserData::SUGGESTIONS, | 105 data_use_measurement::DataUseUserData::SUGGESTIONS, |
100 data_use_measurement::DataUseUserData::FOREGROUND)); | 106 data_use_measurement::DataUseUserData::FOREGROUND)); |
101 } | 107 } |
102 request->Start(); | 108 request->Start(); |
103 base::RunLoop().RunUntilIdle(); | 109 base::RunLoop().RunUntilIdle(); |
104 return request; | 110 return request; |
105 } | 111 } |
106 | 112 |
107 class DataUseNetworkDelegateTest : public testing::Test { | 113 class DataUseNetworkDelegateTest : public testing::Test { |
108 public: | 114 public: |
109 DataUseNetworkDelegateTest() | 115 DataUseNetworkDelegateTest() |
110 : context_(true), | 116 : context_(true), |
111 data_use_network_delegate_( | 117 data_use_network_delegate_(base::MakeUnique<net::TestNetworkDelegate>(), |
112 base::MakeUnique<net::TestNetworkDelegate>(), | 118 &test_data_use_ascriber_, |
113 &test_data_use_ascriber_, | 119 base::MakeUnique<TestURLRequestClassifier>(), |
114 base::MakeUnique<UserRequestUserDataForTesting>(), | 120 metrics::UpdateUsagePrefCallbackType()) { |
115 metrics::UpdateUsagePrefCallbackType()) { | |
116 context_.set_client_socket_factory(&mock_socket_factory_); | 121 context_.set_client_socket_factory(&mock_socket_factory_); |
117 context_.set_network_delegate(&data_use_network_delegate_); | 122 context_.set_network_delegate(&data_use_network_delegate_); |
118 context_.Init(); | 123 context_.Init(); |
119 } | 124 } |
120 | 125 |
121 net::TestURLRequestContext* context() { return &context_; } | 126 net::TestURLRequestContext* context() { return &context_; } |
122 net::MockClientSocketFactory* socket_factory() { | 127 net::MockClientSocketFactory* socket_factory() { |
123 return &mock_socket_factory_; | 128 return &mock_socket_factory_; |
124 } | 129 } |
125 | 130 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 histogram_tester.ExpectTotalCount( | 232 histogram_tester.ExpectTotalCount( |
228 "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular", 0); | 233 "DataUse.TrafficSize.System.Downstream.Foreground.NotCellular", 0); |
229 histogram_tester.ExpectTotalCount( | 234 histogram_tester.ExpectTotalCount( |
230 "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 0); | 235 "DataUse.TrafficSize.System.Upstream.Foreground.NotCellular", 0); |
231 histogram_tester.ExpectTotalCount("DataUse.MessageSize.Suggestions", 0); | 236 histogram_tester.ExpectTotalCount("DataUse.MessageSize.Suggestions", 0); |
232 } | 237 } |
233 | 238 |
234 } // namespace | 239 } // namespace |
235 | 240 |
236 } // namespace data_use_measurement | 241 } // namespace data_use_measurement |
OLD | NEW |