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

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

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

Powered by Google App Engine
This is Rietveld 408576698