Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3858)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java

Issue 2096073002: Record how often we end up in Chrome from external navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add null check for activity info. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..d6e13f807a97b27f2f8d4fb0672cf4f761f25188 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,8 @@ import org.chromium.base.ApplicationStatus;
import org.chromium.base.ContextUtils;
import org.chromium.base.PathUtils;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
+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 +49,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 +242,15 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
@Override
public int countSpecializedHandlers(List<ResolveInfo> infos) {
- return countSpecializedHandlersWithFilter(infos, null);
+ return getSpecializedHandlersWithFilter(infos, null).size();
}
- static int countSpecializedHandlersWithFilter(
+ @VisibleForTesting
+ 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 +271,9 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
continue;
}
- ++count;
+ result.add(info.activityInfo != null ? info.activityInfo.packageName : "");
}
- return count;
+ return result;
}
/**
@@ -285,7 +290,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 +317,7 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
Context context = getAvailableContext();
if (!(context instanceof Activity)) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
+ recordExternalNavigationDispatched(intent);
} catch (RuntimeException e) {
logTransactionTooLargeOrRethrow(e, intent);
}
@@ -319,6 +325,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 +333,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) recordExternalNavigationDispatched(intent);
+ return activityWasLaunched;
} catch (RuntimeException e) {
logTransactionTooLargeOrRethrow(e, intent);
return false;
@@ -338,6 +347,14 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
}
}
+ private void recordExternalNavigationDispatched(Intent intent) {
+ ArrayList<String> specializedHandlers = intent.getStringArrayListExtra(
+ IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES);
+ if (specializedHandlers != null && specializedHandlers.size() > 0) {
+ RecordUserAction.record("MobileExternalNavigationDispatched");
+ }
+ }
+
@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 maybeRecordAppHandlersInIntent(Intent intent, List<ResolveInfo> infos) {
+ intent.putExtra(IntentHandler.EXTRA_EXTERNAL_NAV_PACKAGES,
+ getSpecializedHandlersWithFilter(infos, null));
+ }
}

Powered by Google App Engine
This is Rietveld 408576698