Search in sources :

Example 1 with ActivityIntentInfo

use of android.content.pm.PackageParser.ActivityIntentInfo in project platform_frameworks_base by android.

the class PackageManagerService method verifyIntentFiltersIfNeeded.

private void verifyIntentFiltersIfNeeded(int userId, int verifierUid, boolean replacing, PackageParser.Package pkg) {
    int size = pkg.activities.size();
    if (size == 0) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "No activity, so no need to verify any IntentFilter!");
        return;
    }
    final boolean hasDomainURLs = hasDomainURLs(pkg);
    if (!hasDomainURLs) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "No domain URLs, so no need to verify any IntentFilter!");
        return;
    }
    if (DEBUG_DOMAIN_VERIFICATION)
        Slog.d(TAG, "Checking for userId:" + userId + " if any IntentFilter from the " + size + " Activities needs verification ...");
    int count = 0;
    final String packageName = pkg.packageName;
    synchronized (mPackages) {
        // package, we have nothing to do: it means the state was restored from backup.
        if (!replacing) {
            IntentFilterVerificationInfo ivi = mSettings.getIntentFilterVerificationLPr(packageName);
            if (ivi != null) {
                if (DEBUG_DOMAIN_VERIFICATION) {
                    Slog.i(TAG, "Package " + packageName + " already verified: status=" + ivi.getStatusString());
                }
                return;
            }
        }
        // If any filters need to be verified, then all need to be.
        boolean needToVerify = false;
        for (PackageParser.Activity a : pkg.activities) {
            for (ActivityIntentInfo filter : a.intents) {
                if (filter.needsVerification() && needsNetworkVerificationLPr(filter)) {
                    if (DEBUG_DOMAIN_VERIFICATION) {
                        Slog.d(TAG, "Intent filter needs verification, so processing all filters");
                    }
                    needToVerify = true;
                    break;
                }
            }
        }
        if (needToVerify) {
            final int verificationId = mIntentFilterVerificationToken++;
            for (PackageParser.Activity a : pkg.activities) {
                for (ActivityIntentInfo filter : a.intents) {
                    if (filter.handlesWebUris(true) && needsNetworkVerificationLPr(filter)) {
                        if (DEBUG_DOMAIN_VERIFICATION)
                            Slog.d(TAG, "Verification needed for IntentFilter:" + filter.toString());
                        mIntentFilterVerifier.addOneIntentFilterVerification(verifierUid, userId, verificationId, filter, packageName);
                        count++;
                    }
                }
            }
        }
    }
    if (count > 0) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "Starting " + count + " IntentFilter verification" + (count > 1 ? "s" : "") + " for userId:" + userId);
        mIntentFilterVerifier.startVerifications(userId);
    } else {
        if (DEBUG_DOMAIN_VERIFICATION) {
            Slog.d(TAG, "No filters or not all autoVerify for " + packageName);
        }
    }
}
Also used : PackageParser(android.content.pm.PackageParser) IntentFilterVerificationInfo(android.content.pm.IntentFilterVerificationInfo) ActivityIntentInfo(android.content.pm.PackageParser.ActivityIntentInfo)

Example 2 with ActivityIntentInfo

use of android.content.pm.PackageParser.ActivityIntentInfo in project android_frameworks_base by DirtyUnicorns.

the class PackageManagerService method verifyIntentFiltersIfNeeded.

private void verifyIntentFiltersIfNeeded(int userId, int verifierUid, boolean replacing, PackageParser.Package pkg) {
    int size = pkg.activities.size();
    if (size == 0) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "No activity, so no need to verify any IntentFilter!");
        return;
    }
    final boolean hasDomainURLs = hasDomainURLs(pkg);
    if (!hasDomainURLs) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "No domain URLs, so no need to verify any IntentFilter!");
        return;
    }
    if (DEBUG_DOMAIN_VERIFICATION)
        Slog.d(TAG, "Checking for userId:" + userId + " if any IntentFilter from the " + size + " Activities needs verification ...");
    int count = 0;
    final String packageName = pkg.packageName;
    synchronized (mPackages) {
        // package, we have nothing to do: it means the state was restored from backup.
        if (!replacing) {
            IntentFilterVerificationInfo ivi = mSettings.getIntentFilterVerificationLPr(packageName);
            if (ivi != null) {
                if (DEBUG_DOMAIN_VERIFICATION) {
                    Slog.i(TAG, "Package " + packageName + " already verified: status=" + ivi.getStatusString());
                }
                return;
            }
        }
        // If any filters need to be verified, then all need to be.
        boolean needToVerify = false;
        for (PackageParser.Activity a : pkg.activities) {
            for (ActivityIntentInfo filter : a.intents) {
                if (filter.needsVerification() && needsNetworkVerificationLPr(filter)) {
                    if (DEBUG_DOMAIN_VERIFICATION) {
                        Slog.d(TAG, "Intent filter needs verification, so processing all filters");
                    }
                    needToVerify = true;
                    break;
                }
            }
        }
        if (needToVerify) {
            final int verificationId = mIntentFilterVerificationToken++;
            for (PackageParser.Activity a : pkg.activities) {
                for (ActivityIntentInfo filter : a.intents) {
                    if (filter.handlesWebUris(true) && needsNetworkVerificationLPr(filter)) {
                        if (DEBUG_DOMAIN_VERIFICATION)
                            Slog.d(TAG, "Verification needed for IntentFilter:" + filter.toString());
                        mIntentFilterVerifier.addOneIntentFilterVerification(verifierUid, userId, verificationId, filter, packageName);
                        count++;
                    }
                }
            }
        }
    }
    if (count > 0) {
        if (DEBUG_DOMAIN_VERIFICATION)
            Slog.d(TAG, "Starting " + count + " IntentFilter verification" + (count > 1 ? "s" : "") + " for userId:" + userId);
        mIntentFilterVerifier.startVerifications(userId);
    } else {
        if (DEBUG_DOMAIN_VERIFICATION) {
            Slog.d(TAG, "No filters or not all autoVerify for " + packageName);
        }
    }
}
Also used : PackageParser(android.content.pm.PackageParser) IntentFilterVerificationInfo(android.content.pm.IntentFilterVerificationInfo) ActivityIntentInfo(android.content.pm.PackageParser.ActivityIntentInfo)

Example 3 with ActivityIntentInfo

use of android.content.pm.PackageParser.ActivityIntentInfo in project platform_frameworks_base by android.

the class PackageManagerService method primeDomainVerificationsLPw.

private void primeDomainVerificationsLPw(int userId) {
    if (DEBUG_DOMAIN_VERIFICATION) {
        Slog.d(TAG, "Priming domain verifications in user " + userId);
    }
    SystemConfig systemConfig = SystemConfig.getInstance();
    ArraySet<String> packages = systemConfig.getLinkedApps();
    ArraySet<String> domains = new ArraySet<String>();
    for (String packageName : packages) {
        PackageParser.Package pkg = mPackages.get(packageName);
        if (pkg != null) {
            if (!pkg.isSystemApp()) {
                Slog.w(TAG, "Non-system app '" + packageName + "' in sysconfig <app-link>");
                continue;
            }
            domains.clear();
            for (PackageParser.Activity a : pkg.activities) {
                for (ActivityIntentInfo filter : a.intents) {
                    if (hasValidDomains(filter)) {
                        domains.addAll(filter.getHostsList());
                    }
                }
            }
            if (domains.size() > 0) {
                if (DEBUG_DOMAIN_VERIFICATION) {
                    Slog.v(TAG, "      + " + packageName);
                }
                // 'Undefined' in the global IntentFilterVerificationInfo, i.e. the usual
                // state w.r.t. the formal app-linkage "no verification attempted" state;
                // and then 'always' in the per-user state actually used for intent resolution.
                final IntentFilterVerificationInfo ivi;
                ivi = mSettings.createIntentFilterVerificationIfNeededLPw(packageName, new ArrayList<String>(domains));
                ivi.setStatus(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED);
                mSettings.updateIntentFilterVerificationStatusLPw(packageName, INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS, userId);
            } else {
                Slog.w(TAG, "Sysconfig <app-link> package '" + packageName + "' does not handle web links");
            }
        } else {
            Slog.w(TAG, "Unknown package " + packageName + " in sysconfig <app-link>");
        }
    }
    scheduleWritePackageRestrictionsLocked(userId);
    scheduleWriteSettingsLocked();
}
Also used : SystemConfig(com.android.server.SystemConfig) ArraySet(android.util.ArraySet) PackageParser(android.content.pm.PackageParser) ArrayList(java.util.ArrayList) ActivityIntentInfo(android.content.pm.PackageParser.ActivityIntentInfo) IntentFilterVerificationInfo(android.content.pm.IntentFilterVerificationInfo)

Example 4 with ActivityIntentInfo

use of android.content.pm.PackageParser.ActivityIntentInfo in project android_frameworks_base by DirtyUnicorns.

the class PackageManagerService method primeDomainVerificationsLPw.

private void primeDomainVerificationsLPw(int userId) {
    if (DEBUG_DOMAIN_VERIFICATION) {
        Slog.d(TAG, "Priming domain verifications in user " + userId);
    }
    SystemConfig systemConfig = SystemConfig.getInstance();
    ArraySet<String> packages = systemConfig.getLinkedApps();
    ArraySet<String> domains = new ArraySet<String>();
    for (String packageName : packages) {
        PackageParser.Package pkg = mPackages.get(packageName);
        if (pkg != null) {
            if (!pkg.isSystemApp()) {
                Slog.w(TAG, "Non-system app '" + packageName + "' in sysconfig <app-link>");
                continue;
            }
            domains.clear();
            for (PackageParser.Activity a : pkg.activities) {
                for (ActivityIntentInfo filter : a.intents) {
                    if (hasValidDomains(filter)) {
                        domains.addAll(filter.getHostsList());
                    }
                }
            }
            if (domains.size() > 0) {
                if (DEBUG_DOMAIN_VERIFICATION) {
                    Slog.v(TAG, "      + " + packageName);
                }
                // 'Undefined' in the global IntentFilterVerificationInfo, i.e. the usual
                // state w.r.t. the formal app-linkage "no verification attempted" state;
                // and then 'always' in the per-user state actually used for intent resolution.
                final IntentFilterVerificationInfo ivi;
                ivi = mSettings.createIntentFilterVerificationIfNeededLPw(packageName, new ArrayList<String>(domains));
                ivi.setStatus(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED);
                mSettings.updateIntentFilterVerificationStatusLPw(packageName, INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS, userId);
            } else {
                Slog.w(TAG, "Sysconfig <app-link> package '" + packageName + "' does not handle web links");
            }
        } else {
            Slog.w(TAG, "Unknown package " + packageName + " in sysconfig <app-link>");
        }
    }
    scheduleWritePackageRestrictionsLocked(userId);
    scheduleWriteSettingsLocked();
}
Also used : SystemConfig(com.android.server.SystemConfig) ArraySet(android.util.ArraySet) PackageParser(android.content.pm.PackageParser) ArrayList(java.util.ArrayList) ActivityIntentInfo(android.content.pm.PackageParser.ActivityIntentInfo) IntentFilterVerificationInfo(android.content.pm.IntentFilterVerificationInfo)

Aggregations

IntentFilterVerificationInfo (android.content.pm.IntentFilterVerificationInfo)4 PackageParser (android.content.pm.PackageParser)4 ActivityIntentInfo (android.content.pm.PackageParser.ActivityIntentInfo)4 ArraySet (android.util.ArraySet)2 SystemConfig (com.android.server.SystemConfig)2 ArrayList (java.util.ArrayList)2