| Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| index 1f3e92d29ee40979c3c4066c8b3e75b407ff8e2e..90ef41b24c55bfe454b25e1ee16a8f9092b24e50 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java
|
| @@ -30,6 +30,7 @@ import org.chromium.base.ApplicationStatus;
|
| import org.chromium.base.ContextUtils;
|
| import org.chromium.base.PathUtils;
|
| import org.chromium.base.ThreadUtils;
|
| +import org.chromium.base.metrics.RecordUserAction;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ChromeActivity;
|
| import org.chromium.chrome.browser.ChromeFeatureList;
|
| @@ -47,6 +48,7 @@ import org.chromium.ui.base.WindowAndroid;
|
| import org.chromium.ui.base.WindowAndroid.PermissionCallback;
|
| import org.chromium.webapk.lib.client.WebApkValidator;
|
|
|
| +import java.util.ArrayList;
|
| import java.util.List;
|
|
|
| /**
|
| @@ -239,13 +241,14 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
|
|
| @Override
|
| public int countSpecializedHandlers(List<ResolveInfo> infos) {
|
| - return countSpecializedHandlersWithFilter(infos, null);
|
| + return getSpecializedHandlersWithFilter(infos, null).size();
|
| }
|
|
|
| - static int countSpecializedHandlersWithFilter(
|
| + static ArrayList<String> getSpecializedHandlersWithFilter(
|
| List<ResolveInfo> infos, String filterPackageName) {
|
| + ArrayList<String> result = new ArrayList<String>();
|
| if (infos == null) {
|
| - return 0;
|
| + return result;
|
| }
|
|
|
| int count = 0;
|
| @@ -266,9 +269,9 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| continue;
|
| }
|
|
|
| - ++count;
|
| + result.add(info.activityInfo.packageName);
|
| }
|
| - return count;
|
| + return result;
|
| }
|
|
|
| /**
|
| @@ -285,7 +288,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| try {
|
| List<ResolveInfo> handlers = context.getPackageManager().queryIntentActivities(
|
| intent, PackageManager.GET_RESOLVED_FILTER);
|
| - return countSpecializedHandlersWithFilter(handlers, packageName) > 0;
|
| + return getSpecializedHandlersWithFilter(handlers, packageName).size() > 0;
|
| } catch (RuntimeException e) {
|
| logTransactionTooLargeOrRethrow(e, intent);
|
| }
|
| @@ -312,6 +315,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| Context context = getAvailableContext();
|
| if (!(context instanceof Activity)) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
| context.startActivity(intent);
|
| + RecordUserAction.record("MobileExternalNavigationDispatched");
|
| } catch (RuntimeException e) {
|
| logTransactionTooLargeOrRethrow(e, intent);
|
| }
|
| @@ -319,6 +323,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
|
|
| @Override
|
| public boolean startActivityIfNeeded(Intent intent) {
|
| + boolean activityWasLaunched;
|
| // Only touches disk on Kitkat. See http://crbug.com/617725 for more context.
|
| StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
|
| StrictMode.allowThreadDiskReads();
|
| @@ -326,10 +331,12 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
| forcePdfViewerAsIntentHandlerIfNeeded(mApplicationContext, intent);
|
| Context context = getAvailableContext();
|
| if (context instanceof Activity) {
|
| - return ((Activity) context).startActivityIfNeeded(intent, -1);
|
| + activityWasLaunched = ((Activity) context).startActivityIfNeeded(intent, -1);
|
| } else {
|
| - return false;
|
| + activityWasLaunched = false;
|
| }
|
| + if (activityWasLaunched) RecordUserAction.record("MobileExternalNavigationDispatched");
|
| + return activityWasLaunched;
|
| } catch (RuntimeException e) {
|
| logTransactionTooLargeOrRethrow(e, intent);
|
| return false;
|
| @@ -522,4 +529,10 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
|
|
|
| return PDF_EXTENSION.equals(fileExtension);
|
| }
|
| +
|
| + @Override
|
| + public void maybeRecordAppHandlersInIntent(Intent intent, List<ResolveInfo> infos) {
|
| + intent.putExtra(IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES,
|
| + getSpecializedHandlersWithFilter(infos, null));
|
| + }
|
| }
|
|
|