Categorize undispatched VIEW intents sent to .Main alias.

Bug: 789732
Change-Id: I660cad683bcc96772ddb5fc25f1a94ae8a988bb6
Reviewed-on: https://chromium-review.googlesource.com/803617
Commit-Queue: Dmitry Skiba <dskiba@chromium.org>
Reviewed-by: Maria Khomenko <mariakhomenko@chromium.org>
Reviewed-by: Ilya Sherman <isherman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521224}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index c80d552..1c44af8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -46,6 +46,7 @@
 import org.chromium.base.VisibleForTesting;
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.metrics.CachedMetrics.BooleanHistogramSample;
+import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
@@ -236,6 +237,10 @@
     private static final BooleanHistogramSample sExplicitMainViewIntentDispatchedOnNewIntent =
             new BooleanHistogramSample(
                     "Android.MainActivity.ExplicitMainViewIntentDispatched.OnNewIntent");
+    private static final EnumeratedHistogramSample sUndispatchedExplicitMainViewIntentSource =
+            new EnumeratedHistogramSample(
+                    "Android.MainActivity.UndispatchedExplicitMainViewIntentSource",
+                    IntentHandler.ExternalAppId.INDEX_BOUNDARY.ordinal());
 
     private final ActivityStopMetrics mActivityStopMetrics;
     private final MainIntentBehaviorMetrics mMainIntentMetrics;
@@ -435,6 +440,12 @@
             @LaunchIntentDispatcher.Action
             int action = LaunchIntentDispatcher.dispatchToCustomTabActivity(this, intent);
             dispatchedHistogram.record(action != LaunchIntentDispatcher.Action.CONTINUE);
+            if (action == LaunchIntentDispatcher.Action.CONTINUE) {
+                // Intent was not dispatched, record its source.
+                IntentHandler.ExternalAppId externalId =
+                        IntentHandler.determineExternalIntentSource(getPackageName(), intent);
+                sUndispatchedExplicitMainViewIntentSource.record(externalId.ordinal());
+            }
             return action;
         }
         return LaunchIntentDispatcher.Action.CONTINUE;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
index 0f475e8..4866b55 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
@@ -204,6 +204,7 @@
 
     /**
      * Represents popular external applications that can load a page in Chrome via intent.
+     * DO NOT reorder items in this enum, because it's mirrored to UMA (as ClientAppId).
      */
     public static enum ExternalAppId {
         OTHER,
@@ -219,6 +220,7 @@
         WHATSAPP,
         GSA,
         WEBAPK,
+        // Update ClientAppId in enums.xml when adding new items.
         INDEX_BOUNDARY
     }
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index ffb68cd..8690a3a4 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -5629,6 +5629,7 @@
   <int value="9" label="Line"/>
   <int value="10" label="Whatsapp"/>
   <int value="11" label="Gsa"/>
+  <int value="12" label="WebAPK"/>
 </enum>
 
 <enum name="ClipboardAction">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index aac34fb..719dbdb 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -1155,6 +1155,15 @@
   </summary>
 </histogram>
 
+<histogram name="Android.MainActivity.UndispatchedExplicitMainViewIntentSource"
+    enum="ClientAppId">
+  <owner>dskiba@chromium.org</owner>
+  <summary>
+    Sources (ExternalAppId) of undispatched VIEW intents sent explicitly to
+    .Main activity alias.
+  </summary>
+</histogram>
+
 <histogram name="Android.ManageSpace.ActionTaken"
     enum="AndroidManageSpaceButton">
   <owner>dmurph@chromium.org</owner>