Commit e6ea6f49 authored by Cliff Smolinsky's avatar Cliff Smolinsky Committed by Chromium LUCI CQ

Update interested callers to use GetConnectionCost()

This change updates a couple interested callers,
NearbyConnectionsManager and NetworkPredictionOptions, to use the new
NetworkChangeNotifier::GetConnectionCost() functionality. While this
change is functionally a no-op on non-Windows devices
(NearbyConnectionsManager is ChromeOS only), it provides a good example
for future callers to use the more appropriate method for the
functionality. In addition, if and when the concept of metered networks
becomes more flushed out for each platform these features will
automatically pick up the correct functionality.

Bug: 1143428
Change-Id: I9fac5f0a738a6abe70b9a7985aff854e52248ff2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2638111Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarDavid Schinazi <dschinazi@chromium.org>
Commit-Queue: Cliff Smolinsky <cliffsmo@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#845239}
parent b7abd767
...@@ -47,11 +47,12 @@ bool ShouldEnableWebRtc(DataUsage data_usage, PowerLevel power_level) { ...@@ -47,11 +47,12 @@ bool ShouldEnableWebRtc(DataUsage data_usage, PowerLevel power_level) {
return false; return false;
} }
// If the user wants to limit WebRTC, then only use it on unmetered networks. // If the user wants to limit WebRTC, then don't use it on metered networks.
if (data_usage == DataUsage::kWifiOnly && if (data_usage == DataUsage::kWifiOnly &&
net::NetworkChangeNotifier::IsConnectionCellular(connection_type)) { net::NetworkChangeNotifier::GetConnectionCost() ==
net::NetworkChangeNotifier::CONNECTION_COST_METERED) {
NS_LOG(VERBOSE) << __func__ << ": Do not use WebRTC with " << data_usage NS_LOG(VERBOSE) << __func__ << ": Do not use WebRTC with " << data_usage
<< " and a cellular conneciton."; << " and a metered connection.";
return false; return false;
} }
......
...@@ -494,11 +494,13 @@ TEST_P(NearbyConnectionsManagerImplTestConnectionMediums, ...@@ -494,11 +494,13 @@ TEST_P(NearbyConnectionsManagerImplTestConnectionMediums,
is_webrtc_enabled); is_webrtc_enabled);
network_notifier_->SetConnectionType(connection_type); network_notifier_->SetConnectionType(connection_type);
network_notifier_->SetUseDefaultConnectionCostImplementation(true);
should_use_web_rtc_ = should_use_web_rtc_ =
is_webrtc_enabled && data_usage != DataUsage::kOffline && is_webrtc_enabled && data_usage != DataUsage::kOffline &&
connection_type != net::NetworkChangeNotifier::CONNECTION_NONE && connection_type != net::NetworkChangeNotifier::CONNECTION_NONE &&
(data_usage != DataUsage::kWifiOnly || (data_usage != DataUsage::kWifiOnly ||
!net::NetworkChangeNotifier::IsConnectionCellular(connection_type)); (net::NetworkChangeNotifier::GetConnectionCost() !=
net::NetworkChangeNotifier::CONNECTION_COST_METERED));
// TODO(crbug.com/1129069): Update when WiFi LAN is supported. // TODO(crbug.com/1129069): Update when WiFi LAN is supported.
auto expected_mediums = MediumSelection::New( auto expected_mediums = MediumSelection::New(
...@@ -1298,12 +1300,14 @@ TEST_P(NearbyConnectionsManagerImplTestMediums, StartAdvertising_Options) { ...@@ -1298,12 +1300,14 @@ TEST_P(NearbyConnectionsManagerImplTestMediums, StartAdvertising_Options) {
is_webrtc_enabled); is_webrtc_enabled);
network_notifier_->SetConnectionType(connection_type); network_notifier_->SetConnectionType(connection_type);
network_notifier_->SetUseDefaultConnectionCostImplementation(true);
should_use_web_rtc_ = should_use_web_rtc_ =
is_webrtc_enabled && data_usage != DataUsage::kOffline && is_webrtc_enabled && data_usage != DataUsage::kOffline &&
power_level != PowerLevel::kLowPower && power_level != PowerLevel::kLowPower &&
connection_type != net::NetworkChangeNotifier::CONNECTION_NONE && connection_type != net::NetworkChangeNotifier::CONNECTION_NONE &&
(data_usage != DataUsage::kWifiOnly || (data_usage != DataUsage::kWifiOnly ||
!net::NetworkChangeNotifier::IsConnectionCellular(connection_type)); (net::NetworkChangeNotifier::GetConnectionCost() !=
net::NetworkChangeNotifier::CONNECTION_COST_METERED));
bool is_high_power = power_level == PowerLevel::kHighPower; bool is_high_power = power_level == PowerLevel::kHighPower;
......
...@@ -25,8 +25,8 @@ NetworkPredictionStatus CanPrefetchAndPrerender( ...@@ -25,8 +25,8 @@ NetworkPredictionStatus CanPrefetchAndPrerender(
case NETWORK_PREDICTION_WIFI_ONLY: case NETWORK_PREDICTION_WIFI_ONLY:
if (base::FeatureList::IsEnabled( if (base::FeatureList::IsEnabled(
features::kPredictivePrefetchingAllowedOnAllConnectionTypes) || features::kPredictivePrefetchingAllowedOnAllConnectionTypes) ||
!net::NetworkChangeNotifier::IsConnectionCellular( (net::NetworkChangeNotifier::GetConnectionCost() !=
net::NetworkChangeNotifier::GetConnectionType())) { net::NetworkChangeNotifier::CONNECTION_COST_METERED)) {
return NetworkPredictionStatus::ENABLED; return NetworkPredictionStatus::ENABLED;
} }
return NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK; return NetworkPredictionStatus::DISABLED_DUE_TO_NETWORK;
......
...@@ -266,11 +266,37 @@ class UnitTestPrerenderManager : public PrerenderManager { ...@@ -266,11 +266,37 @@ class UnitTestPrerenderManager : public PrerenderManager {
bool is_low_end_device_; bool is_low_end_device_;
}; };
class MockNetworkChangeNotifier4G : public net::NetworkChangeNotifier { class MockNetworkChangeNotifier4GMetered : public net::NetworkChangeNotifier {
public: public:
ConnectionType GetCurrentConnectionType() const override { ConnectionType GetCurrentConnectionType() const override {
return NetworkChangeNotifier::CONNECTION_4G; return NetworkChangeNotifier::CONNECTION_4G;
} }
ConnectionCost GetCurrentConnectionCost() override {
return NetworkChangeNotifier::CONNECTION_COST_METERED;
}
};
class MockNetworkChangeNotifier4GUnmetered : public net::NetworkChangeNotifier {
public:
ConnectionType GetCurrentConnectionType() const override {
return NetworkChangeNotifier::CONNECTION_4G;
}
ConnectionCost GetCurrentConnectionCost() override {
return NetworkChangeNotifier::CONNECTION_COST_UNMETERED;
}
};
class MockNetworkChangeNotifierWifiMetered : public net::NetworkChangeNotifier {
public:
ConnectionType GetCurrentConnectionType() const override {
return NetworkChangeNotifier::CONNECTION_WIFI;
}
ConnectionCost GetCurrentConnectionCost() override {
return NetworkChangeNotifier::CONNECTION_COST_METERED;
}
}; };
DummyPrerenderContents::DummyPrerenderContents( DummyPrerenderContents::DummyPrerenderContents(
...@@ -1180,9 +1206,11 @@ TEST_F(PrerenderTest, LinkRelAllowedOnCellular) { ...@@ -1180,9 +1206,11 @@ TEST_F(PrerenderTest, LinkRelAllowedOnCellular) {
EnablePrerender(); EnablePrerender();
GURL url("http://www.example.com"); GURL url("http://www.example.com");
std::unique_ptr<net::NetworkChangeNotifier> mock( std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifier4G); new MockNetworkChangeNotifier4GMetered);
EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType())); net::NetworkChangeNotifier::GetConnectionType()));
EXPECT_EQ(net::NetworkChangeNotifier::CONNECTION_COST_METERED,
net::NetworkChangeNotifier::GetConnectionCost());
DummyPrerenderContents* prerender_contents = DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents( prerender_manager()->CreateNextPrerenderContents(
url, url::Origin::Create(GURL("https://www.notexample.com")), url, url::Origin::Create(GURL("https://www.notexample.com")),
...@@ -1200,9 +1228,59 @@ TEST_F(PrerenderTest, LinkRelAllowedOnCellular) { ...@@ -1200,9 +1228,59 @@ TEST_F(PrerenderTest, LinkRelAllowedOnCellular) {
TEST_F(PrerenderTest, PrerenderNotAllowedOnCellularWithExternalOrigin) { TEST_F(PrerenderTest, PrerenderNotAllowedOnCellularWithExternalOrigin) {
EnablePrerender(); EnablePrerender();
std::unique_ptr<net::NetworkChangeNotifier> mock( std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifier4G); new MockNetworkChangeNotifier4GMetered);
EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType()));
EXPECT_EQ(net::NetworkChangeNotifier::CONNECTION_COST_METERED,
net::NetworkChangeNotifier::GetConnectionCost());
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, base::nullopt, ORIGIN_EXTERNAL_REQUEST,
FINAL_STATUS_PROFILE_DESTROYED);
std::unique_ptr<PrerenderHandle> prerender_handle(
prerender_manager()->AddPrerenderFromExternalRequest(
url, content::Referrer(), nullptr, gfx::Rect(kDefaultViewSize)));
EXPECT_TRUE(prerender_handle);
EXPECT_TRUE(prerender_contents->prerendering_has_started());
histogram_tester().ExpectTotalCount("Prerender.FinalStatus", 0);
}
// Verify that the external prerender requests are allowed on unmetered cellular
// connection when kPredictivePrefetchingAllowedOnAllConnectionTypes feature is
// not enabled.
TEST_F(PrerenderTest, PrerenderAllowedOnUnmeteredCellularWithExternalOrigin) {
EnablePrerender();
std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifier4GUnmetered);
EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType())); net::NetworkChangeNotifier::GetConnectionType()));
EXPECT_EQ(net::NetworkChangeNotifier::CONNECTION_COST_UNMETERED,
net::NetworkChangeNotifier::GetConnectionCost());
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
url, base::nullopt, ORIGIN_EXTERNAL_REQUEST,
FINAL_STATUS_PROFILE_DESTROYED);
std::unique_ptr<PrerenderHandle> prerender_handle(
prerender_manager()->AddPrerenderFromExternalRequest(
url, content::Referrer(), nullptr, gfx::Rect(kDefaultViewSize)));
EXPECT_TRUE(prerender_handle);
EXPECT_TRUE(prerender_contents->prerendering_has_started());
histogram_tester().ExpectTotalCount("Prerender.FinalStatus", 0);
}
// Verify that the external prerender requests are not allowed on metered wifi
// connection when kPredictivePrefetchingAllowedOnAllConnectionTypes feature is
// not enabled.
TEST_F(PrerenderTest, PrerenderNotAllowedOnMeteredWifiWithExternalOrigin) {
EnablePrerender();
std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifierWifiMetered);
EXPECT_FALSE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType()));
EXPECT_EQ(net::NetworkChangeNotifier::CONNECTION_COST_METERED,
net::NetworkChangeNotifier::GetConnectionCost());
GURL url("http://www.google.com/"); GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents = DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents( prerender_manager()->CreateNextPrerenderContents(
...@@ -1227,7 +1305,7 @@ TEST_F( ...@@ -1227,7 +1305,7 @@ TEST_F(
features::kPredictivePrefetchingAllowedOnAllConnectionTypes); features::kPredictivePrefetchingAllowedOnAllConnectionTypes);
EnablePrerender(); EnablePrerender();
std::unique_ptr<net::NetworkChangeNotifier> mock( std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifier4G); new MockNetworkChangeNotifier4GMetered);
EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType())); net::NetworkChangeNotifier::GetConnectionType()));
GURL url("http://www.google.com/"); GURL url("http://www.google.com/");
...@@ -1248,7 +1326,7 @@ TEST_F( ...@@ -1248,7 +1326,7 @@ TEST_F(
TEST_F(PrerenderTest, PrerenderAllowedForForcedCellular) { TEST_F(PrerenderTest, PrerenderAllowedForForcedCellular) {
EnablePrerender(); EnablePrerender();
std::unique_ptr<net::NetworkChangeNotifier> mock( std::unique_ptr<net::NetworkChangeNotifier> mock(
new MockNetworkChangeNotifier4G); new MockNetworkChangeNotifier4GMetered);
EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular( EXPECT_TRUE(net::NetworkChangeNotifier::IsConnectionCellular(
net::NetworkChangeNotifier::GetConnectionType())); net::NetworkChangeNotifier::GetConnectionType()));
GURL url("http://www.google.com/"); GURL url("http://www.google.com/");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment