Merge "Validate OEM_PAID networks"
diff --git a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
index 981a576..61e3174 100644
--- a/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
+++ b/common/moduleutils/src/android/net/shared/NetworkMonitorUtils.java
@@ -19,6 +19,7 @@
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
import static android.net.NetworkCapabilities.TRANSPORT_BLUETOOTH;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
@@ -61,7 +62,8 @@
// TODO: Consider requiring validation for DUN networks.
if (nc.hasCapability(NET_CAPABILITY_INTERNET)
- && nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)
+ && (nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)
+ || nc.hasCapability(NET_CAPABILITY_OEM_PAID))
&& nc.hasCapability(NET_CAPABILITY_TRUSTED)) {
// Real networks
return true;
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index af21851..8950938 100755
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -33,6 +33,7 @@
import static android.net.INetworkMonitor.NETWORK_VALIDATION_RESULT_PARTIAL;
import static android.net.INetworkMonitor.NETWORK_VALIDATION_RESULT_VALID;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
import static android.net.captiveportal.CaptivePortalProbeSpec.parseCaptivePortalProbeSpecs;
import static android.net.metrics.ValidationProbeEvent.DNS_FAILURE;
import static android.net.metrics.ValidationProbeEvent.DNS_SUCCESS;
@@ -671,6 +672,7 @@
(Pair<LinkProperties, NetworkCapabilities>) connectedMsg.obj;
mLinkProperties = attrs.first;
mNetworkCapabilities = attrs.second;
+ suppressNotificationIfNetworkRestricted();
}
/**
@@ -735,6 +737,12 @@
return NetworkMonitorUtils.isPrivateDnsValidationRequired(mNetworkCapabilities);
}
+ private void suppressNotificationIfNetworkRestricted() {
+ if (!mNetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)) {
+ mDontDisplaySigninNotification = true;
+ }
+ }
+
private void notifyNetworkTested(NetworkTestResultParcelable result) {
try {
if (mCallbackVersion <= 5) {
@@ -984,6 +992,7 @@
break;
case EVENT_NETWORK_CAPABILITIES_CHANGED:
mNetworkCapabilities = (NetworkCapabilities) message.obj;
+ suppressNotificationIfNetworkRestricted();
break;
default:
break;
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
index 4dcccbd..0de2965 100644
--- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
+++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -28,6 +28,8 @@
import static android.net.INetworkMonitor.NETWORK_VALIDATION_RESULT_VALID;
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
@@ -318,6 +320,14 @@
private static final NetworkCapabilities CELL_NO_INTERNET_CAPABILITIES =
new NetworkCapabilities().addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
+ private static final NetworkCapabilities WIFI_OEM_PAID_CAPABILITIES =
+ new NetworkCapabilities()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .addCapability(NET_CAPABILITY_INTERNET)
+ .addCapability(NET_CAPABILITY_NOT_METERED)
+ .addCapability(NET_CAPABILITY_OEM_PAID)
+ .removeCapability(NET_CAPABILITY_NOT_RESTRICTED);
+
/**
* Fakes DNS responses.
*
@@ -2635,6 +2645,61 @@
ConnectivityManager.EXTRA_NETWORK)).netId));
}
+ @Test
+ public void testOemPaidNetworkValidated() throws Exception {
+ setValidProbes();
+
+ final NetworkMonitor nm = runNetworkTest(TEST_LINK_PROPERTIES,
+ WIFI_OEM_PAID_CAPABILITIES,
+ NETWORK_VALIDATION_RESULT_VALID,
+ NETWORK_VALIDATION_PROBE_DNS | NETWORK_VALIDATION_PROBE_HTTPS,
+ null /* redirectUrl */);
+ assertEquals(NETWORK_VALIDATION_RESULT_VALID,
+ nm.getEvaluationState().getEvaluationResult());
+ }
+
+ @Test
+ public void testOemPaidNetwork_AllProbesFailed() throws Exception {
+ setSslException(mHttpsConnection);
+ setStatus(mHttpConnection, 500);
+ setStatus(mFallbackConnection, 404);
+
+ runNetworkTest(TEST_LINK_PROPERTIES,
+ WIFI_OEM_PAID_CAPABILITIES,
+ VALIDATION_RESULT_INVALID, 0 /* probesSucceeded */, null /* redirectUrl */);
+ }
+
+ @Test
+ public void testOemPaidNetworkNoInternetCapabilityValidated() throws Exception {
+ setSslException(mHttpsConnection);
+ setStatus(mHttpConnection, 500);
+ setStatus(mFallbackConnection, 404);
+
+ final NetworkCapabilities networkCapabilities =
+ new NetworkCapabilities(WIFI_OEM_PAID_CAPABILITIES);
+ networkCapabilities.removeCapability(NET_CAPABILITY_INTERNET);
+ runNetworkTest(TEST_LINK_PROPERTIES, networkCapabilities,
+ NETWORK_VALIDATION_RESULT_VALID, 0 /* probesSucceeded */, null /* redirectUrl */);
+
+ verify(mCleartextDnsNetwork, never()).openConnection(any());
+ verify(mHttpsConnection, never()).getResponseCode();
+ verify(mHttpConnection, never()).getResponseCode();
+ verify(mFallbackConnection, never()).getResponseCode();
+ }
+
+ @Test
+ public void testOemPaidNetwork_CaptivePortalNotLaunched() throws Exception {
+ setSslException(mHttpsConnection);
+ setStatus(mFallbackConnection, 404);
+ setPortal302(mHttpConnection);
+
+ runNetworkTest(TEST_LINK_PROPERTIES, WIFI_OEM_PAID_CAPABILITIES,
+ VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */,
+ TEST_LOGIN_URL);
+
+ verify(mCallbacks, never()).showProvisioningNotification(any(), any());
+ }
+
private void setupResourceForMultipleProbes() {
// Configure the resource to send multiple probe.
when(mResources.getStringArray(R.array.config_captive_portal_https_urls))