Index: chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc |
diff --git a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc |
index e5bf87d86105f263d3d4c366d057e3f0fa5365d6..fa4dc6c4b5a86bce6a56722c6493212c6125cc9a 100644 |
--- a/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc |
+++ b/chrome/browser/page_load_metrics/observers/ukm_page_load_metrics_observer_unittest.cc |
@@ -12,24 +12,47 @@ |
#include "components/ukm/test_ukm_service.h" |
#include "components/ukm/ukm_entry.h" |
#include "components/ukm/ukm_source.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+ |
+using testing::AnyNumber; |
+using testing::Mock; |
+using testing::Return; |
namespace { |
const char kTestUrl1[] = "https://www.google.com/"; |
const char kTestUrl2[] = "https://www.example.com/"; |
+class MockNetworkQualityProvider |
+ : public net::NetworkQualityEstimator::NetworkQualityProvider { |
+ public: |
+ MOCK_CONST_METHOD0(GetEffectiveConnectionType, |
+ net::EffectiveConnectionType()); |
+ MOCK_METHOD1( |
+ AddEffectiveConnectionTypeObserver, |
+ void(net::NetworkQualityEstimator::EffectiveConnectionTypeObserver*)); |
+ MOCK_METHOD1( |
+ RemoveEffectiveConnectionTypeObserver, |
+ void(net::NetworkQualityEstimator::EffectiveConnectionTypeObserver*)); |
+}; |
+ |
} // namespace |
class UkmPageLoadMetricsObserverTest |
: public page_load_metrics::PageLoadMetricsObserverTestHarness { |
protected: |
void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { |
- tracker->AddObserver(base::MakeUnique<UkmPageLoadMetricsObserver>()); |
+ tracker->AddObserver(base::MakeUnique<UkmPageLoadMetricsObserver>( |
+ &mock_network_quality_provider_)); |
} |
void SetUp() override { |
page_load_metrics::PageLoadMetricsObserverTestHarness::SetUp(); |
+ EXPECT_CALL(mock_network_quality_provider_, GetEffectiveConnectionType()) |
+ .Times(AnyNumber()) |
+ .WillRepeatedly(Return(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN)); |
+ |
TestingBrowserProcess::GetGlobal()->SetUkmService( |
ukm_service_test_harness_.test_ukm_service()); |
} |
@@ -42,6 +65,10 @@ class UkmPageLoadMetricsObserverTest |
return ukm_service_test_harness_.test_ukm_service()->entries_count(); |
} |
+ MockNetworkQualityProvider& mock_network_quality_provider() { |
+ return mock_network_quality_provider_; |
+ } |
+ |
const ukm::UkmSource* GetUkmSource(size_t source_index) { |
return ukm_service_test_harness_.test_ukm_service()->GetSource( |
source_index); |
@@ -118,6 +145,7 @@ class UkmPageLoadMetricsObserverTest |
} |
private: |
+ MockNetworkQualityProvider mock_network_quality_provider_; |
ukm::UkmServiceTestingHarness ukm_service_test_harness_; |
}; |
@@ -250,3 +278,26 @@ TEST_F(UkmPageLoadMetricsObserverTest, MultiplePageLoads) { |
EXPECT_TRUE( |
HasMetric(internal::kUkmForegroundDurationName, entry2_proto.metrics())); |
} |
+ |
+TEST_F(UkmPageLoadMetricsObserverTest, EffectiveConnectionType) { |
+ EXPECT_CALL(mock_network_quality_provider(), GetEffectiveConnectionType()) |
+ .WillRepeatedly(Return(net::EFFECTIVE_CONNECTION_TYPE_3G)); |
+ |
+ NavigateAndCommit(GURL(kTestUrl1)); |
+ |
+ // Simulate closing the tab. |
+ DeleteContents(); |
+ |
+ EXPECT_EQ(1ul, ukm_source_count()); |
+ const ukm::UkmSource* source = GetUkmSource(0); |
+ EXPECT_EQ(GURL(kTestUrl1), source->url()); |
+ |
+ EXPECT_GE(ukm_entry_count(), 1ul); |
+ ukm::Entry entry_proto = GetMergedEntryProtoForSourceID(source->id()); |
+ EXPECT_EQ(entry_proto.source_id(), source->id()); |
+ EXPECT_EQ(entry_proto.event_hash(), |
+ base::HashMetricName(internal::kUkmPageLoadEventName)); |
+ EXPECT_FALSE(entry_proto.metrics().empty()); |
+ ExpectMetric(internal::kUkmEffectiveConnectionType, |
+ net::EFFECTIVE_CONNECTION_TYPE_3G, entry_proto.metrics()); |
+} |