| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.annotation.TargetApi; | 8 import android.annotation.TargetApi; |
| 9 import android.app.Activity; | 9 import android.app.Activity; |
| 10 import android.app.ActivityManager; | 10 import android.app.ActivityManager; |
| (...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 private class InternalIntentDelegate implements IntentHandler.IntentHandlerD
elegate { | 757 private class InternalIntentDelegate implements IntentHandler.IntentHandlerD
elegate { |
| 758 /** | 758 /** |
| 759 * Processes a url view intent. | 759 * Processes a url view intent. |
| 760 * | 760 * |
| 761 * @param url The url from the intent. | 761 * @param url The url from the intent. |
| 762 */ | 762 */ |
| 763 @Override | 763 @Override |
| 764 public void processUrlViewIntent(String url, String referer, String head
ers, | 764 public void processUrlViewIntent(String url, String referer, String head
ers, |
| 765 TabOpenType tabOpenType, String externalAppId, int tabIdToBringT
oFront, | 765 TabOpenType tabOpenType, String externalAppId, int tabIdToBringT
oFront, |
| 766 boolean hasUserGesture, Intent intent) { | 766 boolean hasUserGesture, Intent intent) { |
| 767 if (IntentHandler.wasIntentSenderChrome(intent, ChromeTabbedActivity
.this) |
| 768 || TextUtils.equals(externalAppId, getPackageName())) { |
| 769 RecordUserAction.record("MobileTabbedModeViewIntentFromChrome"); |
| 770 } else { |
| 771 RecordUserAction.record("MobileTabbedModeViewIntentFromApp"); |
| 772 } |
| 773 |
| 767 TabModel tabModel = getCurrentTabModel(); | 774 TabModel tabModel = getCurrentTabModel(); |
| 768 boolean fromLauncherShortcut = IntentUtils.safeGetBooleanExtra( | 775 boolean fromLauncherShortcut = IntentUtils.safeGetBooleanExtra( |
| 769 intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false); | 776 intent, IntentHandler.EXTRA_INVOKED_FROM_SHORTCUT, false); |
| 770 switch (tabOpenType) { | 777 switch (tabOpenType) { |
| 771 case REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB: | 778 case REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB: |
| 772 // Used by the bookmarks application. | 779 // Used by the bookmarks application. |
| 773 if (tabModel.getCount() > 0 && mUIInitialized | 780 if (tabModel.getCount() > 0 && mUIInitialized |
| 774 && mLayoutManager.overviewVisible()) { | 781 && mLayoutManager.overviewVisible()) { |
| 775 mLayoutManager.hideOverview(true); | 782 mLayoutManager.hideOverview(true); |
| 776 } | 783 } |
| 777 mTabModelSelectorImpl.tryToRestoreTabStateForUrl(url); | 784 mTabModelSelectorImpl.tryToRestoreTabStateForUrl(url); |
| 778 int tabToBeClobberedIndex = TabModelUtils.getTabIndexByUrl(t
abModel, url); | 785 int tabToBeClobberedIndex = TabModelUtils.getTabIndexByUrl(t
abModel, url); |
| 779 Tab tabToBeClobbered = tabModel.getTabAt(tabToBeClobberedInd
ex); | 786 Tab tabToBeClobbered = tabModel.getTabAt(tabToBeClobberedInd
ex); |
| 780 if (tabToBeClobbered != null) { | 787 if (tabToBeClobbered != null) { |
| 781 TabModelUtils.setIndex(tabModel, tabToBeClobberedIndex); | 788 TabModelUtils.setIndex(tabModel, tabToBeClobberedIndex); |
| 782 tabToBeClobbered.reload(); | 789 tabToBeClobbered.reload(); |
| 783 RecordUserAction.record("MobileTabClobbered"); | 790 RecordUserAction.record("MobileTabClobbered"); |
| 784 } else { | 791 } else { |
| 785 launchIntent(url, referer, headers, externalAppId, true,
intent); | 792 launchIntent(url, referer, headers, externalAppId, true,
intent); |
| 786 } | 793 } |
| 787 RecordUserAction.record("MobileReceivedExternalIntent"); | 794 logMobileReceivedExternalIntent(externalAppId, intent); |
| 788 int shortcutSource = intent.getIntExtra( | 795 int shortcutSource = intent.getIntExtra( |
| 789 ShortcutHelper.EXTRA_SOURCE, ShortcutSource.UNKNOWN)
; | 796 ShortcutHelper.EXTRA_SOURCE, ShortcutSource.UNKNOWN)
; |
| 790 LaunchMetrics.recordHomeScreenLaunchIntoTab(url, shortcutSou
rce); | 797 LaunchMetrics.recordHomeScreenLaunchIntoTab(url, shortcutSou
rce); |
| 791 break; | 798 break; |
| 792 case BRING_TAB_TO_FRONT: | 799 case BRING_TAB_TO_FRONT: |
| 793 mTabModelSelectorImpl.tryToRestoreTabStateForId(tabIdToBring
ToFront); | 800 mTabModelSelectorImpl.tryToRestoreTabStateForId(tabIdToBring
ToFront); |
| 794 | 801 |
| 795 int tabIndex = TabModelUtils.getTabIndexById(tabModel, tabId
ToBringToFront); | 802 int tabIndex = TabModelUtils.getTabIndexById(tabModel, tabId
ToBringToFront); |
| 796 if (tabIndex == TabModel.INVALID_TAB_INDEX) { | 803 if (tabIndex == TabModel.INVALID_TAB_INDEX) { |
| 797 TabModel otherModel = | 804 TabModel otherModel = |
| 798 getTabModelSelector().getModel(!tabModel.isIncog
nito()); | 805 getTabModelSelector().getModel(!tabModel.isIncog
nito()); |
| 799 tabIndex = TabModelUtils.getTabIndexById(otherModel, tab
IdToBringToFront); | 806 tabIndex = TabModelUtils.getTabIndexById(otherModel, tab
IdToBringToFront); |
| 800 if (tabIndex != TabModel.INVALID_TAB_INDEX) { | 807 if (tabIndex != TabModel.INVALID_TAB_INDEX) { |
| 801 getTabModelSelector().selectModel(otherModel.isIncog
nito()); | 808 getTabModelSelector().selectModel(otherModel.isIncog
nito()); |
| 802 TabModelUtils.setIndex(otherModel, tabIndex); | 809 TabModelUtils.setIndex(otherModel, tabIndex); |
| 803 } else { | 810 } else { |
| 804 Log.e(TAG, "Failed to bring tab to front because it
doesn't exist."); | 811 Log.e(TAG, "Failed to bring tab to front because it
doesn't exist."); |
| 805 return; | 812 return; |
| 806 } | 813 } |
| 807 } else { | 814 } else { |
| 808 TabModelUtils.setIndex(tabModel, tabIndex); | 815 TabModelUtils.setIndex(tabModel, tabIndex); |
| 809 } | 816 } |
| 810 RecordUserAction.record("MobileReceivedExternalIntent"); | 817 logMobileReceivedExternalIntent(externalAppId, intent); |
| 811 break; | 818 break; |
| 812 case CLOBBER_CURRENT_TAB: | 819 case CLOBBER_CURRENT_TAB: |
| 813 // The browser triggered the intent. This happens when click
ing links which | 820 // The browser triggered the intent. This happens when click
ing links which |
| 814 // can be handled by other applications (e.g. www.youtube.co
m links). | 821 // can be handled by other applications (e.g. www.youtube.co
m links). |
| 815 Tab currentTab = getActivityTab(); | 822 Tab currentTab = getActivityTab(); |
| 816 if (currentTab != null) { | 823 if (currentTab != null) { |
| 817 currentTab.getTabRedirectHandler().updateIntent(intent); | 824 currentTab.getTabRedirectHandler().updateIntent(intent); |
| 818 int transitionType = PageTransition.LINK | PageTransitio
n.FROM_API; | 825 int transitionType = PageTransition.LINK | PageTransitio
n.FROM_API; |
| 819 LoadUrlParams loadUrlParams = new LoadUrlParams(url); | 826 LoadUrlParams loadUrlParams = new LoadUrlParams(url); |
| 820 loadUrlParams.setIntentReceivedTimestamp(mIntentHandling
TimeMs); | 827 loadUrlParams.setIntentReceivedTimestamp(mIntentHandling
TimeMs); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 883 */ | 890 */ |
| 884 private void openNewTab(String url, String referer, String headers, | 891 private void openNewTab(String url, String referer, String headers, |
| 885 String externalAppId, Intent intent, boolean forceNewTab) { | 892 String externalAppId, Intent intent, boolean forceNewTab) { |
| 886 boolean isAllowedToReturnToExternalApp = IntentUtils.safeGetBooleanE
xtra(intent, | 893 boolean isAllowedToReturnToExternalApp = IntentUtils.safeGetBooleanE
xtra(intent, |
| 887 ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PARENT,
true); | 894 ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PARENT,
true); |
| 888 | 895 |
| 889 // Create a new tab. | 896 // Create a new tab. |
| 890 Tab newTab = | 897 Tab newTab = |
| 891 launchIntent(url, referer, headers, externalAppId, forceNewT
ab, intent); | 898 launchIntent(url, referer, headers, externalAppId, forceNewT
ab, intent); |
| 892 newTab.setIsAllowedToReturnToExternalApp(isAllowedToReturnToExternal
App); | 899 newTab.setIsAllowedToReturnToExternalApp(isAllowedToReturnToExternal
App); |
| 900 logMobileReceivedExternalIntent(externalAppId, intent); |
| 901 } |
| 902 |
| 903 // TODO(tedchoc): Remove once we have verified that MobileTabbedModeView
IntentFromChrome |
| 904 // and MobileTabbedModeViewIntentFromApp are suitable/mor
e correct |
| 905 // replacments for these. |
| 906 private void logMobileReceivedExternalIntent(String externalAppId, Inten
t intent) { |
| 893 RecordUserAction.record("MobileReceivedExternalIntent"); | 907 RecordUserAction.record("MobileReceivedExternalIntent"); |
| 908 if (IntentHandler.wasIntentSenderChrome(intent, ChromeTabbedActivity
.this) |
| 909 || TextUtils.equals(externalAppId, getPackageName())) { |
| 910 RecordUserAction.record("MobileReceivedExternalIntent.Chrome"); |
| 911 } else { |
| 912 RecordUserAction.record("MobileReceivedExternalIntent.App"); |
| 913 } |
| 894 } | 914 } |
| 895 } | 915 } |
| 896 | 916 |
| 897 @Override | 917 @Override |
| 898 public void preInflationStartup() { | 918 public void preInflationStartup() { |
| 899 super.preInflationStartup(); | 919 super.preInflationStartup(); |
| 900 | 920 |
| 901 // Decide whether to record startup UMA histograms. This is done early
in the main | 921 // Decide whether to record startup UMA histograms. This is done early
in the main |
| 902 // Activity.onCreate() to avoid recording navigation delays when they re
quire user input to | 922 // Activity.onCreate() to avoid recording navigation delays when they re
quire user input to |
| 903 // proceed. For example, FRE (First Run Experience) happens before the a
ctivity is created, | 923 // proceed. For example, FRE (First Run Experience) happens before the a
ctivity is created, |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1703 | 1723 |
| 1704 ActivityManager manager = (ActivityManager) getSystemService(Context.ACT
IVITY_SERVICE); | 1724 ActivityManager manager = (ActivityManager) getSystemService(Context.ACT
IVITY_SERVICE); |
| 1705 for (AppTask task : manager.getAppTasks()) { | 1725 for (AppTask task : manager.getAppTasks()) { |
| 1706 RecentTaskInfo info = DocumentUtils.getTaskInfoFromTask(task); | 1726 RecentTaskInfo info = DocumentUtils.getTaskInfoFromTask(task); |
| 1707 if (info == null) continue; | 1727 if (info == null) continue; |
| 1708 if (info.id == sMergedInstanceTaskId) return true; | 1728 if (info.id == sMergedInstanceTaskId) return true; |
| 1709 } | 1729 } |
| 1710 return false; | 1730 return false; |
| 1711 } | 1731 } |
| 1712 } | 1732 } |
| OLD | NEW |