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

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

Issue 2698813005: Prerender: fix flaky page load metrics tests (Closed)
Patch Set: comments/field matching bitvector Created 3 years, 10 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
« 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 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"
26 #include "content/public/browser/browser_thread.h" 27 #include "content/public/browser/browser_thread.h"
28 #include "content/public/browser/render_process_host.h"
29 #include "content/public/browser/render_view_host.h"
27 #include "content/public/test/browser_test_utils.h" 30 #include "content/public/test/browser_test_utils.h"
28 #include "content/public/test/download_test_observer.h" 31 #include "content/public/test/download_test_observer.h"
29 #include "net/http/failing_http_transaction_factory.h" 32 #include "net/http/failing_http_transaction_factory.h"
30 #include "net/http/http_cache.h" 33 #include "net/http/http_cache.h"
31 #include "net/test/embedded_test_server/embedded_test_server.h" 34 #include "net/test/embedded_test_server/embedded_test_server.h"
32 #include "net/test/url_request/url_request_failed_job.h" 35 #include "net/test/url_request/url_request_failed_job.h"
33 #include "net/url_request/url_request_context.h" 36 #include "net/url_request/url_request_context.h"
34 #include "net/url_request/url_request_context_getter.h" 37 #include "net/url_request/url_request_context_getter.h"
35 38
39 namespace {
40
41 // Waits until a PageLoadMetricsMsg_TimingUpdated message IPC is received
42 // matching a PageLoadTiming. See WaitForMatchingIPC for details.
43 class TimingUpdatedObserver : public content::BrowserMessageFilter {
44 public:
45 // A bitvector to express which timing fields to match on.
46 enum ExpectedTimingFields {
47 FIRST_PAINT = 1 << 0,
48 FIRST_CONTENTFUL_PAINT = 1 << 1
49 };
50
51 explicit TimingUpdatedObserver(content::RenderWidgetHost* render_widget_host)
52 : content::BrowserMessageFilter(PageLoadMetricsMsgStart) {
53 render_widget_host->GetProcess()->AddFilter(this);
54
55 // Roundtrip to the IO thread, to ensure that the filter is properly
56 // installed.
57 content::BrowserThread::PostTaskAndReply(
58 content::BrowserThread::IO, FROM_HERE, base::Bind(&base::DoNothing),
59 base::Bind(&TimingUpdatedObserver::Quit, this));
60 run_loop_.reset(new base::RunLoop());
61 run_loop_->Run();
62 run_loop_.reset(nullptr);
63 }
64
65 // Add the given timing fields to the set of fields to match on.
66 void AddMatchingFields(ExpectedTimingFields fields) {
67 matching_fields_ |= fields;
68 }
69
70 // Instructs observer to also watch for |count|
71 // WebLoadingBehaviorDocumentWriteBlockReload events.
72 void MatchDocumentWriteBlockReload(int count) {
73 match_document_write_block_reload_ = count;
74 }
75
76 // Waits for a TimingUpdated IPC that matches the fields set by
77 // |AddMatchingFields|. All matching fields must be set in a TimingUpdated
78 // IPC for it to end this wait.
79 void WaitForMatchingIPC() {
80 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
81 if (matched_timing_update_)
82 return;
83
84 run_loop_.reset(new base::RunLoop());
85 run_loop_->Run();
86 run_loop_.reset(nullptr);
87 }
88
89 private:
90 bool OnMessageReceived(const IPC::Message& message) override {
91 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
92
93 IPC_BEGIN_MESSAGE_MAP(TimingUpdatedObserver, message)
94 IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_TimingUpdated, OnTimingUpdated)
95 IPC_END_MESSAGE_MAP()
96
97 return false;
98 }
99
100 bool OnTimingUpdated(const page_load_metrics::PageLoadTiming& timing,
101 const page_load_metrics::PageLoadMetadata& metadata) {
102 if (match_document_write_block_reload_ > 0 &&
103 metadata.behavior_flags &
104 blink::WebLoadingBehaviorFlag::
105 WebLoadingBehaviorDocumentWriteBlockReload) {
106 --match_document_write_block_reload_;
107 }
108
109 if (match_document_write_block_reload_ > 0) {
110 return true;
111 }
112
113 if ((!(matching_fields_ & FIRST_PAINT) || timing.first_paint) &&
114 (!(matching_fields_ & FIRST_CONTENTFUL_PAINT) ||
115 timing.first_contentful_paint)) {
116 // Ensure that any other handlers of this message, for example the real
117 // PageLoadMetric observers, get a chance to handle this message before
118 // this waiter unblocks.
119 content::BrowserThread::PostTask(
120 content::BrowserThread::IO, FROM_HERE,
121 base::Bind(&TimingUpdatedObserver::BounceTimingUpdate, this, timing,
122 metadata));
123 }
124 return true;
125 }
126
127 void BounceTimingUpdate(const page_load_metrics::PageLoadTiming& timing,
128 const page_load_metrics::PageLoadMetadata& metadata) {
129 content::BrowserThread::PostTask(
130 content::BrowserThread::UI, FROM_HERE,
131 base::Bind(&TimingUpdatedObserver::SetTimingUpdatedAndQuit, this));
132 }
133
134 void Quit() {
135 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
136 if (run_loop_)
137 run_loop_->Quit();
138 }
139
140 void SetTimingUpdatedAndQuit() {
141 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
142 matched_timing_update_ = true;
143 Quit();
144 }
145
146 ~TimingUpdatedObserver() override {}
147
148 std::unique_ptr<base::RunLoop> run_loop_;
149 int matching_fields_; // A bitvector composed from ExpectedTimingFields.
150 bool matched_timing_update_ = false;
151 int match_document_write_block_reload_ = 0;
152 };
153
154 } // namespace
155
36 class PageLoadMetricsBrowserTest : public InProcessBrowserTest { 156 class PageLoadMetricsBrowserTest : public InProcessBrowserTest {
37 public: 157 public:
38 PageLoadMetricsBrowserTest() {} 158 PageLoadMetricsBrowserTest() {}
39 ~PageLoadMetricsBrowserTest() override {} 159 ~PageLoadMetricsBrowserTest() override {}
40 160
41 protected: 161 protected:
42 void NavigateToUntrackedUrl() { 162 void NavigateToUntrackedUrl() {
43 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 163 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
44 } 164 }
45 165
46 bool NoPageLoadMetricsRecorded() { 166 bool NoPageLoadMetricsRecorded() {
47 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty(); 167 return histogram_tester_.GetTotalCountsForPrefix("PageLoad.").empty();
48 } 168 }
49 169
170 scoped_refptr<TimingUpdatedObserver> CreateTimingUpdatedObserver() {
171 content::WebContents* web_contents =
172 browser()->tab_strip_model()->GetActiveWebContents();
173 scoped_refptr<TimingUpdatedObserver> observer(new TimingUpdatedObserver(
174 web_contents->GetRenderViewHost()->GetWidget()));
175 return observer;
176 }
177
50 base::HistogramTester histogram_tester_; 178 base::HistogramTester histogram_tester_;
51 179
52 private: 180 private:
53 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest); 181 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsBrowserTest);
54 }; 182 };
55 183
56 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) { 184 void FailAllNetworkTransactions(net::URLRequestContextGetter* getter) {
57 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 185 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
58 net::HttpCache* cache( 186 net::HttpCache* cache(
59 getter->GetURLRequestContext()->http_transaction_factory()->GetCache()); 187 getter->GetURLRequestContext()->http_transaction_factory()->GetCache());
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 browser(), embedded_test_server()->GetURL("/download-test3.gif")); 319 browser(), embedded_test_server()->GetURL("/download-test3.gif"));
192 downloads_observer.WaitForFinished(); 320 downloads_observer.WaitForFinished();
193 321
194 NavigateToUntrackedUrl(); 322 NavigateToUntrackedUrl();
195 EXPECT_TRUE(NoPageLoadMetricsRecorded()); 323 EXPECT_TRUE(NoPageLoadMetricsRecorded());
196 } 324 }
197 325
198 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) { 326 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, PreloadDocumentWrite) {
199 ASSERT_TRUE(embedded_test_server()->Start()); 327 ASSERT_TRUE(embedded_test_server()->Start());
200 328
329 scoped_refptr<TimingUpdatedObserver> fcp_observer =
330 CreateTimingUpdatedObserver();
331 fcp_observer->AddMatchingFields(
332 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
333
201 ui_test_utils::NavigateToURL( 334 ui_test_utils::NavigateToURL(
202 browser(), embedded_test_server()->GetURL( 335 browser(), embedded_test_server()->GetURL(
203 "/page_load_metrics/document_write_external_script.html")); 336 "/page_load_metrics/document_write_external_script.html"));
204 NavigateToUntrackedUrl(); 337 fcp_observer->WaitForMatchingIPC();
205 338
206 histogram_tester_.ExpectTotalCount( 339 histogram_tester_.ExpectTotalCount(
207 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1); 340 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 1);
208 } 341 }
209 342
210 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) { 343 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoPreloadDocumentWrite) {
211 ASSERT_TRUE(embedded_test_server()->Start()); 344 ASSERT_TRUE(embedded_test_server()->Start());
212 345
213 ui_test_utils::NavigateToURL( 346 ui_test_utils::NavigateToURL(
214 browser(), embedded_test_server()->GetURL( 347 browser(), embedded_test_server()->GetURL(
215 "/page_load_metrics/document_write_no_script.html")); 348 "/page_load_metrics/document_write_no_script.html"));
216 NavigateToUntrackedUrl(); 349 NavigateToUntrackedUrl();
217 350
218 histogram_tester_.ExpectTotalCount( 351 histogram_tester_.ExpectTotalCount(
219 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 352 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
220 } 353 }
221 354
222 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) { 355 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, NoDocumentWrite) {
223 ASSERT_TRUE(embedded_test_server()->Start()); 356 ASSERT_TRUE(embedded_test_server()->Start());
224 357
358 scoped_refptr<TimingUpdatedObserver> fcp_observer =
359 CreateTimingUpdatedObserver();
360 fcp_observer->AddMatchingFields(
361 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
362
225 ui_test_utils::NavigateToURL(browser(), 363 ui_test_utils::NavigateToURL(browser(),
226 embedded_test_server()->GetURL("/title1.html")); 364 embedded_test_server()->GetURL("/title1.html"));
227 NavigateToUntrackedUrl(); 365 fcp_observer->WaitForMatchingIPC();
366
228 histogram_tester_.ExpectTotalCount( 367 histogram_tester_.ExpectTotalCount(
229 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0); 368 internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
230 histogram_tester_.ExpectTotalCount( 369 histogram_tester_.ExpectTotalCount(
231 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 370 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
232 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 371 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
233 } 372 }
234 373
235 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) { 374 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteBlock) {
236 ASSERT_TRUE(embedded_test_server()->Start()); 375 ASSERT_TRUE(embedded_test_server()->Start());
237 376
377 scoped_refptr<TimingUpdatedObserver> fcp_observer =
378 CreateTimingUpdatedObserver();
379 fcp_observer->AddMatchingFields(
380 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
381
238 ui_test_utils::NavigateToURL( 382 ui_test_utils::NavigateToURL(
239 browser(), embedded_test_server()->GetURL( 383 browser(), embedded_test_server()->GetURL(
240 "/page_load_metrics/document_write_script_block.html")); 384 "/page_load_metrics/document_write_script_block.html"));
241 NavigateToUntrackedUrl(); 385 fcp_observer->WaitForMatchingIPC();
242 386
243 histogram_tester_.ExpectTotalCount( 387 histogram_tester_.ExpectTotalCount(
244 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 388 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
245 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 389 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
246 } 390 }
247 391
248 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) { 392 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteReload) {
249 ASSERT_TRUE(embedded_test_server()->Start()); 393 ASSERT_TRUE(embedded_test_server()->Start());
250 394
395 scoped_refptr<TimingUpdatedObserver> fcp_observer =
396 CreateTimingUpdatedObserver();
397 fcp_observer->AddMatchingFields(
398 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
399 scoped_refptr<TimingUpdatedObserver> reload_observer =
400 CreateTimingUpdatedObserver();
401 reload_observer->MatchDocumentWriteBlockReload(2);
402
251 ui_test_utils::NavigateToURL( 403 ui_test_utils::NavigateToURL(
252 browser(), embedded_test_server()->GetURL( 404 browser(), embedded_test_server()->GetURL(
253 "/page_load_metrics/document_write_script_block.html")); 405 "/page_load_metrics/document_write_script_block.html"));
254 406
255 // Reload should not log the histogram as the script is not blocked. 407 // Reload should not log the histogram as the script is not blocked.
256 ui_test_utils::NavigateToURL( 408 ui_test_utils::NavigateToURL(
257 browser(), embedded_test_server()->GetURL( 409 browser(), embedded_test_server()->GetURL(
258 "/page_load_metrics/document_write_script_block.html")); 410 "/page_load_metrics/document_write_script_block.html"));
259 411
260 ui_test_utils::NavigateToURL( 412 ui_test_utils::NavigateToURL(
261 browser(), embedded_test_server()->GetURL( 413 browser(), embedded_test_server()->GetURL(
262 "/page_load_metrics/document_write_script_block.html")); 414 "/page_load_metrics/document_write_script_block.html"));
263 415
264 histogram_tester_.ExpectTotalCount( 416 histogram_tester_.ExpectTotalCount(
265 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 417 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
266 418
267 NavigateToUntrackedUrl(); 419 fcp_observer->WaitForMatchingIPC();
420 reload_observer->WaitForMatchingIPC();
268 421
269 histogram_tester_.ExpectTotalCount( 422 histogram_tester_.ExpectTotalCount(
270 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1); 423 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
271 424
272 histogram_tester_.ExpectTotalCount( 425 histogram_tester_.ExpectTotalCount(
273 internal::kHistogramDocWriteBlockReloadCount, 2); 426 internal::kHistogramDocWriteBlockReloadCount, 2);
274 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1); 427 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 1);
275 } 428 }
276 429
277 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) { 430 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, DocumentWriteAsync) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 NavigateToUntrackedUrl(); 462 NavigateToUntrackedUrl();
310 463
311 histogram_tester_.ExpectTotalCount( 464 histogram_tester_.ExpectTotalCount(
312 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0); 465 internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
313 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0); 466 histogram_tester_.ExpectTotalCount(internal::kHistogramDocWriteBlockCount, 0);
314 } 467 }
315 468
316 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, BadXhtml) { 469 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, BadXhtml) {
317 ASSERT_TRUE(embedded_test_server()->Start()); 470 ASSERT_TRUE(embedded_test_server()->Start());
318 471
472 scoped_refptr<TimingUpdatedObserver> timing_observer =
473 CreateTimingUpdatedObserver();
474 timing_observer->AddMatchingFields(TimingUpdatedObserver::FIRST_PAINT);
475
319 // When an XHTML page contains invalid XML, it causes a paint of the error 476 // When an XHTML page contains invalid XML, it causes a paint of the error
320 // message without a layout. Page load metrics currently treats this as an 477 // message without a layout. Page load metrics currently treats this as an
321 // error. Eventually, we'll fix this by special casing the handling of 478 // error. Eventually, we'll fix this by special casing the handling of
322 // documents with non-well-formed XML on the blink side. See crbug.com/627607 479 // documents with non-well-formed XML on the blink side. See crbug.com/627607
323 // for more. 480 // for more.
324 ui_test_utils::NavigateToURL( 481 ui_test_utils::NavigateToURL(
325 browser(), 482 browser(),
326 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml")); 483 embedded_test_server()->GetURL("/page_load_metrics/badxml.xhtml"));
327 NavigateToUntrackedUrl(); 484
485 timing_observer->WaitForMatchingIPC();
328 486
329 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0); 487 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstLayout, 0);
330 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0); 488 histogram_tester_.ExpectTotalCount(internal::kHistogramFirstPaint, 0);
331 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents, 489 histogram_tester_.ExpectBucketCount(page_load_metrics::internal::kErrorEvents,
332 page_load_metrics::ERR_BAD_TIMING_IPC, 1); 490 page_load_metrics::ERR_BAD_TIMING_IPC, 1);
333 } 491 }
334 492
335 // Test code that aborts provisional navigations. 493 // Test code that aborts provisional navigations.
336 // TODO(csharrison): Move these to unit tests once the navigation API in content 494 // TODO(csharrison): Move these to unit tests once the navigation API in content
337 // properly calls NavigationHandle/NavigationThrottle methods. 495 // properly calls NavigationHandle/NavigationThrottle methods.
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 666
509 histogram_tester_.ExpectUniqueSample( 667 histogram_tester_.ExpectUniqueSample(
510 internal::kHistogramFirstMeaningfulPaintStatus, 668 internal::kHistogramFirstMeaningfulPaintStatus,
511 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1); 669 internal::FIRST_MEANINGFUL_PAINT_DID_NOT_REACH_NETWORK_STABLE, 1);
512 histogram_tester_.ExpectTotalCount( 670 histogram_tester_.ExpectTotalCount(
513 internal::kHistogramFirstMeaningfulPaint, 0); 671 internal::kHistogramFirstMeaningfulPaint, 0);
514 histogram_tester_.ExpectTotalCount( 672 histogram_tester_.ExpectTotalCount(
515 internal::kHistogramParseStartToFirstMeaningfulPaint, 0); 673 internal::kHistogramParseStartToFirstMeaningfulPaint, 0);
516 } 674 }
517 675
518 // Flaky on Linux (timing out or failing in an expectation) crbug.com/657022
519 #if defined(OS_LINUX)
520 #define MAYBE_NoStatePrefetchObserverCacheable \
521 DISABLED_NoStatePrefetchObserverCacheable
522 #else
523 #define MAYBE_NoStatePrefetchObserverCacheable NoStatePrefetchObserverCacheable
524 #endif
525 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 676 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
526 MAYBE_NoStatePrefetchObserverCacheable) { 677 NoStatePrefetchObserverCacheable) {
527 ASSERT_TRUE(embedded_test_server()->Start()); 678 ASSERT_TRUE(embedded_test_server()->Start());
528 679
680 scoped_refptr<TimingUpdatedObserver> fcp_observer =
681 CreateTimingUpdatedObserver();
682 fcp_observer->AddMatchingFields(
683 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
684
529 ui_test_utils::NavigateToURL(browser(), 685 ui_test_utils::NavigateToURL(browser(),
530 embedded_test_server()->GetURL("/title1.html")); 686 embedded_test_server()->GetURL("/title1.html"));
531 NavigateToUntrackedUrl(); 687
688 fcp_observer->WaitForMatchingIPC();
532 689
533 histogram_tester_.ExpectTotalCount( 690 histogram_tester_.ExpectTotalCount(
534 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0); 691 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 0);
535 histogram_tester_.ExpectTotalCount( 692 histogram_tester_.ExpectTotalCount(
536 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1); 693 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 1);
537 } 694 }
538 695
539 // Flaky on Linux (timing out or failing in an expectation) crbug.com/657022
540 #if defined(OS_LINUX)
541 #define MAYBE_NoStatePrefetchObserverNoStore \
542 DISABLED_NoStatePrefetchObserverNoStore
543 #else
544 #define MAYBE_NoStatePrefetchObserverNoStore NoStatePrefetchObserverNoStore
545 #endif
546 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, 696 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest,
547 MAYBE_NoStatePrefetchObserverNoStore) { 697 NoStatePrefetchObserverNoStore) {
548 ASSERT_TRUE(embedded_test_server()->Start()); 698 ASSERT_TRUE(embedded_test_server()->Start());
549 699
700 scoped_refptr<TimingUpdatedObserver> fcp_observer =
701 CreateTimingUpdatedObserver();
702 fcp_observer->AddMatchingFields(
703 TimingUpdatedObserver::FIRST_CONTENTFUL_PAINT);
704
550 ui_test_utils::NavigateToURL(browser(), 705 ui_test_utils::NavigateToURL(browser(),
551 embedded_test_server()->GetURL("/nostore.html")); 706 embedded_test_server()->GetURL("/nostore.html"));
552 NavigateToUntrackedUrl(); 707
708 fcp_observer->WaitForMatchingIPC();
553 709
554 histogram_tester_.ExpectTotalCount( 710 histogram_tester_.ExpectTotalCount(
555 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1); 711 "Prerender.none_PrefetchTTFCP.Reference.NoStore.Visible", 1);
556 histogram_tester_.ExpectTotalCount( 712 histogram_tester_.ExpectTotalCount(
557 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0); 713 "Prerender.none_PrefetchTTFCP.Reference.Cacheable.Visible", 0);
558 } 714 }
559 715
560 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) { 716 IN_PROC_BROWSER_TEST_F(PageLoadMetricsBrowserTest, CSSTiming) {
561 ASSERT_TRUE(embedded_test_server()->Start()); 717 ASSERT_TRUE(embedded_test_server()->Start());
562 718
(...skipping 21 matching lines...) Expand all
584 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( 740 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
585 "/page_load_metrics/large.html")); 741 "/page_load_metrics/large.html"));
586 NavigateToUntrackedUrl(); 742 NavigateToUntrackedUrl();
587 743
588 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1); 744 histogram_tester_.ExpectTotalCount(internal::kHistogramTotalBytes, 1);
589 745
590 // Verify that there is a single sample recorded in the 10kB bucket (the size 746 // Verify that there is a single sample recorded in the 10kB bucket (the size
591 // of the main HTML response). 747 // of the main HTML response).
592 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1); 748 histogram_tester_.ExpectBucketCount(internal::kHistogramTotalBytes, 10, 1);
593 } 749 }
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