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

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

Issue 2893183002: [subresource_filter] Use the SubresourceFilterObserver for PageLoadMetrics (Closed)
Patch Set: bmcquade review Created 3 years, 6 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
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 <memory>
8
7 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
8 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_ test_harness.h" 10 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_ test_harness.h"
11 #include "components/subresource_filter/content/browser/subresource_filter_obser ver_manager.h"
12 #include "components/subresource_filter/core/common/activation_decision.h"
13 #include "components/subresource_filter/core/common/activation_level.h"
14 #include "components/subresource_filter/core/common/activation_state.h"
15 #include "content/public/browser/navigation_handle.h"
16 #include "content/public/test/navigation_simulator.h"
17 #include "url/gurl.h"
9 18
10 namespace { 19 namespace {
11 const char kDefaultTestUrl[] = "https://example.com/"; 20 const char kDefaultTestUrl[] = "https://example.com/";
21 const char kDefaultTestUrlWithActivation[] = "https://example-activation.com/";
12 } // namespace 22 } // namespace
13 23
14 class SubresourceFilterMetricsObserverTest 24 class SubresourceFilterMetricsObserverTest
15 : public page_load_metrics::PageLoadMetricsObserverTestHarness { 25 : public page_load_metrics::PageLoadMetricsObserverTestHarness {
16 public: 26 public:
27 SubresourceFilterMetricsObserverTest() {}
28 ~SubresourceFilterMetricsObserverTest() override {}
29
30 void SetUp() override {
31 page_load_metrics::PageLoadMetricsObserverTestHarness::SetUp();
32 subresource_filter::SubresourceFilterObserverManager::CreateForWebContents(
33 web_contents());
34 observer_manager_ =
35 subresource_filter::SubresourceFilterObserverManager::FromWebContents(
36 web_contents());
37 }
38
17 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { 39 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
18 tracker->AddObserver(base::MakeUnique<SubresourceFilterMetricsObserver>()); 40 tracker->AddObserver(base::MakeUnique<SubresourceFilterMetricsObserver>());
19 } 41 }
20 42
21 bool AnyMetricsRecorded() { 43 size_t TotalMetricsRecorded() {
22 return !histogram_tester() 44 return histogram_tester()
23 .GetTotalCountsForPrefix("PageLoad.Clients.SubresourceFilter.") 45 .GetTotalCountsForPrefix("PageLoad.Clients.SubresourceFilter.")
24 .empty(); 46 .size();
25 } 47 }
26 48
27 void InitializePageLoadTiming( 49 void InitializePageLoadTiming(
28 page_load_metrics::mojom::PageLoadTiming* timing) { 50 page_load_metrics::mojom::PageLoadTiming* timing) {
29 page_load_metrics::InitPageLoadTimingForTest(timing); 51 page_load_metrics::InitPageLoadTimingForTest(timing);
30 timing->navigation_start = base::Time::FromDoubleT(1); 52 timing->navigation_start = base::Time::FromDoubleT(1);
31 timing->parse_timing->parse_start = base::TimeDelta::FromMilliseconds(100); 53 timing->parse_timing->parse_start = base::TimeDelta::FromMilliseconds(100);
32 timing->parse_timing->parse_stop = base::TimeDelta::FromMilliseconds(200); 54 timing->parse_timing->parse_stop = base::TimeDelta::FromMilliseconds(200);
33 timing->parse_timing->parse_blocked_on_script_load_duration = 55 timing->parse_timing->parse_blocked_on_script_load_duration =
34 base::TimeDelta::FromMilliseconds(10); 56 base::TimeDelta::FromMilliseconds(10);
35 timing->parse_timing->parse_blocked_on_script_execution_duration = 57 timing->parse_timing->parse_blocked_on_script_execution_duration =
36 base::TimeDelta::FromMilliseconds(20); 58 base::TimeDelta::FromMilliseconds(20);
37 timing->paint_timing->first_contentful_paint = 59 timing->paint_timing->first_contentful_paint =
38 base::TimeDelta::FromMilliseconds(300); 60 base::TimeDelta::FromMilliseconds(300);
39 timing->paint_timing->first_meaningful_paint = 61 timing->paint_timing->first_meaningful_paint =
40 base::TimeDelta::FromMilliseconds(400); 62 base::TimeDelta::FromMilliseconds(400);
41 timing->document_timing->dom_content_loaded_event_start = 63 timing->document_timing->dom_content_loaded_event_start =
42 base::TimeDelta::FromMilliseconds(1200); 64 base::TimeDelta::FromMilliseconds(1200);
43 timing->document_timing->load_event_start = 65 timing->document_timing->load_event_start =
44 base::TimeDelta::FromMilliseconds(1500); 66 base::TimeDelta::FromMilliseconds(1500);
45 PopulateRequiredTimingFields(timing); 67 PopulateRequiredTimingFields(timing);
46 } 68 }
69
70 void SimulateNavigateAndCommit(const GURL& url) {
71 std::unique_ptr<content::NavigationSimulator> simulator =
72 content::NavigationSimulator::CreateRendererInitiated(url, main_rfh());
73 simulator->Start();
74 // Simulate an activation notification.
75 content::NavigationHandle* handle = simulator->GetNavigationHandle();
76 if (handle->GetURL() == kDefaultTestUrlWithActivation) {
77 observer_manager_->NotifyPageActivationComputed(
78 handle, subresource_filter::ActivationDecision::ACTIVATED,
79 subresource_filter::ActivationState(
80 subresource_filter::ActivationLevel::ENABLED));
81 } else {
82 observer_manager_->NotifyPageActivationComputed(
83 handle,
84 subresource_filter::ActivationDecision::ACTIVATION_CONDITIONS_NOT_MET,
85 subresource_filter::ActivationState(
86 subresource_filter::ActivationLevel::DISABLED));
87 }
88 simulator->Commit();
89 }
90
91 private:
92 // Owned by the WebContents.
93 subresource_filter::SubresourceFilterObserverManager* observer_manager_ =
94 nullptr;
95
96 DISALLOW_COPY_AND_ASSIGN(SubresourceFilterMetricsObserverTest);
47 }; 97 };
48 98
49 TEST_F(SubresourceFilterMetricsObserverTest, 99 TEST_F(SubresourceFilterMetricsObserverTest,
50 NoMetricsForNonSubresourceFilteredNavigation) { 100 NoMetricsForNonSubresourceFilteredNavigation) {
51 NavigateAndCommit(GURL(kDefaultTestUrl)); 101 SimulateNavigateAndCommit(GURL(kDefaultTestUrl));
52 102
53 page_load_metrics::mojom::PageLoadTiming timing; 103 page_load_metrics::mojom::PageLoadTiming timing;
54 InitializePageLoadTiming(&timing); 104 InitializePageLoadTiming(&timing);
55 SimulateTimingUpdate(timing); 105 SimulateTimingUpdate(timing);
56 106
57 // Navigate away from the current page to force logging of request and byte 107 // Navigate away from the current page to force logging of request and byte
58 // metrics. 108 // metrics.
59 NavigateToUntrackedUrl(); 109 NavigateToUntrackedUrl();
60 110
61 ASSERT_FALSE(AnyMetricsRecorded()); 111 EXPECT_EQ(1u, TotalMetricsRecorded());
112 histogram_tester().ExpectBucketCount(
113 internal::kHistogramSubresourceFilterActivationDecision,
114 static_cast<int>(subresource_filter::ActivationDecision::
115 ACTIVATION_CONDITIONS_NOT_MET),
116 1);
62 } 117 }
63 118
64 TEST_F(SubresourceFilterMetricsObserverTest, Basic) { 119 TEST_F(SubresourceFilterMetricsObserverTest, Basic) {
65 NavigateAndCommit(GURL(kDefaultTestUrl)); 120 SimulateNavigateAndCommit(GURL(kDefaultTestUrlWithActivation));
66 121
67 page_load_metrics::mojom::PageLoadTiming timing; 122 page_load_metrics::mojom::PageLoadTiming timing;
68 InitializePageLoadTiming(&timing); 123 InitializePageLoadTiming(&timing);
69 page_load_metrics::mojom::PageLoadMetadata metadata; 124 page_load_metrics::mojom::PageLoadMetadata metadata;
70 metadata.behavior_flags |= 125 metadata.behavior_flags |=
71 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch; 126 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorSubresourceFilterMatch;
72 SimulateTimingAndMetadataUpdate(timing, metadata); 127 SimulateTimingAndMetadataUpdate(timing, metadata);
73 128
74 // Navigate away from the current page to force logging of metrics. 129 // Navigate away from the current page to force logging of metrics.
75 NavigateToUntrackedUrl(); 130 NavigateToUntrackedUrl();
76 131
77 ASSERT_TRUE(AnyMetricsRecorded()); 132 EXPECT_GT(TotalMetricsRecorded(), 0u);
78 133
79 histogram_tester().ExpectTotalCount( 134 histogram_tester().ExpectTotalCount(
80 internal::kHistogramSubresourceFilterCount, 1); 135 internal::kHistogramSubresourceFilterCount, 1);
81 136
82 histogram_tester().ExpectTotalCount( 137 histogram_tester().ExpectTotalCount(
83 internal::kHistogramSubresourceFilterFirstContentfulPaint, 1); 138 internal::kHistogramSubresourceFilterFirstContentfulPaint, 1);
84 histogram_tester().ExpectBucketCount( 139 histogram_tester().ExpectBucketCount(
85 internal::kHistogramSubresourceFilterFirstContentfulPaint, 140 internal::kHistogramSubresourceFilterFirstContentfulPaint,
86 timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1); 141 timing.paint_timing->first_contentful_paint.value().InMilliseconds(), 1);
87 142
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution, 201 internal::kHistogramSubresourceFilterParseBlockedOnScriptExecution,
147 timing.parse_timing->parse_blocked_on_script_execution_duration.value() 202 timing.parse_timing->parse_blocked_on_script_execution_duration.value()
148 .InMilliseconds(), 203 .InMilliseconds(),
149 1); 204 1);
150 205
151 histogram_tester().ExpectTotalCount( 206 histogram_tester().ExpectTotalCount(
152 internal::kHistogramSubresourceFilterForegroundDuration, 1); 207 internal::kHistogramSubresourceFilterForegroundDuration, 1);
153 } 208 }
154 209
155 TEST_F(SubresourceFilterMetricsObserverTest, Subresources) { 210 TEST_F(SubresourceFilterMetricsObserverTest, Subresources) {
156 NavigateAndCommit(GURL(kDefaultTestUrl)); 211 SimulateNavigateAndCommit(GURL(kDefaultTestUrlWithActivation));
157 212
158 SimulateLoadedResource( 213 SimulateLoadedResource(
159 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, 214 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */,
160 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, 215 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */,
161 nullptr /* data_reduction_proxy_data */, 216 nullptr /* data_reduction_proxy_data */,
162 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); 217 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME});
163 218
164 page_load_metrics::mojom::PageLoadTiming timing; 219 page_load_metrics::mojom::PageLoadTiming timing;
165 page_load_metrics::InitPageLoadTimingForTest(&timing); 220 page_load_metrics::InitPageLoadTimingForTest(&timing);
166 timing.navigation_start = base::Time::FromDoubleT(1); 221 timing.navigation_start = base::Time::FromDoubleT(1);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 histogram_tester().ExpectBucketCount( 299 histogram_tester().ExpectBucketCount(
245 internal::kHistogramSubresourceFilterNoMediaNetworkBytes, 60, 1); 300 internal::kHistogramSubresourceFilterNoMediaNetworkBytes, 60, 1);
246 301
247 histogram_tester().ExpectTotalCount( 302 histogram_tester().ExpectTotalCount(
248 internal::kHistogramSubresourceFilterNoMediaCacheBytes, 1); 303 internal::kHistogramSubresourceFilterNoMediaCacheBytes, 1);
249 histogram_tester().ExpectBucketCount( 304 histogram_tester().ExpectBucketCount(
250 internal::kHistogramSubresourceFilterNoMediaCacheBytes, 10, 1); 305 internal::kHistogramSubresourceFilterNoMediaCacheBytes, 10, 1);
251 } 306 }
252 307
253 TEST_F(SubresourceFilterMetricsObserverTest, SubresourcesWithMedia) { 308 TEST_F(SubresourceFilterMetricsObserverTest, SubresourcesWithMedia) {
254 NavigateAndCommit(GURL(kDefaultTestUrl)); 309 SimulateNavigateAndCommit(GURL(kDefaultTestUrlWithActivation));
255 310
256 SimulateMediaPlayed(); 311 SimulateMediaPlayed();
257 312
258 SimulateLoadedResource( 313 SimulateLoadedResource(
259 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */, 314 {GURL(), -1 /* frame_tree_node_id */, false /* was_cached */,
260 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */, 315 1024 * 40 /* raw_body_bytes */, 0 /* original_network_content_length */,
261 nullptr /* data_reduction_proxy_data */, 316 nullptr /* data_reduction_proxy_data */,
262 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME}); 317 content::ResourceType::RESOURCE_TYPE_MAIN_FRAME});
263 318
264 page_load_metrics::mojom::PageLoadTiming timing; 319 page_load_metrics::mojom::PageLoadTiming timing;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 histogram_tester().ExpectTotalCount( 397 histogram_tester().ExpectTotalCount(
343 internal::kHistogramSubresourceFilterMediaNetworkBytes, 1); 398 internal::kHistogramSubresourceFilterMediaNetworkBytes, 1);
344 histogram_tester().ExpectBucketCount( 399 histogram_tester().ExpectBucketCount(
345 internal::kHistogramSubresourceFilterMediaNetworkBytes, 60, 1); 400 internal::kHistogramSubresourceFilterMediaNetworkBytes, 60, 1);
346 401
347 histogram_tester().ExpectTotalCount( 402 histogram_tester().ExpectTotalCount(
348 internal::kHistogramSubresourceFilterMediaCacheBytes, 1); 403 internal::kHistogramSubresourceFilterMediaCacheBytes, 1);
349 histogram_tester().ExpectBucketCount( 404 histogram_tester().ExpectBucketCount(
350 internal::kHistogramSubresourceFilterMediaCacheBytes, 10, 1); 405 internal::kHistogramSubresourceFilterMediaCacheBytes, 10, 1);
351 } 406 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698