Merge "Allow NetworkAgent "immutable updates" to NetworkCapabilities" into oc-mr1-dev
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 0b92893..4bb8844 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -770,7 +770,6 @@
StringJoiner joiner = new StringJoiner(", ");
- // TODO: consider only enforcing that capabilities are not removed, allowing addition.
// Ignore NOT_METERED being added or removed as it is effectively dynamic. http://b/63326103
// TODO: properly support NOT_METERED as a mutable and requestable capability.
final long mask = ~MUTABLE_CAPABILITIES & ~(1 << NET_CAPABILITY_NOT_METERED);
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index ac41079..5110929 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -4582,11 +4582,15 @@
*/
private void updateCapabilities(
int oldScore, NetworkAgentInfo nai, NetworkCapabilities networkCapabilities) {
- // Sanity check: a NetworkAgent should not change its static capabilities or parameters.
- if (nai.everConnected) {
+ // Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
+ if (nai.everConnected &&
+ !nai.networkCapabilities.satisfiedByNetworkCapabilities(networkCapabilities)) {
+ // TODO: consider not complaining when a network agent degrade its capabilities if this
+ // does not cause any request (that is not a listen) currently matching that agent to
+ // stop being matched by the updated agent.
String diff = nai.networkCapabilities.describeImmutableDifferences(networkCapabilities);
if (!TextUtils.isEmpty(diff)) {
- Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities:" + diff);
+ Slog.wtf(TAG, "BUG: " + nai + " lost immutable capabilities:" + diff);
}
}