Loading services/credentials/java/com/android/server/credentials/ClearRequestSession.java +4 −2 Original line number Diff line number Diff line Loading @@ -46,9 +46,11 @@ public final class ClearRequestSession extends RequestSession<ClearCredentialSta public ClearRequestSession(Context context, int userId, int callingUid, IClearCredentialStateCallback callback, ClearCredentialStateRequest request, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_UNDEFINED, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); setupInitialPhaseMetric(ApiName.CLEAR_CREDENTIAL.getMetricCode(), MetricUtilities.ZERO); } /** Loading services/credentials/java/com/android/server/credentials/CreateRequestSession.java +4 −2 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR CreateCredentialRequest request, ICreateCredentialCallback callback, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_CREATE, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); setupInitialPhaseMetric(ApiName.CREATE_CREDENTIAL.getMetricCode(), MetricUtilities.UNIT); } /** Loading services/credentials/java/com/android/server/credentials/CredentialManagerService.java +30 −6 Original line number Diff line number Diff line Loading @@ -230,7 +230,9 @@ public final class CredentialManagerService return; } throw new SecurityException("Caller is missing permission: QUERY_ALL_PACKAGES or LIST_ENABLED_CREDENTIAL_PROVIDERS"); throw new SecurityException( "Caller is missing permission: QUERY_ALL_PACKAGES or " + "LIST_ENABLED_CREDENTIAL_PROVIDERS"); } private boolean hasPermission(String permission) { Loading Loading @@ -402,6 +404,7 @@ public final class CredentialManagerService GetCredentialRequest request, IGetCredentialCallback callback, final String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting executeGetCredential with callingPackage: " + callingPackage); ICancellationSignal cancelTransport = CancellationSignal.createTransport(); Loading @@ -423,7 +426,8 @@ public final class CredentialManagerService callback, request, constructCallingAppInfo(callingPackage, userId, request.getOrigin()), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); processGetCredential(request, callback, session); return cancelTransport; Loading Loading @@ -502,6 +506,9 @@ public final class CredentialManagerService + e.getMessage()); } } finalizeAndEmitInitialPhaseMetric(session); // TODO(b/271135048) - May still be worth emitting in the empty cases above. providerSessions.forEach(ProviderSession::invokeSession); } Loading @@ -510,6 +517,7 @@ public final class CredentialManagerService CreateCredentialRequest request, ICreateCredentialCallback callback, String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting executeCreateCredential with callingPackage: " + callingPackage); ICancellationSignal cancelTransport = CancellationSignal.createTransport(); Loading @@ -532,7 +540,8 @@ public final class CredentialManagerService request, callback, constructCallingAppInfo(callingPackage, userId, request.getOrigin()), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); processCreateCredential(request, callback, session); return cancelTransport; Loading Loading @@ -560,10 +569,17 @@ public final class CredentialManagerService } } finalizeAndEmitInitialPhaseMetric(session); // Iterate over all provider sessions and invoke the request providerSessions.forEach(ProviderSession::invokeSession); } private void finalizeAndEmitInitialPhaseMetric(RequestSession session) { var initMetric = session.mInitialPhaseMetric; initMetric.setCredentialServiceBeginQueryTimeNanoseconds(System.nanoTime()); MetricUtilities.logApiCalled(initMetric); } @Override public void setEnabledProviders( List<String> providers, int userId, ISetEnabledProvidersCallback callback) { Loading Loading @@ -648,6 +664,7 @@ public final class CredentialManagerService } MetricUtilities.logApiCalled(ApiName.IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE, ApiStatus.SUCCESS, callingUid); // TODO(b/271135048) - Update asap to use the new logging types return true; } } Loading Loading @@ -677,12 +694,15 @@ public final class CredentialManagerService mContext, userId, providerFilter, getEnabledProviders()); } @SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same // this.mLock private Set<ServiceInfo> getEnabledProviders() { Set<ServiceInfo> enabledProviders = new HashSet<>(); synchronized (mLock) { runForUser( (service) -> { enabledProviders.add(service.getCredentialProviderInfo().getServiceInfo()); enabledProviders.add( service.getCredentialProviderInfo().getServiceInfo()); }); } return enabledProviders; Loading @@ -693,6 +713,7 @@ public final class CredentialManagerService ClearCredentialStateRequest request, IClearCredentialStateCallback callback, String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting clearCredentialState with callingPackage: " + callingPackage); final int userId = UserHandle.getCallingUserId(); int callingUid = Binder.getCallingUid(); Loading @@ -710,7 +731,8 @@ public final class CredentialManagerService callback, request, constructCallingAppInfo(callingPackage, userId, null), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); // Initiate all provider sessions // TODO: Determine if provider needs to have clear capability in their manifest Loading @@ -729,6 +751,8 @@ public final class CredentialManagerService } } finalizeAndEmitInitialPhaseMetric(session); // Iterate over all provider sessions and invoke the request providerSessions.forEach(ProviderSession::invokeSession); return cancelTransport; Loading services/credentials/java/com/android/server/credentials/GetRequestSession.java +9 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.credentials; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; import android.credentials.CredentialOption; import android.credentials.CredentialProviderInfo; import android.credentials.GetCredentialException; import android.credentials.GetCredentialRequest; Loading @@ -36,6 +37,7 @@ import com.android.server.credentials.metrics.ApiStatus; import com.android.server.credentials.metrics.ProviderStatusForMetrics; import java.util.ArrayList; import java.util.stream.Collectors; /** * Central session for a single getCredentials request. This class listens to the Loading @@ -47,9 +49,14 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest, private static final String TAG = "GetRequestSession"; public GetRequestSession(Context context, int userId, int callingUid, IGetCredentialCallback callback, GetCredentialRequest request, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_GET, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); int numTypes = (request.getCredentialOptions().stream() .map(CredentialOption::getType).collect( Collectors.toSet())).size(); // Dedupe type strings setupInitialPhaseMetric(ApiName.GET_CREDENTIAL.getMetricCode(), numTypes); } /** Loading services/credentials/java/com/android/server/credentials/MetricUtilities.java +19 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.server.credentials.metrics.ApiName; import com.android.server.credentials.metrics.ApiStatus; import com.android.server.credentials.metrics.CandidatePhaseMetric; import com.android.server.credentials.metrics.ChosenProviderMetric; import com.android.server.credentials.metrics.InitialPhaseMetric; import java.util.Map; Loading @@ -39,7 +40,10 @@ public class MetricUtilities { public static final int DEFAULT_INT_32 = -1; public static final int[] DEFAULT_REPEATED_INT_32 = new int[0]; // Used for single count metric emits, such as singular amounts of various types public static final int UNIT = 1; // Used for zero count metric emits, such as zero amounts of various types public static final int ZERO = 0; /** * This retrieves the uid of any package name, given a context and a component name for the Loading Loading @@ -155,4 +159,18 @@ public class MetricUtilities { } } /** * Handles the metric emit for the initial phase. * * @param initialPhaseMetric contains all the data for this emit */ protected static void logApiCalled(InitialPhaseMetric initialPhaseMetric) { /* FrameworkStatsLog.write(FrameworkStatsLog.INITIAL_PHASE, .. session_id .. initialPhaseMetric.getSessionId(), ... TODO Immediately - Fill in asap now that the split atom is checked in. */ } } Loading
services/credentials/java/com/android/server/credentials/ClearRequestSession.java +4 −2 Original line number Diff line number Diff line Loading @@ -46,9 +46,11 @@ public final class ClearRequestSession extends RequestSession<ClearCredentialSta public ClearRequestSession(Context context, int userId, int callingUid, IClearCredentialStateCallback callback, ClearCredentialStateRequest request, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_UNDEFINED, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); setupInitialPhaseMetric(ApiName.CLEAR_CREDENTIAL.getMetricCode(), MetricUtilities.ZERO); } /** Loading
services/credentials/java/com/android/server/credentials/CreateRequestSession.java +4 −2 Original line number Diff line number Diff line Loading @@ -53,9 +53,11 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR CreateCredentialRequest request, ICreateCredentialCallback callback, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_CREATE, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); setupInitialPhaseMetric(ApiName.CREATE_CREDENTIAL.getMetricCode(), MetricUtilities.UNIT); } /** Loading
services/credentials/java/com/android/server/credentials/CredentialManagerService.java +30 −6 Original line number Diff line number Diff line Loading @@ -230,7 +230,9 @@ public final class CredentialManagerService return; } throw new SecurityException("Caller is missing permission: QUERY_ALL_PACKAGES or LIST_ENABLED_CREDENTIAL_PROVIDERS"); throw new SecurityException( "Caller is missing permission: QUERY_ALL_PACKAGES or " + "LIST_ENABLED_CREDENTIAL_PROVIDERS"); } private boolean hasPermission(String permission) { Loading Loading @@ -402,6 +404,7 @@ public final class CredentialManagerService GetCredentialRequest request, IGetCredentialCallback callback, final String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting executeGetCredential with callingPackage: " + callingPackage); ICancellationSignal cancelTransport = CancellationSignal.createTransport(); Loading @@ -423,7 +426,8 @@ public final class CredentialManagerService callback, request, constructCallingAppInfo(callingPackage, userId, request.getOrigin()), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); processGetCredential(request, callback, session); return cancelTransport; Loading Loading @@ -502,6 +506,9 @@ public final class CredentialManagerService + e.getMessage()); } } finalizeAndEmitInitialPhaseMetric(session); // TODO(b/271135048) - May still be worth emitting in the empty cases above. providerSessions.forEach(ProviderSession::invokeSession); } Loading @@ -510,6 +517,7 @@ public final class CredentialManagerService CreateCredentialRequest request, ICreateCredentialCallback callback, String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting executeCreateCredential with callingPackage: " + callingPackage); ICancellationSignal cancelTransport = CancellationSignal.createTransport(); Loading @@ -532,7 +540,8 @@ public final class CredentialManagerService request, callback, constructCallingAppInfo(callingPackage, userId, request.getOrigin()), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); processCreateCredential(request, callback, session); return cancelTransport; Loading Loading @@ -560,10 +569,17 @@ public final class CredentialManagerService } } finalizeAndEmitInitialPhaseMetric(session); // Iterate over all provider sessions and invoke the request providerSessions.forEach(ProviderSession::invokeSession); } private void finalizeAndEmitInitialPhaseMetric(RequestSession session) { var initMetric = session.mInitialPhaseMetric; initMetric.setCredentialServiceBeginQueryTimeNanoseconds(System.nanoTime()); MetricUtilities.logApiCalled(initMetric); } @Override public void setEnabledProviders( List<String> providers, int userId, ISetEnabledProvidersCallback callback) { Loading Loading @@ -648,6 +664,7 @@ public final class CredentialManagerService } MetricUtilities.logApiCalled(ApiName.IS_ENABLED_CREDENTIAL_PROVIDER_SERVICE, ApiStatus.SUCCESS, callingUid); // TODO(b/271135048) - Update asap to use the new logging types return true; } } Loading Loading @@ -677,12 +694,15 @@ public final class CredentialManagerService mContext, userId, providerFilter, getEnabledProviders()); } @SuppressWarnings("GuardedBy") // ErrorProne requires service.mLock which is the same // this.mLock private Set<ServiceInfo> getEnabledProviders() { Set<ServiceInfo> enabledProviders = new HashSet<>(); synchronized (mLock) { runForUser( (service) -> { enabledProviders.add(service.getCredentialProviderInfo().getServiceInfo()); enabledProviders.add( service.getCredentialProviderInfo().getServiceInfo()); }); } return enabledProviders; Loading @@ -693,6 +713,7 @@ public final class CredentialManagerService ClearCredentialStateRequest request, IClearCredentialStateCallback callback, String callingPackage) { final long timestampBegan = System.nanoTime(); Log.i(TAG, "starting clearCredentialState with callingPackage: " + callingPackage); final int userId = UserHandle.getCallingUserId(); int callingUid = Binder.getCallingUid(); Loading @@ -710,7 +731,8 @@ public final class CredentialManagerService callback, request, constructCallingAppInfo(callingPackage, userId, null), CancellationSignal.fromTransport(cancelTransport)); CancellationSignal.fromTransport(cancelTransport), timestampBegan); // Initiate all provider sessions // TODO: Determine if provider needs to have clear capability in their manifest Loading @@ -729,6 +751,8 @@ public final class CredentialManagerService } } finalizeAndEmitInitialPhaseMetric(session); // Iterate over all provider sessions and invoke the request providerSessions.forEach(ProviderSession::invokeSession); return cancelTransport; Loading
services/credentials/java/com/android/server/credentials/GetRequestSession.java +9 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.credentials; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; import android.credentials.CredentialOption; import android.credentials.CredentialProviderInfo; import android.credentials.GetCredentialException; import android.credentials.GetCredentialRequest; Loading @@ -36,6 +37,7 @@ import com.android.server.credentials.metrics.ApiStatus; import com.android.server.credentials.metrics.ProviderStatusForMetrics; import java.util.ArrayList; import java.util.stream.Collectors; /** * Central session for a single getCredentials request. This class listens to the Loading @@ -47,9 +49,14 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest, private static final String TAG = "GetRequestSession"; public GetRequestSession(Context context, int userId, int callingUid, IGetCredentialCallback callback, GetCredentialRequest request, CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal) { CallingAppInfo callingAppInfo, CancellationSignal cancellationSignal, long startedTimestamp) { super(context, userId, callingUid, request, callback, RequestInfo.TYPE_GET, callingAppInfo, cancellationSignal); callingAppInfo, cancellationSignal, startedTimestamp); int numTypes = (request.getCredentialOptions().stream() .map(CredentialOption::getType).collect( Collectors.toSet())).size(); // Dedupe type strings setupInitialPhaseMetric(ApiName.GET_CREDENTIAL.getMetricCode(), numTypes); } /** Loading
services/credentials/java/com/android/server/credentials/MetricUtilities.java +19 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import com.android.server.credentials.metrics.ApiName; import com.android.server.credentials.metrics.ApiStatus; import com.android.server.credentials.metrics.CandidatePhaseMetric; import com.android.server.credentials.metrics.ChosenProviderMetric; import com.android.server.credentials.metrics.InitialPhaseMetric; import java.util.Map; Loading @@ -39,7 +40,10 @@ public class MetricUtilities { public static final int DEFAULT_INT_32 = -1; public static final int[] DEFAULT_REPEATED_INT_32 = new int[0]; // Used for single count metric emits, such as singular amounts of various types public static final int UNIT = 1; // Used for zero count metric emits, such as zero amounts of various types public static final int ZERO = 0; /** * This retrieves the uid of any package name, given a context and a component name for the Loading Loading @@ -155,4 +159,18 @@ public class MetricUtilities { } } /** * Handles the metric emit for the initial phase. * * @param initialPhaseMetric contains all the data for this emit */ protected static void logApiCalled(InitialPhaseMetric initialPhaseMetric) { /* FrameworkStatsLog.write(FrameworkStatsLog.INITIAL_PHASE, .. session_id .. initialPhaseMetric.getSessionId(), ... TODO Immediately - Fill in asap now that the split atom is checked in. */ } }