Loading services/core/java/com/android/server/pm/PackageManagerService.java +35 −20 Original line number Diff line number Diff line Loading @@ -811,10 +811,16 @@ public class PackageManagerService extends IPackageManager.Stub @GuardedBy("mProtectedBroadcasts") final ArraySet<String> mProtectedBroadcasts = new ArraySet<>(); /** List of packages waiting for verification. */ /** * List of packages waiting for verification. * Handler thread only! */ final SparseArray<PackageVerificationState> mPendingVerification = new SparseArray<>(); /** List of packages waiting for rollback to be enabled. */ /** * List of packages waiting for rollback to be enabled. * Handler thread only! */ final SparseArray<VerificationParams> mPendingEnableRollback = new SparseArray<>(); final PackageInstallerService mInstallerService; Loading @@ -835,10 +841,16 @@ public class PackageManagerService extends IPackageManager.Stub // Cache of users who need badging. private final SparseBooleanArray mUserNeedsBadging = new SparseBooleanArray(); /** Token for keys in mPendingVerification. */ /** * Token for keys in mPendingVerification. * Handler thread only! */ int mPendingVerificationToken = 0; /** Token for keys in mPendingEnableRollback. */ /** * Token for keys in mPendingEnableRollback. * Handler thread only! */ int mPendingEnableRollbackToken = 0; @Watched(manual = true) Loading Loading @@ -6347,15 +6359,17 @@ public class PackageManagerService extends IPackageManager.Stub android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, "Only package verification agents can extend verification timeouts"); mHandler.post(() -> { final PackageVerificationState state = mPendingVerification.get(id); final PackageVerificationResponse response = new PackageVerificationResponse( verificationCodeAtTimeout, Binder.getCallingUid()); if (millisecondsToDelay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) { millisecondsToDelay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT; long delay = millisecondsToDelay; if (delay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) { delay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT; } if (millisecondsToDelay < 0) { millisecondsToDelay = 0; if (delay < 0) { delay = 0; } if ((state != null) && !state.timeoutExtended()) { Loading @@ -6364,8 +6378,9 @@ public class PackageManagerService extends IPackageManager.Stub final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED); msg.arg1 = id; msg.obj = response; mHandler.sendMessageDelayed(msg, millisecondsToDelay); mHandler.sendMessageDelayed(msg, delay); } }); } private void setEnableRollbackCode(int token, int enableRollbackCode) { Loading services/core/java/com/android/server/pm/StagingManager.java +0 −20 Original line number Diff line number Diff line Loading @@ -527,26 +527,6 @@ public class StagingManager { } } /** * Returns id of a committed and non-finalized stated session that contains same * {@code packageName}, or {@code -1} if no sessions have this {@code packageName} staged. */ int getSessionIdByPackageName(@NonNull String packageName) { synchronized (mStagedSessions) { for (int i = 0; i < mStagedSessions.size(); i++) { StagedSession stagedSession = mStagedSessions.valueAt(i); if (!stagedSession.isCommitted() || stagedSession.isDestroyed() || stagedSession.isInTerminalState()) { continue; } if (stagedSession.getPackageName().equals(packageName)) { return stagedSession.sessionId(); } } } return -1; } @VisibleForTesting void createSession(@NonNull StagedSession sessionInfo) { synchronized (mStagedSessions) { Loading services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java +0 −60 Original line number Diff line number Diff line Loading @@ -453,66 +453,6 @@ public class StagingManagerTest { assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @Test public void getSessionIdByPackageName() throws Exception { FakeStagedSession session = new FakeStagedSession(239); session.setCommitted(true); session.setSessionReady(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(239); } @Test public void getSessionIdByPackageName_appliedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(37); session.setCommitted(true); session.setSessionApplied(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_failedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(73); session.setCommitted(true); session.setSessionFailed(1, "whatevs"); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_destroyedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(23); session.setCommitted(true); session.setDestroyed(true); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_noSessions() throws Exception { assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_noSessionHasThisPackage() throws Exception { FakeStagedSession session = new FakeStagedSession(37); session.setCommitted(true); session.setSessionApplied(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.bar")).isEqualTo(-1); } @Test public void getStagedApexInfos_validatePreConditions() throws Exception { // Invalid session: null session Loading Loading
services/core/java/com/android/server/pm/PackageManagerService.java +35 −20 Original line number Diff line number Diff line Loading @@ -811,10 +811,16 @@ public class PackageManagerService extends IPackageManager.Stub @GuardedBy("mProtectedBroadcasts") final ArraySet<String> mProtectedBroadcasts = new ArraySet<>(); /** List of packages waiting for verification. */ /** * List of packages waiting for verification. * Handler thread only! */ final SparseArray<PackageVerificationState> mPendingVerification = new SparseArray<>(); /** List of packages waiting for rollback to be enabled. */ /** * List of packages waiting for rollback to be enabled. * Handler thread only! */ final SparseArray<VerificationParams> mPendingEnableRollback = new SparseArray<>(); final PackageInstallerService mInstallerService; Loading @@ -835,10 +841,16 @@ public class PackageManagerService extends IPackageManager.Stub // Cache of users who need badging. private final SparseBooleanArray mUserNeedsBadging = new SparseBooleanArray(); /** Token for keys in mPendingVerification. */ /** * Token for keys in mPendingVerification. * Handler thread only! */ int mPendingVerificationToken = 0; /** Token for keys in mPendingEnableRollback. */ /** * Token for keys in mPendingEnableRollback. * Handler thread only! */ int mPendingEnableRollbackToken = 0; @Watched(manual = true) Loading Loading @@ -6347,15 +6359,17 @@ public class PackageManagerService extends IPackageManager.Stub android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, "Only package verification agents can extend verification timeouts"); mHandler.post(() -> { final PackageVerificationState state = mPendingVerification.get(id); final PackageVerificationResponse response = new PackageVerificationResponse( verificationCodeAtTimeout, Binder.getCallingUid()); if (millisecondsToDelay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) { millisecondsToDelay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT; long delay = millisecondsToDelay; if (delay > PackageManager.MAXIMUM_VERIFICATION_TIMEOUT) { delay = PackageManager.MAXIMUM_VERIFICATION_TIMEOUT; } if (millisecondsToDelay < 0) { millisecondsToDelay = 0; if (delay < 0) { delay = 0; } if ((state != null) && !state.timeoutExtended()) { Loading @@ -6364,8 +6378,9 @@ public class PackageManagerService extends IPackageManager.Stub final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED); msg.arg1 = id; msg.obj = response; mHandler.sendMessageDelayed(msg, millisecondsToDelay); mHandler.sendMessageDelayed(msg, delay); } }); } private void setEnableRollbackCode(int token, int enableRollbackCode) { Loading
services/core/java/com/android/server/pm/StagingManager.java +0 −20 Original line number Diff line number Diff line Loading @@ -527,26 +527,6 @@ public class StagingManager { } } /** * Returns id of a committed and non-finalized stated session that contains same * {@code packageName}, or {@code -1} if no sessions have this {@code packageName} staged. */ int getSessionIdByPackageName(@NonNull String packageName) { synchronized (mStagedSessions) { for (int i = 0; i < mStagedSessions.size(); i++) { StagedSession stagedSession = mStagedSessions.valueAt(i); if (!stagedSession.isCommitted() || stagedSession.isDestroyed() || stagedSession.isInTerminalState()) { continue; } if (stagedSession.getPackageName().equals(packageName)) { return stagedSession.sessionId(); } } } return -1; } @VisibleForTesting void createSession(@NonNull StagedSession sessionInfo) { synchronized (mStagedSessions) { Loading
services/tests/mockingservicestests/src/com/android/server/pm/StagingManagerTest.java +0 −60 Original line number Diff line number Diff line Loading @@ -453,66 +453,6 @@ public class StagingManagerTest { assertThat(apkSession.getErrorMessage()).isEqualTo("Another apex session failed"); } @Test public void getSessionIdByPackageName() throws Exception { FakeStagedSession session = new FakeStagedSession(239); session.setCommitted(true); session.setSessionReady(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(239); } @Test public void getSessionIdByPackageName_appliedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(37); session.setCommitted(true); session.setSessionApplied(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_failedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(73); session.setCommitted(true); session.setSessionFailed(1, "whatevs"); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_destroyedSession_ignores() throws Exception { FakeStagedSession session = new FakeStagedSession(23); session.setCommitted(true); session.setDestroyed(true); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_noSessions() throws Exception { assertThat(mStagingManager.getSessionIdByPackageName("com.foo")).isEqualTo(-1); } @Test public void getSessionIdByPackageName_noSessionHasThisPackage() throws Exception { FakeStagedSession session = new FakeStagedSession(37); session.setCommitted(true); session.setSessionApplied(); session.setPackageName("com.foo"); mStagingManager.createSession(session); assertThat(mStagingManager.getSessionIdByPackageName("com.bar")).isEqualTo(-1); } @Test public void getStagedApexInfos_validatePreConditions() throws Exception { // Invalid session: null session Loading