From 6daf8545ca70c968f119f840dcb431f88a035c91 Mon Sep 17 00:00:00 2001 From: Samiul Islam Date: Fri, 22 Nov 2024 12:47:21 +0000 Subject: Handle session abandonment correctly for Dependency Installer Bug: 372862145 Test: atest PackageManagerShellCommandInstallTest FLAG: android.content.pm.sdk_dependency_installer Change-Id: I55eb598bc74fb61a82ce8ee2d4426930c5fd44f7 --- .../core/java/com/android/server/pm/InstallDependencyHelper.java | 5 ++--- .../core/java/com/android/server/pm/InstallPackageHelper.java | 9 +-------- .../core/java/com/android/server/pm/PackageInstallerService.java | 2 ++ .../core/java/com/android/server/pm/PackageManagerService.java | 3 +-- .../src/com/android/server/pm/ApexManagerTest.java | 2 +- 5 files changed, 7 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallDependencyHelper.java b/services/core/java/com/android/server/pm/InstallDependencyHelper.java index 8d9ec31ec30e..13aab11595d2 100644 --- a/services/core/java/com/android/server/pm/InstallDependencyHelper.java +++ b/services/core/java/com/android/server/pm/InstallDependencyHelper.java @@ -97,7 +97,7 @@ public class InstallDependencyHelper { if (missing.isEmpty()) { if (DEBUG) { - Slog.i(TAG, "No missing dependency for " + pkg); + Slog.d(TAG, "No missing dependency for " + pkg); } // No need for dependency resolution. Move to installation directly. callback.onResult(null); @@ -125,7 +125,7 @@ public class InstallDependencyHelper { void notifySessionComplete(int sessionId, boolean success) { if (DEBUG) { - Slog.i(TAG, "Session complete for " + sessionId + " result: " + success); + Slog.d(TAG, "Session complete for " + sessionId + " result: " + success); } synchronized (mTrackers) { List completedTrackers = new ArrayList<>(); @@ -451,7 +451,6 @@ public class InstallDependencyHelper { if (!success) { // If one of the dependency fails, the orig session would fail too. onError(mCallback, "Failed to install all dependencies"); - // TODO(b/372862145): Abandon the rest of the pending sessions. return false; // No point in tracking anymore } diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index e5e274450655..8168c5493304 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -229,7 +229,6 @@ final class InstallPackageHelper { private final SharedLibrariesImpl mSharedLibraries; private final PackageManagerServiceInjector mInjector; private final UpdateOwnershipHelper mUpdateOwnershipHelper; - private final InstallDependencyHelper mInstallDependencyHelper; private final Object mInternalLock = new Object(); @GuardedBy("mInternalLock") @@ -240,8 +239,7 @@ final class InstallPackageHelper { AppDataHelper appDataHelper, RemovePackageHelper removePackageHelper, DeletePackageHelper deletePackageHelper, - BroadcastHelper broadcastHelper, - InstallDependencyHelper installDependencyHelper) { + BroadcastHelper broadcastHelper) { mPm = pm; mInjector = pm.mInjector; mAppDataHelper = appDataHelper; @@ -255,7 +253,6 @@ final class InstallPackageHelper { mPackageAbiHelper = pm.mInjector.getAbiHelper(); mSharedLibraries = pm.mInjector.getSharedLibrariesImpl(); mUpdateOwnershipHelper = pm.mInjector.getUpdateOwnershipHelper(); - mInstallDependencyHelper = installDependencyHelper; } /** @@ -1367,10 +1364,6 @@ final class InstallPackageHelper { } } } - - for (InstallRequest request : requests) { - mInstallDependencyHelper.notifySessionComplete(request.getSessionId(), success); - } } @GuardedBy("mPm.mInstallLock") diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 47b785040d44..ceb931400d48 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -2329,6 +2329,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } } + mInstallDependencyHelper.notifySessionComplete(session.sessionId, success); + final File appIconFile = buildAppIconFile(session.sessionId); if (appIconFile.exists()) { appIconFile.delete(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 040b1943b23d..ab26f024a18a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2118,8 +2118,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService mDeletePackageHelper = new DeletePackageHelper(this, mRemovePackageHelper, mBroadcastHelper); mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper, mRemovePackageHelper, - mDeletePackageHelper, mBroadcastHelper, - injector.getPackageInstallerService().getInstallDependencyHelper()); + mDeletePackageHelper, mBroadcastHelper); mInstantAppRegistry = new InstantAppRegistry(mContext, mPermissionManager, mInjector.getUserManagerInternal(), mDeletePackageHelper); diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java index 405024cc0e34..769f071e3ddc 100644 --- a/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java @@ -134,7 +134,7 @@ public class ApexManagerTest { mMockSystem.system().validateFinalState(); mInstallPackageHelper = new InstallPackageHelper(mPmService, mock(AppDataHelper.class), mock(RemovePackageHelper.class), mock(DeletePackageHelper.class), - mock(BroadcastHelper.class), mock(InstallDependencyHelper.class)); + mock(BroadcastHelper.class)); } @NonNull -- cgit v1.2.3-59-g8ed1b