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)); |
+ } |
} |