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

Side by Side Diff: chrome/browser/page_load_metrics/observers/previews_ukm_observer_unittest.cc

Issue 2952343004: Adding previews information to PLM UKM (Closed)
Patch Set: rebase Created 3 years, 5 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/page_load_metrics/observers/previews_ukm_observer.h"
6
7 #include "base/macros.h"
8 #include "base/metrics/metrics_hashes.h"
9 #include "base/optional.h"
10 #include "chrome/browser/loader/chrome_navigation_data.h"
11 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_ test_harness.h"
12 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
13 #include "chrome/browser/previews/previews_infobar_delegate.h"
14 #include "chrome/test/base/testing_browser_process.h"
15 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data .h"
16 #include "components/ukm/test_ukm_recorder.h"
17 #include "components/ukm/ukm_source.h"
18
19 namespace previews {
20
21 namespace {
22
23 const char kDefaultTestUrl[] = "https://www.google.com/";
24
25 data_reduction_proxy::DataReductionProxyData* DataForNavigationHandle(
26 content::WebContents* web_contents,
27 content::NavigationHandle* navigation_handle) {
28 ChromeNavigationData* chrome_navigation_data = new ChromeNavigationData();
29 content::WebContentsTester::For(web_contents)
30 ->SetNavigationData(navigation_handle,
31 base::WrapUnique(chrome_navigation_data));
32 data_reduction_proxy::DataReductionProxyData* data =
33 new data_reduction_proxy::DataReductionProxyData();
34 chrome_navigation_data->SetDataReductionProxyData(base::WrapUnique(data));
35
36 return data;
37 }
38
39 class TestPreviewsUKMObserver : public PreviewsUKMObserver {
40 public:
41 TestPreviewsUKMObserver(content::WebContents* web_contents,
42 bool data_reduction_proxy_used,
43 bool lite_page_received)
44 : web_contents_(web_contents),
45 data_reduction_proxy_used_(data_reduction_proxy_used),
46 lite_page_received_(lite_page_received) {}
47
48 ~TestPreviewsUKMObserver() override {}
49
50 // page_load_metrics::PageLoadMetricsObserver implementation:
51 ObservePolicy OnCommit(content::NavigationHandle* navigation_handle,
52 ukm::SourceId source_id) override {
53 data_reduction_proxy::DataReductionProxyData* data =
54 DataForNavigationHandle(web_contents_, navigation_handle);
55 data->set_used_data_reduction_proxy(data_reduction_proxy_used_);
56 data->set_request_url(GURL(kDefaultTestUrl));
57 data->set_lite_page_received(lite_page_received_);
58 return PreviewsUKMObserver::OnCommit(navigation_handle, source_id);
59 }
60
61 private:
62 content::WebContents* web_contents_;
63 bool data_reduction_proxy_used_;
64 bool lite_page_received_;
65
66 DISALLOW_COPY_AND_ASSIGN(TestPreviewsUKMObserver);
67 };
68
69 class PreviewsUKMObserverTest
70 : public page_load_metrics::PageLoadMetricsObserverTestHarness {
71 public:
72 PreviewsUKMObserverTest() {}
73 ~PreviewsUKMObserverTest() override {}
74
75 void RunTest(bool data_reduction_proxy_used, bool lite_page_received) {
76 data_reduction_proxy_used_ = data_reduction_proxy_used;
77 lite_page_received_ = lite_page_received;
78 NavigateAndCommit(GURL(kDefaultTestUrl));
79 }
80
81 void ValidateUKM(bool server_lofi_expected,
82 bool client_lofi_expected,
83 bool lite_page_expected,
84 bool opt_out_expected) {
85 const ukm::UkmSource* source =
86 test_ukm_recorder().GetSourceForUrl(kDefaultTestUrl);
87 if (!server_lofi_expected && !client_lofi_expected && !lite_page_expected &&
88 !opt_out_expected) {
89 EXPECT_EQ(0u, test_ukm_recorder().entries_count());
90 return;
91 }
92
93 EXPECT_EQ(server_lofi_expected, test_ukm_recorder().HasMetric(
94 *source, "Previews", "server_lofi"));
95 EXPECT_EQ(client_lofi_expected, test_ukm_recorder().HasMetric(
96 *source, "Previews", "client_lofi"));
97 EXPECT_EQ(lite_page_expected,
98 test_ukm_recorder().HasMetric(*source, "Previews", "lite_page"));
99 EXPECT_EQ(opt_out_expected,
100 test_ukm_recorder().HasMetric(*source, "Previews", "opt_out"));
101 }
102
103 protected:
104 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
105 tracker->AddObserver(base::MakeUnique<TestPreviewsUKMObserver>(
106 web_contents(), data_reduction_proxy_used_, lite_page_received_));
107 // Data is only added to the first navigation after RunTest().
108 data_reduction_proxy_used_ = false;
109 lite_page_received_ = false;
110 }
111
112 private:
113 bool data_reduction_proxy_used_ = false;
114 bool lite_page_received_ = false;
115
116 DISALLOW_COPY_AND_ASSIGN(PreviewsUKMObserverTest);
117 };
118
119 TEST_F(PreviewsUKMObserverTest, NoPreviewSeen) {
120 RunTest(false /* data_reduction_proxy_used */,
121 false /* lite_page_received */);
122 NavigateToUntrackedUrl();
123
124 ValidateUKM(false /* server_lofi_expected */,
125 false /* client_lofi_expected */, false /* lite_page_expected */,
126 false /* opt_out_expected */);
127 }
128
129 TEST_F(PreviewsUKMObserverTest, UntrackedPreviewTypeOptOut) {
130 RunTest(false /* data_reduction_proxy_used */,
131 false /* lite_page_received */);
132 observer()->BroadcastEventToObservers(
133 PreviewsInfoBarDelegate::OptOutEventKey());
134 NavigateToUntrackedUrl();
135
136 // Opt out should not be added sicne we don't track this type.
137 ValidateUKM(false /* server_lofi_expected */,
138 false /* client_lofi_expected */, false /* lite_page_expected */,
139 false /* opt_out_expected */);
140 }
141
142 TEST_F(PreviewsUKMObserverTest, LitePageSeen) {
143 RunTest(true /* data_reduction_proxy_used */, true /* lite_page_received */);
144
145 NavigateToUntrackedUrl();
146
147 ValidateUKM(false /* server_lofi_expected */,
148 false /* client_lofi_expected */, true /* lite_page_expected */,
149 false /* opt_out_expected */);
150 }
151
152 TEST_F(PreviewsUKMObserverTest, LitePageOptOut) {
153 RunTest(true /* data_reduction_proxy_used */, true /* lite_page_received */);
154
155 observer()->BroadcastEventToObservers(
156 PreviewsInfoBarDelegate::OptOutEventKey());
157 NavigateToUntrackedUrl();
158
159 ValidateUKM(false /* server_lofi_expected */,
160 false /* client_lofi_expected */, true /* lite_page_expected */,
161 true /* opt_out_expected */);
162 }
163
164 TEST_F(PreviewsUKMObserverTest, ClientLoFiSeen) {
165 RunTest(false /* data_reduction_proxy_used */,
166 false /* lite_page_received */);
167
168 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
169 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
170 data->set_client_lofi_requested(true);
171
172 // Prepare 3 resources of varying size and configurations, 2 of which have
173 // client LoFi set.
174 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
175 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
176 1024 * 40 /* raw_body_bytes */,
177 1024 * 40 * 5 /* original_network_content_length */, std::move(data),
178 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
179 // Uncached non-proxied request.
180 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
181 1024 * 40 /* raw_body_bytes */,
182 1024 * 40 /* original_network_content_length */,
183 nullptr /* data_reduction_proxy_data */,
184 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
185 };
186
187 for (const auto& request : resources)
188 SimulateLoadedResource(request);
189
190 NavigateToUntrackedUrl();
191
192 ValidateUKM(false /* server_lofi_expected */, true /* client_lofi_expected */,
193 false /* lite_page_expected */, false /* opt_out_expected */);
194 }
195
196 TEST_F(PreviewsUKMObserverTest, ClientLoFiOptOut) {
197 RunTest(false /* data_reduction_proxy_used */,
198 false /* lite_page_received */);
199
200 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
201 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
202 data->set_client_lofi_requested(true);
203
204 // Prepare 3 resources of varying size and configurations, 2 of which have
205 // client LoFi set.
206 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
207 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
208 1024 * 40 /* raw_body_bytes */,
209 1024 * 40 * 5 /* original_network_content_length */, std::move(data),
210 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
211 // Uncached non-proxied request.
212 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
213 1024 * 40 /* raw_body_bytes */,
214 1024 * 40 /* original_network_content_length */,
215 nullptr /* data_reduction_proxy_data */,
216 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
217 };
218
219 for (const auto& request : resources)
220 SimulateLoadedResource(request);
221 observer()->BroadcastEventToObservers(
222 PreviewsInfoBarDelegate::OptOutEventKey());
223 NavigateToUntrackedUrl();
224
225 ValidateUKM(false /* server_lofi_expected */, true /* client_lofi_expected */,
226 false /* lite_page_expected */, true /* opt_out_expected */);
227 }
228
229 TEST_F(PreviewsUKMObserverTest, ServerLoFiSeen) {
230 RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */);
231
232 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
233 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
234 data->set_used_data_reduction_proxy(true);
235 data->set_lofi_received(true);
236
237 // Prepare 3 resources of varying size and configurations, 2 of which have
238 // client LoFi set.
239 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
240 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
241 1024 * 40 /* raw_body_bytes */,
242 1024 * 40 * 5 /* original_network_content_length */, std::move(data),
243 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
244 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
245 1024 * 40 /* raw_body_bytes */,
246 1024 * 40 /* original_network_content_length */,
247 nullptr /* data_reduction_proxy_data */,
248 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
249 };
250
251 for (const auto& request : resources)
252 SimulateLoadedResource(request);
253
254 NavigateToUntrackedUrl();
255
256 ValidateUKM(true /* server_lofi_expected */, false /* client_lofi_expected */,
257 false /* lite_page_expected */, false /* opt_out_expected */);
258 }
259
260 TEST_F(PreviewsUKMObserverTest, ServerLoFiOptOut) {
261 RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */);
262
263 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data =
264 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
265 data->set_used_data_reduction_proxy(true);
266 data->set_lofi_received(true);
267
268 // Prepare 3 resources of varying size and configurations, 2 of which have
269 // client LoFi set.
270 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
271 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
272 1024 * 40 /* raw_body_bytes */,
273 1024 * 40 * 5 /* original_network_content_length */, std::move(data),
274 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
275 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
276 1024 * 40 /* raw_body_bytes */,
277 1024 * 40 /* original_network_content_length */,
278 nullptr /* data_reduction_proxy_data */,
279 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
280 };
281
282 for (const auto& request : resources)
283 SimulateLoadedResource(request);
284
285 observer()->BroadcastEventToObservers(
286 PreviewsInfoBarDelegate::OptOutEventKey());
287 NavigateToUntrackedUrl();
288
289 ValidateUKM(true /* server_lofi_expected */, false /* client_lofi_expected */,
290 false /* lite_page_expected */, true /* opt_out_expected */);
291 }
292
293 TEST_F(PreviewsUKMObserverTest, BothLoFiSeen) {
294 RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */);
295
296 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data1 =
297 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
298 data1->set_used_data_reduction_proxy(true);
299 data1->set_lofi_received(true);
300
301 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data2 =
302 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
303 data2->set_used_data_reduction_proxy(true);
304 data2->set_client_lofi_requested(true);
305
306 // Prepare 4 resources of varying size and configurations, 1 has Client LoFi,
307 // 1 has Server LoFi.
308 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
309 // Uncached proxied request with .1 compression ratio.
310 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
311 1024 * 40 /* raw_body_bytes */,
312 1024 * 40 * 10 /* original_network_content_length */, std::move(data1),
313 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
314 // Uncached proxied request with .5 compression ratio.
315 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
316 1024 * 40 /* raw_body_bytes */,
317 1024 * 40 * 5 /* original_network_content_length */, std::move(data2),
318 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
319 };
320
321 for (const auto& request : resources)
322 SimulateLoadedResource(request);
323
324 NavigateToUntrackedUrl();
325 ValidateUKM(true /* server_lofi_expected */, true /* client_lofi_expected */,
326 false /* lite_page_expected */, false /* opt_out_expected */);
327 }
328
329 TEST_F(PreviewsUKMObserverTest, BothLoFiOptOut) {
330 RunTest(true /* data_reduction_proxy_used */, false /* lite_page_received */);
331
332 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data1 =
333 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
334 data1->set_used_data_reduction_proxy(true);
335 data1->set_lofi_received(true);
336
337 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> data2 =
338 base::MakeUnique<data_reduction_proxy::DataReductionProxyData>();
339 data2->set_used_data_reduction_proxy(true);
340 data2->set_client_lofi_requested(true);
341
342 // Prepare 4 resources of varying size and configurations, 1 has Client LoFi,
343 // 1 has Server LoFi.
344 page_load_metrics::ExtraRequestCompleteInfo resources[] = {
345 // Uncached proxied request with .1 compression ratio.
346 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
347 1024 * 40 /* raw_body_bytes */,
348 1024 * 40 * 10 /* original_network_content_length */, std::move(data1),
349 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
350 // Uncached proxied request with .5 compression ratio.
351 {GURL(kDefaultTestUrl), net::HostPortPair(), -1, false /*was_cached*/,
352 1024 * 40 /* raw_body_bytes */,
353 1024 * 40 * 5 /* original_network_content_length */, std::move(data2),
354 content::ResourceType::RESOURCE_TYPE_IMAGE, 0},
355 };
356
357 for (const auto& request : resources)
358 SimulateLoadedResource(request);
359 observer()->BroadcastEventToObservers(
360 PreviewsInfoBarDelegate::OptOutEventKey());
361 NavigateToUntrackedUrl();
362 ValidateUKM(true /* server_lofi_expected */, true /* client_lofi_expected */,
363 false /* lite_page_expected */, true /* opt_out_expected */);
364 }
365
366 } // namespace
367
368 } // namespace previews
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698