Merge "Mark networks with OEM_PAID always restricted"

am: dbc568ceaf

Change-Id: I4ffcf01e1f79c8a3570ea2b819688b55904939fe
This commit is contained in:
Lorenzo Colitti
2018-03-30 08:47:25 +00:00
committed by android-build-merger
2 changed files with 34 additions and 8 deletions

View File

@@ -316,7 +316,7 @@ public final class NetworkCapabilities implements Parcelable {
/** /**
* Capabilities that suggest that a network is restricted. * Capabilities that suggest that a network is restricted.
* {@see #maybeMarkCapabilitiesRestricted}. * {@see #maybeMarkCapabilitiesRestricted}, {@see #FORCE_RESTRICTED_CAPABILITIES}
*/ */
@VisibleForTesting @VisibleForTesting
/* package */ static final long RESTRICTED_CAPABILITIES = /* package */ static final long RESTRICTED_CAPABILITIES =
@@ -327,7 +327,13 @@ public final class NetworkCapabilities implements Parcelable {
(1 << NET_CAPABILITY_IA) | (1 << NET_CAPABILITY_IA) |
(1 << NET_CAPABILITY_IMS) | (1 << NET_CAPABILITY_IMS) |
(1 << NET_CAPABILITY_RCS) | (1 << NET_CAPABILITY_RCS) |
(1 << NET_CAPABILITY_XCAP) | (1 << NET_CAPABILITY_XCAP);
/**
* Capabilities that force network to be restricted.
* {@see #maybeMarkCapabilitiesRestricted}.
*/
private static final long FORCE_RESTRICTED_CAPABILITIES =
(1 << NET_CAPABILITY_OEM_PAID); (1 << NET_CAPABILITY_OEM_PAID);
/** /**
@@ -532,16 +538,21 @@ public final class NetworkCapabilities implements Parcelable {
* @hide * @hide
*/ */
public void maybeMarkCapabilitiesRestricted() { public void maybeMarkCapabilitiesRestricted() {
// Check if we have any capability that forces the network to be restricted.
final boolean forceRestrictedCapability =
(mNetworkCapabilities & FORCE_RESTRICTED_CAPABILITIES) != 0;
// Verify there aren't any unrestricted capabilities. If there are we say // Verify there aren't any unrestricted capabilities. If there are we say
// the whole thing is unrestricted. // the whole thing is unrestricted unless it is forced to be restricted.
final boolean hasUnrestrictedCapabilities = final boolean hasUnrestrictedCapabilities =
((mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0;
// Must have at least some restricted capabilities. // Must have at least some restricted capabilities.
final boolean hasRestrictedCapabilities = final boolean hasRestrictedCapabilities =
((mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0;
if (hasRestrictedCapabilities && !hasUnrestrictedCapabilities) { if (forceRestrictedCapability
|| (hasRestrictedCapabilities && !hasUnrestrictedCapabilities)) {
removeCapability(NET_CAPABILITY_NOT_RESTRICTED); removeCapability(NET_CAPABILITY_NOT_RESTRICTED);
} }
} }

View File

@@ -273,14 +273,28 @@ public class NetworkCapabilitiesTest {
@Test @Test
public void testOemPaid() { public void testOemPaid() {
NetworkCapabilities nc = new NetworkCapabilities(); NetworkCapabilities nc = new NetworkCapabilities();
nc.maybeMarkCapabilitiesRestricted(); // By default OEM_PAID is neither in the unwanted or required lists and the network is not
// restricted.
assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PAID));
assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID));
nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Adding OEM_PAID to capability list should make network restricted.
nc.addCapability(NET_CAPABILITY_OEM_PAID); nc.addCapability(NET_CAPABILITY_OEM_PAID);
nc.addCapability(NET_CAPABILITY_INTERNET); // Combine with unrestricted capability.
nc.maybeMarkCapabilitiesRestricted(); nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); assertTrue(nc.hasCapability(NET_CAPABILITY_OEM_PAID));
assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Now let's make request for OEM_PAID network.
NetworkCapabilities nr = new NetworkCapabilities();
nr.addCapability(NET_CAPABILITY_OEM_PAID);
nr.maybeMarkCapabilitiesRestricted();
assertTrue(nr.satisfiedByNetworkCapabilities(nc));
// Request fails for network with the default capabilities.
assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities()));
} }
@Test @Test
@@ -295,7 +309,8 @@ public class NetworkCapabilitiesTest {
request.addUnwantedCapability(NET_CAPABILITY_WIFI_P2P); request.addUnwantedCapability(NET_CAPABILITY_WIFI_P2P);
request.addUnwantedCapability(NET_CAPABILITY_NOT_METERED); request.addUnwantedCapability(NET_CAPABILITY_NOT_METERED);
assertTrue(request.satisfiedByNetworkCapabilities(network)); assertTrue(request.satisfiedByNetworkCapabilities(network));
assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, NET_CAPABILITY_NOT_METERED}, assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P,
NET_CAPABILITY_NOT_METERED},
request.getUnwantedCapabilities()); request.getUnwantedCapabilities());
// This is a default capability, just want to make sure its there because we use it below. // This is a default capability, just want to make sure its there because we use it below.