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

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: fixup 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 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
150 browser()->profile()->GetRequestContext();
151 content::BrowserThread::PostTask(
152 content::BrowserThread::IO, FROM_HERE,
153 base::Bind(&FailAllNetworkTransactions,
154 base::RetainedRef(url_request_context_getter)));
155
156 ui_test_utils::NavigateToURL(
157 browser(), embedded_test_server()->GetURL("/title1.html"));
158 NavigateToUntrackedUrl();
159
160 histogram_tester_.ExpectTotalCount(internal::kHistogramCommit, 0);
161 histogram_tester_.ExpectTotalCount(page_load_metrics::internal::kErrorEvents,
162 0);
163 }
164
165 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
166 ASSERT_TRUE(embedded_test_server()->Start());
167
168 ui_test_utils::NavigateToURL(
119 browser(), embedded_test_server()->GetURL( 169 browser(), embedded_test_server()->GetURL(
120 "/page_load_metrics/document_write_external_script.html")); 170 "/page_load_metrics/document_write_external_script.html"));
121 NavigateToUntrackedUrl(); 171 NavigateToUntrackedUrl();
122 172
123 histogram_tester_.ExpectTotalCount( 173 histogram_tester_.ExpectTotalCount(
124 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 174 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
125 } 175 }
126 176
127 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 177 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
128 NoPreloadDocumentWrite) {
129 ASSERT_TRUE(embedded_test_server()->Start()); 178 ASSERT_TRUE(embedded_test_server()->Start());
130 179
131 ui_test_utils::NavigateToURL( 180 ui_test_utils::NavigateToURL(
132 browser(), embedded_test_server()->GetURL( 181 browser(), embedded_test_server()->GetURL(
133 "/page_load_metrics/document_write_no_script.html")); 182 "/page_load_metrics/document_write_no_script.html"));
134 NavigateToUntrackedUrl(); 183 NavigateToUntrackedUrl();
135 184
136 histogram_tester_.ExpectTotalCount( 185 histogram_tester_.ExpectTotalCount(
137 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 186 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
138 } 187 }
139 188
140 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, NoDocumentWrite) { 189 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) {
141 ASSERT_TRUE(embedded_test_server()->Start()); 190 ASSERT_TRUE(embedded_test_server()->Start());
142 191
143 ui_test_utils::NavigateToURL(browser(), 192 ui_test_utils::NavigateToURL(browser(),
144 embedded_test_server()->GetURL("/title1.html")); 193 embedded_test_server()->GetURL("/title1.html"));
145 NavigateToUntrackedUrl(); 194 NavigateToUntrackedUrl();
146 histogram_tester_.ExpectTotalCount( 195 histogram_tester_.ExpectTotalCount(
147 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 196 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
148 histogram_tester_.ExpectTotalCount( 197 histogram_tester_.ExpectTotalCount(
149 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 198 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
150 } 199 }
151 200
152 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 201 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
153 DocumentWriteBlock) {
154 ASSERT_TRUE(embedded_test_server()->Start()); 202 ASSERT_TRUE(embedded_test_server()->Start());
155 203
156 ui_test_utils::NavigateToURL( 204 ui_test_utils::NavigateToURL(
157 browser(), embedded_test_server()->GetURL( 205 browser(), embedded_test_server()->GetURL(
158 "/page_load_metrics/document_write_script_block.html")); 206 "/page_load_metrics/document_write_script_block.html"));
159 NavigateToUntrackedUrl(); 207 NavigateToUntrackedUrl();
160 208
161 histogram_tester_.ExpectTotalCount( 209 histogram_tester_.ExpectTotalCount(
162 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 210 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
163 } 211 }
164 212
165 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 213 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) {
166 DocumentWriteReload) {
167 ASSERT_TRUE(embedded_test_server()->Start()); 214 ASSERT_TRUE(embedded_test_server()->Start());
168 215
169 ui_test_utils::NavigateToURL( 216 ui_test_utils::NavigateToURL(
170 browser(), embedded_test_server()->GetURL( 217 browser(), embedded_test_server()->GetURL(
171 "/page_load_metrics/document_write_script_block.html")); 218 "/page_load_metrics/document_write_script_block.html"));
172 219
173 // Reload should not log the histogram as the script is not blocked. 220 // Reload should not log the histogram as the script is not blocked.
174 ui_test_utils::NavigateToURL( 221 ui_test_utils::NavigateToURL(
175 browser(), embedded_test_server()->GetURL( 222 browser(), embedded_test_server()->GetURL(
176 "/page_load_metrics/document_write_script_block.html")); 223 "/page_load_metrics/document_write_script_block.html"));
177 224
178 ui_test_utils::NavigateToURL( 225 ui_test_utils::NavigateToURL(
179 browser(), embedded_test_server()->GetURL( 226 browser(), embedded_test_server()->GetURL(
180 "/page_load_metrics/document_write_script_block.html")); 227 "/page_load_metrics/document_write_script_block.html"));
181 228
182 histogram_tester_.ExpectTotalCount( 229 histogram_tester_.ExpectTotalCount(
183 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 230 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
184 231
185 NavigateToUntrackedUrl(); 232 NavigateToUntrackedUrl();
186 233
187 histogram_tester_.ExpectTotalCount( 234 histogram_tester_.ExpectTotalCount(
188 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 235 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
189 236
190 histogram_tester_.ExpectTotalCount( 237 histogram_tester_.ExpectTotalCount(
191 internal::kHistogramDocWriteBlockReloadCount, 2); 238 internal::kHistogramDocWriteBlockReloadCount, 2);
192 } 239 }
193 240
194 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 241 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
195 DocumentWriteAsync) {
196 ASSERT_TRUE(embedded_test_server()->Start()); 242 ASSERT_TRUE(embedded_test_server()->Start());
197 243
198 ui_test_utils::NavigateToURL( 244 ui_test_utils::NavigateToURL(
199 browser(), embedded_test_server()->GetURL( 245 browser(), embedded_test_server()->GetURL(
200 "/page_load_metrics/document_write_script_async.html")); 246 "/page_load_metrics/document_write_script_async.html"));
201 NavigateToUntrackedUrl(); 247 NavigateToUntrackedUrl();
202 248
203 histogram_tester_.ExpectTotalCount( 249 histogram_tester_.ExpectTotalCount(
204 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 250 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
205 } 251 }
206 252
207 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 253 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteSameDomain) {
208 DocumentWriteSameDomain) {
209 ASSERT_TRUE(embedded_test_server()->Start()); 254 ASSERT_TRUE(embedded_test_server()->Start());
210 255
211 ui_test_utils::NavigateToURL( 256 ui_test_utils::NavigateToURL(
212 browser(), embedded_test_server()->GetURL( 257 browser(), embedded_test_server()->GetURL(
213 "/page_load_metrics/document_write_external_script.html")); 258 "/page_load_metrics/document_write_external_script.html"));
214 NavigateToUntrackedUrl(); 259 NavigateToUntrackedUrl();
215 260
216 histogram_tester_.ExpectTotalCount( 261 histogram_tester_.ExpectTotalCount(
217 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 262 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
218 } 263 }
219 264
220 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 265 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWriteScript) {
221 NoDocumentWriteScript) {
222 ASSERT_TRUE(embedded_test_server()->Start()); 266 ASSERT_TRUE(embedded_test_server()->Start());
223 267
224 ui_test_utils::NavigateToURL( 268 ui_test_utils::NavigateToURL(
225 browser(), embedded_test_server()->GetURL( 269 browser(), embedded_test_server()->GetURL(
226 "/page_load_metrics/document_write_no_script.html")); 270 "/page_load_metrics/document_write_no_script.html"));
227 NavigateToUntrackedUrl(); 271 NavigateToUntrackedUrl();
228 272
229 histogram_tester_.ExpectTotalCount( 273 histogram_tester_.ExpectTotalCount(
230 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 274 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
231 } 275 }
232 276
233 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, BadXhtml) { 277 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, BadXhtml) {
234 ASSERT_TRUE(embedded_test_server()->Start()); 278 ASSERT_TRUE(embedded_test_server()->Start());
235 279
236 // When an XHTML page contains invalid XML, it causes a paint of the error 280 // 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 281 // 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 282 // 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 283 // documents with non-well-formed XML on the blink side. See crbug.com/627607
240 // for more. 284 // for more.
241 ui_test_utils::NavigateToURL( 285 ui_test_utils::NavigateToURL(
242 browser(), 286 browser(),
243 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 287 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
244 NavigateToUntrackedUrl(); 288 NavigateToUntrackedUrl();
245 289
246 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 290 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
247 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 291 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
248 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents, 292 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents,
249 page_load_metrics::ERR_BAD_TIMING_IPC, 1); 293 page_load_metrics::ERR_BAD_TIMING_IPC, 1);
250 } 294 }
251 295
252 // Test code that aborts provisional navigations. 296 // Test code that aborts provisional navigations.
253 // TODO(csharrison): Move these to unit tests once the navigation API in content 297 // TODO(csharrison): Move these to unit tests once the navigation API in content
254 // properly calls NavigationHandle/NavigationThrottle methods. 298 // properly calls NavigationHandle/NavigationThrottle methods.
255 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 299 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) {
256 AbortNewNavigation) {
257 ASSERT_TRUE(embedded_test_server()->Start()); 300 ASSERT_TRUE(embedded_test_server()->Start());
258 301
259 GURL url(embedded_test_server()->GetURL("/title1.html")); 302 GURL url(embedded_test_server()->GetURL("/title1.html"));
260 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 303 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
261 content::TestNavigationManager manager( 304 content::TestNavigationManager manager(
262 browser()->tab_strip_model()->GetActiveWebContents(), url); 305 browser()->tab_strip_model()->GetActiveWebContents(), url);
263 306
264 chrome::Navigate(&params); 307 chrome::Navigate(&params);
265 EXPECT_TRUE(manager.WaitForWillStartRequest()); 308 EXPECT_TRUE(manager.WaitForWillStartRequest());
266 309
267 GURL url2(embedded_test_server()->GetURL("/title2.html")); 310 GURL url2(embedded_test_server()->GetURL("/title2.html"));
268 chrome::NavigateParams params2(browser(), url2, 311 chrome::NavigateParams params2(browser(), url2,
269 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); 312 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
270 content::TestNavigationManager manager2( 313 content::TestNavigationManager manager2(
271 browser()->tab_strip_model()->GetActiveWebContents(), url2); 314 browser()->tab_strip_model()->GetActiveWebContents(), url2);
272 chrome::Navigate(&params2); 315 chrome::Navigate(&params2);
273 316
274 manager2.WaitForNavigationFinished(); 317 manager2.WaitForNavigationFinished();
275 histogram_tester_.ExpectTotalCount( 318 histogram_tester_.ExpectTotalCount(
276 internal::kHistogramAbortNewNavigationBeforeCommit, 1); 319 internal::kHistogramAbortNewNavigationBeforeCommit, 1);
277 } 320 }
278 321
279 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortReload) { 322 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) {
280 ASSERT_TRUE(embedded_test_server()->Start()); 323 ASSERT_TRUE(embedded_test_server()->Start());
281 324
282 GURL url(embedded_test_server()->GetURL("/title1.html")); 325 GURL url(embedded_test_server()->GetURL("/title1.html"));
283 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 326 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
284 content::TestNavigationManager manager( 327 content::TestNavigationManager manager(
285 browser()->tab_strip_model()->GetActiveWebContents(), url); 328 browser()->tab_strip_model()->GetActiveWebContents(), url);
286 329
287 chrome::Navigate(&params); 330 chrome::Navigate(&params);
288 EXPECT_TRUE(manager.WaitForWillStartRequest()); 331 EXPECT_TRUE(manager.WaitForWillStartRequest());
289 332
290 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); 333 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD);
291 content::TestNavigationManager manager2( 334 content::TestNavigationManager manager2(
292 browser()->tab_strip_model()->GetActiveWebContents(), url); 335 browser()->tab_strip_model()->GetActiveWebContents(), url);
293 chrome::Navigate(&params2); 336 chrome::Navigate(&params2);
294 337
295 manager2.WaitForNavigationFinished(); 338 manager2.WaitForNavigationFinished();
296 histogram_tester_.ExpectTotalCount( 339 histogram_tester_.ExpectTotalCount(
297 internal::kHistogramAbortReloadBeforeCommit, 1); 340 internal::kHistogramAbortReloadBeforeCommit, 1);
298 } 341 }
299 342
300 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortClose) { 343 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClose) {
301 ASSERT_TRUE(embedded_test_server()->Start()); 344 ASSERT_TRUE(embedded_test_server()->Start());
302 345
303 GURL url(embedded_test_server()->GetURL("/title1.html")); 346 GURL url(embedded_test_server()->GetURL("/title1.html"));
304 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 347 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
305 content::TestNavigationManager manager( 348 content::TestNavigationManager manager(
306 browser()->tab_strip_model()->GetActiveWebContents(), url); 349 browser()->tab_strip_model()->GetActiveWebContents(), url);
307 350
308 chrome::Navigate(&params); 351 chrome::Navigate(&params);
309 EXPECT_TRUE(manager.WaitForWillStartRequest()); 352 EXPECT_TRUE(manager.WaitForWillStartRequest());
310 353
311 browser()->tab_strip_model()->GetActiveWebContents()->Close(); 354 browser()->tab_strip_model()->GetActiveWebContents()->Close();
312 355
313 manager.WaitForNavigationFinished(); 356 manager.WaitForNavigationFinished();
314 357
315 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit, 358 histogram_tester_.ExpectTotalCount(internal::kHistogramAbortCloseBeforeCommit,
316 1); 359 1);
317 } 360 }
318 361
319 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, AbortMultiple) { 362 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortMultiple) {
320 ASSERT_TRUE(embedded_test_server()->Start()); 363 ASSERT_TRUE(embedded_test_server()->Start());
321 364
322 GURL url(embedded_test_server()->GetURL("/title1.html")); 365 GURL url(embedded_test_server()->GetURL("/title1.html"));
323 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); 366 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK);
324 content::TestNavigationManager manager( 367 content::TestNavigationManager manager(
325 browser()->tab_strip_model()->GetActiveWebContents(), url); 368 browser()->tab_strip_model()->GetActiveWebContents(), url);
326 369
327 chrome::Navigate(&params); 370 chrome::Navigate(&params);
328 EXPECT_TRUE(manager.WaitForWillStartRequest()); 371 EXPECT_TRUE(manager.WaitForWillStartRequest());
329 372
(...skipping 14 matching lines...) Expand all
344 387
345 EXPECT_TRUE(manager3.WaitForWillStartRequest()); 388 EXPECT_TRUE(manager3.WaitForWillStartRequest());
346 manager2.WaitForNavigationFinished(); 389 manager2.WaitForNavigationFinished();
347 390
348 manager3.WaitForNavigationFinished(); 391 manager3.WaitForNavigationFinished();
349 392
350 histogram_tester_.ExpectTotalCount( 393 histogram_tester_.ExpectTotalCount(
351 internal::kHistogramAbortNewNavigationBeforeCommit, 2); 394 internal::kHistogramAbortNewNavigationBeforeCommit, 2);
352 } 395 }
353 396
354 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 397 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClientRedirect) {
355 AbortClientRedirect) {
356 ASSERT_TRUE(embedded_test_server()->Start()); 398 ASSERT_TRUE(embedded_test_server()->Start());
357 399
358 GURL first_url(embedded_test_server()->GetURL("/title1.html")); 400 GURL first_url(embedded_test_server()->GetURL("/title1.html"));
359 ui_test_utils::NavigateToURL(browser(), first_url); 401 ui_test_utils::NavigateToURL(browser(), first_url);
360 402
361 GURL second_url(embedded_test_server()->GetURL("/title2.html")); 403 GURL second_url(embedded_test_server()->GetURL("/title2.html"));
362 chrome::NavigateParams params(browser(), second_url, 404 chrome::NavigateParams params(browser(), second_url,
363 ui::PAGE_TRANSITION_LINK); 405 ui::PAGE_TRANSITION_LINK);
364 content::TestNavigationManager manager( 406 content::TestNavigationManager manager(
365 browser()->tab_strip_model()->GetActiveWebContents(), second_url); 407 browser()->tab_strip_model()->GetActiveWebContents(), second_url);
366 chrome::Navigate(&params); 408 chrome::Navigate(&params);
367 EXPECT_TRUE(manager.WaitForWillStartRequest()); 409 EXPECT_TRUE(manager.WaitForWillStartRequest());
368 410
369 { 411 {
370 content::TestNavigationManager reload_manager( 412 content::TestNavigationManager reload_manager(
371 browser()->tab_strip_model()->GetActiveWebContents(), first_url); 413 browser()->tab_strip_model()->GetActiveWebContents(), first_url);
372 EXPECT_TRUE(content::ExecuteScript( 414 EXPECT_TRUE(content::ExecuteScript(
373 browser()->tab_strip_model()->GetActiveWebContents(), 415 browser()->tab_strip_model()->GetActiveWebContents(),
374 "window.location.reload();")); 416 "window.location.reload();"));
375 } 417 }
376 418
377 manager.WaitForNavigationFinished(); 419 manager.WaitForNavigationFinished();
378 420
379 histogram_tester_.ExpectTotalCount( 421 histogram_tester_.ExpectTotalCount(
380 internal::kHistogramAbortClientRedirectBeforeCommit, 1); 422 internal::kHistogramAbortClientRedirectBeforeCommit, 1);
381 } 423 }
382 424
383 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 425 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
384 FirstMeaningfulPaintRecorded) { 426 FirstMeaningfulPaintRecorded) {
385 ASSERT_TRUE(embedded_test_server()->Start()); 427 ASSERT_TRUE(embedded_test_server()->Start());
386 428
387 ui_test_utils::NavigateToURL(browser(), 429 ui_test_utils::NavigateToURL(browser(),
388 embedded_test_server()->GetURL("/title1.html")); 430 embedded_test_server()->GetURL("/title1.html"));
389 431
390 // Wait until the renderer finishes observing layouts. 432 // Wait until the renderer finishes observing layouts.
391 const int kNetworkIdleTime = 2000; 433 const int kNetworkIdleTime = 2000;
392 const int kMargin = 500; 434 const int kMargin = 500;
393 const std::string javascript = base::StringPrintf( 435 const std::string javascript = base::StringPrintf(
394 "setTimeout(() => window.domAutomationController.send(true), %d)", 436 "setTimeout(() => window.domAutomationController.send(true), %d)",
395 kNetworkIdleTime + kMargin); 437 kNetworkIdleTime + kMargin);
396 bool result; 438 bool result;
397 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 439 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
398 browser()->tab_strip_model()->GetActiveWebContents(), 440 browser()->tab_strip_model()->GetActiveWebContents(),
399 javascript, &result)); 441 javascript, &result));
400 EXPECT_TRUE(result); 442 EXPECT_TRUE(result);
401 443
402 NavigateToUntrackedUrl(); 444 NavigateToUntrackedUrl();
403 histogram_tester_.ExpectUniqueSample( 445 histogram_tester_.ExpectUniqueSample(
404 internal::kHistogramFirstMeaningfulPaintStatus, 446 internal::kHistogramFirstMeaningfulPaintStatus,
405 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); 447 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1);
406 histogram_tester_.ExpectTotalCount( 448 histogram_tester_.ExpectTotalCount(
407 internal::kHistogramFirstMeaningfulPaint, 1); 449 internal::kHistogramFirstMeaningfulPaint, 1);
408 histogram_tester_.ExpectTotalCount( 450 histogram_tester_.ExpectTotalCount(
409 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); 451 internal::kHistogramParseStartToFirstMeaningfulPaint, 1);
410 } 452 }
411 453
412 IN_PROC_BROWSER_TEST_F(MetricsWebContentsObserverBrowserTest, 454 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
413 FirstMeaningfulPaintNotRecorded) { 455 FirstMeaningfulPaintNotRecorded) {
414 ASSERT_TRUE(embedded_test_server()->Start()); 456 ASSERT_TRUE(embedded_test_server()->Start());
415 457
416 ui_test_utils::NavigateToURL(browser(), 458 ui_test_utils::NavigateToURL(browser(),
417 embedded_test_server()->GetURL("/title1.html")); 459 embedded_test_server()->GetURL("/title1.html"));
418 460
419 // Navigate away before a FMP is reported. 461 // Navigate away before a FMP is reported.
420 NavigateToUntrackedUrl(); 462 NavigateToUntrackedUrl();
421 463
422 histogram_tester_.ExpectUniqueSample( 464 histogram_tester_.ExpectUniqueSample(
423 internal::kHistogramFirstMeaningfulPaintStatus, 465 internal::kHistogramFirstMeaningfulPaintStatus,
424 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 466 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
425 histogram_tester_.ExpectTotalCount( 467 histogram_tester_.ExpectTotalCount(
426 internal::kHistogramFirstMeaningfulPaint, 0); 468 internal::kHistogramFirstMeaningfulPaint, 0);
427 histogram_tester_.ExpectTotalCount( 469 histogram_tester_.ExpectTotalCount(
428 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 470 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
429 } 471 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698