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

Unified Diff: chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc

Issue 2457583007: [PageLoadMetrics] Create page load timing metrics for H2/QUIC/H1 pages (Closed)
Patch Set: Fix test Created 4 years, 2 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
Index: chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc
diff --git a/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..47778f6eba865aa921ada8e70f5eae16b3606197
--- /dev/null
+++ b/chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer_unittest.cc
@@ -0,0 +1,110 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_observer.h"
+
+#include "base/memory/ptr_util.h"
+#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
+
+class ProtocolPageLoadMetricsObserverTest
+ : public page_load_metrics::PageLoadMetricsObserverTestHarness {
+ protected:
+ void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
+ std::unique_ptr<ProtocolPageLoadMetricsObserver> observer =
+ base::MakeUnique<ProtocolPageLoadMetricsObserver>();
+ observer_ = observer.get();
+ tracker->AddObserver(std::move(observer));
+ }
+
+ void InitializeTestPageLoadTiming(page_load_metrics::PageLoadTiming* timing) {
+ timing->navigation_start = base::Time::FromDoubleT(1);
+ timing->parse_start = base::TimeDelta::FromMilliseconds(100);
+ timing->first_paint = base::TimeDelta::FromMilliseconds(200);
+ timing->first_contentful_paint = base::TimeDelta::FromMilliseconds(300);
+ timing->first_meaningful_paint = base::TimeDelta::FromMilliseconds(400);
+ timing->dom_content_loaded_event_start =
+ base::TimeDelta::FromMilliseconds(600);
+ timing->load_event_start = base::TimeDelta::FromMilliseconds(1000);
+ PopulateRequiredTimingFields(timing);
+ }
+
+ void SimulateNavigation(
+ net::HttpResponseInfo::ConnectionInfo connection_info) {
+ NavigateAndCommit(GURL("http://google.com"));
+
+ // Force the ConnectionInfo that the observer received from the
+ // NavigationHandle.
+ observer_->connection_info_ = connection_info;
+
+ page_load_metrics::PageLoadTiming timing;
+ InitializeTestPageLoadTiming(&timing);
+ SimulateTimingUpdate(timing);
+
+ // Navigate again to force OnComplete, which happens when a new navigation
+ // occurs.
+ NavigateAndCommit(GURL("http://example.com"));
+ }
+
+ int CountTotalProtocolMetricsRecorded() {
+ int count = 0;
+
+ base::HistogramTester::CountsMap counts_map =
+ histogram_tester().GetTotalCountsForPrefix(
+ "PageLoad.Clients.Protocol.");
+ for (const auto& entry : counts_map)
+ count += entry.second;
+ return count;
+ }
+
+ void CheckHistograms(int expected_count, const std::string& protocol) {
+ EXPECT_EQ(expected_count, CountTotalProtocolMetricsRecorded());
+ if (expected_count == 0)
+ return;
+
+ std::string prefix = "PageLoad.Clients.Protocol.";
+ prefix += protocol;
+
+ histogram_tester().ExpectTotalCount(
+ prefix + ".PaintTiming.ParseStartToFirstContentfulPaint", 1);
+ histogram_tester().ExpectTotalCount(
+ prefix + ".Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint",
+ 1);
+ histogram_tester().ExpectTotalCount(
+ prefix + ".DocumentTiming.NavigationToDOMContentLoadedEventFired", 1);
+ histogram_tester().ExpectTotalCount(
+ prefix + ".DocumentTiming.NavigationToLoadEventFired", 1);
+ }
+
+ ProtocolPageLoadMetricsObserver* observer_;
+};
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, H11Navigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_HTTP1_1);
+ CheckHistograms(4, "H1");
+}
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, H10Navigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_HTTP1_0);
+ CheckHistograms(0, "");
+}
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, H09Navigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_HTTP0_9);
+ CheckHistograms(0, "");
+}
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, H2Navigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_HTTP2);
+ CheckHistograms(4, "H2");
+}
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, QuicNavigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_QUIC);
+ CheckHistograms(4, "QUIC");
+}
+
+TEST_F(ProtocolPageLoadMetricsObserverTest, UnknownNavigation) {
+ SimulateNavigation(net::HttpResponseInfo::CONNECTION_INFO_UNKNOWN);
+ CheckHistograms(0, "");
+}

Powered by Google App Engine
This is Rietveld 408576698