Commit 269c8ebd authored by Lei Tian's avatar Lei Tian Committed by Commit Bot

Move Browser Actions tab merging into BrowserActionsTabModelSelctor

Move the Browser Actions tab merging function from ChromeTabbedActivity
to the BrowserActionsTabModelSelector. And since the tab mergine removes
tabs Synchronously, so there is no need to update TabPersistentStore for
tabRemoved callback. Call saveState() after all tabs removed is enough.

Bug: None
Change-Id: I5b6dc8b9ed385212ae3f7bdc3fa33b9d030ff4aa
Reviewed-on: https://chromium-review.googlesource.com/722175Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Lei Tian <ltian@google.com>
Cr-Commit-Position: refs/heads/master@{#509592}
parent 28200c16
......@@ -1093,7 +1093,8 @@ public class ChromeTabbedActivity
mMainIntentMetrics.setIgnoreEvents(true);
mTabModelSelectorImpl.restoreTabs(activeTabBeingRestored);
if (hasBrowserActionTabs) {
mergeBrowserActionsTabModel(!mIntentWithEffect);
BrowserActionsTabModelSelector.getInstance().mergeBrowserActionsTabModel(
this, !mIntentWithEffect);
}
mMainIntentMetrics.setIgnoreEvents(false);
......@@ -1123,21 +1124,6 @@ public class ChromeTabbedActivity
}
}
private void mergeBrowserActionsTabModel(boolean shouldSelectTab) {
TabModel browserActionsNormlTabModel =
BrowserActionsTabModelSelector.getInstance().getModel(false);
TabModel chromeNormalTabModel = getTabModelSelector().getModel(false);
while (browserActionsNormlTabModel.getCount() > 0) {
Tab tab = browserActionsNormlTabModel.getTabAt(0);
browserActionsNormlTabModel.removeTab(tab);
tab.attach(this, new TabDelegateFactory());
chromeNormalTabModel.addTab(tab, -1, TabLaunchType.FROM_BROWSER_ACTIONS);
}
if (shouldSelectTab) {
TabModelUtils.setIndex(chromeNormalTabModel, chromeNormalTabModel.getCount() - 1);
}
}
/**
* Create an initial tab for cold start without restored tabs.
*/
......
......@@ -7,8 +7,10 @@ package org.chromium.chrome.browser.browseractions;
import android.os.AsyncTask;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.browseractions.BrowserActionsTabCreatorManager.BrowserActionsTabCreator;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.EmptyTabModel;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
......@@ -20,6 +22,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelImpl;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelOrderController;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorBase;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.TabPersistentStore;
import org.chromium.chrome.browser.tabmodel.TabPersistentStore.TabPersistentStoreObserver;
import org.chromium.content_public.browser.LoadUrlParams;
......@@ -112,12 +115,6 @@ public class BrowserActionsTabModelSelector
mTabSaver.addTabToSaveQueue(tab);
}
}
@Override
public void tabRemoved(Tab tab) {
// TODO(ltian): save the tab list when all the tabs are removed.
mTabSaver.saveTabListAsynchronously();
}
};
getModel(false).addObserver(tabModelObserver);
if (mTabCreationRunnable != null) {
......@@ -206,4 +203,28 @@ public class BrowserActionsTabModelSelector
return mTabCreatorManager.getTabCreator(incognito).createNewTab(
loadUrlParams, type, parent);
}
/**
* Merge tabs from {@link BrowserActionsTabModelSelector} to the selector in a {@link
* ChromeActivity}.
* @param activity The ChromeActivity all tabs will be merged to.
* @param shouldSelectTab Whether the last tab should be set as the active tab.
*/
public void mergeBrowserActionsTabModel(ChromeActivity activity, boolean shouldSelectTab) {
assert isInitialized() : "Browser Actions tab model should be initialized at this point";
TabModel chromeNormalTabModel = activity.getTabModelSelector().getModel(false);
TabModel browserActionsNormlTabModel = getModel(false);
while (browserActionsNormlTabModel.getCount() > 0) {
Tab tab = browserActionsNormlTabModel.getTabAt(0);
browserActionsNormlTabModel.removeTab(tab);
tab.attach(activity,
((ChromeTabCreator) activity.getTabCreator(false))
.createDefaultTabDelegateFactory());
chromeNormalTabModel.addTab(tab, -1, TabLaunchType.FROM_BROWSER_ACTIONS);
}
saveState();
if (shouldSelectTab) {
TabModelUtils.setIndex(chromeNormalTabModel, chromeNormalTabModel.getCount() - 1);
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment