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/files/scoped_temp_dir.h" | 5 #include "base/files/scoped_temp_dir.h" |
6 #include "base/macros.h" | 6 #include "base/macros.h" |
7 #include "base/test/histogram_tester.h" | 7 #include "base/test/histogram_tester.h" |
8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
9 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 9 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
10 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" | 10 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob
server.h" |
11 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" | 11 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse
rver.h" |
12 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_observer.h" | 12 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me
trics_observer.h" |
13 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load
_metrics_observer.h" | 13 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load
_metrics_observer.h" |
14 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 14 #include "chrome/browser/page_load_metrics/page_load_tracker.h" |
15 #include "chrome/browser/prerender/prerender_histograms.h" | 15 #include "chrome/browser/prerender/prerender_histograms.h" |
16 #include "chrome/browser/prerender/prerender_origin.h" | 16 #include "chrome/browser/prerender/prerender_origin.h" |
17 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/ui/browser.h" | 18 #include "chrome/browser/ui/browser.h" |
19 #include "chrome/browser/ui/browser_navigator_params.h" | 19 #include "chrome/browser/ui/browser_navigator_params.h" |
20 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 20 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
21 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | |
22 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
23 #include "chrome/common/url_constants.h" | 22 #include "chrome/common/url_constants.h" |
24 #include "chrome/test/base/in_process_browser_test.h" | 23 #include "chrome/test/base/in_process_browser_test.h" |
25 #include "chrome/test/base/ui_test_utils.h" | 24 #include "chrome/test/base/ui_test_utils.h" |
26 #include "components/prefs/pref_service.h" | 25 #include "components/prefs/pref_service.h" |
27 #include "content/public/browser/browser_message_filter.h" | |
28 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
29 #include "content/public/browser/render_process_host.h" | |
30 #include "content/public/browser/render_view_host.h" | |
31 #include "content/public/test/browser_test_utils.h" | 27 #include "content/public/test/browser_test_utils.h" |
32 #include "content/public/test/download_test_observer.h" | 28 #include "content/public/test/download_test_observer.h" |
33 #include "ipc/ipc_message_start.h" | |
34 #include "net/http/failing_http_transaction_factory.h" | 29 #include "net/http/failing_http_transaction_factory.h" |
35 #include "net/http/http_cache.h" | 30 #include "net/http/http_cache.h" |
36 #include "net/test/embedded_test_server/embedded_test_server.h" | 31 #include "net/test/embedded_test_server/embedded_test_server.h" |
37 #include "net/test/url_request/url_request_failed_job.h" | 32 #include "net/test/url_request/url_request_failed_job.h" |
38 #include "net/url_request/url_request_context.h" | 33 #include "net/url_request/url_request_context.h" |
39 #include "net/url_request/url_request_context_getter.h" | 34 #include "net/url_request/url_request_context_getter.h" |
40 | 35 |
41 namespace { | |
42 | |
43 // Waits until a PageLoadMetricsMsg_TimingUpdated message IPC is received. | |
44 class TimingUpdatedObserver : public content::BrowserMessageFilter { | |
45 public: | |
46 explicit TimingUpdatedObserver(content::RenderWidgetHost* render_widget_host) | |
47 : content::BrowserMessageFilter(PageLoadMetricsMsgStart) { | |
48 render_widget_host->GetProcess()->AddFilter(this); | |
49 | |
50 // Roudtrip to the IO thread, to ensure that the filter is properly | |
51 // installed. | |
52 content::BrowserThread::PostTaskAndReply( | |
53 content::BrowserThread::IO, FROM_HERE, base::Bind(&base::DoNothing), | |
54 base::Bind(&TimingUpdatedObserver::Quit, this)); | |
55 run_loop_.reset(new base::RunLoop()); | |
56 run_loop_->Run(); | |
57 run_loop_.reset(nullptr); | |
58 } | |
59 | |
60 // Waits for the IPC. Returns immediately if the IPC has already been received | |
61 // before this call. | |
62 void WaitForTimingUpdatedIPC() { | |
63 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
64 if (timing_updated_) | |
65 return; | |
66 | |
67 run_loop_.reset(new base::RunLoop()); | |
68 run_loop_->Run(); | |
69 run_loop_.reset(nullptr); | |
70 } | |
71 | |
72 private: | |
73 bool OnMessageReceived(const IPC::Message& message) override { | |
74 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | |
75 | |
76 if (message.type() == PageLoadMetricsMsg_TimingUpdated::ID) { | |
77 content::BrowserThread::PostTask( | |
78 content::BrowserThread::UI, FROM_HERE, | |
79 base::Bind(&TimingUpdatedObserver::SetTimingUpdatedAndQuit, this)); | |
80 } | |
81 | |
82 return false; | |
83 } | |
84 | |
85 void Quit() { | |
86 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
87 if (run_loop_) | |
88 run_loop_->Quit(); | |
89 } | |
90 | |
91 void SetTimingUpdatedAndQuit() { | |
92 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
93 timing_updated_ = true; | |
94 Quit(); | |
95 } | |
96 | |
97 ~TimingUpdatedObserver() override {} | |
98 | |
99 std::unique_ptr<base::RunLoop> run_loop_; | |
100 bool timing_updated_ = false; | |
101 }; | |
102 | |
103 } // namespace | |
104 | |
105 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { | 36 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { |
106 public: | 37 public: |
107 PageLoadMetricsBrowserTest() {} | 38 PageLoadMetricsBrowserTest() {} |
108 ~PageLoadMetricsBrowserTest() override {} | 39 ~PageLoadMetricsBrowserTest() override {} |
109 | 40 |
110 protected: | 41 protected: |
111 void NavigateToUntrackedUrl() { | 42 void NavigateToUntrackedUrl() { |
112 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); | 43 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); |
113 } | 44 } |
114 | 45 |
115 bool NoPageLoadMetricsRecorded() { | 46 bool NoPageLoadMetricsRecorded() { |
116 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty(); | 47 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty(); |
117 } | 48 } |
118 | 49 |
119 void WaitForTimingUpdatedIPC() { | |
120 content::WebContents* web_contents = | |
121 browser()->tab_strip_model()->GetActiveWebContents(); | |
122 scoped_refptr<TimingUpdatedObserver> observer(new TimingUpdatedObserver( | |
123 web_contents->GetRenderViewHost()->GetWidget())); | |
124 | |
125 // The observer must be created before checking this, to avoid a race | |
126 // condition. | |
127 if (!NoPageLoadMetricsRecorded()) | |
128 return; | |
129 | |
130 observer->WaitForTimingUpdatedIPC(); | |
131 } | |
132 | |
133 base::HistogramTester histogram_tester_; | 50 base::HistogramTester histogram_tester_; |
134 | 51 |
135 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); | 52 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); |
136 }; | 53 }; |
137 | 54 |
138 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { | 55 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { |
139 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 56 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
140 net::HttpCache* cache( | 57 net::HttpCache* cache( |
141 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); | 58 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); |
142 DCHECK(cache); | 59 DCHECK(cache); |
(...skipping 10 matching lines...) Expand all Loading... |
153 EXPECT_TRUE(NoPageLoadMetricsRecorded()); | 70 EXPECT_TRUE(NoPageLoadMetricsRecorded()); |
154 } | 71 } |
155 | 72 |
156 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { | 73 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NewPage) { |
157 ASSERT_TRUE(embedded_test_server()->Start()); | 74 ASSERT_TRUE(embedded_test_server()->Start()); |
158 | 75 |
159 ui_test_utils::NavigateToURL(browser(), | 76 ui_test_utils::NavigateToURL(browser(), |
160 embedded_test_server()->GetURL("/title1.html")); | 77 embedded_test_server()->GetURL("/title1.html")); |
161 NavigateToUntrackedUrl(); | 78 NavigateToUntrackedUrl(); |
162 | 79 |
163 WaitForTimingUpdatedIPC(); | |
164 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); | 80 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
165 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); | 81 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
166 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); | 82 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
167 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); | 83 histogram_tester_.ExpectTotalCount(internal::kHistogramParseDuration, 1); |
168 histogram_tester_.ExpectTotalCount( | 84 histogram_tester_.ExpectTotalCount( |
169 internal::kHistogramParseBlockedOnScriptLoad, 1); | 85 internal::kHistogramParseBlockedOnScriptLoad, 1); |
170 histogram_tester_.ExpectTotalCount( | 86 histogram_tester_.ExpectTotalCount( |
171 internal::kHistogramParseBlockedOnScriptExecution, 1); | 87 internal::kHistogramParseBlockedOnScriptExecution, 1); |
172 | 88 |
173 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics | 89 // Verify that NoPageLoadMetricsRecorded returns false when PageLoad metrics |
174 // have been recorded. | 90 // have been recorded. |
175 EXPECT_FALSE(NoPageLoadMetricsRecorded()); | 91 EXPECT_FALSE(NoPageLoadMetricsRecorded()); |
176 } | 92 } |
177 | 93 |
178 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) { | 94 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SamePageNavigation) { |
179 ASSERT_TRUE(embedded_test_server()->Start()); | 95 ASSERT_TRUE(embedded_test_server()->Start()); |
180 | 96 |
181 ui_test_utils::NavigateToURL(browser(), | 97 ui_test_utils::NavigateToURL(browser(), |
182 embedded_test_server()->GetURL("/title1.html")); | 98 embedded_test_server()->GetURL("/title1.html")); |
183 ui_test_utils::NavigateToURL( | 99 ui_test_utils::NavigateToURL( |
184 browser(), embedded_test_server()->GetURL("/title1.html#hash")); | 100 browser(), embedded_test_server()->GetURL("/title1.html#hash")); |
185 NavigateToUntrackedUrl(); | 101 NavigateToUntrackedUrl(); |
186 | 102 |
187 WaitForTimingUpdatedIPC(); | |
188 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); | 103 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 1); |
189 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); | 104 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 1); |
190 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); | 105 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 1); |
191 } | 106 } |
192 | 107 |
193 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { | 108 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, SameUrlNavigation) { |
194 ASSERT_TRUE(embedded_test_server()->Start()); | 109 ASSERT_TRUE(embedded_test_server()->Start()); |
195 | 110 |
196 ui_test_utils::NavigateToURL(browser(), | 111 ui_test_utils::NavigateToURL(browser(), |
197 embedded_test_server()->GetURL("/title1.html")); | 112 embedded_test_server()->GetURL("/title1.html")); |
198 ui_test_utils::NavigateToURL(browser(), | 113 ui_test_utils::NavigateToURL(browser(), |
199 embedded_test_server()->GetURL("/title1.html")); | 114 embedded_test_server()->GetURL("/title1.html")); |
200 NavigateToUntrackedUrl(); | 115 NavigateToUntrackedUrl(); |
201 | 116 |
202 // We expect one histogram sample for each navigation to title1.html. | 117 // We expect one histogram sample for each navigation to title1.html. |
203 WaitForTimingUpdatedIPC(); | |
204 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); | 118 histogram_tester_.ExpectTotalCount(internal::kHistogramDomContentLoaded, 2); |
205 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); | 119 histogram_tester_.ExpectTotalCount(internal::kHistogramLoad, 2); |
206 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); | 120 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 2); |
207 } | 121 } |
208 | 122 |
209 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { | 123 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NonHtmlMainResource) { |
210 ASSERT_TRUE(embedded_test_server()->Start()); | 124 ASSERT_TRUE(embedded_test_server()->Start()); |
211 | 125 |
212 ui_test_utils::NavigateToURL(browser(), | 126 ui_test_utils::NavigateToURL(browser(), |
213 embedded_test_server()->GetURL("/circle.svg")); | 127 embedded_test_server()->GetURL("/circle.svg")); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 } | 194 } |
281 | 195 |
282 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { | 196 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { |
283 ASSERT_TRUE(embedded_test_server()->Start()); | 197 ASSERT_TRUE(embedded_test_server()->Start()); |
284 | 198 |
285 ui_test_utils::NavigateToURL( | 199 ui_test_utils::NavigateToURL( |
286 browser(), embedded_test_server()->GetURL( | 200 browser(), embedded_test_server()->GetURL( |
287 "/page_load_metrics/document_write_external_script.html")); | 201 "/page_load_metrics/document_write_external_script.html")); |
288 NavigateToUntrackedUrl(); | 202 NavigateToUntrackedUrl(); |
289 | 203 |
290 WaitForTimingUpdatedIPC(); | |
291 histogram_tester_.ExpectTotalCount( | 204 histogram_tester_.ExpectTotalCount( |
292 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); | 205 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); |
293 } | 206 } |
294 | 207 |
295 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { | 208 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { |
296 ASSERT_TRUE(embedded_test_server()->Start()); | 209 ASSERT_TRUE(embedded_test_server()->Start()); |
297 | 210 |
298 ui_test_utils::NavigateToURL( | 211 ui_test_utils::NavigateToURL( |
299 browser(), embedded_test_server()->GetURL( | 212 browser(), embedded_test_server()->GetURL( |
300 "/page_load_metrics/document_write_no_script.html")); | 213 "/page_load_metrics/document_write_no_script.html")); |
(...skipping 16 matching lines...) Expand all Loading... |
317 } | 230 } |
318 | 231 |
319 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { | 232 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { |
320 ASSERT_TRUE(embedded_test_server()->Start()); | 233 ASSERT_TRUE(embedded_test_server()->Start()); |
321 | 234 |
322 ui_test_utils::NavigateToURL( | 235 ui_test_utils::NavigateToURL( |
323 browser(), embedded_test_server()->GetURL( | 236 browser(), embedded_test_server()->GetURL( |
324 "/page_load_metrics/document_write_script_block.html")); | 237 "/page_load_metrics/document_write_script_block.html")); |
325 NavigateToUntrackedUrl(); | 238 NavigateToUntrackedUrl(); |
326 | 239 |
327 WaitForTimingUpdatedIPC(); | |
328 histogram_tester_.ExpectTotalCount( | 240 histogram_tester_.ExpectTotalCount( |
329 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 241 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
330 } | 242 } |
331 | 243 |
332 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { | 244 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { |
333 ASSERT_TRUE(embedded_test_server()->Start()); | 245 ASSERT_TRUE(embedded_test_server()->Start()); |
334 | 246 |
335 ui_test_utils::NavigateToURL( | 247 ui_test_utils::NavigateToURL( |
336 browser(), embedded_test_server()->GetURL( | 248 browser(), embedded_test_server()->GetURL( |
337 "/page_load_metrics/document_write_script_block.html")); | 249 "/page_load_metrics/document_write_script_block.html")); |
338 | 250 |
339 // Reload should not log the histogram as the script is not blocked. | 251 // Reload should not log the histogram as the script is not blocked. |
340 ui_test_utils::NavigateToURL( | 252 ui_test_utils::NavigateToURL( |
341 browser(), embedded_test_server()->GetURL( | 253 browser(), embedded_test_server()->GetURL( |
342 "/page_load_metrics/document_write_script_block.html")); | 254 "/page_load_metrics/document_write_script_block.html")); |
343 | 255 |
344 ui_test_utils::NavigateToURL( | 256 ui_test_utils::NavigateToURL( |
345 browser(), embedded_test_server()->GetURL( | 257 browser(), embedded_test_server()->GetURL( |
346 "/page_load_metrics/document_write_script_block.html")); | 258 "/page_load_metrics/document_write_script_block.html")); |
347 | 259 |
348 WaitForTimingUpdatedIPC(); | |
349 histogram_tester_.ExpectTotalCount( | 260 histogram_tester_.ExpectTotalCount( |
350 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 261 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
351 | 262 |
352 NavigateToUntrackedUrl(); | 263 NavigateToUntrackedUrl(); |
353 | 264 |
354 histogram_tester_.ExpectTotalCount( | 265 histogram_tester_.ExpectTotalCount( |
355 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); | 266 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); |
356 | 267 |
357 histogram_tester_.ExpectTotalCount( | 268 histogram_tester_.ExpectTotalCount( |
358 internal::kHistogramDocWriteBlockReloadCount, 2); | 269 internal::kHistogramDocWriteBlockReloadCount, 2); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 // When an XHTML page contains invalid XML, it causes a paint of the error | 311 // When an XHTML page contains invalid XML, it causes a paint of the error |
401 // message without a layout. Page load metrics currently treats this as an | 312 // message without a layout. Page load metrics currently treats this as an |
402 // error. Eventually, we'll fix this by special casing the handling of | 313 // error. Eventually, we'll fix this by special casing the handling of |
403 // documents with non-well-formed XML on the blink side. See crbug.com/627607 | 314 // documents with non-well-formed XML on the blink side. See crbug.com/627607 |
404 // for more. | 315 // for more. |
405 ui_test_utils::NavigateToURL( | 316 ui_test_utils::NavigateToURL( |
406 browser(), | 317 browser(), |
407 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); | 318 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); |
408 NavigateToUntrackedUrl(); | 319 NavigateToUntrackedUrl(); |
409 | 320 |
410 WaitForTimingUpdatedIPC(); | |
411 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); | 321 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); |
412 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); | 322 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); |
413 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents, | 323 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents, |
414 page_load_metrics::ERR_BAD_TIMING_IPC, 1); | 324 page_load_metrics::ERR_BAD_TIMING_IPC, 1); |
415 } | 325 } |
416 | 326 |
417 // Test code that aborts provisional navigations. | 327 // Test code that aborts provisional navigations. |
418 // TODO(csharrison): Move these to unit tests once the navigation API in content | 328 // TODO(csharrison): Move these to unit tests once the navigation API in content |
419 // properly calls NavigationHandle/NavigationThrottle methods. | 329 // properly calls NavigationHandle/NavigationThrottle methods. |
420 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { | 330 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortNewNavigation) { |
421 ASSERT_TRUE(embedded_test_server()->Start()); | 331 ASSERT_TRUE(embedded_test_server()->Start()); |
422 | 332 |
423 GURL url(embedded_test_server()->GetURL("/title1.html")); | 333 GURL url(embedded_test_server()->GetURL("/title1.html")); |
424 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 334 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
425 content::TestNavigationManager manager( | 335 content::TestNavigationManager manager( |
426 browser()->tab_strip_model()->GetActiveWebContents(), url); | 336 browser()->tab_strip_model()->GetActiveWebContents(), url); |
427 | 337 |
428 chrome::Navigate(¶ms); | 338 chrome::Navigate(¶ms); |
429 EXPECT_TRUE(manager.WaitForRequestStart()); | 339 EXPECT_TRUE(manager.WaitForRequestStart()); |
430 | 340 |
431 GURL url2(embedded_test_server()->GetURL("/title2.html")); | 341 GURL url2(embedded_test_server()->GetURL("/title2.html")); |
432 chrome::NavigateParams params2(browser(), url2, | 342 chrome::NavigateParams params2(browser(), url2, |
433 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); | 343 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR); |
434 content::TestNavigationManager manager2( | 344 content::TestNavigationManager manager2( |
435 browser()->tab_strip_model()->GetActiveWebContents(), url2); | 345 browser()->tab_strip_model()->GetActiveWebContents(), url2); |
436 chrome::Navigate(¶ms2); | 346 chrome::Navigate(¶ms2); |
437 | 347 |
438 manager2.WaitForNavigationFinished(); | 348 manager2.WaitForNavigationFinished(); |
439 WaitForTimingUpdatedIPC(); | |
440 histogram_tester_.ExpectTotalCount( | 349 histogram_tester_.ExpectTotalCount( |
441 internal::kHistogramAbortNewNavigationBeforeCommit, 1); | 350 internal::kHistogramAbortNewNavigationBeforeCommit, 1); |
442 } | 351 } |
443 | 352 |
444 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { | 353 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortReload) { |
445 ASSERT_TRUE(embedded_test_server()->Start()); | 354 ASSERT_TRUE(embedded_test_server()->Start()); |
446 | 355 |
447 GURL url(embedded_test_server()->GetURL("/title1.html")); | 356 GURL url(embedded_test_server()->GetURL("/title1.html")); |
448 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 357 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
449 content::TestNavigationManager manager( | 358 content::TestNavigationManager manager( |
450 browser()->tab_strip_model()->GetActiveWebContents(), url); | 359 browser()->tab_strip_model()->GetActiveWebContents(), url); |
451 | 360 |
452 chrome::Navigate(¶ms); | 361 chrome::Navigate(¶ms); |
453 EXPECT_TRUE(manager.WaitForRequestStart()); | 362 EXPECT_TRUE(manager.WaitForRequestStart()); |
454 | 363 |
455 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); | 364 chrome::NavigateParams params2(browser(), url, ui::PAGE_TRANSITION_RELOAD); |
456 content::TestNavigationManager manager2( | 365 content::TestNavigationManager manager2( |
457 browser()->tab_strip_model()->GetActiveWebContents(), url); | 366 browser()->tab_strip_model()->GetActiveWebContents(), url); |
458 chrome::Navigate(¶ms2); | 367 chrome::Navigate(¶ms2); |
459 | 368 |
460 manager2.WaitForNavigationFinished(); | 369 manager2.WaitForNavigationFinished(); |
461 WaitForTimingUpdatedIPC(); | |
462 histogram_tester_.ExpectTotalCount( | 370 histogram_tester_.ExpectTotalCount( |
463 internal::kHistogramAbortReloadBeforeCommit, 1); | 371 internal::kHistogramAbortReloadBeforeCommit, 1); |
464 } | 372 } |
465 | 373 |
466 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClose) { | 374 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, AbortClose) { |
467 ASSERT_TRUE(embedded_test_server()->Start()); | 375 ASSERT_TRUE(embedded_test_server()->Start()); |
468 | 376 |
469 GURL url(embedded_test_server()->GetURL("/title1.html")); | 377 GURL url(embedded_test_server()->GetURL("/title1.html")); |
470 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); | 378 chrome::NavigateParams params(browser(), url, ui::PAGE_TRANSITION_LINK); |
471 content::TestNavigationManager manager( | 379 content::TestNavigationManager manager( |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 { | 442 { |
535 content::TestNavigationManager reload_manager( | 443 content::TestNavigationManager reload_manager( |
536 browser()->tab_strip_model()->GetActiveWebContents(), first_url); | 444 browser()->tab_strip_model()->GetActiveWebContents(), first_url); |
537 EXPECT_TRUE(content::ExecuteScript( | 445 EXPECT_TRUE(content::ExecuteScript( |
538 browser()->tab_strip_model()->GetActiveWebContents(), | 446 browser()->tab_strip_model()->GetActiveWebContents(), |
539 "window.location.reload();")); | 447 "window.location.reload();")); |
540 } | 448 } |
541 | 449 |
542 manager.WaitForNavigationFinished(); | 450 manager.WaitForNavigationFinished(); |
543 | 451 |
544 WaitForTimingUpdatedIPC(); | |
545 histogram_tester_.ExpectTotalCount( | 452 histogram_tester_.ExpectTotalCount( |
546 internal::kHistogramAbortClientRedirectBeforeCommit, 1); | 453 internal::kHistogramAbortClientRedirectBeforeCommit, 1); |
547 } | 454 } |
548 | 455 |
549 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 456 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
550 FirstMeaningfulPaintRecorded) { | 457 FirstMeaningfulPaintRecorded) { |
551 ASSERT_TRUE(embedded_test_server()->Start()); | 458 ASSERT_TRUE(embedded_test_server()->Start()); |
552 | 459 |
553 ui_test_utils::NavigateToURL(browser(), | 460 ui_test_utils::NavigateToURL(browser(), |
554 embedded_test_server()->GetURL("/title1.html")); | 461 embedded_test_server()->GetURL("/title1.html")); |
555 | 462 |
556 // Wait until the renderer finishes observing layouts. | 463 // Wait until the renderer finishes observing layouts. |
557 const int kNetworkIdleTime = 500; | 464 const int kNetworkIdleTime = 500; |
558 const int kMargin = 500; | 465 const int kMargin = 500; |
559 const std::string javascript = base::StringPrintf( | 466 const std::string javascript = base::StringPrintf( |
560 "setTimeout(() => window.domAutomationController.send(true), %d)", | 467 "setTimeout(() => window.domAutomationController.send(true), %d)", |
561 kNetworkIdleTime + kMargin); | 468 kNetworkIdleTime + kMargin); |
562 bool result; | 469 bool result; |
563 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( | 470 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
564 browser()->tab_strip_model()->GetActiveWebContents(), | 471 browser()->tab_strip_model()->GetActiveWebContents(), |
565 javascript, &result)); | 472 javascript, &result)); |
566 EXPECT_TRUE(result); | 473 EXPECT_TRUE(result); |
567 | 474 |
568 NavigateToUntrackedUrl(); | 475 NavigateToUntrackedUrl(); |
569 WaitForTimingUpdatedIPC(); | |
570 histogram_tester_.ExpectUniqueSample( | 476 histogram_tester_.ExpectUniqueSample( |
571 internal::kHistogramFirstMeaningfulPaintStatus, | 477 internal::kHistogramFirstMeaningfulPaintStatus, |
572 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); | 478 internal::FIRST_MEANINGFUL_PAINT_RECORDED, 1); |
573 histogram_tester_.ExpectTotalCount( | 479 histogram_tester_.ExpectTotalCount( |
574 internal::kHistogramFirstMeaningfulPaint, 1); | 480 internal::kHistogramFirstMeaningfulPaint, 1); |
575 histogram_tester_.ExpectTotalCount( | 481 histogram_tester_.ExpectTotalCount( |
576 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); | 482 internal::kHistogramParseStartToFirstMeaningfulPaint, 1); |
577 } | 483 } |
578 | 484 |
579 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 485 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
580 FirstMeaningfulPaintNotRecorded) { | 486 FirstMeaningfulPaintNotRecorded) { |
581 ASSERT_TRUE(embedded_test_server()->Start()); | 487 ASSERT_TRUE(embedded_test_server()->Start()); |
582 | 488 |
583 ui_test_utils::NavigateToURL(browser(), | 489 ui_test_utils::NavigateToURL(browser(), |
584 embedded_test_server()->GetURL("/title1.html")); | 490 embedded_test_server()->GetURL("/title1.html")); |
585 | 491 |
586 // Navigate away before a FMP is reported. | 492 // Navigate away before a FMP is reported. |
587 NavigateToUntrackedUrl(); | 493 NavigateToUntrackedUrl(); |
588 | 494 |
589 WaitForTimingUpdatedIPC(); | |
590 histogram_tester_.ExpectUniqueSample( | 495 histogram_tester_.ExpectUniqueSample( |
591 internal::kHistogramFirstMeaningfulPaintStatus, | 496 internal::kHistogramFirstMeaningfulPaintStatus, |
592 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); | 497 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); |
593 histogram_tester_.ExpectTotalCount( | 498 histogram_tester_.ExpectTotalCount( |
594 internal::kHistogramFirstMeaningfulPaint, 0); | 499 internal::kHistogramFirstMeaningfulPaint, 0); |
595 histogram_tester_.ExpectTotalCount( | 500 histogram_tester_.ExpectTotalCount( |
596 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); | 501 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); |
597 } | 502 } |
598 | 503 |
599 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 504 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
600 NoStatePrefetchObserverCacheable) { | 505 NoStatePrefetchObserverCacheable) { |
601 ASSERT_TRUE(embedded_test_server()->Start()); | 506 ASSERT_TRUE(embedded_test_server()->Start()); |
602 | 507 |
603 ui_test_utils::NavigateToURL(browser(), | 508 ui_test_utils::NavigateToURL(browser(), |
604 embedded_test_server()->GetURL("/title1.html")); | 509 embedded_test_server()->GetURL("/title1.html")); |
605 NavigateToUntrackedUrl(); | 510 NavigateToUntrackedUrl(); |
606 | 511 |
607 WaitForTimingUpdatedIPC(); | |
608 histogram_tester_.ExpectTotalCount( | 512 histogram_tester_.ExpectTotalCount( |
609 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 513 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
610 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), | 514 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), |
611 0); | 515 0); |
612 histogram_tester_.ExpectTotalCount( | 516 histogram_tester_.ExpectTotalCount( |
613 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 517 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
614 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), | 518 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), |
615 1); | 519 1); |
616 } | 520 } |
617 | 521 |
618 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, | 522 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, |
619 NoStatePrefetchObserverNoStore) { | 523 NoStatePrefetchObserverNoStore) { |
620 ASSERT_TRUE(embedded_test_server()->Start()); | 524 ASSERT_TRUE(embedded_test_server()->Start()); |
621 | 525 |
622 ui_test_utils::NavigateToURL(browser(), | 526 ui_test_utils::NavigateToURL(browser(), |
623 embedded_test_server()->GetURL("/nostore.html")); | 527 embedded_test_server()->GetURL("/nostore.html")); |
624 NavigateToUntrackedUrl(); | 528 NavigateToUntrackedUrl(); |
625 | 529 |
626 WaitForTimingUpdatedIPC(); | |
627 histogram_tester_.ExpectTotalCount( | 530 histogram_tester_.ExpectTotalCount( |
628 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 531 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
629 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), | 532 prerender::ORIGIN_NONE, false, true, base::TimeDelta()), |
630 1); | 533 1); |
631 histogram_tester_.ExpectTotalCount( | 534 histogram_tester_.ExpectTotalCount( |
632 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( | 535 prerender::PrerenderHistograms::GetFirstContentfulPaintHistogramName( |
633 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), | 536 prerender::ORIGIN_NONE, false, false, base::TimeDelta()), |
634 0); | 537 0); |
635 } | 538 } |
OLD | NEW |