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