diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java index 6e998c4ef1957efe2824d5814e5b2bc35c83f02d..55973fa41ab6857e70f5fb365ce3ac2b3ccdb307 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java @@ -33,7 +33,6 @@ import android.content.pm.ServiceInfo; import android.credentials.ClearCredentialStateRequest; import android.credentials.CreateCredentialException; import android.credentials.CreateCredentialRequest; -import android.credentials.CredentialDescription; import android.credentials.CredentialManager; import android.credentials.CredentialOption; import android.credentials.CredentialProviderInfo; @@ -296,11 +295,6 @@ public final class CredentialManagerService mContext, UserHandle.getCallingUserId(), session, - CredentialProviderInfoFactory.getCredentialProviderFromPackageName( - mContext, UserHandle.getCallingUserId() , - result.second.mPackageName, - CredentialManager.PROVIDER_FILTER_ALL_PROVIDERS, - new HashSet<>()), session.mClientAppInfo, result.second.mPackageName, result.first)); @@ -752,44 +746,6 @@ public final class CredentialManagerService enforceCallingPackage(callingPackage, Binder.getCallingUid()); - List<CredentialProviderInfo> services = - getServicesForCredentialDescription(UserHandle.getCallingUserId()); - - List<String> providers = - services.stream() - .map( - credentialProviderInfo -> - credentialProviderInfo.getServiceInfo().packageName) - .toList(); - - if (!providers.contains(callingPackage)) { - throw new NonCredentialProviderCallerException(callingPackage); - } - - List<CredentialProviderInfo> matchingService = - services.stream() - .filter( - credentialProviderInfo -> - credentialProviderInfo - .getServiceInfo() - .packageName - .equals(callingPackage)) - .toList(); - - CredentialProviderInfo credentialProviderInfo = matchingService.get(0); - - Set<String> supportedTypes = - request.getCredentialDescriptions().stream() - .map(CredentialDescription::getType) - .filter(credentialProviderInfo::hasCapability) - .collect(Collectors.toSet()); - - if (supportedTypes.size() != request.getCredentialDescriptions().size()) { - throw new IllegalArgumentException( - "CredentialProvider does not support one or more" - + "of the registered types. Check your XML entry."); - } - CredentialDescriptionRegistry session = CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId()); @@ -808,20 +764,6 @@ public final class CredentialManagerService enforceCallingPackage(callingPackage, Binder.getCallingUid()); - List<CredentialProviderInfo> services = - getServicesForCredentialDescription(UserHandle.getCallingUserId()); - - List<String> providers = - services.stream() - .map( - credentialProviderInfo -> - credentialProviderInfo.getServiceInfo().packageName) - .toList(); - - if (!providers.contains(callingPackage)) { - throw new NonCredentialProviderCallerException(callingPackage); - } - CredentialDescriptionRegistry session = CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId()); diff --git a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java index b7a4cd581a1a061d2f19bdfec7079f9b5bc24a09..ab29acc72a53693b873cafdc256adfebaaf41990 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java @@ -72,7 +72,8 @@ public final class ProviderClearSession extends ProviderSession<ClearCredential ProviderInternalCallback callbacks, int userId, RemoteCredentialService remoteCredentialService, ClearCredentialStateRequest providerRequest) { - super(context, info, providerRequest, callbacks, userId, remoteCredentialService); + super(context, providerRequest, callbacks, info.getComponentName(), + userId, remoteCredentialService); setStatus(Status.PENDING); } @@ -95,7 +96,7 @@ public final class ProviderClearSession extends ProviderSession<ClearCredential /** Called when provider service dies. */ @Override // Callback from the remote provider public void onProviderServiceDied(RemoteCredentialService service) { - if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) { + if (service.getComponentName().equals(mComponentName)) { updateStatusAndInvokeCallback(Status.SERVICE_DEAD); } else { Slog.i(TAG, "Component names different in onProviderServiceDied - " diff --git a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java index 640cc3331b1a0729e3fb4d4f20a0a308a0e68f17..8c9c6cfe24da0cb8fb837a85e7b4a7f9dd1896f2 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java @@ -133,7 +133,7 @@ public final class ProviderCreateSession extends ProviderSession< @NonNull BeginCreateCredentialRequest beginCreateRequest, @NonNull CreateCredentialRequest completeCreateRequest, String hybridService) { - super(context, info, beginCreateRequest, callbacks, userId, + super(context, beginCreateRequest, callbacks, info.getComponentName(), userId, remoteCredentialService); mCompleteRequest = completeCreateRequest; setStatus(Status.PENDING); @@ -161,7 +161,7 @@ public final class ProviderCreateSession extends ProviderSession< /** Called when provider service dies. */ @Override public void onProviderServiceDied(RemoteCredentialService service) { - if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) { + if (service.getComponentName().equals(mComponentName)) { updateStatusAndInvokeCallback(Status.SERVICE_DEAD); } else { Slog.i(TAG, "Component names different in onProviderServiceDied - " diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java index 07e2f877bfc04a9a7e43f88e5814ac827556e7f4..851ccb33aa43e78de85f91083724a8b09329626a 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java @@ -169,7 +169,8 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential CallingAppInfo callingAppInfo, Map<String, CredentialOption> beginGetOptionToCredentialOptionMap, String hybridService) { - super(context, info, beginGetRequest, callbacks, userId, remoteCredentialService); + super(context, beginGetRequest, callbacks, info.getComponentName() , + userId, remoteCredentialService); mCompleteRequest = completeGetRequest; mCallingAppInfo = callingAppInfo; setStatus(Status.PENDING); @@ -196,7 +197,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential /** Called when provider service dies. */ @Override // Callback from the remote provider public void onProviderServiceDied(RemoteCredentialService service) { - if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) { + if (service.getComponentName().equals(mComponentName)) { updateStatusAndInvokeCallback(Status.SERVICE_DEAD); } else { Slog.i(TAG, "Component names different in onProviderServiceDied - " diff --git a/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java index 457806de7c9fe829a72c7e827b68d2513d867c57..a5196c5197401546c2f5c05b6ab10a16bb1d68cf 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java @@ -19,10 +19,10 @@ package com.android.server.credentials; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.credentials.CredentialOption; -import android.credentials.CredentialProviderInfo; import android.credentials.GetCredentialException; import android.credentials.GetCredentialResponse; import android.credentials.ui.Entry; @@ -64,7 +64,6 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption @NonNull Context context, @UserIdInt int userId, @NonNull GetRequestSession getRequestSession, - @NonNull CredentialProviderInfo credentialProviderInfo, @NonNull CallingAppInfo callingAppInfo, @NonNull String credentialProviderPackageName, @NonNull CredentialOption requestOption) { @@ -72,7 +71,6 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption context, userId, getRequestSession, - credentialProviderInfo, callingAppInfo, credentialProviderPackageName, requestOption); @@ -94,11 +92,12 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption protected ProviderRegistryGetSession(@NonNull Context context, @NonNull int userId, @NonNull GetRequestSession session, - @NonNull CredentialProviderInfo credentialProviderInfo, @NonNull CallingAppInfo callingAppInfo, @NonNull String servicePackageName, @NonNull CredentialOption requestOption) { - super(context, credentialProviderInfo, requestOption, session, userId, null); + super(context, requestOption, session, + new ComponentName(servicePackageName, servicePackageName) , + userId, null); mCredentialDescriptionRegistry = CredentialDescriptionRegistry.forUser(userId); mCallingAppInfo = callingAppInfo; mCredentialProviderPackageName = servicePackageName; diff --git a/services/credentials/java/com/android/server/credentials/ProviderSession.java b/services/credentials/java/com/android/server/credentials/ProviderSession.java index 3a72dbc440073fa817a427010e335eaa139e422e..03e2a3264a9e2ac3620bf4bdb36ff78d536272bd 100644 --- a/services/credentials/java/com/android/server/credentials/ProviderSession.java +++ b/services/credentials/java/com/android/server/credentials/ProviderSession.java @@ -114,17 +114,18 @@ public abstract class ProviderSession<T, R> @Nullable String message); } - protected ProviderSession(@NonNull Context context, @Nullable CredentialProviderInfo info, + protected ProviderSession(@NonNull Context context, @NonNull T providerRequest, @Nullable ProviderInternalCallback callbacks, + @NonNull ComponentName componentName, @NonNull int userId, @Nullable RemoteCredentialService remoteCredentialService) { mContext = context; - mProviderInfo = info; + mProviderInfo = null; mProviderRequest = providerRequest; mCallbacks = callbacks; mUserId = userId; - mComponentName = info.getServiceInfo().getComponentName(); + mComponentName = componentName; mRemoteCredentialService = remoteCredentialService; mCandidateProviderMetric = new CandidatePhaseMetric(); mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName); diff --git a/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java b/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java index 3d52ac558605af9118249563736abcf292114a56..4c8e70ae5109d4442dfb3e2d6ebcc899528765d4 100644 --- a/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java +++ b/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java @@ -36,7 +36,6 @@ import android.content.pm.SigningDetails; import android.content.pm.SigningInfo; import android.credentials.Credential; import android.credentials.CredentialOption; -import android.credentials.CredentialProviderInfo; import android.credentials.GetCredentialException; import android.credentials.GetCredentialResponse; import android.credentials.ui.GetCredentialProviderData; @@ -45,7 +44,6 @@ import android.net.Uri; import android.os.Bundle; import android.service.credentials.CallingAppInfo; import android.service.credentials.CredentialEntry; -import android.service.credentials.CredentialProviderInfoFactory; import android.service.credentials.CredentialProviderService; import android.service.credentials.GetCredentialRequest; @@ -61,7 +59,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.security.cert.CertificateException; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -89,7 +86,6 @@ public class ProviderRegistryGetSessionTest { @Mock private GetRequestSession mGetRequestSession; private CredentialOption mGetCredentialOption; @Mock private ServiceInfo mServiceInfo; - private CredentialProviderInfo mCredentialProviderInfo; private CallingAppInfo mCallingAppInfo; @Mock private CredentialDescriptionRegistry mCredentialDescriptionRegistry; private Bundle mRetrievalData; @@ -111,12 +107,6 @@ public class ProviderRegistryGetSessionTest { mGetCredentialOption = new CredentialOption(CREDENTIAL_TYPE, mRetrievalData, new Bundle(), false); when(mServiceInfo.getComponentName()).thenReturn(CREDENTIAL_PROVIDER_COMPONENT); - mCredentialProviderInfo = CredentialProviderInfoFactory - .createForTests(mServiceInfo, - /* overrideLabel= */ "test", - /* isSystemProvider= */ false, - /* isEnabled= */ true, - /* capabilities= */ Collections.EMPTY_LIST); CredentialDescriptionRegistry.setSession(USER_ID_1, mCredentialDescriptionRegistry); mResponse = new HashSet<>(); mSlice = createSlice(); @@ -130,7 +120,7 @@ public class ProviderRegistryGetSessionTest { when(mCredentialDescriptionRegistry.getFilteredResultForProvider(anyString(), anyString())) .thenReturn(mResponse); mProviderRegistryGetSession = ProviderRegistryGetSession - .createNewSession(context, USER_ID_1, mGetRequestSession, mCredentialProviderInfo, + .createNewSession(context, USER_ID_1, mGetRequestSession, mCallingAppInfo, CALLING_PACKAGE_NAME, mGetCredentialOption);