diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-06-19 01:08:12 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2011-06-19 01:08:12 -0700 |
commit | b09540f33a6cabe50edec0ef32d0b1d0b0d96fff (patch) | |
tree | c185b8dd5cd0ad100803547c684c74c59346bc5c /services/java/com/android/server/net/NetworkPolicyManagerService.java | |
parent | 1b5a2a96f793211bfbd39aa29cc41031dfa23950 (diff) | |
download | frameworks_base-b09540f33a6cabe50edec0ef32d0b1d0b0d96fff.zip frameworks_base-b09540f33a6cabe50edec0ef32d0b1d0b0d96fff.tar.gz frameworks_base-b09540f33a6cabe50edec0ef32d0b1d0b0d96fff.tar.bz2 |
Handle removed UIDs in network stats and policy.
When UID_REMOVED, clean up any existing UID network policy so it
doesn't linger for future apps. Also move any NetworkStatsHistory
to special UID_REMOVED tracking bucket.
Tests for new removal code. Also test detailed UID stats, including
network changes to verify template matching logic.
Bug: 4584212
Change-Id: I9faadf6b6f3830eb45d86c7f1980a27cdbcdb11e
Diffstat (limited to 'services/java/com/android/server/net/NetworkPolicyManagerService.java')
-rw-r--r-- | services/java/com/android/server/net/NetworkPolicyManagerService.java | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index ada9ba4..55d83a5 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -22,6 +22,8 @@ import static android.Manifest.permission.MANAGE_APP_TOKENS; import static android.Manifest.permission.MANAGE_NETWORK_POLICY; import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY; import static android.Manifest.permission.READ_PHONE_STATE; +import static android.content.Intent.ACTION_UID_REMOVED; +import static android.content.Intent.EXTRA_UID; import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; import static android.net.ConnectivityManager.TYPE_MOBILE; import static android.net.NetworkPolicy.LIMIT_DISABLED; @@ -247,9 +249,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mContext.registerReceiver(mScreenReceiver, screenFilter); // watch for network interfaces to be claimed - final IntentFilter ifaceFilter = new IntentFilter(); - ifaceFilter.addAction(CONNECTIVITY_ACTION); - mContext.registerReceiver(mIfaceReceiver, ifaceFilter, CONNECTIVITY_INTERNAL, mHandler); + final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION); + mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler); + + // listen for uid removal to clean policy + final IntentFilter removedFilter = new IntentFilter(ACTION_UID_REMOVED); + mContext.registerReceiver(mRemovedReceiver, removedFilter, null, mHandler); // listen for warning polling events; currently dispatched by final IntentFilter statsFilter = new IntentFilter(ACTION_NETWORK_STATS_UPDATED); @@ -312,6 +317,21 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } }; + private BroadcastReceiver mRemovedReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + // on background handler thread, and UID_REMOVED is protected + // broadcast. + final int uid = intent.getIntExtra(EXTRA_UID, 0); + synchronized (mRulesLock) { + // remove any policy and update rules to clean up + mUidPolicy.delete(uid); + updateRulesForUidLocked(uid); + writePolicyLocked(); + } + } + }; + /** * Receiver that watches for {@link INetworkStatsService} updates, which we * use to check against {@link NetworkPolicy#warningBytes}. @@ -473,7 +493,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { * Receiver that watches for {@link IConnectivityManager} to claim network * interfaces. Used to apply {@link NetworkPolicy} to matching networks. */ - private BroadcastReceiver mIfaceReceiver = new BroadcastReceiver() { + private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // on background handler thread, and verified CONNECTIVITY_INTERNAL |