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

Commit 7b5efcae authored by Victor Hsieh's avatar Victor Hsieh Committed by Android (Google) Code Review
Browse files

Merge "Extract code into methods from recordMeasurementsForAllPackages"

parents 48ae0d86 ad476304
Loading
Loading
Loading
Loading
+89 −60
Original line number Diff line number Diff line
@@ -278,16 +278,54 @@ public class BinaryTransparencyService extends SystemService {
                    + " and is now updated to: " + currentTimeMs);
            mMeasurementsLastRecordedMs = currentTimeMs;

            PackageManager pm = mContext.getPackageManager();
            Set<String> packagesMeasured = new HashSet<>();

            // measure all APEXs first
            if (DEBUG) {
                Slog.d(TAG, "Measuring APEXs...");
            }
            for (PackageInfo packageInfo : getCurrentInstalledApexs()) {
                packagesMeasured.add(packageInfo.packageName);
            List<IBinaryTransparencyService.ApexInfo> allApexInfo = collectAllApexInfo();
            for (IBinaryTransparencyService.ApexInfo apexInfo : allApexInfo) {
                packagesMeasured.add(apexInfo.packageName);

                recordApexInfo(apexInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering APEXs.");
            }

            // proceed with all preloaded apps
            List<IBinaryTransparencyService.AppInfo> allUpdatedPreloadInfo =
                    collectAllUpdatedPreloadInfo(packagesMeasured);
            for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) {
                packagesMeasured.add(appInfo.packageName);
                writeAppInfoToLog(appInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering preloads");
            }

            if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) {
                // lastly measure all newly installed MBAs
                List<IBinaryTransparencyService.AppInfo> allMbaInfo =
                        collectAllMbaInfo(packagesMeasured);
                for (IBinaryTransparencyService.AppInfo appInfo : allUpdatedPreloadInfo) {
                    packagesMeasured.add(appInfo.packageName);
                    writeAppInfoToLog(appInfo);
                }
            }
            if (DEBUG) {
                long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs;
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages altogether in " + timeSpentMeasuring + "ms");
            }
        }

        private List<IBinaryTransparencyService.ApexInfo> collectAllApexInfo() {
            var results = new ArrayList<IBinaryTransparencyService.ApexInfo>();
            for (PackageInfo packageInfo : getCurrentInstalledApexs()) {
                Bundle apexMeasurement = measurePackage(packageInfo);

                var apexInfo = new IBinaryTransparencyService.ApexInfo();
@@ -299,22 +337,21 @@ public class BinaryTransparencyService extends SystemService {
                apexInfo.signerDigests =
                        computePackageSignerSha256Digests(packageInfo.signingInfo);

                recordApexInfo(apexInfo);
                results.add(apexInfo);
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering APEXs.");
            return results;
        }

            // proceed with all preloaded apps
        private List<IBinaryTransparencyService.AppInfo> collectAllUpdatedPreloadInfo(
                Set<String> packagesToSkip) {
            var results = new ArrayList<IBinaryTransparencyService.AppInfo>();
            PackageManager pm = mContext.getPackageManager();
            for (PackageInfo packageInfo : pm.getInstalledPackages(
                    PackageManager.PackageInfoFlags.of(PackageManager.MATCH_FACTORY_ONLY
                            | PackageManager.GET_SIGNING_CERTIFICATES))) {
                if (packagesMeasured.contains(packageInfo.packageName)) {
                if (packagesToSkip.contains(packageInfo.packageName)) {
                    continue;
                }
                packagesMeasured.add(packageInfo.packageName);

                int mbaStatus = MBA_STATUS_PRELOADED;
                if (packageInfo.signingInfo == null) {
                    Slog.d(TAG, "Preload " + packageInfo.packageName  + " at "
@@ -347,24 +384,21 @@ public class BinaryTransparencyService extends SystemService {
                            computePackageSignerSha256Digests(packageInfo.signingInfo);
                    appInfo.mbaStatus = mbaStatus;

                    writeAppInfoToLog(appInfo);
                    results.add(appInfo);
                }
            }
            if (DEBUG) {
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages after considering preloads");
            return results;
        }

            if (CompatChanges.isChangeEnabled(LOG_MBA_INFO)) {
                // lastly measure all newly installed MBAs
        private List<IBinaryTransparencyService.AppInfo> collectAllMbaInfo(
                Set<String> packagesToSkip) {
            var results = new ArrayList<IBinaryTransparencyService.AppInfo>();
            for (PackageInfo packageInfo : getNewlyInstalledMbas()) {
                    if (packagesMeasured.contains(packageInfo.packageName)) {
                if (packagesToSkip.contains(packageInfo.packageName)) {
                    continue;
                }
                    packagesMeasured.add(packageInfo.packageName);

                Bundle packageMeasurement = measurePackage(packageInfo);

                if (DEBUG) {
                    Slog.d(TAG,
                            "Extracting InstallSourceInfo for " + packageInfo.packageName);
@@ -394,14 +428,9 @@ public class BinaryTransparencyService extends SystemService {
                    appInfo.originator = installSourceInfo.getOriginatingPackageName();
                }

                    writeAppInfoToLog(appInfo);
                }
            }
            if (DEBUG) {
                long timeSpentMeasuring = System.currentTimeMillis() - currentTimeMs;
                Slog.d(TAG, "Measured " + packagesMeasured.size()
                        + " packages altogether in " + timeSpentMeasuring + "ms");
                results.add(appInfo);
            }
            return results;
        }

        private void recordApexInfo(IBinaryTransparencyService.ApexInfo apexInfo) {