Chromium Code Reviews| 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..b1b4a51182be4679ffdd2f44f7a80b2390177260 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 |
| @@ -37,6 +37,7 @@ import org.chromium.chrome.browser.ChromeTabbedActivity2; |
| import org.chromium.chrome.browser.IntentHandler; |
| import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
| import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult; |
| +import org.chromium.chrome.browser.rappor.RapporServiceBridge; |
| import org.chromium.chrome.browser.tab.Tab; |
| import org.chromium.chrome.browser.util.FeatureUtilities; |
| import org.chromium.chrome.browser.util.UrlUtilities; |
| @@ -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); |
| + recordExternalNavigationPackageName(intent); |
| } catch (RuntimeException e) { |
| logTransactionTooLargeOrRethrow(e, intent); |
| } |
| @@ -319,6 +323,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat |
| @Override |
| public boolean startActivityIfNeeded(Intent intent) { |
| + boolean result; |
|
gone
2016/06/29 16:30:44
activityWasLaunched? result isn't too meaningful
|
| // 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); |
| + result = ((Activity) context).startActivityIfNeeded(intent, -1); |
| } else { |
| - return false; |
| + result = false; |
| } |
| + if (result) recordExternalNavigationPackageName(intent); |
| + return result; |
| } catch (RuntimeException e) { |
| logTransactionTooLargeOrRethrow(e, intent); |
| return false; |
| @@ -338,6 +345,16 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat |
| } |
| } |
| + private void recordExternalNavigationPackageName(Intent intent) { |
| + List<String> packages = intent.getStringArrayListExtra( |
| + IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES); |
| + if (packages != null) { |
|
gone
2016/06/29 16:30:44
early return instead to avoid the extra indentatio
|
| + for (String name : packages) { |
| + RapporServiceBridge.sampleString("Android.ExternalNavigationOption", name); |
| + } |
| + } |
| + } |
| + |
| @Override |
| public void startIncognitoIntent(final Intent intent, final String referrerUrl, |
| final String fallbackUrl, final Tab tab, final boolean needsToCloseTab) { |
| @@ -522,4 +539,10 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat |
| return PDF_EXTENSION.equals(fileExtension); |
| } |
| + |
| + @Override |
| + public void maybeSetAppHandlers(Intent intent, List<ResolveInfo> infos) { |
|
gone
2016/06/29 16:30:44
maybeRecordAppHandlersInIntent?
|
| + intent.putExtra(IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES, |
| + getSpecializedHandlersWithFilter(infos, null)); |
| + } |
| } |