OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/page_load_metrics/observers/subresource_filter_metrics_
observer.h" | 5 #include "chrome/browser/page_load_metrics/observers/subresource_filter_metrics_
observer.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_
test_harness.h" | 8 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_
test_harness.h" |
9 | 9 |
10 namespace { | 10 namespace { |
11 const char kDefaultTestUrl[] = "https://example.com/"; | 11 const char kDefaultTestUrl[] = "https://example.com/"; |
12 } // namespace | 12 } // namespace |
13 | 13 |
14 class SubresourceFilterMetricsObserverTest | 14 class SubresourceFilterMetricsObserverTest |
15 : public page_load_metrics::PageLoadMetricsObserverTestHarness { | 15 : public page_load_metrics::PageLoadMetricsObserverTestHarness { |
16 public: | 16 public: |
17 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { | 17 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { |
18 tracker->AddObserver(base::MakeUnique<SubresourceFilterMetricsObserver>()); | 18 tracker->AddObserver(base::MakeUnique<SubresourceFilterMetricsObserver>()); |
19 } | 19 } |
20 | 20 |
21 bool AnyMetricsRecorded() { | 21 bool AnyMetricsRecorded() { |
22 return !histogram_tester() | 22 return !histogram_tester() |
23 .GetTotalCountsForPrefix("PageLoad.Clients.SubresourceFilter.") | 23 .GetTotalCountsForPrefix("PageLoad.Clients.SubresourceFilter.") |
24 .empty(); | 24 .empty(); |
25 } | 25 } |
26 | 26 |
27 void InitializePageLoadTiming(page_load_metrics::PageLoadTiming* timing) { | 27 void InitializePageLoadTiming( |
| 28 page_load_metrics::mojom::PageLoadTiming* timing) { |
| 29 page_load_metrics::InitPageLoadTimingForTest(timing); |
28 timing->navigation_start = base::Time::FromDoubleT(1); | 30 timing->navigation_start = base::Time::FromDoubleT(1); |
29 timing->parse_timing.parse_start = base::TimeDelta::FromMilliseconds(100); | 31 timing->parse_timing->parse_start = base::TimeDelta::FromMilliseconds(100); |
30 timing->parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(200); | 32 timing->parse_timing->parse_stop = base::TimeDelta::FromMilliseconds(200); |
31 timing->parse_timing.parse_blocked_on_script_load_duration = | 33 timing->parse_timing->parse_blocked_on_script_load_duration = |
32 base::TimeDelta::FromMilliseconds(10); | 34 base::TimeDelta::FromMilliseconds(10); |
33 timing->parse_timing.parse_blocked_on_script_execution_duration = | 35 timing->parse_timing->parse_blocked_on_script_execution_duration = |
34 base::TimeDelta::FromMilliseconds(20); | 36 base::TimeDelta::FromMilliseconds(20); |
35 timing->paint_timing.first_contentful_paint = | 37 timing->paint_timing->first_contentful_paint = |
36 base::TimeDelta::FromMilliseconds(300); | 38 base::TimeDelta::FromMilliseconds(300); |
37 timing->paint_timing.first_meaningful_paint = | 39 timing->paint_timing->first_meaningful_paint = |
38 base::TimeDelta::FromMilliseconds(400); | 40 base::TimeDelta::FromMilliseconds(400); |
39 timing->document_timing.dom_content_loaded_event_start = | 41 timing->document_timing->dom_content_loaded_event_start = |
40 base::TimeDelta::FromMilliseconds(1200); | 42 base::TimeDelta::FromMilliseconds(1200); |
41 timing->document_timing.load_event_start = | 43 timing->document_timing->load_event_start = |
42 base::TimeDelta::FromMilliseconds(1500); | 44 base::TimeDelta::FromMilliseconds(1500); |
43 PopulateRequiredTimingFields(timing); | 45 PopulateRequiredTimingFields(timing); |
44 } | 46 } |
45 }; | 47 }; |
46 | 48 |
47 TEST_F(SubresourceFilterMetricsObserverTest, | 49 TEST_F(SubresourceFilterMetricsObserverTest, |
48 NoMetricsForNonSubresourceFilteredNavigation) { | 50 NoMetricsForNonSubresourceFilteredNavigation) { |
49 NavigateAndCommit(GURL(kDefaultTestUrl)); | 51 NavigateAndCommit(GURL(kDefaultTestUrl)); |
50 | 52 |
51 page_load_metrics::PageLoadTiming timing; | 53 page_load_metrics::mojom::PageLoadTiming timing; |
52 InitializePageLoadTiming(&timing); | 54 InitializePageLoadTiming(&timing); |
53 SimulateTimingUpdate(timing); | 55 SimulateTimingUpdate(timing); |
54 | 56 |
55 // Navigate away from the current page to force logging of request and byte | 57 // Navigate away from the current page to force logging of request and byte |
56 // metrics. | 58 // metrics. |
57 NavigateToUntrackedUrl(); | 59 NavigateToUntrackedUrl(); |
58 | 60 |
59 ASSERT_FALSE(AnyMetricsRecorded()); | 61 ASSERT_FALSE(AnyMetricsRecorded()); |
60 } | 62 } |
61 | 63 |
62 TEST_F(SubresourceFilterMetricsObserverTest, Basic) { | 64 TEST_F(SubresourceFilterMetricsObserverTest, Basic) { |
63 NavigateAndCommit(GURL(kDefaultTestUrl)); | 65 NavigateAndCommit(GURL(kDefaultTestUrl)); |
64 | 66 |
65 page_load_metrics::PageLoadTiming timing; | 67 page_load_metrics::mojom::PageLoadTiming timing; |
66 InitializePageLoadTiming(&timing); | 68 InitializePageLoadTiming(&timing); |
67 page_load_metrics::PageLoadMetadata metadata; | 69 page_load_metrics::mojom::PageLoadMetadata metadata; |
68 metadata.behavior_flags |= | 70 metadata.behavior_flags |= |
69 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; | 71 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; |
70 SimulateTimingAndMetadataUpdate(timing, metadata); | 72 SimulateTimingAndMetadataUpdate(timing, metadata); |
71 | 73 |
72 // Navigate away from the current page to force logging of metrics. | 74 // Navigate away from the current page to force logging of metrics. |
73 NavigateToUntrackedUrl(); | 75 NavigateToUntrackedUrl(); |
74 | 76 |
75 ASSERT_TRUE(AnyMetricsRecorded()); | 77 ASSERT_TRUE(AnyMetricsRecorded()); |
76 | 78 |
77 histogram_tester().ExpectTotalCount( | 79 histogram_tester().ExpectTotalCount( |
78 internal::kHistogramSubresourceFilterCount, 1); | 80 internal::kHistogramSubresourceFilterCount, 1); |
79 | 81 |
80 histogram_tester().ExpectTotalCount( | 82 histogram_tester().ExpectTotalCount( |
81 internal::kHistogramSubresourceFilterFirstContentfulPaint, 1); | 83 internal::kHistogramSubresourceFilterFirstContentfulPaint, 1); |
82 histogram_tester().ExpectBucketCount( | 84 histogram_tester().ExpectBucketCount( |
83 internal::kHistogramSubresourceFilterFirstContentfulPaint, | 85 internal::kHistogramSubresourceFilterFirstContentfulPaint, |
84 timing.paint_timing.first_contentful_paint.value().InMilliseconds(), 1); | 86 timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1); |
85 | 87 |
86 histogram_tester().ExpectTotalCount( | 88 histogram_tester().ExpectTotalCount( |
87 internal::kHistogramSubresourceFilterParseStartToFirstContentfulPaint, 1); | 89 internal::kHistogramSubresourceFilterParseStartToFirstContentfulPaint, 1); |
88 histogram_tester().ExpectBucketCount( | 90 histogram_tester().ExpectBucketCount( |
89 internal::kHistogramSubresourceFilterParseStartToFirstContentfulPaint, | 91 internal::kHistogramSubresourceFilterParseStartToFirstContentfulPaint, |
90 (timing.paint_timing.first_contentful_paint.value() - | 92 (timing.paint_timing->first_contentful_paint.value() - |
91 timing.parse_timing.parse_start.value()) | 93 timing.parse_timing->parse_start.value()) |
92 .InMilliseconds(), | 94 .InMilliseconds(), |
93 1); | 95 1); |
94 | 96 |
95 histogram_tester().ExpectTotalCount( | 97 histogram_tester().ExpectTotalCount( |
96 internal::kHistogramSubresourceFilterFirstMeaningfulPaint, 1); | 98 internal::kHistogramSubresourceFilterFirstMeaningfulPaint, 1); |
97 histogram_tester().ExpectBucketCount( | 99 histogram_tester().ExpectBucketCount( |
98 internal::kHistogramSubresourceFilterFirstMeaningfulPaint, | 100 internal::kHistogramSubresourceFilterFirstMeaningfulPaint, |
99 timing.paint_timing.first_meaningful_paint.value().InMilliseconds(), 1); | 101 timing.paint_timing->first_meaningful_paint.value().InMilliseconds(), 1); |
100 | 102 |
101 histogram_tester().ExpectTotalCount( | 103 histogram_tester().ExpectTotalCount( |
102 internal::kHistogramSubresourceFilterParseStartToFirstMeaningfulPaint, 1); | 104 internal::kHistogramSubresourceFilterParseStartToFirstMeaningfulPaint, 1); |
103 histogram_tester().ExpectBucketCount( | 105 histogram_tester().ExpectBucketCount( |
104 internal::kHistogramSubresourceFilterParseStartToFirstMeaningfulPaint, | 106 internal::kHistogramSubresourceFilterParseStartToFirstMeaningfulPaint, |
105 (timing.paint_timing.first_meaningful_paint.value() - | 107 (timing.paint_timing->first_meaningful_paint.value() - |
106 timing.parse_timing.parse_start.value()) | 108 timing.parse_timing->parse_start.value()) |
107 .InMilliseconds(), | 109 .InMilliseconds(), |
108 1); | 110 1); |
109 | 111 |
110 histogram_tester().ExpectTotalCount( | 112 histogram_tester().ExpectTotalCount( |
111 internal::kHistogramSubresourceFilterDomContentLoaded, 1); | 113 internal::kHistogramSubresourceFilterDomContentLoaded, 1); |
112 histogram_tester().ExpectBucketCount( | 114 histogram_tester().ExpectBucketCount( |
113 internal::kHistogramSubresourceFilterDomContentLoaded, | 115 internal::kHistogramSubresourceFilterDomContentLoaded, |
114 timing.document_timing.dom_content_loaded_event_start.value() | 116 timing.document_timing->dom_content_loaded_event_start.value() |
115 .InMilliseconds(), | 117 .InMilliseconds(), |
116 1); | 118 1); |
117 | 119 |
118 histogram_tester().ExpectTotalCount(internal::kHistogramSubresourceFilterLoad, | 120 histogram_tester().ExpectTotalCount(internal::kHistogramSubresourceFilterLoad, |
119 1); | 121 1); |
120 histogram_tester().ExpectBucketCount( | 122 histogram_tester().ExpectBucketCount( |
121 internal::kHistogramSubresourceFilterLoad, | 123 internal::kHistogramSubresourceFilterLoad, |
122 timing.document_timing.load_event_start.value().InMilliseconds(), 1); | 124 timing.document_timing->load_event_start.value().InMilliseconds(), 1); |
123 | 125 |
124 histogram_tester().ExpectTotalCount( | 126 histogram_tester().ExpectTotalCount( |
125 internal::kHistogramSubresourceFilterParseDuration, 1); | 127 internal::kHistogramSubresourceFilterParseDuration, 1); |
126 histogram_tester().ExpectBucketCount( | 128 histogram_tester().ExpectBucketCount( |
127 internal::kHistogramSubresourceFilterParseDuration, | 129 internal::kHistogramSubresourceFilterParseDuration, |
128 (timing.parse_timing.parse_stop.value() - | 130 (timing.parse_timing->parse_stop.value() - |
129 timing.parse_timing.parse_start.value()) | 131 timing.parse_timing->parse_start.value()) |
130 .InMilliseconds(), | 132 .InMilliseconds(), |
131 1); | 133 1); |
132 | 134 |
133 histogram_tester().ExpectTotalCount( | 135 histogram_tester().ExpectTotalCount( |
134 internal::kHistogramSubresourceFilterParseBlockedOnScriptLoad, 1); | 136 internal::kHistogramSubresourceFilterParseBlockedOnScriptLoad, 1); |
135 histogram_tester().ExpectBucketCount( | 137 histogram_tester().ExpectBucketCount( |
136 internal::kHistogramSubresourceFilterParseBlockedOnScriptLoad, | 138 internal::kHistogramSubresourceFilterParseBlockedOnScriptLoad, |
137 timing.parse_timing.parse_blocked_on_script_load_duration.value() | 139 timing.parse_timing->parse_blocked_on_script_load_duration.value() |
138 .InMilliseconds(), | 140 .InMilliseconds(), |
139 1); | 141 1); |
140 | 142 |
141 histogram_tester().ExpectTotalCount( | 143 histogram_tester().ExpectTotalCount( |
142 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution, 1); | 144 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution, 1); |
143 histogram_tester().ExpectBucketCount( | 145 histogram_tester().ExpectBucketCount( |
144 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution, | 146 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution, |
145 timing.parse_timing.parse_blocked_on_script_execution_duration.value() | 147 timing.parse_timing->parse_blocked_on_script_execution_duration.value() |
146 .InMilliseconds(), | 148 .InMilliseconds(), |
147 1); | 149 1); |
148 | 150 |
149 histogram_tester().ExpectTotalCount( | 151 histogram_tester().ExpectTotalCount( |
150 internal::kHistogramSubresourceFilterForegroundDuration, 1); | 152 internal::kHistogramSubresourceFilterForegroundDuration, 1); |
151 } | 153 } |
152 | 154 |
153 TEST_F(SubresourceFilterMetricsObserverTest, Subresources) { | 155 TEST_F(SubresourceFilterMetricsObserverTest, Subresources) { |
154 NavigateAndCommit(GURL(kDefaultTestUrl)); | 156 NavigateAndCommit(GURL(kDefaultTestUrl)); |
155 | 157 |
156 SimulateLoadedResource( | 158 SimulateLoadedResource( |
157 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, | 159 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, |
158 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, | 160 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, |
159 nullptr /* data_reduction_proxy_data */, | 161 nullptr /* data_reduction_proxy_data */, |
160 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); | 162 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); |
161 | 163 |
162 page_load_metrics::PageLoadTiming timing; | 164 page_load_metrics::mojom::PageLoadTiming timing; |
| 165 page_load_metrics::InitPageLoadTimingForTest(&timing); |
163 timing.navigation_start = base::Time::FromDoubleT(1); | 166 timing.navigation_start = base::Time::FromDoubleT(1); |
164 page_load_metrics::PageLoadMetadata metadata; | 167 page_load_metrics::mojom::PageLoadMetadata metadata; |
165 metadata.behavior_flags |= | 168 metadata.behavior_flags |= |
166 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; | 169 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; |
167 SimulateTimingAndMetadataUpdate(timing, metadata); | 170 SimulateTimingAndMetadataUpdate(timing, metadata); |
168 | 171 |
169 SimulateLoadedResource( | 172 SimulateLoadedResource( |
170 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, | 173 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, |
171 1024 * 20 /* raw_body_bytes */, 0 /* original_network_content_length */, | 174 1024 * 20 /* raw_body_bytes */, 0 /* original_network_content_length */, |
172 nullptr /* data_reduction_proxy_data */, | 175 nullptr /* data_reduction_proxy_data */, |
173 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); | 176 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); |
174 | 177 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 NavigateAndCommit(GURL(kDefaultTestUrl)); | 254 NavigateAndCommit(GURL(kDefaultTestUrl)); |
252 | 255 |
253 SimulateMediaPlayed(); | 256 SimulateMediaPlayed(); |
254 | 257 |
255 SimulateLoadedResource( | 258 SimulateLoadedResource( |
256 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, | 259 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, |
257 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, | 260 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, |
258 nullptr /* data_reduction_proxy_data */, | 261 nullptr /* data_reduction_proxy_data */, |
259 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); | 262 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); |
260 | 263 |
261 page_load_metrics::PageLoadTiming timing; | 264 page_load_metrics::mojom::PageLoadTiming timing; |
| 265 page_load_metrics::InitPageLoadTimingForTest(&timing); |
262 timing.navigation_start = base::Time::FromDoubleT(1); | 266 timing.navigation_start = base::Time::FromDoubleT(1); |
263 page_load_metrics::PageLoadMetadata metadata; | 267 page_load_metrics::mojom::PageLoadMetadata metadata; |
264 metadata.behavior_flags |= | 268 metadata.behavior_flags |= |
265 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; | 269 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; |
266 SimulateTimingAndMetadataUpdate(timing, metadata); | 270 SimulateTimingAndMetadataUpdate(timing, metadata); |
267 | 271 |
268 SimulateLoadedResource( | 272 SimulateLoadedResource( |
269 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, | 273 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, |
270 1024 * 20 /* raw_body_bytes */, 0 /* original_network_content_length */, | 274 1024 * 20 /* raw_body_bytes */, 0 /* original_network_content_length */, |
271 nullptr /* data_reduction_proxy_data */, | 275 nullptr /* data_reduction_proxy_data */, |
272 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); | 276 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); |
273 | 277 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 histogram_tester().ExpectTotalCount( | 342 histogram_tester().ExpectTotalCount( |
339 internal::kHistogramSubresourceFilterMediaNetworkBytes, 1); | 343 internal::kHistogramSubresourceFilterMediaNetworkBytes, 1); |
340 histogram_tester().ExpectBucketCount( | 344 histogram_tester().ExpectBucketCount( |
341 internal::kHistogramSubresourceFilterMediaNetworkBytes, 60, 1); | 345 internal::kHistogramSubresourceFilterMediaNetworkBytes, 60, 1); |
342 | 346 |
343 histogram_tester().ExpectTotalCount( | 347 histogram_tester().ExpectTotalCount( |
344 internal::kHistogramSubresourceFilterMediaCacheBytes, 1); | 348 internal::kHistogramSubresourceFilterMediaCacheBytes, 1); |
345 histogram_tester().ExpectBucketCount( | 349 histogram_tester().ExpectBucketCount( |
346 internal::kHistogramSubresourceFilterMediaCacheBytes, 10, 1); | 350 internal::kHistogramSubresourceFilterMediaCacheBytes, 10, 1); |
347 } | 351 } |
OLD | NEW |