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

Commit 53ff747b authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Don't allow core uids to be unfrozen due to deferrable broadcasts." into main am: 054f4439

parents 35639e6f 054f4439
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -1144,9 +1144,6 @@ class BroadcastProcessQueue {
            } else if (mProcessPersistent) {
            } else if (mProcessPersistent) {
                mRunnableAt = runnableAt + constants.DELAY_PERSISTENT_PROC_MILLIS;
                mRunnableAt = runnableAt + constants.DELAY_PERSISTENT_PROC_MILLIS;
                mRunnableAtReason = REASON_PERSISTENT;
                mRunnableAtReason = REASON_PERSISTENT;
            } else if (UserHandle.isCore(uid)) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CORE_UID;
            } else if (mCountOrdered > 0) {
            } else if (mCountOrdered > 0) {
                mRunnableAt = runnableAt;
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CONTAINS_ORDERED;
                mRunnableAtReason = REASON_CONTAINS_ORDERED;
@@ -1193,6 +1190,9 @@ class BroadcastProcessQueue {
                // is already cached, they'll be deferred on the line above
                // is already cached, they'll be deferred on the line above
                mRunnableAt = runnableAt;
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CONTAINS_RESULT_TO;
                mRunnableAtReason = REASON_CONTAINS_RESULT_TO;
            } else if (UserHandle.isCore(uid)) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CORE_UID;
            } else {
            } else {
                mRunnableAt = runnableAt + constants.DELAY_NORMAL_MILLIS;
                mRunnableAt = runnableAt + constants.DELAY_NORMAL_MILLIS;
                mRunnableAtReason = REASON_NORMAL;
                mRunnableAtReason = REASON_NORMAL;
+22 −0
Original line number Original line Diff line number Diff line
@@ -620,6 +620,28 @@ public final class BroadcastQueueModernImplTest {
        assertEquals(BroadcastProcessQueue.REASON_CORE_UID, queue.getRunnableAtReason());
        assertEquals(BroadcastProcessQueue.REASON_CORE_UID, queue.getRunnableAtReason());
    }
    }


    @Test
    public void testRunnableAt_freezableCoreUid() {
        final BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants,
                "com.android.bluetooth", Process.BLUETOOTH_UID);

        // Mark the process as freezable
        queue.setProcessAndUidState(mProcess, false, true);
        final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
        final BroadcastOptions options = BroadcastOptions.makeWithDeferUntilActive(true);
        final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick, options,
                List.of(makeMockRegisteredReceiver()), false);
        enqueueOrReplaceBroadcast(queue, timeTickRecord, 0);

        assertEquals(Long.MAX_VALUE, queue.getRunnableAt());
        assertEquals(BroadcastProcessQueue.REASON_CACHED_INFINITE_DEFER,
                queue.getRunnableAtReason());

        queue.setProcessAndUidState(mProcess, false, false);
        assertThat(queue.getRunnableAt()).isEqualTo(timeTickRecord.enqueueTime);
        assertEquals(BroadcastProcessQueue.REASON_CORE_UID, queue.getRunnableAtReason());
    }

    /**
    /**
     * Verify that a cached process that would normally be delayed becomes
     * Verify that a cached process that would normally be delayed becomes
     * immediately runnable when the given broadcast is enqueued.
     * immediately runnable when the given broadcast is enqueued.