Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
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 6ea48095ad3cec016f3533bb3fdc9f9ae29726c9..1431d7ddbc85a2a6f9ec4f4bd4d03397192340b2 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
@@ -774,6 +774,12 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
public void processUrlViewIntent(String url, String referer, String headers, |
TabOpenType tabOpenType, String externalAppId, int tabIdToBringToFront, |
boolean hasUserGesture, Intent intent) { |
+ if (isFromChrome(intent, externalAppId)) { |
+ RecordUserAction.record("MobileTabbedModeViewIntentFromChrome"); |
+ } else { |
+ RecordUserAction.record("MobileTabbedModeViewIntentFromApp"); |
+ } |
+ |
TabModel tabModel = getCurrentTabModel(); |
boolean fromLauncherShortcut = IntentUtils.safeGetBooleanExtra( |
intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false); |
@@ -794,7 +800,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
} else { |
launchIntent(url, referer, headers, externalAppId, true, intent); |
} |
- RecordUserAction.record("MobileReceivedExternalIntent"); |
+ logMobileReceivedExternalIntent(externalAppId, intent); |
int shortcutSource = intent.getIntExtra( |
ShortcutHelper.EXTRA_SOURCE, ShortcutSource.UNKNOWN); |
LaunchMetrics.recordHomeScreenLaunchIntoTab(url, shortcutSource); |
@@ -817,7 +823,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
} else { |
TabModelUtils.setIndex(tabModel, tabIndex); |
} |
- RecordUserAction.record("MobileReceivedExternalIntent"); |
+ logMobileReceivedExternalIntent(externalAppId, intent); |
break; |
case CLOBBER_CURRENT_TAB: |
// The browser triggered the intent. This happens when clicking links which |
@@ -904,7 +910,29 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
Tab newTab = |
launchIntent(url, referer, headers, externalAppId, forceNewTab, intent); |
newTab.setIsAllowedToReturnToExternalApp(isAllowedToReturnToExternalApp); |
+ logMobileReceivedExternalIntent(externalAppId, intent); |
+ } |
+ |
+ // TODO(tedchoc): Remove once we have verified that MobileTabbedModeViewIntentFromChrome |
+ // and MobileTabbedModeViewIntentFromApp are suitable/more correct |
+ // replacments for these. |
+ private void logMobileReceivedExternalIntent(String externalAppId, Intent intent) { |
RecordUserAction.record("MobileReceivedExternalIntent"); |
+ if (isFromChrome(intent, externalAppId)) { |
+ RecordUserAction.record("MobileReceivedExternalIntent.Chrome"); |
+ } else { |
+ RecordUserAction.record("MobileReceivedExternalIntent.App"); |
+ } |
+ } |
+ |
+ private boolean isFromChrome(Intent intent, String externalAppId) { |
+ // To determine if the processed intent is from Chrome, check for any of the following: |
+ // 1.) The authentication token that will be added to trusted intents. |
+ // 2.) The app ID matches Chrome. This value can be spoofed by other applications, but |
+ // in cases where we were not able to add the authentication token this is our only |
+ // indication the intent was from Chrome. |
+ return IntentHandler.wasIntentSenderChrome(intent) |
+ || TextUtils.equals(externalAppId, getPackageName()); |
} |
} |