| Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
|
| index 85f5a65bc85bf78cee4009a29482dec305e01974..7ea0a2630cc90a3f1d0be0cb5dceef25b4bbd5a8 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
|
| @@ -9,6 +9,7 @@ import org.chromium.base.ObserverList;
|
| import org.chromium.base.TraceEvent;
|
| import org.chromium.chrome.browser.ChromeTabbedActivity;
|
| import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
|
| +import org.chromium.chrome.browser.ntp.RecentlyClosedBridge;
|
| import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
|
| @@ -45,6 +46,7 @@ public class TabModelImpl extends TabModelJniBridge {
|
| private final TabPersistentStore mTabSaver;
|
| private final TabModelDelegate mModelDelegate;
|
| private final ObserverList<TabModelObserver> mObservers;
|
| + private RecentlyClosedBridge mRecentlyClosedBridge;
|
|
|
| // Undo State Tracking -------------------------------------------------------------------------
|
|
|
| @@ -81,6 +83,7 @@ public class TabModelImpl extends TabModelJniBridge {
|
| mModelDelegate = modelDelegate;
|
| mIsUndoSupported = supportUndo;
|
| mObservers = new ObserverList<TabModelObserver>();
|
| + mRecentlyClosedBridge = new RecentlyClosedBridge(getProfile());
|
| }
|
|
|
| @Override
|
| @@ -99,7 +102,7 @@ public class TabModelImpl extends TabModelJniBridge {
|
| mRewoundList.destroy();
|
| mTabs.clear();
|
| mObservers.clear();
|
| -
|
| + mRecentlyClosedBridge.destroy();
|
| super.destroy();
|
| }
|
|
|
| @@ -720,8 +723,11 @@ public class TabModelImpl extends TabModelJniBridge {
|
| @Override
|
| protected boolean createTabWithWebContents(Tab parent, boolean incognito,
|
| WebContents webContents, int parentId) {
|
| + // TODO(xingliu): figure out if TabLaunchType.FROM_LONGPRESS_FOREGROUND affects
|
| + // other features. FROM_LONGPRESS_FOREGROUND makes tab restored in foreground when called
|
| + // from native code.
|
| return getTabCreator(incognito).createTabWithWebContents(parent, webContents, parentId,
|
| - TabLaunchType.FROM_LONGPRESS_BACKGROUND);
|
| + TabLaunchType.FROM_LONGPRESS_FOREGROUND);
|
| }
|
|
|
| @Override
|
| @@ -738,4 +744,19 @@ public class TabModelImpl extends TabModelJniBridge {
|
| protected boolean isSessionRestoreInProgress() {
|
| return mModelDelegate.isSessionRestoreInProgress();
|
| }
|
| +
|
| + @Override
|
| + public void openMostRecentlyClosedTab() {
|
| + // First try to recover tab from rewound list, same as {@link UndoBarController}.
|
| + if (mRewoundList.hasPendingClosures()) {
|
| + Tab tab = mRewoundList.getNextRewindableTab();
|
| + if (tab == null) return;
|
| + cancelTabClosure(tab.getId());
|
| + return;
|
| + }
|
| +
|
| + // If there are no pending closures in the rewound list,
|
| + // then try to restore the tab from the native tab restore service.
|
| + mRecentlyClosedBridge.openRecentlyClosedTab();
|
| + }
|
| }
|
|
|