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

Commit 09940f74 authored by Chiachang Wang's avatar Chiachang Wang Committed by Gerrit Code Review
Browse files

Merge changes from topics "RefactorIR", "appExclusionPrefix", "reStartVpnProfile"

* changes:
  Update method visibility for testing
  Stop VPN profiles by exiting VpnRunner instead of prepareInternal
  Update the prefix in keystore for app exclusion
parents 87daf9f5 df28c2b1
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -769,8 +769,7 @@ public class VpnManagerService extends IVpnManager.Stub {
        }
    };

    @VisibleForTesting
    void onUserStarted(int userId) {
    private void onUserStarted(int userId) {
        synchronized (mVpns) {
            Vpn userVpn = mVpns.get(userId);
            if (userVpn != null) {
@@ -854,8 +853,7 @@ public class VpnManagerService extends IVpnManager.Stub {
        }
    }

    @VisibleForTesting
    void onPackageRemoved(String packageName, int uid, boolean isReplacing) {
    private void onPackageRemoved(String packageName, int uid, boolean isReplacing) {
        if (TextUtils.isEmpty(packageName) || uid < 0) {
            Log.wtf(TAG, "Invalid package in onPackageRemoved: " + packageName + " | " + uid);
            return;
@@ -878,8 +876,7 @@ public class VpnManagerService extends IVpnManager.Stub {
        }
    }

    @VisibleForTesting
    void onPackageAdded(String packageName, int uid, boolean isReplacing) {
    private void onPackageAdded(String packageName, int uid, boolean isReplacing) {
        if (TextUtils.isEmpty(packageName) || uid < 0) {
            Log.wtf(TAG, "Invalid package in onPackageAdded: " + packageName + " | " + uid);
            return;
+22 −15
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ public class Vpn {
    private static final boolean LOGD = true;
    private static final String ANDROID_KEYSTORE_PROVIDER = "AndroidKeyStore";
    /** Key containing prefix of vpn app excluded list */
    @VisibleForTesting static final String VPN_APP_EXCLUDED = "VPN_APP_EXCLUDED_";
    @VisibleForTesting static final String VPN_APP_EXCLUDED = "VPNAPPEXCLUDED_";

    // Length of time (in milliseconds) that an app hosting an always-on VPN is placed on
    // the device idle allowlist during service launch and VPN bootstrap.
@@ -1182,20 +1182,9 @@ public class Vpn {
                cleanupVpnStateLocked();
            } else if (mVpnRunner != null) {
                if (!VpnConfig.LEGACY_VPN.equals(mPackage)) {
                    mAppOpsManager.finishOp(
                            AppOpsManager.OPSTR_ESTABLISH_VPN_MANAGER, mOwnerUID, mPackage, null);
                    // The underlying network, NetworkCapabilities and LinkProperties are not
                    // necessary to send to VPN app since the purpose of this event is to notify
                    // VPN app that VPN is deactivated by the user.
                    // TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
                    //  ConnectivityServiceTest.
                    if (SdkLevel.isAtLeastT()) {
                        sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
                                -1 /* errorClass */, -1 /* errorCode*/, mPackage,
                                getSessionKeyLocked(), makeVpnProfileStateLocked(),
                                null /* underlyingNetwork */, null /* nc */, null /* lp */);
                    }
                    notifyVpnManagerVpnStopped(mPackage, mOwnerUID);
                }

                // cleanupVpnStateLocked() is called from mVpnRunner.exit()
                mVpnRunner.exit();
            }
@@ -4043,7 +4032,25 @@ public class Vpn {
        // To stop the VPN profile, the caller must be the current prepared package and must be
        // running an Ikev2VpnProfile.
        if (isCurrentIkev2VpnLocked(packageName)) {
            prepareInternal(VpnConfig.LEGACY_VPN);
            notifyVpnManagerVpnStopped(packageName, mOwnerUID);

            mVpnRunner.exit();
        }
    }

    private synchronized void notifyVpnManagerVpnStopped(String packageName, int ownerUID) {
        mAppOpsManager.finishOp(
                AppOpsManager.OPSTR_ESTABLISH_VPN_MANAGER, ownerUID, packageName, null);
        // The underlying network, NetworkCapabilities and LinkProperties are not
        // necessary to send to VPN app since the purpose of this event is to notify
        // VPN app that VPN is deactivated by the user.
        // TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
        //  ConnectivityServiceTest.
        if (SdkLevel.isAtLeastT()) {
            sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
                    -1 /* errorClass */, -1 /* errorCode*/, packageName,
                    getSessionKeyLocked(), makeVpnProfileStateLocked(),
                    null /* underlyingNetwork */, null /* nc */, null /* lp */);
        }
    }