| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/document/DocumentUma.java
 | 
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/document/DocumentUma.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/document/DocumentUma.java
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..8f83a68d01748c346843fd6ce50cbaf6021ebca2
 | 
| --- /dev/null
 | 
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/document/DocumentUma.java
 | 
| @@ -0,0 +1,98 @@
 | 
| +// Copyright 2015 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +package org.chromium.chrome.browser.document;
 | 
| +
 | 
| +import android.content.Intent;
 | 
| +
 | 
| +import org.chromium.base.metrics.RecordHistogram;
 | 
| +import org.chromium.chrome.browser.BookmarkUtils;
 | 
| +import org.chromium.chrome.browser.IntentHandler;
 | 
| +import org.chromium.chrome.browser.util.IntentUtils;
 | 
| +
 | 
| +/**
 | 
| + * Records UMA relevant to Document mode.
 | 
| + */
 | 
| +public class DocumentUma {
 | 
| +    /**
 | 
| +     * Records what caused a DocumentActivity to be resumed.
 | 
| +     */
 | 
| +    static void recordStartedBy(int source) {
 | 
| +        RecordHistogram.recordSparseSlowlyHistogram("DocumentActivity.StartedBy", source);
 | 
| +    }
 | 
| +
 | 
| +    public static void recordInDocumentMode(boolean isInDocumentMode) {
 | 
| +        RecordHistogram.recordEnumeratedHistogram(
 | 
| +                "DocumentActivity.RunningMode", isInDocumentMode ? 0 : 1, 2);
 | 
| +    }
 | 
| +
 | 
| +    /**
 | 
| +     * Records UMA about the Intent fired to create a DocumentActivity.
 | 
| +     * @param packageName Name of the the application package.
 | 
| +     * @param intent Intent used to launch the Activity.
 | 
| +     */
 | 
| +    static void recordStartedBy(String packageName, Intent intent) {
 | 
| +        if (intent == null) {
 | 
| +            recordStartedBy(DocumentMetricIds.STARTED_BY_UNKNOWN);
 | 
| +            return;
 | 
| +        }
 | 
| +
 | 
| +        int intentSource = DocumentMetricIds.STARTED_BY_UNKNOWN;
 | 
| +        IntentHandler.ExternalAppId appId =
 | 
| +                IntentHandler.determineExternalIntentSource(packageName, intent);
 | 
| +
 | 
| +        if (intent.hasExtra(IntentHandler.EXTRA_STARTED_BY)) {
 | 
| +            intentSource = IntentUtils.safeGetIntExtra(intent,
 | 
| +                    IntentHandler.EXTRA_STARTED_BY, DocumentMetricIds.STARTED_BY_UNKNOWN);
 | 
| +        } else if (IntentUtils.safeGetBooleanExtra(intent,
 | 
| +                BookmarkUtils.REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, false)) {
 | 
| +            // TODO(dfalcantara): Add a new a boolean instead of piggybacking on this Intent extra.
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_LAUNCHER;
 | 
| +        } else if (IntentUtils.safeGetBooleanExtra(
 | 
| +                intent, IntentHandler.EXTRA_APPEND_TASK, false)) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_SEARCH_RESULT_PAGE;
 | 
| +        } else if (IntentUtils.safeGetBooleanExtra(
 | 
| +                intent, IntentHandler.EXTRA_PRESERVE_TASK, false)) {
 | 
| +            // TODO(dfalcantara): Figure out how split apart Intents fired by the search box.
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_SEARCH_SUGGESTION_EXTERNAL;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.GMAIL) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_GMAIL;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.FACEBOOK) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_FACEBOOK;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.PLUS) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_PLUS;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.TWITTER) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_TWITTER;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.CHROME) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_CHROME;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.HANGOUTS) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_HANGOUTS;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.MESSENGER) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_MESSENGER;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.NEWS) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_NEWS;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.LINE) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_LINE;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.WHATSAPP) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_WHATSAPP;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.GSA) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_GSA;
 | 
| +        } else if (appId == IntentHandler.ExternalAppId.OTHER) {
 | 
| +            intentSource = DocumentMetricIds.STARTED_BY_EXTERNAL_APP_OTHER;
 | 
| +        }
 | 
| +
 | 
| +        if (intentSource == DocumentMetricIds.STARTED_BY_UNKNOWN) {
 | 
| +            android.util.Log.d("DocumentUma", "Unknown source detected");
 | 
| +        }
 | 
| +
 | 
| +        if (intentSource >= DocumentMetricIds.STARTED_BY_EXTERNAL_APP_GMAIL
 | 
| +                && intentSource < DocumentMetricIds.STARTED_BY_CONTEXTUAL_SEARCH) {
 | 
| +            // Document activity was started from an external app, record which one.
 | 
| +            RecordHistogram.recordEnumeratedHistogram("MobileIntent.PageLoadDueToExternalApp",
 | 
| +                    appId.ordinal(), IntentHandler.ExternalAppId.INDEX_BOUNDARY.ordinal());
 | 
| +        }
 | 
| +
 | 
| +        recordStartedBy(intentSource);
 | 
| +    }
 | 
| +}
 | 
| 
 |