Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1343a21 authored by Chalard Jean's avatar Chalard Jean
Browse files

Remove per-user preference when the user is removed

Test: new test for this
Change-Id: I335e82e29ec8f4c8da9def8b40153858cfd5bacb
parent 0176e890
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -5124,6 +5124,9 @@ public class ConnectivityService extends IConnectivityManager.Stub

    private void onUserRemoved(UserHandle user) {
        mPermissionMonitor.onUserRemoved(user);
        // If there was a network preference for this user, remove it.
        handleSetProfileNetworkPreference(new ProfileNetworkPreferences.Preference(user, null),
                null /* listener */);
        if (mOemNetworkPreferences.getNetworkPreferences().size() > 0) {
            handleSetOemNetworkPreference(mOemNetworkPreferences, null);
        }
@@ -9237,7 +9240,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
        // touched on the handler thread, it's theoretically not impossible that it has changed
        // since.
        if (!mOemNetworkPreferences.isEmpty()) {
            logwtf("handleSetProfileNetworkPreference, but OEM network preferences not empty");
            // This may happen on a device with an OEM preference set when a user is removed.
            // In this case, it's safe to ignore. In particular this happens in the tests.
            loge("handleSetProfileNetworkPreference, but OEM network preferences not empty");
            return;
        }

+25 −0
Original line number Diff line number Diff line
@@ -11488,6 +11488,31 @@ public class ConnectivityServiceTest {
        // Other callbacks will be unregistered by tearDown()
    }
    @Test
    public void testProfilePreferenceRemovedUponUserRemoved() throws Exception {
        final InOrder inOrder = inOrder(mMockNetd);
        final UserHandle testHandle = setupEnterpriseNetwork();
        mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
        mCellNetworkAgent.connect(true);
        final TestOnCompleteListener listener = new TestOnCompleteListener();
        mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
                r -> r.run(), listener);
        listener.expectOnComplete();
        inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
                INetd.PERMISSION_NONE);
        inOrder.verify(mMockNetd).networkAddUidRanges(mCellNetworkAgent.getNetwork().netId,
                uidRangeFor(testHandle));
        final Intent removedIntent = new Intent(ACTION_USER_REMOVED);
        removedIntent.putExtra(Intent.EXTRA_USER, testHandle);
        processBroadcast(removedIntent);
        inOrder.verify(mMockNetd).networkRemoveUidRanges(mCellNetworkAgent.getNetwork().netId,
                uidRangeFor(testHandle));
    }
    /**
     * Make sure that OEM preference and per-profile preference can't be used at the same
     * time and throw ISE if tried