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

Side by Side Diff: chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc

Issue 2331053003: Add common page filtering logic for page load metrics. (Closed)
Patch Set: fix method names to be consistent with style guide Created 4 years, 3 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 (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 "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 7 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
8 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 8 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
9 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 9 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
10 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 10 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
11 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_navigator_params.h" 13 #include "chrome/browser/ui/browser_navigator_params.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/common/url_constants.h" 15 #include "chrome/common/url_constants.h"
15 #include "chrome/test/base/in_process_browser_test.h" 16 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/ui_test_utils.h" 17 #include "chrome/test/base/ui_test_utils.h"
18 #include "content/public/browser/browser_thread.h"
17 #include "content/public/test/browser_test_utils.h" 19 #include "content/public/test/browser_test_utils.h"
20 #include "net/http/failing_http_transaction_factory.h"
21 #include "net/http/http_cache.h"
18 #include "net/test/embedded_test_server/embedded_test_server.h" 22 #include "net/test/embedded_test_server/embedded_test_server.h"
23 #include "net/test/url_request/url_request_failed_job.h"
24 #include "net/url_request/url_request_context.h"
25 #include "net/url_request/url_request_context_getter.h"
19 26
20 class MetricsWebContentsObserverBrowserTest : public InProcessBrowserTest { 27 class PageLoadMetricsBrowserTest : public InProcessBrowserTest {
21 public: 28 public:
22 MetricsWebContentsObserverBrowserTest() {} 29 PageLoadMetricsBrowserTest() {}
23 ~MetricsWebContentsObserverBrowserTest() override {} 30 ~PageLoadMetricsBrowserTest() override {}
24 31
25 protected: 32 protected:
26 void NavigateToUntrackedUrl() { 33 void NavigateToUntrackedUrl() {
27 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 34 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
28 } 35 }
29 36
30 base::HistogramTester histogram_tester_; 37 base::HistogramTester histogram_tester_;
31 38
32 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserverBrowserTest); 39 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest);
33 }; 40 };
34 41
35 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, NoNavigation) { 42 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
43 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
44 net::HttpCache* cache(
45 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
46 DCHECK(cache);
47 std::unique_ptr<net::FailingHttpTransactionFactory> factory(
48 new net::FailingHttpTransactionFactory(cache->GetSession(),
49 net::ERR_FAILED));
50 // Throw away old version; since this is a browser test, there is no
51 // need to restore the old state.
52 cache->SetHttpNetworkTransactionFactoryForTesting(std::move(factory));
53 }
54
55 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoNavigation) {
36 ASSERT_TRUE(embedded_test_server()->Start()); 56 ASSERT_TRUE(embedded_test_server()->Start());
37 57
38 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); 58 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
39 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 0); 59 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 0);
40 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 0); 60 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 0);
41 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 61 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
42 } 62 }
43 63
44 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, NewPage) { 64 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) {
45 ASSERT_TRUE(embedded_test_server()->Start()); 65 ASSERT_TRUE(embedded_test_server()->Start());
46 66
47 ui_test_utils::NavigateToURL(browser(), 67 ui_test_utils::NavigateToURL(browser(),
48 embedded_test_server()->GetURL("/title1.html")); 68 embedded_test_server()->GetURL("/title1.html"));
49 NavigateToUntrackedUrl(); 69 NavigateToUntrackedUrl();
50 70
51 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 71 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
52 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 72 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
53 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 73 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
54 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); 74 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1);
55 histogram_tester_.ExpectTotalCount( 75 histogram_tester_.ExpectTotalCount(
56 internal::kHistogramParseBlockedOnScriptLoad, 1); 76 internal::kHistogramParseBlockedOnScriptLoad, 1);
57 histogram_tester_.ExpectTotalCount( 77 histogram_tester_.ExpectTotalCount(
58 internal::kHistogramParseBlockedOnScriptExecution, 1); 78 internal::kHistogramParseBlockedOnScriptExecution, 1);
59 } 79 }
60 80
61 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 81 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) {
62 SamePageNavigation) {
63 ASSERT_TRUE(embedded_test_server()->Start()); 82 ASSERT_TRUE(embedded_test_server()->Start());
64 83
65 ui_test_utils::NavigateToURL(browser(), 84 ui_test_utils::NavigateToURL(browser(),
66 embedded_test_server()->GetURL("/title1.html")); 85 embedded_test_server()->GetURL("/title1.html"));
67 ui_test_utils::NavigateToURL( 86 ui_test_utils::NavigateToURL(
68 browser(), embedded_test_server()->GetURL("/title1.html#hash")); 87 browser(), embedded_test_server()->GetURL("/title1.html#hash"));
69 NavigateToUntrackedUrl(); 88 NavigateToUntrackedUrl();
70 89
71 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); 90 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1);
72 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); 91 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1);
73 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); 92 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1);
74 } 93 }
75 94
76 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 95 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) {
77 SameUrlNavigation) {
78 ASSERT_TRUE(embedded_test_server()->Start()); 96 ASSERT_TRUE(embedded_test_server()->Start());
79 97
80 ui_test_utils::NavigateToURL(browser(), 98 ui_test_utils::NavigateToURL(browser(),
81 embedded_test_server()->GetURL("/title1.html")); 99 embedded_test_server()->GetURL("/title1.html"));
82 ui_test_utils::NavigateToURL(browser(), 100 ui_test_utils::NavigateToURL(browser(),
83 embedded_test_server()->GetURL("/title1.html")); 101 embedded_test_server()->GetURL("/title1.html"));
84 NavigateToUntrackedUrl(); 102 NavigateToUntrackedUrl();
85 103
86 // We expect one histogram sample for each navigation to title1.html. 104 // We expect one histogram sample for each navigation to title1.html.
87 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 2); 105 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 2);
88 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); 106 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2);
89 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); 107 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2);
90 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); 108 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2);
91 } 109 }
92 110
93 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 111 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) {
94 NonHtmlMainResource) {
95 ASSERT_TRUE(embedded_test_server()->Start()); 112 ASSERT_TRUE(embedded_test_server()->Start());
96 113
97 ui_test_utils::NavigateToURL(browser(), 114 ui_test_utils::NavigateToURL(browser(),
98 embedded_test_server()->GetURL("/circle.svg")); 115 embedded_test_server()->GetURL("/circle.svg"));
99 NavigateToUntrackedUrl(); 116 NavigateToUntrackedUrl();
100 117
101 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); 118 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
119 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
120 0);
102 } 121 }
103 122
104 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 123 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHttpOrHttpsUrl) {
105 NonHttpOrHttpsUrl) {
106 ASSERT_TRUE(embedded_test_server()->Start()); 124 ASSERT_TRUE(embedded_test_server()->Start());
107 125
108 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL)); 126 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIVersionURL));
109 NavigateToUntrackedUrl(); 127 NavigateToUntrackedUrl();
110 128
111 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0); 129 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
130 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
131 0);
112 } 132 }
113 133
114 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 134 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, HttpErrorPage) {
115 PreloadDocumentWrite) {
116 ASSERT_TRUE(embedded_test_server()->Start()); 135 ASSERT_TRUE(embedded_test_server()->Start());
117 136
118 ui_test_utils::NavigateToURL( 137 ui_test_utils::NavigateToURL(
138 browser(), embedded_test_server()->GetURL("/page_load_metrics/404.html"));
139 NavigateToUntrackedUrl();
140
141 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
142 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
143 0);
144 }
145
146 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, ChromeErrorPage) {
147 ASSERT_TRUE(embedded_test_server()->Start());
148
149 // Configure the network stack to fail all attempted loads with a network
150 // error, which will cause Chrome to display an error page.
151 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
152 browser()->profile()->GetRequestContext();
153 content::BrowserThread::PostTask(
154 content::BrowserThread::IO, FROM_HERE,
155 base::Bind(&FailAllNetworkTransactions,
156 base::RetainedRef(url_request_context_getter)));
157
158 ui_test_utils::NavigateToURL(browser(),
159 embedded_test_server()->GetURL("/title1.html"));
160 NavigateToUntrackedUrl();
161
162 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
163 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
164 0);
165 }
166
167 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
168 ASSERT_TRUE(embedded_test_server()->Start());
169
170 ui_test_utils::NavigateToURL(
119 browser(), embedded_test_server()->GetURL( 171 browser(), embedded_test_server()->GetURL(
120 "/page_load_metrics/document_write_external_script.html")); 172 "/page_load_metrics/document_write_external_script.html"));
121 NavigateToUntrackedUrl(); 173 NavigateToUntrackedUrl();
122 174
123 histogram_tester_.ExpectTotalCount( 175 histogram_tester_.ExpectTotalCount(
124 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 176 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
125 } 177 }
126 178
127 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 179 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
128 NoPreloadDocumentWrite) {
129 ASSERT_TRUE(embedded_test_server()->Start()); 180 ASSERT_TRUE(embedded_test_server()->Start());
130 181
131 ui_test_utils::NavigateToURL( 182 ui_test_utils::NavigateToURL(
132 browser(), embedded_test_server()->GetURL( 183 browser(), embedded_test_server()->GetURL(
133 "/page_load_metrics/document_write_no_script.html")); 184 "/page_load_metrics/document_write_no_script.html"));
134 NavigateToUntrackedUrl(); 185 NavigateToUntrackedUrl();
135 186
136 histogram_tester_.ExpectTotalCount( 187 histogram_tester_.ExpectTotalCount(
137 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 188 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
138 } 189 }
139 190
140 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, NoDocumentWrite) { 191 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) {
141 ASSERT_TRUE(embedded_test_server()->Start()); 192 ASSERT_TRUE(embedded_test_server()->Start());
142 193
143 ui_test_utils::NavigateToURL(browser(), 194 ui_test_utils::NavigateToURL(browser(),
144 embedded_test_server()->GetURL("/title1.html")); 195 embedded_test_server()->GetURL("/title1.html"));
145 NavigateToUntrackedUrl(); 196 NavigateToUntrackedUrl();
146 histogram_tester_.ExpectTotalCount( 197 histogram_tester_.ExpectTotalCount(
147 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 198 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
148 histogram_tester_.ExpectTotalCount( 199 histogram_tester_.ExpectTotalCount(
149 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 200 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
150 } 201 }
151 202
152 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 203 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
153 DocumentWriteBlock) {
154 ASSERT_TRUE(embedded_test_server()->Start()); 204 ASSERT_TRUE(embedded_test_server()->Start());
155 205
156 ui_test_utils::NavigateToURL( 206 ui_test_utils::NavigateToURL(
157 browser(), embedded_test_server()->GetURL( 207 browser(), embedded_test_server()->GetURL(
158 "/page_load_metrics/document_write_script_block.html")); 208 "/page_load_metrics/document_write_script_block.html"));
159 NavigateToUntrackedUrl(); 209 NavigateToUntrackedUrl();
160 210
161 histogram_tester_.ExpectTotalCount( 211 histogram_tester_.ExpectTotalCount(
162 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 212 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
163 } 213 }
164 214
165 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 215 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) {
166 DocumentWriteReload) {
167 ASSERT_TRUE(embedded_test_server()->Start()); 216 ASSERT_TRUE(embedded_test_server()->Start());
168 217
169 ui_test_utils::NavigateToURL( 218 ui_test_utils::NavigateToURL(
170 browser(), embedded_test_server()->GetURL( 219 browser(), embedded_test_server()->GetURL(
171 "/page_load_metrics/document_write_script_block.html")); 220 "/page_load_metrics/document_write_script_block.html"));
172 221
173 // Reload should not log the histogram as the script is not blocked. 222 // Reload should not log the histogram as the script is not blocked.
174 ui_test_utils::NavigateToURL( 223 ui_test_utils::NavigateToURL(
175 browser(), embedded_test_server()->GetURL( 224 browser(), embedded_test_server()->GetURL(
176 "/page_load_metrics/document_write_script_block.html")); 225 "/page_load_metrics/document_write_script_block.html"));
177 226
178 ui_test_utils::NavigateToURL( 227 ui_test_utils::NavigateToURL(
179 browser(), embedded_test_server()->GetURL( 228 browser(), embedded_test_server()->GetURL(
180 "/page_load_metrics/document_write_script_block.html")); 229 "/page_load_metrics/document_write_script_block.html"));
181 230
182 histogram_tester_.ExpectTotalCount( 231 histogram_tester_.ExpectTotalCount(
183 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 232 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
184 233
185 NavigateToUntrackedUrl(); 234 NavigateToUntrackedUrl();
186 235
187 histogram_tester_.ExpectTotalCount( 236 histogram_tester_.ExpectTotalCount(
188 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 237 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
189 238
190 histogram_tester_.ExpectTotalCount( 239 histogram_tester_.ExpectTotalCount(
191 internal::kHistogramDocWriteBlockReloadCount, 2); 240 internal::kHistogramDocWriteBlockReloadCount, 2);
192 } 241 }
193 242
194 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 243 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
195 DocumentWriteAsync) {
196 ASSERT_TRUE(embedded_test_server()->Start()); 244 ASSERT_TRUE(embedded_test_server()->Start());
197 245
198 ui_test_utils::NavigateToURL( 246 ui_test_utils::NavigateToURL(
199 browser(), embedded_test_server()->GetURL( 247 browser(), embedded_test_server()->GetURL(
200 "/page_load_metrics/document_write_script_async.html")); 248 "/page_load_metrics/document_write_script_async.html"));
201 NavigateToUntrackedUrl(); 249 NavigateToUntrackedUrl();
202 250
203 histogram_tester_.ExpectTotalCount( 251 histogram_tester_.ExpectTotalCount(
204 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 252 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
205 } 253 }
206 254
207 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 255 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) {
208 DocumentWriteSameDomain) {
209 ASSERT_TRUE(embedded_test_server()->Start()); 256 ASSERT_TRUE(embedded_test_server()->Start());
210 257
211 ui_test_utils::NavigateToURL( 258 ui_test_utils::NavigateToURL(
212 browser(), embedded_test_server()->GetURL( 259 browser(), embedded_test_server()->GetURL(
213 "/page_load_metrics/document_write_external_script.html")); 260 "/page_load_metrics/document_write_external_script.html"));
214 NavigateToUntrackedUrl(); 261 NavigateToUntrackedUrl();
215 262
216 histogram_tester_.ExpectTotalCount( 263 histogram_tester_.ExpectTotalCount(
217 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 264 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
218 } 265 }
219 266
220 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 267 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) {
221 NoDocumentWriteScript) {
222 ASSERT_TRUE(embedded_test_server()->Start()); 268 ASSERT_TRUE(embedded_test_server()->Start());
223 269
224 ui_test_utils::NavigateToURL( 270 ui_test_utils::NavigateToURL(
225 browser(), embedded_test_server()->GetURL( 271 browser(), embedded_test_server()->GetURL(
226 "/page_load_metrics/document_write_no_script.html")); 272 "/page_load_metrics/document_write_no_script.html"));
227 NavigateToUntrackedUrl(); 273 NavigateToUntrackedUrl();
228 274
229 histogram_tester_.ExpectTotalCount( 275 histogram_tester_.ExpectTotalCount(
230 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 276 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
231 } 277 }
232 278
233 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, BadXhtml) { 279 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, BadXhtml) {
234 ASSERT_TRUE(embedded_test_server()->Start()); 280 ASSERT_TRUE(embedded_test_server()->Start());
235 281
236 // When an XHTML page contains invalid XML, it causes a paint of the error 282 // When an XHTML page contains invalid XML, it causes a paint of the error
237 // message without a layout. Page load metrics currently treats this as an 283 // message without a layout. Page load metrics currently treats this as an
238 // error. Eventually, we'll fix this by special casing the handling of 284 // error. Eventually, we'll fix this by special casing the handling of
239 // documents with non-well-formed XML on the blink side. See crbug.com/627607 285 // documents with non-well-formed XML on the blink side. See crbug.com/627607
240 // for more. 286 // for more.
241 ui_test_utils::NavigateToURL( 287 ui_test_utils::NavigateToURL(
242 browser(), 288 browser(),
243 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 289 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
244 NavigateToUntrackedUrl(); 290 NavigateToUntrackedUrl();
245 291
246 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 292 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
247 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 293 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
248 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents, 294 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents,
249 page_load_metrics::ERR_BAD_TIMING_IPC, 1); 295 page_load_metrics::ERR_BAD_TIMING_IPC, 1);
250 } 296 }
251 297
252 // Test code that aborts provisional navigations. 298 // Test code that aborts provisional navigations.
253 // TODO(csharrison): Move these to unit tests once the navigation API in content 299 // TODO(csharrison): Move these to unit tests once the navigation API in content
254 // properly calls NavigationHandle/NavigationThrottle methods. 300 // properly calls NavigationHandle/NavigationThrottle methods.
255 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 301 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) {
256 AbortNewNavigation) {
257 ASSERT_TRUE(embedded_test_server()->Start()); 302 ASSERT_TRUE(embedded_test_server()->Start());
258 303
259 GURL url(embedded_test_server()->GetURL("/title1.html")); 304 GURL url(embedded_test_server()->GetURL("/title1.html"));
260 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 305 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
261 content::TestNavigationManager manager( 306 content::TestNavigationManager manager(
262 browser()->tab_strip_model()->GetActiveWebContents(), url); 307 browser()->tab_strip_model()->GetActiveWebContents(), url);
263 308
264 chrome::Navigate(&params); 309 chrome::Navigate(&params);
265 EXPECT_TRUE(manager.WaitForWillStartRequest()); 310 EXPECT_TRUE(manager.WaitForWillStartRequest());
266 311
267 GURL url2(embedded_test_server()->GetURL("/title2.html")); 312 GURL url2(embedded_test_server()->GetURL("/title2.html"));
268 chrome::NavigateParams params2(browser(), url2, 313 chrome::NavigateParams params2(browser(), url2,
269 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 314 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
270 content::TestNavigationManager manager2( 315 content::TestNavigationManager manager2(
271 browser()->tab_strip_model()->GetActiveWebContents(), url2); 316 browser()->tab_strip_model()->GetActiveWebContents(), url2);
272 chrome::Navigate(&params2); 317 chrome::Navigate(&params2);
273 318
274 manager2.WaitForNavigationFinished(); 319 manager2.WaitForNavigationFinished();
275 histogram_tester_.ExpectTotalCount( 320 histogram_tester_.ExpectTotalCount(
276 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 321 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
277 } 322 }
278 323
279 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortReload) { 324 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) {
280 ASSERT_TRUE(embedded_test_server()->Start()); 325 ASSERT_TRUE(embedded_test_server()->Start());
281 326
282 GURL url(embedded_test_server()->GetURL("/title1.html")); 327 GURL url(embedded_test_server()->GetURL("/title1.html"));
283 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 328 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
284 content::TestNavigationManager manager( 329 content::TestNavigationManager manager(
285 browser()->tab_strip_model()->GetActiveWebContents(), url); 330 browser()->tab_strip_model()->GetActiveWebContents(), url);
286 331
287 chrome::Navigate(&params); 332 chrome::Navigate(&params);
288 EXPECT_TRUE(manager.WaitForWillStartRequest()); 333 EXPECT_TRUE(manager.WaitForWillStartRequest());
289 334
290 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 335 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
291 content::TestNavigationManager manager2( 336 content::TestNavigationManager manager2(
292 browser()->tab_strip_model()->GetActiveWebContents(), url); 337 browser()->tab_strip_model()->GetActiveWebContents(), url);
293 chrome::Navigate(&params2); 338 chrome::Navigate(&params2);
294 339
295 manager2.WaitForNavigationFinished(); 340 manager2.WaitForNavigationFinished();
296 histogram_tester_.ExpectTotalCount( 341 histogram_tester_.ExpectTotalCount(
297 internal::kHistogramAbortReloadBeforeCommit, 1); 342 internal::kHistogramAbortReloadBeforeCommit, 1);
298 } 343 }
299 344
300 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortClose) { 345 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClose) {
301 ASSERT_TRUE(embedded_test_server()->Start()); 346 ASSERT_TRUE(embedded_test_server()->Start());
302 347
303 GURL url(embedded_test_server()->GetURL("/title1.html")); 348 GURL url(embedded_test_server()->GetURL("/title1.html"));
304 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 349 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
305 content::TestNavigationManager manager( 350 content::TestNavigationManager manager(
306 browser()->tab_strip_model()->GetActiveWebContents(), url); 351 browser()->tab_strip_model()->GetActiveWebContents(), url);
307 352
308 chrome::Navigate(&params); 353 chrome::Navigate(&params);
309 EXPECT_TRUE(manager.WaitForWillStartRequest()); 354 EXPECT_TRUE(manager.WaitForWillStartRequest());
310 355
311 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 356 browser()->tab_strip_model()->GetActiveWebContents()->Close();
312 357
313 manager.WaitForNavigationFinished(); 358 manager.WaitForNavigationFinished();
314 359
315 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 360 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
316 1); 361 1);
317 } 362 }
318 363
319 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortMultiple) { 364 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) {
320 ASSERT_TRUE(embedded_test_server()->Start()); 365 ASSERT_TRUE(embedded_test_server()->Start());
321 366
322 GURL url(embedded_test_server()->GetURL("/title1.html")); 367 GURL url(embedded_test_server()->GetURL("/title1.html"));
323 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 368 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
324 content::TestNavigationManager manager( 369 content::TestNavigationManager manager(
325 browser()->tab_strip_model()->GetActiveWebContents(), url); 370 browser()->tab_strip_model()->GetActiveWebContents(), url);
326 371
327 chrome::Navigate(&params); 372 chrome::Navigate(&params);
328 EXPECT_TRUE(manager.WaitForWillStartRequest()); 373 EXPECT_TRUE(manager.WaitForWillStartRequest());
329 374
(...skipping 14 matching lines...) Expand all
344 389
345 EXPECT_TRUE(manager3.WaitForWillStartRequest()); 390 EXPECT_TRUE(manager3.WaitForWillStartRequest());
346 manager2.WaitForNavigationFinished(); 391 manager2.WaitForNavigationFinished();
347 392
348 manager3.WaitForNavigationFinished(); 393 manager3.WaitForNavigationFinished();
349 394
350 histogram_tester_.ExpectTotalCount( 395 histogram_tester_.ExpectTotalCount(
351 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 396 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
352 } 397 }
353 398
354 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 399 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClientRedirect) {
355 AbortClientRedirect) {
356 ASSERT_TRUE(embedded_test_server()->Start()); 400 ASSERT_TRUE(embedded_test_server()->Start());
357 401
358 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 402 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
359 ui_test_utils::NavigateToURL(browser(), first_url); 403 ui_test_utils::NavigateToURL(browser(), first_url);
360 404
361 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 405 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
362 chrome::NavigateParams params(browser(), second_url, 406 chrome::NavigateParams params(browser(), second_url,
363 ui::PAGE_TRANSITION_LINK); 407 ui::PAGE_TRANSITION_LINK);
364 content::TestNavigationManager manager( 408 content::TestNavigationManager manager(
365 browser()->tab_strip_model()->GetActiveWebContents(), second_url); 409 browser()->tab_strip_model()->GetActiveWebContents(), second_url);
366 chrome::Navigate(&params); 410 chrome::Navigate(&params);
367 EXPECT_TRUE(manager.WaitForWillStartRequest()); 411 EXPECT_TRUE(manager.WaitForWillStartRequest());
368 412
369 { 413 {
370 content::TestNavigationManager reload_manager( 414 content::TestNavigationManager reload_manager(
371 browser()->tab_strip_model()->GetActiveWebContents(), first_url); 415 browser()->tab_strip_model()->GetActiveWebContents(), first_url);
372 EXPECT_TRUE(content::ExecuteScript( 416 EXPECT_TRUE(content::ExecuteScript(
373 browser()->tab_strip_model()->GetActiveWebContents(), 417 browser()->tab_strip_model()->GetActiveWebContents(),
374 "window.location.reload();")); 418 "window.location.reload();"));
375 } 419 }
376 420
377 manager.WaitForNavigationFinished(); 421 manager.WaitForNavigationFinished();
378 422
379 histogram_tester_.ExpectTotalCount( 423 histogram_tester_.ExpectTotalCount(
380 internal::kHistogramAbortClientRedirectBeforeCommit, 1); 424 internal::kHistogramAbortClientRedirectBeforeCommit, 1);
381 } 425 }
382 426
383 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 427 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
384 FirstMeaningfulPaintRecorded) { 428 FirstMeaningfulPaintRecorded) {
385 ASSERT_TRUE(embedded_test_server()->Start()); 429 ASSERT_TRUE(embedded_test_server()->Start());
386 430
387 ui_test_utils::NavigateToURL(browser(), 431 ui_test_utils::NavigateToURL(browser(),
388 embedded_test_server()->GetURL("/title1.html")); 432 embedded_test_server()->GetURL("/title1.html"));
389 433
390 // Wait until the renderer finishes observing layouts. 434 // Wait until the renderer finishes observing layouts.
391 const int kNetworkIdleTime = 2000; 435 const int kNetworkIdleTime = 2000;
392 const int kMargin = 500; 436 const int kMargin = 500;
393 const std::string javascript = base::StringPrintf( 437 const std::string javascript = base::StringPrintf(
394 "setTimeout(() => window.domAutomationController.send(true), %d)", 438 "setTimeout(() => window.domAutomationController.send(true), %d)",
395 kNetworkIdleTime + kMargin); 439 kNetworkIdleTime + kMargin);
396 bool result; 440 bool result;
397 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 441 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
398 browser()->tab_strip_model()->GetActiveWebContents(), 442 browser()->tab_strip_model()->GetActiveWebContents(),
399 javascript, &result)); 443 javascript, &result));
400 EXPECT_TRUE(result); 444 EXPECT_TRUE(result);
401 445
402 NavigateToUntrackedUrl(); 446 NavigateToUntrackedUrl();
403 histogram_tester_.ExpectUniqueSample( 447 histogram_tester_.ExpectUniqueSample(
404 internal::kHistogramFirstMeaningfulPaintStatus, 448 internal::kHistogramFirstMeaningfulPaintStatus,
405 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 449 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
406 histogram_tester_.ExpectTotalCount( 450 histogram_tester_.ExpectTotalCount(
407 internal::kHistogramFirstMeaningfulPaint, 1); 451 internal::kHistogramFirstMeaningfulPaint, 1);
408 histogram_tester_.ExpectTotalCount( 452 histogram_tester_.ExpectTotalCount(
409 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 453 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
410 } 454 }
411 455
412 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 456 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
413 FirstMeaningfulPaintNotRecorded) { 457 FirstMeaningfulPaintNotRecorded) {
414 ASSERT_TRUE(embedded_test_server()->Start()); 458 ASSERT_TRUE(embedded_test_server()->Start());
415 459
416 ui_test_utils::NavigateToURL(browser(), 460 ui_test_utils::NavigateToURL(browser(),
417 embedded_test_server()->GetURL("/title1.html")); 461 embedded_test_server()->GetURL("/title1.html"));
418 462
419 // Navigate away before a FMP is reported. 463 // Navigate away before a FMP is reported.
420 NavigateToUntrackedUrl(); 464 NavigateToUntrackedUrl();
421 465
422 histogram_tester_.ExpectUniqueSample( 466 histogram_tester_.ExpectUniqueSample(
423 internal::kHistogramFirstMeaningfulPaintStatus, 467 internal::kHistogramFirstMeaningfulPaintStatus,
424 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 468 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
425 histogram_tester_.ExpectTotalCount( 469 histogram_tester_.ExpectTotalCount(
426 internal::kHistogramFirstMeaningfulPaint, 0); 470 internal::kHistogramFirstMeaningfulPaint, 0);
427 histogram_tester_.ExpectTotalCount( 471 histogram_tester_.ExpectTotalCount(
428 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 472 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
429 } 473 }
OLDNEW
« no previous file with comments | « chrome/browser/page_load_metrics/metrics_web_contents_observer.cc ('k') | chrome/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698