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

Commit 8e013ab5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Require permission for long-running user-initiated jobs."

parents 9919e3b7 9880ec06
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -3212,14 +3212,23 @@ public class JobSchedulerService extends com.android.server.SystemService
    /** Returns the maximum amount of time this job could run for. */
    public long getMaxJobExecutionTimeMs(JobStatus job) {
        synchronized (mLock) {
            final boolean shouldTreatAsDataTransfer = job.getJob().isDataTransfer()
                    && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName());
            final boolean allowLongerJob;
            final boolean isDataTransfer = job.getJob().isDataTransfer();
            if (isDataTransfer || job.shouldTreatAsUserInitiated()) {
                allowLongerJob =
                        checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName());
            } else {
                allowLongerJob = false;
            }
            if (job.shouldTreatAsUserInitiated()) {
                if (shouldTreatAsDataTransfer) {
                if (isDataTransfer && allowLongerJob) {
                    return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS;
                }
                if (allowLongerJob) {
                    return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS;
            } else if (shouldTreatAsDataTransfer) {
                }
                return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS;
            } else if (isDataTransfer && allowLongerJob) {
                return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS;
            }
            return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
@@ -4171,6 +4180,16 @@ public class JobSchedulerService extends com.android.server.SystemService
        return mConnectivityController;
    }

    @VisibleForTesting
    protected QuotaController getQuotaController() {
        return mQuotaController;
    }

    @VisibleForTesting
    protected TareController getTareController() {
        return mTareController;
    }

    // Shell command infrastructure
    int getJobState(PrintWriter pw, String pkgName, int userId, int jobId) {
        try {
+18 −1
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ import com.android.server.PowerAllowlistInternal;
import com.android.server.SystemServiceManager;
import com.android.server.job.controllers.ConnectivityController;
import com.android.server.job.controllers.JobStatus;
import com.android.server.job.controllers.QuotaController;
import com.android.server.job.controllers.TareController;
import com.android.server.pm.UserManagerInternal;
import com.android.server.usage.AppStandbyInternal;

@@ -336,14 +338,29 @@ public class JobSchedulerServiceTest {
        when(jobUI.shouldTreatAsUserInitiated()).thenReturn(true);
        when(jobUIDT.shouldTreatAsUserInitiated()).thenReturn(true);

        grantRunLongJobsPermission(true);
        QuotaController quotaController = mService.getQuotaController();
        spyOn(quotaController);
        TareController tareController = mService.getTareController();
        spyOn(tareController);
        doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS)
                .when(quotaController).getMaxJobExecutionTimeMsLocked(any());
        doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS)
                .when(quotaController).getMaxJobExecutionTimeMsLocked(any());

        grantRunLongJobsPermission(true);
        assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobDT));
        assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUI));
        assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUIDT));
        grantRunLongJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobDT));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUI));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUIDT));
    }

    /**