Mark all installations using PMSC as "ADB".

This will allow tests to disable verification on case-by-case basis.

Bug: 224017187
Bug: 220086205
Test: atest PackageManagerShellCommandTest ResourcesHardeningTest PackageManagerShellCommandIncrementalTest ChecksumsTest
Change-Id: Ie0e77f1cbc52b7fe56e00e8b0b36f47b2422391b
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index aa5f39f..002d500 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -640,7 +640,8 @@
                 && params.installerPackageName.length() < SessionParams.MAX_PACKAGE_NAME_LENGTH)
                 ? params.installerPackageName : installerPackageName;
 
-        if ((callingUid == Process.SHELL_UID) || (callingUid == Process.ROOT_UID)) {
+        if ((callingUid == Process.SHELL_UID) || (callingUid == Process.ROOT_UID)
+                || PackageInstallerSession.isSystemDataLoaderInstallation(params)) {
             params.installFlags |= PackageManager.INSTALL_FROM_ADB;
             // adb installs can override the installingPackageName, but not the
             // initiatingPackageName
@@ -666,8 +667,7 @@
                     && !mPm.isCallerVerifier(snapshot, callingUid)) {
                 params.installFlags &= ~PackageManager.INSTALL_VIRTUAL_PRELOAD;
             }
-            if (mContext.checkCallingOrSelfPermission(
-                    Manifest.permission.INSTALL_TEST_ONLY_PACKAGE)
+            if (mContext.checkCallingOrSelfPermission(Manifest.permission.INSTALL_TEST_ONLY_PACKAGE)
                     != PackageManager.PERMISSION_GRANTED) {
                 params.installFlags &= ~PackageManager.INSTALL_ALLOW_TEST;
             }
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index beb1986..5ba4cc1 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -29,7 +29,6 @@
 import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK;
 import static android.content.pm.PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE;
 import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SPLIT;
-import static android.content.pm.PackageManager.INSTALL_FROM_ADB;
 import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
 import static android.content.pm.PackageManager.INSTALL_STAGED;
 import static android.content.pm.PackageManager.INSTALL_SUCCEEDED;
@@ -705,6 +704,18 @@
         }
     };
 
+    static boolean isDataLoaderInstallation(SessionParams params) {
+        return params.dataLoaderParams != null;
+    }
+
+    static boolean isSystemDataLoaderInstallation(SessionParams params) {
+        if (!isDataLoaderInstallation(params)) {
+            return false;
+        }
+        return SYSTEM_DATA_LOADER_PACKAGE.equals(
+                params.dataLoaderParams.getComponentName().getPackageName());
+    }
+
     private final Handler.Callback mHandlerCallback = new Handler.Callback() {
         @Override
         public boolean handleMessage(Message msg) {
@@ -744,7 +755,7 @@
     };
 
     private boolean isDataLoaderInstallation() {
-        return params.dataLoaderParams != null;
+        return isDataLoaderInstallation(this.params);
     }
 
     private boolean isStreamingInstallation() {
@@ -756,11 +767,7 @@
     }
 
     private boolean isSystemDataLoaderInstallation() {
-        if (!isDataLoaderInstallation()) {
-            return false;
-        }
-        return SYSTEM_DATA_LOADER_PACKAGE.equals(
-                this.params.dataLoaderParams.getComponentName().getPackageName());
+        return isSystemDataLoaderInstallation(this.params);
     }
 
     /**
@@ -957,17 +964,12 @@
                         "DataLoader installation of APEX modules is not allowed.");
             }
 
-            if (isSystemDataLoaderInstallation()) {
-                if (mContext.checkCallingOrSelfPermission(
-                        Manifest.permission.USE_SYSTEM_DATA_LOADERS)
-                        != PackageManager.PERMISSION_GRANTED) {
-                    throw new SecurityException("You need the "
-                            + "com.android.permission.USE_SYSTEM_DATA_LOADERS permission "
-                            + "to use system data loaders");
-                }
-
-                // All installations using system dataloaders marked as ADB.
-                this.params.installFlags |= INSTALL_FROM_ADB;
+            if (isSystemDataLoaderInstallation() && mContext.checkCallingOrSelfPermission(
+                    Manifest.permission.USE_SYSTEM_DATA_LOADERS)
+                    != PackageManager.PERMISSION_GRANTED) {
+                throw new SecurityException("You need the "
+                        + "com.android.permission.USE_SYSTEM_DATA_LOADERS permission "
+                        + "to use system data loaders");
             }
         }
 
@@ -1264,13 +1266,21 @@
             return;
         }
 
-        final String initiatingPackageName = getInstallSource().initiatingPackageName;
+        final String installerPackageName;
+        if (!TextUtils.isEmpty(getInstallSource().initiatingPackageName)) {
+            installerPackageName = getInstallSource().initiatingPackageName;
+        } else {
+            installerPackageName = getInstallSource().installerPackageName;
+        }
+        if (TextUtils.isEmpty(installerPackageName)) {
+            throw new IllegalStateException("Installer package is empty.");
+        }
 
         final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
-        appOps.checkPackage(Binder.getCallingUid(), initiatingPackageName);
+        appOps.checkPackage(Binder.getCallingUid(), installerPackageName);
 
         final PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class);
-        final AndroidPackage callingInstaller = pmi.getPackage(initiatingPackageName);
+        final AndroidPackage callingInstaller = pmi.getPackage(installerPackageName);
         if (callingInstaller == null) {
             throw new IllegalStateException("Can't obtain calling installer's package.");
         }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b1b05be..c7a101e 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1254,9 +1254,18 @@
         if (applicationInfo == null) {
             throw new ParcelableException(new PackageManager.NameNotFoundException(packageName));
         }
+
         final InstallSourceInfo installSourceInfo = snapshot.getInstallSourceInfo(packageName);
-        final String installerPackageName =
-                installSourceInfo != null ? installSourceInfo.getInitiatingPackageName() : null;
+        final String installerPackageName;
+        if (installSourceInfo != null) {
+            if (!TextUtils.isEmpty(installSourceInfo.getInitiatingPackageName())) {
+                installerPackageName = installSourceInfo.getInitiatingPackageName();
+            } else {
+                installerPackageName = installSourceInfo.getInstallingPackageName();
+            }
+        } else {
+            installerPackageName = null;
+        }
 
         List<Pair<String, File>> filesToChecksum = new ArrayList<>();
 
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 0e96567..a49577b 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -111,6 +111,11 @@
                             true);
 }
 
+static bool getEnableReadTimeoutsAfterInstall() {
+    return android::base::GetBoolProperty("debug.incremental.enable_read_timeouts_after_install",
+                                          true);
+}
+
 static bool getEnforceReadLogsMaxIntervalForSystemDataLoaders() {
     return android::base::GetBoolProperty("debug.incremental.enforce_readlogs_max_interval_for_"
                                           "system_dataloaders",
@@ -853,7 +858,7 @@
 
     // Always enable long read timeouts after installation is complete.
     std::unique_lock l(ifs->lock);
-    ifs->setReadTimeoutsRequested(true);
+    ifs->setReadTimeoutsRequested(getEnableReadTimeoutsAfterInstall());
     applyStorageParamsLocked(*ifs);
 }