OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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 "base/macros.h" | 5 #include "base/macros.h" |
6 #include "base/test/histogram_tester.h" | 6 #include "base/test/histogram_tester.h" |
7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
8 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 8 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
9 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" | 9 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" |
10 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" | 10 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { | 31 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { |
32 public: | 32 public: |
33 PageLoadMetricsBrowserTest() {} | 33 PageLoadMetricsBrowserTest() {} |
34 ~PageLoadMetricsBrowserTest() override {} | 34 ~PageLoadMetricsBrowserTest() override {} |
35 | 35 |
36 protected: | 36 protected: |
37 void NavigateToUntrackedUrl() { | 37 void NavigateToUntrackedUrl() { |
38 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); | 38 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); |
39 } | 39 } |
40 | 40 |
| 41 bool NoPageLoadMetricsRecorded() { |
| 42 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty(); |
| 43 } |
| 44 |
41 base::HistogramTester histogram_tester_; | 45 base::HistogramTester histogram_tester_; |
42 | 46 |
43 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); | 47 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); |
44 }; | 48 }; |
45 | 49 |
46 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { | 50 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { |
47 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 51 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
48 net::HttpCache* cache( | 52 net::HttpCache* cache( |
49 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); | 53 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); |
50 DCHECK(cache); | 54 DCHECK(cache); |
51 std::unique_ptr<net::FailingHttpTransactionFactory> factory( | 55 std::unique_ptr<net::FailingHttpTransactionFactory> factory( |
52 new net::FailingHttpTransactionFactory(cache->GetSession(), | 56 new net::FailingHttpTransactionFactory(cache->GetSession(), |
53 net::ERR_FAILED)); | 57 net::ERR_FAILED)); |
54 // Throw away old version; since this is a browser test, there is no | 58 // Throw away old version; since this is a browser test, there is no |
55 // need to restore the old state. | 59 // need to restore the old state. |
56 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); | 60 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory)); |
57 } | 61 } |
58 | 62 |
59 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { | 63 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) { |
60 ASSERT_TRUE(embedded_test_server()->Start()); | 64 ASSERT_TRUE(embedded_test_server()->Start()); |
61 | 65 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
62 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); | |
63 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 0); | |
64 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 0); | |
65 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); | |
66 } | 66 } |
67 | 67 |
68 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { | 68 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { |
69 ASSERT_TRUE(embedded_test_server()->Start()); | 69 ASSERT_TRUE(embedded_test_server()->Start()); |
70 | 70 |
71 ui_test_utils::NavigateToURL(browser(), | 71 ui_test_utils::NavigateToURL(browser(), |
72 embedded_test_server()->GetURL("/title1.html")); | 72 embedded_test_server()->GetURL("/title1.html")); |
73 NavigateToUntrackedUrl(); | 73 NavigateToUntrackedUrl(); |
74 | 74 |
75 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); | 75 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
76 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); | 76 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
77 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); | 77 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
78 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); | 78 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); |
79 histogram_tester_.ExpectTotalCount( | 79 histogram_tester_.ExpectTotalCount( |
80 internal::kHistogramParseBlockedOnScriptLoad, 1); | 80 internal::kHistogramParseBlockedOnScriptLoad, 1); |
81 histogram_tester_.ExpectTotalCount( | 81 histogram_tester_.ExpectTotalCount( |
82 internal::kHistogramParseBlockedOnScriptExecution, 1); | 82 internal::kHistogramParseBlockedOnScriptExecution, 1); |
| 83 |
| 84 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics |
| 85 // have been recorded. |
| 86 EXPECT_FALSE(NoPageLoadMetricsRecorded()); |
83 } | 87 } |
84 | 88 |
85 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) { | 89 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) { |
86 ASSERT_TRUE(embedded_test_server()->Start()); | 90 ASSERT_TRUE(embedded_test_server()->Start()); |
87 | 91 |
88 ui_test_utils::NavigateToURL(browser(), | 92 ui_test_utils::NavigateToURL(browser(), |
89 embedded_test_server()->GetURL("/title1.html")); | 93 embedded_test_server()->GetURL("/title1.html")); |
90 ui_test_utils::NavigateToURL( | 94 ui_test_utils::NavigateToURL( |
91 browser(), embedded_test_server()->GetURL("/title1.html#hash")); | 95 browser(), embedded_test_server()->GetURL("/title1.html#hash")); |
92 NavigateToUntrackedUrl(); | 96 NavigateToUntrackedUrl(); |
(...skipping 18 matching lines...) Expand all Loading... |
111 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); | 115 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); |
112 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); | 116 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); |
113 } | 117 } |
114 | 118 |
115 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { | 119 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { |
116 ASSERT_TRUE(embedded_test_server()->Start()); | 120 ASSERT_TRUE(embedded_test_server()->Start()); |
117 | 121 |
118 ui_test_utils::NavigateToURL(browser(), | 122 ui_test_utils::NavigateToURL(browser(), |
119 embedded_test_server()->GetURL("/circle.svg")); | 123 embedded_test_server()->GetURL("/circle.svg")); |
120 NavigateToUntrackedUrl(); | 124 NavigateToUntrackedUrl(); |
121 | 125 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
122 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); | |
123 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, | |
124 0); | |
125 } | 126 } |
126 | 127 |
127 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { | 128 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) { |
128 ASSERT_TRUE(embedded_test_server()->Start()); | 129 ASSERT_TRUE(embedded_test_server()->Start()); |
129 | 130 |
130 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); | 131 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); |
131 NavigateToUntrackedUrl(); | 132 NavigateToUntrackedUrl(); |
132 | 133 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
133 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); | |
134 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, | |
135 0); | |
136 } | 134 } |
137 | 135 |
138 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { | 136 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) { |
139 ASSERT_TRUE(embedded_test_server()->Start()); | 137 ASSERT_TRUE(embedded_test_server()->Start()); |
140 | 138 |
141 ui_test_utils::NavigateToURL( | 139 ui_test_utils::NavigateToURL( |
142 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); | 140 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html")); |
143 NavigateToUntrackedUrl(); | 141 NavigateToUntrackedUrl(); |
144 | 142 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
145 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); | |
146 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, | |
147 0); | |
148 } | 143 } |
149 | 144 |
150 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { | 145 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) { |
151 ASSERT_TRUE(embedded_test_server()->Start()); | 146 ASSERT_TRUE(embedded_test_server()->Start()); |
152 | 147 |
153 // Configure the network stack to fail all attempted loads with a network | 148 // Configure the network stack to fail all attempted loads with a network |
154 // error, which will cause Chrome to display an error page. | 149 // error, which will cause Chrome to display an error page. |
155 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = | 150 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = |
156 browser()->profile()->GetRequestContext(); | 151 browser()->profile()->GetRequestContext(); |
157 content::BrowserThread::PostTask( | 152 content::BrowserThread::PostTask( |
158 content::BrowserThread::IO, FROM_HERE, | 153 content::BrowserThread::IO, FROM_HERE, |
159 base::Bind(&FailAllNetworkTransactions, | 154 base::Bind(&FailAllNetworkTransactions, |
160 base::RetainedRef(url_request_context_getter))); | 155 base::RetainedRef(url_request_context_getter))); |
161 | 156 |
162 ui_test_utils::NavigateToURL(browser(), | 157 ui_test_utils::NavigateToURL(browser(), |
163 embedded_test_server()->GetURL("/title1.html")); | 158 embedded_test_server()->GetURL("/title1.html")); |
164 NavigateToUntrackedUrl(); | 159 NavigateToUntrackedUrl(); |
| 160 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
| 161 } |
165 | 162 |
166 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); | 163 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, Ignore204Pages) { |
167 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents, | 164 ASSERT_TRUE(embedded_test_server()->Start()); |
168 0); | 165 |
| 166 ui_test_utils::NavigateToURL(browser(), |
| 167 embedded_test_server()->GetURL("/page204.html")); |
| 168 NavigateToUntrackedUrl(); |
| 169 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
| 170 } |
| 171 |
| 172 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, IgnoreDownloads) { |
| 173 ASSERT_TRUE(embedded_test_server()->Start()); |
| 174 |
| 175 ui_test_utils::NavigateToURL( |
| 176 browser(), embedded_test_server()->GetURL("/download-test3.gif")); |
| 177 NavigateToUntrackedUrl(); |
| 178 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
169 } | 179 } |
170 | 180 |
171 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { | 181 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { |
172 ASSERT_TRUE(embedded_test_server()->Start()); | 182 ASSERT_TRUE(embedded_test_server()->Start()); |
173 | 183 |
174 ui_test_utils::NavigateToURL( | 184 ui_test_utils::NavigateToURL( |
175 browser(), embedded_test_server()->GetURL( | 185 browser(), embedded_test_server()->GetURL( |
176 "/page_load_metrics/document_write_external_script.html")); | 186 "/page_load_metrics/document_write_external_script.html")); |
177 NavigateToUntrackedUrl(); | 187 NavigateToUntrackedUrl(); |
178 | 188 |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 | 514 |
505 histogram_tester_.ExpectTotalCount( | 515 histogram_tester_.ExpectTotalCount( |
506 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 516 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
507 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), | 517 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), |
508 1); | 518 1); |
509 histogram_tester_.ExpectTotalCount( | 519 histogram_tester_.ExpectTotalCount( |
510 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 520 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
511 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), | 521 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), |
512 0); | 522 0); |
513 } | 523 } |
OLD | NEW |