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

Unified Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc

Issue 2820943002: Add detailed tracking for causes of invalid PageLoadTimings. (Closed)
Patch Set: add tests Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
index 8969ac6d537cd9e67724bfdfa15c9f706a0b602f..2466dd157bc42d9a0fc3d61dca65c40a336254da 100644
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "chrome/browser/page_load_metrics/page_load_tracker.h"
#include "chrome/common/page_load_metrics/page_load_metrics_messages.h"
+#include "chrome/common/url_constants.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
@@ -155,6 +156,11 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness {
AttachObserver();
}
+ void NavigateToUntrackedUrl() {
+ content::WebContentsTester::For(web_contents())
+ ->NavigateAndCommit(GURL(url::kAboutBlankURL));
+ }
+
void SimulateTimingUpdate(const PageLoadTiming& timing) {
SimulateTimingUpdate(timing, web_contents()->GetMainFrame());
}
@@ -351,6 +357,81 @@ TEST_F(MetricsWebContentsObserverTest, DontLogIrrelevantNavigation) {
CheckTotalErrorEvents();
}
+TEST_F(MetricsWebContentsObserverTest, EmptyTimingError) {
+ PageLoadTiming timing;
+
+ content::WebContentsTester* web_contents_tester =
+ content::WebContentsTester::For(web_contents());
+
+ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
+ SimulateTimingUpdate(timing);
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ NavigateToUntrackedUrl();
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ ASSERT_EQ(1, CountCompleteTimingReported());
+
+ CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
+ CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1);
+ CheckTotalErrorEvents();
+
+ histogram_tester_.ExpectTotalCount(
+ page_load_metrics::internal::kPageLoadTimingStatus, 1);
+ histogram_tester_.ExpectBucketCount(
+ page_load_metrics::internal::kPageLoadTimingStatus,
+ page_load_metrics::internal::INVALID_EMPTY_TIMING, 1);
+}
+
+TEST_F(MetricsWebContentsObserverTest, NullNavigationStartError) {
+ PageLoadTiming timing;
+ timing.parse_timing.parse_start = base::TimeDelta::FromMilliseconds(1);
+
+ content::WebContentsTester* web_contents_tester =
+ content::WebContentsTester::For(web_contents());
+
+ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
+ SimulateTimingUpdate(timing);
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ NavigateToUntrackedUrl();
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ ASSERT_EQ(1, CountCompleteTimingReported());
+
+ CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
+ CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1);
+ CheckTotalErrorEvents();
+
+ histogram_tester_.ExpectTotalCount(
+ page_load_metrics::internal::kPageLoadTimingStatus, 1);
+ histogram_tester_.ExpectBucketCount(
+ page_load_metrics::internal::kPageLoadTimingStatus,
+ page_load_metrics::internal::INVALID_NULL_NAVIGATION_START, 1);
+}
+
+TEST_F(MetricsWebContentsObserverTest, TimingOrderError) {
+ PageLoadTiming timing;
+ timing.navigation_start = base::Time::FromDoubleT(1);
+ timing.parse_timing.parse_stop = base::TimeDelta::FromMilliseconds(1);
+
+ content::WebContentsTester* web_contents_tester =
+ content::WebContentsTester::For(web_contents());
+
+ web_contents_tester->NavigateAndCommit(GURL(kDefaultTestUrl));
+ SimulateTimingUpdate(timing);
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ NavigateToUntrackedUrl();
+ ASSERT_EQ(0, CountUpdatedTimingReported());
+ ASSERT_EQ(1, CountCompleteTimingReported());
+
+ CheckErrorEvent(ERR_BAD_TIMING_IPC_INVALID_TIMING, 1);
+ CheckErrorEvent(ERR_NO_IPCS_RECEIVED, 1);
+ CheckTotalErrorEvents();
+
+ histogram_tester_.ExpectTotalCount(
+ page_load_metrics::internal::kPageLoadTimingStatus, 1);
+ histogram_tester_.ExpectBucketCount(
+ page_load_metrics::internal::kPageLoadTimingStatus,
+ page_load_metrics::internal::INVALID_ORDER_PARSE_START_PARSE_STOP, 1);
+}
+
TEST_F(MetricsWebContentsObserverTest, NotInMainError) {
PageLoadTiming timing;
timing.navigation_start = base::Time::FromDoubleT(1);
« no previous file with comments | « no previous file | chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698