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

Commit 765accac authored by Reema Bajwa's avatar Reema Bajwa Committed by Android (Google) Code Review
Browse files

Merge "Add locking to CredentialManagerServiceImpl Test: Built & deployed locally Bug: 253155340"

parents f157e894 72b9348d
Loading
Loading
Loading
Loading
+14 −12
Original line number Original line Diff line number Diff line
@@ -112,8 +112,9 @@ public final class CredentialManagerService
                continue;
                continue;
            }
            }
            try {
            try {
                serviceList.add(
                serviceList.add(new CredentialManagerServiceImpl(this, mLock,
                        new CredentialManagerServiceImpl(this, mLock, resolvedUserId, serviceName));
                        resolvedUserId,
                        serviceName));
            } catch (PackageManager.NameNotFoundException | SecurityException e) {
            } catch (PackageManager.NameNotFoundException | SecurityException e) {
                Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage());
                Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage());
            }
            }
@@ -137,15 +138,16 @@ public final class CredentialManagerService
        }
        }
    }
    }


    @SuppressWarnings("GuardedBy") // ErrorProne requires initiateProviderSessionForRequestLocked
    // to be guarded by 'service.mLock', which is the same as mLock.
    private List<ProviderSession> initiateProviderSessions(
    private List<ProviderSession> initiateProviderSessions(
            RequestSession session, List<String> requestOptions) {
            RequestSession session, List<String> requestOptions) {
        List<ProviderSession> providerSessions = new ArrayList<>();
        List<ProviderSession> providerSessions = new ArrayList<>();
        // Invoke all services of a user to initiate a provider session
        // Invoke all services of a user to initiate a provider session
        runForUser(
        runForUser((service) -> {
                (service) -> {
            synchronized (mLock) {
                    if (service.isServiceCapable(requestOptions)) {
                ProviderSession providerSession = service
                        ProviderSession providerSession =
                        .initiateProviderSessionForRequestLocked(session, requestOptions);
                                service.initiateProviderSessionForRequest(session);
                if (providerSession != null) {
                if (providerSession != null) {
                    providerSessions.add(providerSession);
                    providerSessions.add(providerSession);
                }
                }
+26 −11
Original line number Original line Diff line number Diff line
@@ -22,8 +22,10 @@ import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo;
import android.service.credentials.CredentialProviderInfo;
import android.service.credentials.CredentialProviderInfo;
import android.util.Log;
import android.util.Slog;
import android.util.Slog;


import com.android.internal.annotations.GuardedBy;
import com.android.server.infra.AbstractPerUserSystemService;
import com.android.server.infra.AbstractPerUserSystemService;


import java.util.List;
import java.util.List;
@@ -37,26 +39,33 @@ public final class CredentialManagerServiceImpl extends
    private static final String TAG = "CredManSysServiceImpl";
    private static final String TAG = "CredManSysServiceImpl";


    // TODO(b/210531) : Make final when update flow is fixed
    // TODO(b/210531) : Make final when update flow is fixed
    private ComponentName mRemoteServiceComponentName;
    @GuardedBy("mLock")
    private CredentialProviderInfo mInfo;
    private CredentialProviderInfo mInfo;


    public CredentialManagerServiceImpl(
    CredentialManagerServiceImpl(
            @NonNull CredentialManagerService master,
            @NonNull CredentialManagerService master,
            @NonNull Object lock, int userId, String serviceName)
            @NonNull Object lock, int userId, String serviceName)
            throws PackageManager.NameNotFoundException {
            throws PackageManager.NameNotFoundException {
        super(master, lock, userId);
        super(master, lock, userId);
        Slog.i(TAG, "in CredentialManagerServiceImpl cons");
        Log.i(TAG, "in CredentialManagerServiceImpl constructed with: " + serviceName);
        // TODO : Replace with newServiceInfoLocked after confirming behavior
        synchronized (mLock) {
        mRemoteServiceComponentName = ComponentName.unflattenFromString(serviceName);
            newServiceInfoLocked(ComponentName.unflattenFromString(serviceName));
        mInfo = new CredentialProviderInfo(getContext(), mRemoteServiceComponentName, mUserId);
        }
    }
    }


    @Override // from PerUserSystemService
    @Override // from PerUserSystemService
    @GuardedBy("mLock")
    protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent)
    protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent)
            throws PackageManager.NameNotFoundException {
            throws PackageManager.NameNotFoundException {
        // TODO : Test update flows with multiple providers
        // TODO : Test update flows with multiple providers
        Slog.i(TAG , "newServiceInfoLocked with : " + serviceComponent.getPackageName());
        if (mInfo != null) {
        mRemoteServiceComponentName = serviceComponent;
            Log.i(TAG, "newServiceInfoLocked with : "
                    + mInfo.getServiceInfo().getComponentName().flattenToString() + " , "
                    + serviceComponent.getPackageName());
        } else {
            Log.i(TAG, "newServiceInfoLocked with null mInfo , "
                    + serviceComponent.getPackageName());
        }
        mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId);
        mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId);
        return mInfo.getServiceInfo();
        return mInfo.getServiceInfo();
    }
    }
@@ -64,8 +73,13 @@ public final class CredentialManagerServiceImpl extends
    /**
    /**
     * Starts a provider session and associates it with the given request session. */
     * Starts a provider session and associates it with the given request session. */
    @Nullable
    @Nullable
    public ProviderSession initiateProviderSessionForRequest(
    @GuardedBy("mLock")
            RequestSession requestSession) {
    public ProviderSession initiateProviderSessionForRequestLocked(
            RequestSession requestSession, List<String> requestOptions) {
        if (!isServiceCapableLocked(requestOptions)) {
            Log.i(TAG, "Service is not capable");
            return null;
        }
        Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl");
        Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl");
        if (mInfo == null) {
        if (mInfo == null) {
            Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, "
            Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, "
@@ -80,7 +94,8 @@ public final class CredentialManagerServiceImpl extends
    }
    }


    /** Return true if at least one capability found. */
    /** Return true if at least one capability found. */
    boolean isServiceCapable(List<String> requestedOptions) {
    @GuardedBy("mLock")
    boolean isServiceCapableLocked(List<String> requestedOptions) {
        if (mInfo == null) {
        if (mInfo == null) {
            Slog.i(TAG, "in isServiceCapable, mInfo is null");
            Slog.i(TAG, "in isServiceCapable, mInfo is null");
            return false;
            return false;