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 265f36545028202e4e0f601fb3ac3a3c38d6442d..8734ed066524356f6ec92b26753d2ec177447534 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
@@ -48,6 +48,7 @@ import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; |
import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout; |
import org.chromium.chrome.browser.cookies.CookiesFetcher; |
import org.chromium.chrome.browser.device.DeviceClassManager; |
+import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
import org.chromium.chrome.browser.document.DocumentUma; |
import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils; |
import org.chromium.chrome.browser.firstrun.FirstRunActivity; |
@@ -81,6 +82,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelUtils; |
import org.chromium.chrome.browser.tabmodel.TabWindowManager; |
import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; |
import org.chromium.chrome.browser.util.FeatureUtilities; |
+import org.chromium.chrome.browser.util.IntentUtils; |
import org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewWrapper; |
import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; |
import org.chromium.content.browser.ContentVideoView; |
@@ -695,7 +697,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
break; |
case OPEN_NEW_TAB: |
Tab newTab = launchIntent(url, referer, headers, externalAppId, true, intent); |
- newTab.setIsAllowedToReturnToExternalApp(true); |
+ newTab.setIsAllowedToReturnToExternalApp(IntentUtils.safeGetBooleanExtra(intent, |
+ ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PARENT, true)); |
RecordUserAction.record("MobileReceivedExternalIntent"); |
break; |
case OPEN_NEW_INCOGNITO_TAB: |
@@ -1025,7 +1028,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
/** |
* Closes the foreground tab, potentially sending the user back to the app that launched Chrome. |
- * |
+ * TODO(dfalcantara): Come up with a better name for this, given that Herb can prevent the tab |
+ * from closing. |
* @return Whether the tab closed was opened for a help page. |
*/ |
private boolean closeForegroundTab() { |
@@ -1043,15 +1047,24 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
return true; |
} |
+ // Check whether Herb allows the tab to close or just forces the app to minimize itself. |
+ boolean isAllowedToClose = true; |
+ String herbFlavor = ChromePreferenceManager.getHerbFlavor(); |
+ if (!TextUtils.isEmpty(herbFlavor)) { |
+ // Don't close the tab if the return button is showing. |
+ isAllowedToClose = !currentTab.isAllowedToReturnToExternalApp(); |
+ Log.d(TAG, "Herb: Allowing the tab to close: " + isAllowedToClose); |
+ } |
+ |
// [true]: Reached the bottom of the back stack on a tab the user did not explicitly |
// create (i.e. it was created by an external app or opening a link in background, etc). |
// [false]: Reached the bottom of the back stack on a tab that the user explicitly |
// created (e.g. selecting "new tab" from menu). |
- final boolean shouldCloseTab = type == TabLaunchType.FROM_LINK |
+ final boolean shouldCloseTab = isAllowedToClose && (type == TabLaunchType.FROM_LINK |
|| type == TabLaunchType.FROM_EXTERNAL_APP |
|| type == TabLaunchType.FROM_LONGPRESS_FOREGROUND |
|| type == TabLaunchType.FROM_LONGPRESS_BACKGROUND |
- || (type == TabLaunchType.FROM_RESTORE && parentId != Tab.INVALID_TAB_ID); |
+ || (type == TabLaunchType.FROM_RESTORE && parentId != Tab.INVALID_TAB_ID)); |
// Minimize the app if either: |
// - we decided not to close the tab |