Chromium Code Reviews| Index: chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java |
| diff --git a/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java |
| index bb1e2ec37140302172b5b7efc06dda697d881154..14d656ffb7c440a998c69acc4cf8401e2f68feba 100644 |
| --- a/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java |
| +++ b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkValidator.java |
| @@ -16,6 +16,7 @@ import android.content.pm.Signature; |
| import android.util.Log; |
| import java.util.Arrays; |
| +import java.util.LinkedList; |
| import java.util.List; |
| /** |
| @@ -40,11 +41,38 @@ public class WebApkValidator { |
| * handled by a WebAPK. |
| */ |
| public static String queryWebApkPackage(Context context, String url) { |
| + return findWebApkPackage(context, resolveInfosForUrl(context, url)); |
| + } |
| + |
| + /** |
| + * Queries the PackageManager to determine whether a WebAPK can handle the URL. Ignores |
| + * whether the user has selected a default handler for the URL and whether the default |
| + * handler is the WebAPK. |
| + * |
| + * NOTE: This can fail if multiple WebAPKs can match the supplied url. |
|
nyquist
2017/02/28 07:04:19
What does fail mean in this scenario? From the cod
gonzalon
2017/02/28 16:12:24
Yes, I added a clarification on the comment about
|
| + * |
| + * @param context The application context. |
| + * @param url The url to check. |
|
nyquist
2017/02/28 07:04:19
Nit: Comments are written in normal English, so UR
gonzalon
2017/02/28 16:12:24
Done.
|
| + * @return Resolve Info of a WebAPK which can handle the URL. Null if the url should not be |
| + * handled by a WebAPK. |
| + */ |
| + public static ResolveInfo queryResolveInfo(Context context, String url) { |
| + return findResolveInfo(context, resolveInfosForUrl(context, url)); |
| + } |
| + |
| + /** |
| + * Fetches the list of resolve infos from the PackageManager that can handle the URL. |
|
nyquist
2017/02/28 07:04:19
{@link ResolveInfo}s
gonzalon
2017/02/28 16:12:24
Done.
|
| + * |
| + * @param context The application context. |
| + * @param url The url to check. |
| + * @return The list of resolve infos found that can handle the URL. |
| + */ |
| + private static List<ResolveInfo> resolveInfosForUrl(Context context, String url) { |
|
nyquist
2017/02/28 07:04:19
Would you want to annotate this with @Nonnull and/
gonzalon
2017/02/28 16:12:23
Done.
|
| Intent intent; |
| try { |
| intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); |
| } catch (Exception e) { |
| - return null; |
| + return new LinkedList<>(); |
| } |
| intent.addCategory(Intent.CATEGORY_BROWSABLE); |
| @@ -54,10 +82,8 @@ public class WebApkValidator { |
| selector.addCategory(Intent.CATEGORY_BROWSABLE); |
| selector.setComponent(null); |
| } |
| - |
| - List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities( |
| + return context.getPackageManager().queryIntentActivities( |
| intent, PackageManager.GET_RESOLVED_FILTER); |
| - return findWebApkPackage(context, resolveInfos); |
| } |
| /** |
| @@ -67,10 +93,24 @@ public class WebApkValidator { |
| * ResolveInfos corresponds to a WebAPK. |
| */ |
| public static String findWebApkPackage(Context context, List<ResolveInfo> infos) { |
| + ResolveInfo resolveInfo = findResolveInfo(context, infos); |
| + if (resolveInfo != null) { |
| + return resolveInfo.activityInfo.packageName; |
| + } |
| + return null; |
| + } |
| + |
| + /** |
| + * @param context The context to use to check whether WebAPK is valid. |
| + * @param infos The ResolveInfos to search. |
| + * @return ResolveInfo which corresponds to a WebAPK. Null if none of the ResolveInfos |
| + * corresponds to a WebAPK. |
| + */ |
| + private static ResolveInfo findResolveInfo(Context context, List<ResolveInfo> infos) { |
| for (ResolveInfo info : infos) { |
| if (info.activityInfo != null |
| && isValidWebApk(context, info.activityInfo.packageName)) { |
| - return info.activityInfo.packageName; |
| + return info; |
| } |
| } |
| return null; |