OLD | NEW |
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 "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" | 5 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/process/kill.h" | 12 #include "base/process/kill.h" |
| 13 #include "base/run_loop.h" |
13 #include "base/test/histogram_tester.h" | 14 #include "base/test/histogram_tester.h" |
14 #include "base/time/time.h" | 15 #include "base/time/time.h" |
15 #include "chrome/browser/page_load_metrics/metrics_navigation_throttle.h" | 16 #include "chrome/browser/page_load_metrics/metrics_navigation_throttle.h" |
16 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.
h" | 17 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.
h" |
17 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" | 18 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" |
18 #include "chrome/browser/page_load_metrics/page_load_tracker.h" | 19 #include "chrome/browser/page_load_metrics/page_load_tracker.h" |
19 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" | 20 #include "chrome/common/page_load_metrics/page_load_metrics_messages.h" |
20 #include "chrome/common/url_constants.h" | 21 #include "chrome/common/url_constants.h" |
21 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 22 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
22 #include "content/public/browser/navigation_handle.h" | 23 #include "content/public/browser/navigation_handle.h" |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 void SimulateTimingUpdate(const PageLoadTiming& timing) { | 165 void SimulateTimingUpdate(const PageLoadTiming& timing) { |
165 SimulateTimingUpdate(timing, web_contents()->GetMainFrame()); | 166 SimulateTimingUpdate(timing, web_contents()->GetMainFrame()); |
166 } | 167 } |
167 | 168 |
168 void SimulateTimingUpdate(const PageLoadTiming& timing, | 169 void SimulateTimingUpdate(const PageLoadTiming& timing, |
169 content::RenderFrameHost* render_frame_host) { | 170 content::RenderFrameHost* render_frame_host) { |
170 ASSERT_TRUE(observer_->OnMessageReceived( | 171 ASSERT_TRUE(observer_->OnMessageReceived( |
171 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, | 172 PageLoadMetricsMsg_TimingUpdated(observer_->routing_id(), timing, |
172 PageLoadMetadata()), | 173 PageLoadMetadata()), |
173 render_frame_host)); | 174 render_frame_host)); |
| 175 |
| 176 observer_->page_load_metrics_binding_for_testing() |
| 177 .SetCurrentTargetFrameForTesting(render_frame_host); |
| 178 mojo::Binding<page_load_metrics::mojom::PageLoadMetrics> binding(observer_); |
| 179 mojom::PageLoadMetricsPtr ptr; |
| 180 mojom::PageLoadMetricsRequest request = MakeRequest(&ptr); |
| 181 binding.Bind(std::move(request)); |
| 182 ptr->UpdateTiming(timing, PageLoadMetadata()); |
| 183 base::RunLoop().RunUntilIdle(); |
174 } | 184 } |
175 | 185 |
176 void AttachObserver() { | 186 void AttachObserver() { |
177 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); | 187 embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); |
178 // Owned by the web_contents. Tests must be careful not to call | 188 // Owned by the web_contents. Tests must be careful not to call |
179 // SimulateTimingUpdate after they call DeleteContents() without also | 189 // SimulateTimingUpdate after they call DeleteContents() without also |
180 // calling AttachObserver() again. Otherwise they will use-after-free the | 190 // calling AttachObserver() again. Otherwise they will use-after-free the |
181 // observer_. | 191 // observer_. |
182 observer_ = MetricsWebContentsObserver::CreateForWebContents( | 192 observer_ = MetricsWebContentsObserver::CreateForWebContents( |
183 web_contents(), base::WrapUnique(embedder_interface_)); | 193 web_contents(), base::WrapUnique(embedder_interface_)); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 288 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); |
279 SimulateTimingUpdate(timing, subframe); | 289 SimulateTimingUpdate(timing, subframe); |
280 subframe_tester->SimulateNavigationStop(); | 290 subframe_tester->SimulateNavigationStop(); |
281 | 291 |
282 // Navigate again to see if the timing updated for a subframe message. | 292 // Navigate again to see if the timing updated for a subframe message. |
283 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 293 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
284 | 294 |
285 ASSERT_EQ(0, CountUpdatedTimingReported()); | 295 ASSERT_EQ(0, CountUpdatedTimingReported()); |
286 ASSERT_EQ(1, CountCompleteTimingReported()); | 296 ASSERT_EQ(1, CountCompleteTimingReported()); |
287 ASSERT_EQ(1, CountEmptyCompleteTimingReported()); | 297 ASSERT_EQ(1, CountEmptyCompleteTimingReported()); |
288 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1); | 298 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 2); |
289 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 299 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); |
290 CheckTotalErrorEvents(); | 300 CheckTotalErrorEvents(); |
291 } | 301 } |
292 | 302 |
293 TEST_F(MetricsWebContentsObserverTest, SameDocumentNoTrigger) { | 303 TEST_F(MetricsWebContentsObserverTest, SameDocumentNoTrigger) { |
294 PageLoadTiming timing; | 304 PageLoadTiming timing; |
295 timing.navigation_start = base::Time::FromDoubleT(1); | 305 timing.navigation_start = base::Time::FromDoubleT(1); |
296 | 306 |
297 content::WebContentsTester* web_contents_tester = | 307 content::WebContentsTester* web_contents_tester = |
298 content::WebContentsTester::For(web_contents()); | 308 content::WebContentsTester::For(web_contents()); |
(...skipping 27 matching lines...) Expand all Loading... |
326 | 336 |
327 content::WebContentsTester* web_contents_tester = | 337 content::WebContentsTester* web_contents_tester = |
328 content::WebContentsTester::For(web_contents()); | 338 content::WebContentsTester::For(web_contents()); |
329 embedder_interface_->set_is_ntp(true); | 339 embedder_interface_->set_is_ntp(true); |
330 | 340 |
331 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 341 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
332 SimulateTimingUpdate(timing); | 342 SimulateTimingUpdate(timing); |
333 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 343 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
334 ASSERT_EQ(0, CountUpdatedTimingReported()); | 344 ASSERT_EQ(0, CountUpdatedTimingReported()); |
335 ASSERT_EQ(0, CountCompleteTimingReported()); | 345 ASSERT_EQ(0, CountCompleteTimingReported()); |
336 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 346 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); |
337 CheckTotalErrorEvents(); | 347 CheckTotalErrorEvents(); |
338 } | 348 } |
339 | 349 |
340 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { | 350 TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) { |
341 PageLoadTiming timing; | 351 PageLoadTiming timing; |
342 timing.navigation_start = base::Time::FromDoubleT(10); | 352 timing.navigation_start = base::Time::FromDoubleT(10); |
343 | 353 |
344 content::WebContentsTester* web_contents_tester = | 354 content::WebContentsTester* web_contents_tester = |
345 content::WebContentsTester::For(web_contents()); | 355 content::WebContentsTester::For(web_contents()); |
346 | 356 |
347 GURL about_blank_url = GURL("about:blank"); | 357 GURL about_blank_url = GURL("about:blank"); |
348 web_contents_tester->NavigateAndCommit(about_blank_url); | 358 web_contents_tester->NavigateAndCommit(about_blank_url); |
349 SimulateTimingUpdate(timing); | 359 SimulateTimingUpdate(timing); |
350 ASSERT_EQ(0, CountUpdatedTimingReported()); | 360 ASSERT_EQ(0, CountUpdatedTimingReported()); |
351 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 361 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
352 ASSERT_EQ(0, CountUpdatedTimingReported()); | 362 ASSERT_EQ(0, CountUpdatedTimingReported()); |
353 ASSERT_EQ(0, CountCompleteTimingReported()); | 363 ASSERT_EQ(0, CountCompleteTimingReported()); |
354 | 364 |
355 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 1); | 365 CheckErrorEvent(ERR_IPC_FROM_BAD_URL_SCHEME, 2); |
356 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 366 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); |
357 CheckTotalErrorEvents(); | 367 CheckTotalErrorEvents(); |
358 } | 368 } |
359 | 369 |
360 TEST_F(MetricsWebContentsObserverTest, EmptyTimingError) { | 370 TEST_F(MetricsWebContentsObserverTest, EmptyTimingError) { |
361 PageLoadTiming timing; | 371 PageLoadTiming timing; |
362 | 372 |
363 content::WebContentsTester* web_contents_tester = | 373 content::WebContentsTester* web_contents_tester = |
364 content::WebContentsTester::For(web_contents()); | 374 content::WebContentsTester::For(web_contents()); |
365 | 375 |
366 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 376 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
367 SimulateTimingUpdate(timing); | 377 SimulateTimingUpdate(timing); |
368 ASSERT_EQ(0, CountUpdatedTimingReported()); | 378 ASSERT_EQ(0, CountUpdatedTimingReported()); |
369 NavigateToUntrackedUrl(); | 379 NavigateToUntrackedUrl(); |
370 ASSERT_EQ(0, CountUpdatedTimingReported()); | 380 ASSERT_EQ(0, CountUpdatedTimingReported()); |
371 ASSERT_EQ(1, CountCompleteTimingReported()); | 381 ASSERT_EQ(1, CountCompleteTimingReported()); |
372 | 382 |
373 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 383 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); |
374 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 384 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); |
375 CheckTotalErrorEvents(); | 385 CheckTotalErrorEvents(); |
376 | 386 |
377 histogram_tester_.ExpectTotalCount( | 387 histogram_tester_.ExpectTotalCount( |
378 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 388 page_load_metrics::internal::kPageLoadTimingStatus, 2); |
379 histogram_tester_.ExpectBucketCount( | 389 histogram_tester_.ExpectBucketCount( |
380 page_load_metrics::internal::kPageLoadTimingStatus, | 390 page_load_metrics::internal::kPageLoadTimingStatus, |
381 page_load_metrics::internal::INVALID_EMPTY_TIMING, 1); | 391 page_load_metrics::internal::INVALID_EMPTY_TIMING, 2); |
382 } | 392 } |
383 | 393 |
384 TEST_F(MetricsWebContentsObserverTest, NullNavigationStartError) { | 394 TEST_F(MetricsWebContentsObserverTest, NullNavigationStartError) { |
385 PageLoadTiming timing; | 395 PageLoadTiming timing; |
386 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); | 396 timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1); |
387 | 397 |
388 content::WebContentsTester* web_contents_tester = | 398 content::WebContentsTester* web_contents_tester = |
389 content::WebContentsTester::For(web_contents()); | 399 content::WebContentsTester::For(web_contents()); |
390 | 400 |
391 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 401 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
392 SimulateTimingUpdate(timing); | 402 SimulateTimingUpdate(timing); |
393 ASSERT_EQ(0, CountUpdatedTimingReported()); | 403 ASSERT_EQ(0, CountUpdatedTimingReported()); |
394 NavigateToUntrackedUrl(); | 404 NavigateToUntrackedUrl(); |
395 ASSERT_EQ(0, CountUpdatedTimingReported()); | 405 ASSERT_EQ(0, CountUpdatedTimingReported()); |
396 ASSERT_EQ(1, CountCompleteTimingReported()); | 406 ASSERT_EQ(1, CountCompleteTimingReported()); |
397 | 407 |
398 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 408 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); |
399 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 409 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); |
400 CheckTotalErrorEvents(); | 410 CheckTotalErrorEvents(); |
401 | 411 |
402 histogram_tester_.ExpectTotalCount( | 412 histogram_tester_.ExpectTotalCount( |
403 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 413 page_load_metrics::internal::kPageLoadTimingStatus, 2); |
404 histogram_tester_.ExpectBucketCount( | 414 histogram_tester_.ExpectBucketCount( |
405 page_load_metrics::internal::kPageLoadTimingStatus, | 415 page_load_metrics::internal::kPageLoadTimingStatus, |
406 page_load_metrics::internal::INVALID_NULL_NAVIGATION_START, 1); | 416 page_load_metrics::internal::INVALID_NULL_NAVIGATION_START, 2); |
407 } | 417 } |
408 | 418 |
409 TEST_F(MetricsWebContentsObserverTest, TimingOrderError) { | 419 TEST_F(MetricsWebContentsObserverTest, TimingOrderError) { |
410 PageLoadTiming timing; | 420 PageLoadTiming timing; |
411 timing.navigation_start = base::Time::FromDoubleT(1); | 421 timing.navigation_start = base::Time::FromDoubleT(1); |
412 timing.parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(1); | 422 timing.parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(1); |
413 | 423 |
414 content::WebContentsTester* web_contents_tester = | 424 content::WebContentsTester* web_contents_tester = |
415 content::WebContentsTester::For(web_contents()); | 425 content::WebContentsTester::For(web_contents()); |
416 | 426 |
417 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 427 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
418 SimulateTimingUpdate(timing); | 428 SimulateTimingUpdate(timing); |
419 ASSERT_EQ(0, CountUpdatedTimingReported()); | 429 ASSERT_EQ(0, CountUpdatedTimingReported()); |
420 NavigateToUntrackedUrl(); | 430 NavigateToUntrackedUrl(); |
421 ASSERT_EQ(0, CountUpdatedTimingReported()); | 431 ASSERT_EQ(0, CountUpdatedTimingReported()); |
422 ASSERT_EQ(1, CountCompleteTimingReported()); | 432 ASSERT_EQ(1, CountCompleteTimingReported()); |
423 | 433 |
424 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1); | 434 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 2); |
425 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); | 435 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1); |
426 CheckTotalErrorEvents(); | 436 CheckTotalErrorEvents(); |
427 | 437 |
428 histogram_tester_.ExpectTotalCount( | 438 histogram_tester_.ExpectTotalCount( |
429 page_load_metrics::internal::kPageLoadTimingStatus, 1); | 439 page_load_metrics::internal::kPageLoadTimingStatus, 2); |
430 histogram_tester_.ExpectBucketCount( | 440 histogram_tester_.ExpectBucketCount( |
431 page_load_metrics::internal::kPageLoadTimingStatus, | 441 page_load_metrics::internal::kPageLoadTimingStatus, |
432 page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 1); | 442 page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 2); |
433 } | 443 } |
434 | 444 |
435 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { | 445 TEST_F(MetricsWebContentsObserverTest, NotInMainError) { |
436 PageLoadTiming timing; | 446 PageLoadTiming timing; |
437 timing.navigation_start = base::Time::FromDoubleT(1); | 447 timing.navigation_start = base::Time::FromDoubleT(1); |
438 | 448 |
439 content::WebContentsTester* web_contents_tester = | 449 content::WebContentsTester* web_contents_tester = |
440 content::WebContentsTester::For(web_contents()); | 450 content::WebContentsTester::For(web_contents()); |
441 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 451 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
442 | 452 |
443 content::RenderFrameHostTester* rfh_tester = | 453 content::RenderFrameHostTester* rfh_tester = |
444 content::RenderFrameHostTester::For(main_rfh()); | 454 content::RenderFrameHostTester::For(main_rfh()); |
445 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); | 455 content::RenderFrameHost* subframe = rfh_tester->AppendChild("subframe"); |
446 | 456 |
447 content::RenderFrameHostTester* subframe_tester = | 457 content::RenderFrameHostTester* subframe_tester = |
448 content::RenderFrameHostTester::For(subframe); | 458 content::RenderFrameHostTester::For(subframe); |
449 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); | 459 subframe_tester->SimulateNavigationStart(GURL(kDefaultTestUrl2)); |
450 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); | 460 subframe_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl2)); |
451 SimulateTimingUpdate(timing, subframe); | 461 SimulateTimingUpdate(timing, subframe); |
452 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 1); | 462 CheckErrorEvent(ERR_TIMING_IPC_FROM_SUBFRAME, 2); |
453 CheckTotalErrorEvents(); | 463 CheckTotalErrorEvents(); |
454 ASSERT_EQ(0, CountUpdatedTimingReported()); | 464 ASSERT_EQ(0, CountUpdatedTimingReported()); |
455 ASSERT_EQ(0, CountCompleteTimingReported()); | 465 ASSERT_EQ(0, CountCompleteTimingReported()); |
456 } | 466 } |
457 | 467 |
458 TEST_F(MetricsWebContentsObserverTest, BadIPC) { | 468 TEST_F(MetricsWebContentsObserverTest, BadIPC) { |
459 PageLoadTiming timing; | 469 PageLoadTiming timing; |
460 timing.navigation_start = base::Time::FromDoubleT(10); | 470 timing.navigation_start = base::Time::FromDoubleT(10); |
461 PageLoadTiming timing2; | 471 PageLoadTiming timing2; |
462 timing2.navigation_start = base::Time::FromDoubleT(100); | 472 timing2.navigation_start = base::Time::FromDoubleT(100); |
463 | 473 |
464 content::WebContentsTester* web_contents_tester = | 474 content::WebContentsTester* web_contents_tester = |
465 content::WebContentsTester::For(web_contents()); | 475 content::WebContentsTester::For(web_contents()); |
466 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 476 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
467 | 477 |
468 SimulateTimingUpdate(timing); | 478 SimulateTimingUpdate(timing); |
469 ASSERT_EQ(1, CountUpdatedTimingReported()); | 479 ASSERT_EQ(1, CountUpdatedTimingReported()); |
470 SimulateTimingUpdate(timing2); | 480 SimulateTimingUpdate(timing2); |
471 ASSERT_EQ(1, CountUpdatedTimingReported()); | 481 ASSERT_EQ(1, CountUpdatedTimingReported()); |
472 | 482 |
473 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING_DESCENDENT, 1); | 483 CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING_DESCENDENT, 2); |
474 CheckTotalErrorEvents(); | 484 CheckTotalErrorEvents(); |
475 } | 485 } |
476 | 486 |
477 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { | 487 TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { |
478 // Reset the state of the tests, and attach the MetricsWebContentsObserver in | 488 // Reset the state of the tests, and attach the MetricsWebContentsObserver in |
479 // the middle of a navigation. This tests that the class is robust to only | 489 // the middle of a navigation. This tests that the class is robust to only |
480 // observing some of a navigation. | 490 // observing some of a navigation. |
481 DeleteContents(); | 491 DeleteContents(); |
482 SetContents(CreateTestWebContents()); | 492 SetContents(CreateTestWebContents()); |
483 | 493 |
(...skipping 10 matching lines...) Expand all Loading... |
494 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); | 504 web_contents_tester->StartNavigation(GURL(kDefaultTestUrl)); |
495 AttachObserver(); | 505 AttachObserver(); |
496 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); | 506 rfh_tester->SimulateNavigationCommit(GURL(kDefaultTestUrl)); |
497 | 507 |
498 SimulateTimingUpdate(timing); | 508 SimulateTimingUpdate(timing); |
499 | 509 |
500 // Navigate again to force histogram logging. | 510 // Navigate again to force histogram logging. |
501 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 511 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
502 ASSERT_EQ(0, CountCompleteTimingReported()); | 512 ASSERT_EQ(0, CountCompleteTimingReported()); |
503 ASSERT_EQ(0, CountUpdatedTimingReported()); | 513 ASSERT_EQ(0, CountUpdatedTimingReported()); |
504 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 1); | 514 CheckErrorEvent(ERR_IPC_WITH_NO_RELEVANT_LOAD, 2); |
505 CheckTotalErrorEvents(); | 515 CheckTotalErrorEvents(); |
506 } | 516 } |
507 | 517 |
508 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { | 518 TEST_F(MetricsWebContentsObserverTest, DontLogAbortChains) { |
509 NavigateAndCommit(GURL(kDefaultTestUrl)); | 519 NavigateAndCommit(GURL(kDefaultTestUrl)); |
510 NavigateAndCommit(GURL(kDefaultTestUrl2)); | 520 NavigateAndCommit(GURL(kDefaultTestUrl2)); |
511 NavigateAndCommit(GURL(kDefaultTestUrl)); | 521 NavigateAndCommit(GURL(kDefaultTestUrl)); |
512 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNewNavigation, 0); | 522 histogram_tester_.ExpectTotalCount(internal::kAbortChainSizeNewNavigation, 0); |
513 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 2); | 523 CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 2); |
514 CheckTotalErrorEvents(); | 524 CheckTotalErrorEvents(); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); | 676 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl2)); |
667 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}), | 677 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl)}), |
668 completed_filtered_urls()); | 678 completed_filtered_urls()); |
669 | 679 |
670 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); | 680 web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl)); |
671 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl), GURL(kDefaultTestUrl2)}), | 681 ASSERT_EQ(std::vector<GURL>({GURL(kDefaultTestUrl), GURL(kDefaultTestUrl2)}), |
672 completed_filtered_urls()); | 682 completed_filtered_urls()); |
673 } | 683 } |
674 | 684 |
675 } // namespace page_load_metrics | 685 } // namespace page_load_metrics |
OLD | NEW |