| 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 "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_observer.h" | 5 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_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 #include "chrome/test/base/testing_browser_process.h" | 9 #include "chrome/test/base/testing_browser_process.h" |
| 10 #include "third_party/WebKit/public/platform/WebLoadingBehaviorFlag.h" | 10 #include "third_party/WebKit/public/platform/WebLoadingBehaviorFlag.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 } | 27 } |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoMetrics) { | 30 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoMetrics) { |
| 31 AssertNoPreloadHistogramsLogged(); | 31 AssertNoPreloadHistogramsLogged(); |
| 32 AssertNoBlockHistogramsLogged(); | 32 AssertNoBlockHistogramsLogged(); |
| 33 } | 33 } |
| 34 | 34 |
| 35 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossiblePreload) { | 35 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossiblePreload) { |
| 36 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); | 36 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); |
| 37 page_load_metrics::PageLoadTiming timing; | 37 page_load_metrics::mojom::PageLoadTiming timing; |
| 38 page_load_metrics::InitPageLoadTimingForTest(&timing); |
| 38 timing.navigation_start = base::Time::FromDoubleT(1); | 39 timing.navigation_start = base::Time::FromDoubleT(1); |
| 39 timing.paint_timing.first_contentful_paint = contentful_paint; | 40 timing.paint_timing->first_contentful_paint = contentful_paint; |
| 40 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 41 timing.parse_timing->parse_start = base::TimeDelta::FromMilliseconds(1); |
| 41 PopulateRequiredTimingFields(&timing); | 42 PopulateRequiredTimingFields(&timing); |
| 42 | 43 |
| 43 page_load_metrics::PageLoadMetadata metadata; | 44 page_load_metrics::mojom::PageLoadMetadata metadata; |
| 44 metadata.behavior_flags |= | 45 metadata.behavior_flags |= |
| 45 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteEvaluator; | 46 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteEvaluator; |
| 46 NavigateAndCommit(GURL("https://www.google.com")); | 47 NavigateAndCommit(GURL("https://www.google.com")); |
| 47 SimulateTimingAndMetadataUpdate(timing, metadata); | 48 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 48 | 49 |
| 49 histogram_tester().ExpectTotalCount( | 50 histogram_tester().ExpectTotalCount( |
| 50 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); | 51 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); |
| 51 histogram_tester().ExpectBucketCount( | 52 histogram_tester().ExpectBucketCount( |
| 52 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, | 53 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, |
| 53 contentful_paint.InMilliseconds(), 1); | 54 contentful_paint.InMilliseconds(), 1); |
| 54 | 55 |
| 55 NavigateAndCommit(GURL("https://www.example.com")); | 56 NavigateAndCommit(GURL("https://www.example.com")); |
| 56 | 57 |
| 57 histogram_tester().ExpectTotalCount( | 58 histogram_tester().ExpectTotalCount( |
| 58 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); | 59 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); |
| 59 histogram_tester().ExpectBucketCount( | 60 histogram_tester().ExpectBucketCount( |
| 60 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, | 61 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, |
| 61 contentful_paint.InMilliseconds(), 1); | 62 contentful_paint.InMilliseconds(), 1); |
| 62 } | 63 } |
| 63 | 64 |
| 64 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossiblePreload) { | 65 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossiblePreload) { |
| 65 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); | 66 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); |
| 66 page_load_metrics::PageLoadTiming timing; | 67 page_load_metrics::mojom::PageLoadTiming timing; |
| 68 page_load_metrics::InitPageLoadTimingForTest(&timing); |
| 67 timing.navigation_start = base::Time::FromDoubleT(1); | 69 timing.navigation_start = base::Time::FromDoubleT(1); |
| 68 timing.paint_timing.first_contentful_paint = contentful_paint; | 70 timing.paint_timing->first_contentful_paint = contentful_paint; |
| 69 PopulateRequiredTimingFields(&timing); | 71 PopulateRequiredTimingFields(&timing); |
| 70 | 72 |
| 71 page_load_metrics::PageLoadMetadata metadata; | 73 page_load_metrics::mojom::PageLoadMetadata metadata; |
| 72 NavigateAndCommit(GURL("https://www.google.com")); | 74 NavigateAndCommit(GURL("https://www.google.com")); |
| 73 SimulateTimingAndMetadataUpdate(timing, metadata); | 75 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 74 NavigateAndCommit(GURL("https://www.example.com")); | 76 NavigateAndCommit(GURL("https://www.example.com")); |
| 75 AssertNoPreloadHistogramsLogged(); | 77 AssertNoPreloadHistogramsLogged(); |
| 76 } | 78 } |
| 77 | 79 |
| 78 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossibleBlock) { | 80 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossibleBlock) { |
| 79 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); | 81 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); |
| 80 page_load_metrics::PageLoadTiming timing; | 82 page_load_metrics::mojom::PageLoadTiming timing; |
| 83 page_load_metrics::InitPageLoadTimingForTest(&timing); |
| 81 timing.navigation_start = base::Time::FromDoubleT(1); | 84 timing.navigation_start = base::Time::FromDoubleT(1); |
| 82 timing.paint_timing.first_contentful_paint = contentful_paint; | 85 timing.paint_timing->first_contentful_paint = contentful_paint; |
| 83 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 86 timing.parse_timing->parse_start = base::TimeDelta::FromMilliseconds(1); |
| 84 PopulateRequiredTimingFields(&timing); | 87 PopulateRequiredTimingFields(&timing); |
| 85 | 88 |
| 86 page_load_metrics::PageLoadMetadata metadata; | 89 page_load_metrics::mojom::PageLoadMetadata metadata; |
| 87 metadata.behavior_flags |= | 90 metadata.behavior_flags |= |
| 88 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock; | 91 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorDocumentWriteBlock; |
| 89 NavigateAndCommit(GURL("https://www.google.com")); | 92 NavigateAndCommit(GURL("https://www.google.com")); |
| 90 SimulateTimingAndMetadataUpdate(timing, metadata); | 93 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 91 | 94 |
| 92 histogram_tester().ExpectTotalCount(internal::kHistogramDocWriteBlockCount, | 95 histogram_tester().ExpectTotalCount(internal::kHistogramDocWriteBlockCount, |
| 93 1); | 96 1); |
| 94 histogram_tester().ExpectTotalCount( | 97 histogram_tester().ExpectTotalCount( |
| 95 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 98 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
| 96 histogram_tester().ExpectBucketCount( | 99 histogram_tester().ExpectBucketCount( |
| 97 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, | 100 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, |
| 98 contentful_paint.InMilliseconds(), 1); | 101 contentful_paint.InMilliseconds(), 1); |
| 99 | 102 |
| 100 NavigateAndCommit(GURL("https://www.example.com")); | 103 NavigateAndCommit(GURL("https://www.example.com")); |
| 101 | 104 |
| 102 histogram_tester().ExpectTotalCount( | 105 histogram_tester().ExpectTotalCount( |
| 103 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 106 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
| 104 histogram_tester().ExpectBucketCount( | 107 histogram_tester().ExpectBucketCount( |
| 105 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, | 108 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, |
| 106 contentful_paint.InMilliseconds(), 1); | 109 contentful_paint.InMilliseconds(), 1); |
| 107 } | 110 } |
| 108 | 111 |
| 109 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossibleBlockReload) { | 112 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossibleBlockReload) { |
| 110 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); | 113 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); |
| 111 page_load_metrics::PageLoadTiming timing; | 114 page_load_metrics::mojom::PageLoadTiming timing; |
| 115 page_load_metrics::InitPageLoadTimingForTest(&timing); |
| 112 timing.navigation_start = base::Time::FromDoubleT(1); | 116 timing.navigation_start = base::Time::FromDoubleT(1); |
| 113 timing.paint_timing.first_contentful_paint = contentful_paint; | 117 timing.paint_timing->first_contentful_paint = contentful_paint; |
| 114 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 118 timing.parse_timing->parse_start = base::TimeDelta::FromMilliseconds(1); |
| 115 PopulateRequiredTimingFields(&timing); | 119 PopulateRequiredTimingFields(&timing); |
| 116 | 120 |
| 117 page_load_metrics::PageLoadMetadata metadata; | 121 page_load_metrics::mojom::PageLoadMetadata metadata; |
| 118 metadata.behavior_flags |= blink::WebLoadingBehaviorFlag:: | 122 metadata.behavior_flags |= blink::WebLoadingBehaviorFlag:: |
| 119 kWebLoadingBehaviorDocumentWriteBlockReload; | 123 kWebLoadingBehaviorDocumentWriteBlockReload; |
| 120 NavigateAndCommit(GURL("https://www.google.com")); | 124 NavigateAndCommit(GURL("https://www.google.com")); |
| 121 SimulateTimingAndMetadataUpdate(timing, metadata); | 125 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 122 | 126 |
| 123 histogram_tester().ExpectTotalCount( | 127 histogram_tester().ExpectTotalCount( |
| 124 internal::kHistogramDocWriteBlockReloadCount, 1); | 128 internal::kHistogramDocWriteBlockReloadCount, 1); |
| 125 | 129 |
| 126 // Another reload. | 130 // Another reload. |
| 127 NavigateAndCommit(GURL("https://www.example.com")); | 131 NavigateAndCommit(GURL("https://www.example.com")); |
| 128 SimulateTimingAndMetadataUpdate(timing, metadata); | 132 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 129 | 133 |
| 130 histogram_tester().ExpectTotalCount( | 134 histogram_tester().ExpectTotalCount( |
| 131 internal::kHistogramDocWriteBlockReloadCount, 2); | 135 internal::kHistogramDocWriteBlockReloadCount, 2); |
| 132 | 136 |
| 133 // Another metadata update should not increase reload count. | 137 // Another metadata update should not increase reload count. |
| 134 metadata.behavior_flags |= | 138 metadata.behavior_flags |= |
| 135 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; | 139 blink::WebLoadingBehaviorFlag::kWebLoadingBehaviorServiceWorkerControlled; |
| 136 SimulateTimingAndMetadataUpdate(timing, metadata); | 140 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 137 histogram_tester().ExpectTotalCount( | 141 histogram_tester().ExpectTotalCount( |
| 138 internal::kHistogramDocWriteBlockReloadCount, 2); | 142 internal::kHistogramDocWriteBlockReloadCount, 2); |
| 139 | 143 |
| 140 histogram_tester().ExpectTotalCount(internal::kHistogramDocWriteBlockCount, | 144 histogram_tester().ExpectTotalCount(internal::kHistogramDocWriteBlockCount, |
| 141 0); | 145 0); |
| 142 } | 146 } |
| 143 | 147 |
| 144 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossibleBlock) { | 148 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossibleBlock) { |
| 145 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); | 149 base::TimeDelta contentful_paint = base::TimeDelta::FromMilliseconds(1); |
| 146 page_load_metrics::PageLoadTiming timing; | 150 page_load_metrics::mojom::PageLoadTiming timing; |
| 151 page_load_metrics::InitPageLoadTimingForTest(&timing); |
| 147 timing.navigation_start = base::Time::FromDoubleT(1); | 152 timing.navigation_start = base::Time::FromDoubleT(1); |
| 148 timing.paint_timing.first_contentful_paint = contentful_paint; | 153 timing.paint_timing->first_contentful_paint = contentful_paint; |
| 149 PopulateRequiredTimingFields(&timing); | 154 PopulateRequiredTimingFields(&timing); |
| 150 | 155 |
| 151 page_load_metrics::PageLoadMetadata metadata; | 156 page_load_metrics::mojom::PageLoadMetadata metadata; |
| 152 NavigateAndCommit(GURL("https://www.google.com")); | 157 NavigateAndCommit(GURL("https://www.google.com")); |
| 153 SimulateTimingAndMetadataUpdate(timing, metadata); | 158 SimulateTimingAndMetadataUpdate(timing, metadata); |
| 154 | 159 |
| 155 NavigateAndCommit(GURL("https://www.example.com")); | 160 NavigateAndCommit(GURL("https://www.example.com")); |
| 156 AssertNoBlockHistogramsLogged(); | 161 AssertNoBlockHistogramsLogged(); |
| 157 } | 162 } |
| OLD | NEW |