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

Commit b8992fec authored by Reema Bajwa's avatar Reema Bajwa
Browse files

Make sure finishSession logs the final status

Bug: 315345631
Test: Built locally & deployed on device

Change-Id: I28e27ae502a8902025a78ed8006d3594d362f454
parent 83995ffa
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -4782,7 +4782,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
        }

        if (isCredmanIntegrationActive(response)) {
            Slog.d(TAG, "Attempting to add Credential Manager callback to pinned entries");
            addCredentialManagerCallback(response);
        }

@@ -5713,7 +5712,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                /* isPrimary= */ true);
        updateFillDialogTriggerIdsLocked();
        updateTrackedIdsLocked();

        if (mCurrentViewId == null) {
            return;
        }
+5 −2
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import android.service.credentials.CredentialProviderService;
import android.service.credentials.PermissionUtils;
import android.util.Slog;

import com.android.server.credentials.metrics.ApiStatus;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -180,7 +182,7 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
        } else {
            Slog.w(TAG, "onUiCancellation called but finalResponseReceiver not found");
        }
        finishSession(/*propagateCancellation=*/false);
        finishSession(/*propagateCancellation=*/false, ApiStatus.FAILURE.getMetricCode());
    }

    @Override
@@ -221,9 +223,10 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
            resultData.putParcelable(
                    CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE, response);
            mFinalResponseReceiver.send(Constants.SUCCESS_CREDMAN_SELECTOR, resultData);
            finishSession(/*propagateCancellation=*/ false);
            finishSession(/*propagateCancellation=*/ false, ApiStatus.SUCCESS.getMetricCode());
        } else {
            Slog.w(TAG, "onFinalResponseReceived result receiver not found for pinned entry");
            finishSession(/*propagateCancellation=*/ false, ApiStatus.FAILURE.getMetricCode());
        }
    }

+22 −18
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
                () -> {
                    Slog.d(TAG, "Cancellation invoked from the client - clearing session");
                    boolean isUiActive = maybeCancelUi();
                    finishSession(!isUiActive);
                    finishSession(!isUiActive, ApiStatus.CLIENT_CANCELED.getMetricCode());
                }
        );
    }
@@ -231,7 +231,8 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }
        String providerId = selection.getProviderId();
@@ -257,11 +258,12 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        }
    }

    protected void finishSession(boolean propagateCancellation) {
    protected void finishSession(boolean propagateCancellation, int apiStatus) {
        Slog.i(TAG, "finishing session with propagateCancellation " + propagateCancellation);
        if (propagateCancellation) {
            mProviders.values().forEach(ProviderSession::cancelProviderRemoteSession);
        }
        mRequestSessionMetric.logApiCalledAtFinish(apiStatus);
        mRequestSessionStatus = RequestSessionStatus.COMPLETE;
        mProviders.clear();
        clearRequestSessionLocked();
@@ -326,7 +328,8 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        mRequestSessionMetric.logCandidatePhaseMetrics(mProviders);

        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return providerDataList;
        }

@@ -353,23 +356,20 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.CLIENT_CANCELED.getMetricCode());
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }
        try {
            invokeClientCallbackSuccess(response);
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.SUCCESS.getMetricCode());
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.SUCCESS.getMetricCode());
        } catch (RemoteException e) {
            mRequestSessionMetric.collectFinalPhaseProviderMetricStatus(
                    /*has_exception=*/ true, ProviderStatusForMetrics.FINAL_FAILURE);
            Slog.e(TAG, "Issue while responding to client with a response : " + e);
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.FAILURE.getMetricCode());
            finishSession(/*propagateCancellation=*/false, ApiStatus.FAILURE.getMetricCode());
        }
        finishSession(/*propagateCancellation=*/false);
    }

    /**
@@ -387,9 +387,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.CLIENT_CANCELED.getMetricCode());
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true, ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }

@@ -399,8 +397,14 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            Slog.e(TAG, "Issue while responding to client with error : " + e);
        }
        boolean isUserCanceled = errorType.contains(MetricUtilities.USER_CANCELED_SUBSTRING);
        mRequestSessionMetric.logFailureOrUserCancel(isUserCanceled);
        finishSession(/*propagateCancellation=*/false);
        if (isUserCanceled) {
            mRequestSessionMetric.setHasExceptionFinalPhase(/* has_exception */ false);
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.USER_CANCELED.getMetricCode());
        } else {
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.FAILURE.getMetricCode());
        }
    }

    /**
@@ -419,7 +423,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        @Override
        public void binderDied() {
            Slog.d(TAG, "Client binder died - clearing session");
            finishSession(isUiWaitingForData());
            finishSession(isUiWaitingForData(), ApiStatus.CLIENT_CANCELED.getMetricCode());
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public class RequestSessionMetric {
     *
     * @param exceptionBitFinalPhase represents if the final phase provider had an exception
     */
    private void setHasExceptionFinalPhase(boolean exceptionBitFinalPhase) {
    public void setHasExceptionFinalPhase(boolean exceptionBitFinalPhase) {
        try {
            mChosenProviderFinalPhaseMetric.setHasException(exceptionBitFinalPhase);
        } catch (Exception e) {