blob: ffb57b5e74f59272e303ee7dbc82614546e6408b [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.tabmodel;
import android.support.test.InstrumentationRegistry;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.base.CommandLine;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.test.ChromeBrowserTestRule;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.ui.base.WindowAndroid;
import java.util.HashSet;
import java.util.Set;
/**
* Basis for testing tab model selector observers.
*/
public class TabModelSelectorObserverTestRule extends ChromeBrowserTestRule {
private TabModelSelectorBase mSelector;
private TabModelSelectorTestTabModel mNormalTabModel;
private TabModelSelectorTestTabModel mIncognitoTabModel;
private WindowAndroid mWindowAndroid;
public TabModelSelectorBase getSelector() {
return mSelector;
}
public TabModelSelectorTestTabModel getNormalTabModel() {
return mNormalTabModel;
}
public TabModelSelectorTestTabModel getIncognitoTabModel() {
return mIncognitoTabModel;
}
public WindowAndroid getWindowAndroid() {
return mWindowAndroid;
}
@Override
public Statement apply(final Statement base, Description description) {
CommandLine.init(null);
return super.apply(new Statement() {
@Override
public void evaluate() throws Throwable {
setUp();
base.evaluate();
}
}, description);
}
private void setUp() throws Exception {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
initialize();
}
});
}
private void initialize() {
mWindowAndroid = new WindowAndroid(InstrumentationRegistry.getInstrumentation()
.getTargetContext()
.getApplicationContext());
mSelector = new TabModelSelectorBase() {
@Override
public Tab openNewTab(LoadUrlParams loadUrlParams, @TabLaunchType int type, Tab parent,
boolean incognito) {
return null;
}
};
TabModelOrderController orderController = new TabModelOrderController(mSelector);
TabContentManager tabContentManager = new TabContentManager(
InstrumentationRegistry.getTargetContext(), null, null, false);
TabPersistencePolicy persistencePolicy = new TabbedModeTabPersistencePolicy(0, false);
TabPersistentStore tabPersistentStore =
new TabPersistentStore(persistencePolicy, mSelector, null, null);
TabModelDelegate delegate = new TabModelDelegate() {
@Override
public void selectModel(boolean incognito) {
mSelector.selectModel(incognito);
}
@Override
public void requestToShowTab(Tab tab, @TabSelectionType int type) {}
@Override
public boolean isSessionRestoreInProgress() {
return false;
}
@Override
public boolean isCurrentModel(TabModel model) {
return false;
}
@Override
public boolean isInOverviewMode() {
return false;
}
@Override
public TabModel getModel(boolean incognito) {
return mSelector.getModel(incognito);
}
@Override
public TabModel getCurrentModel() {
return mSelector.getCurrentModel();
}
@Override
public boolean closeAllTabsRequest(boolean incognito) {
return false;
}
};
mNormalTabModel = new TabModelSelectorTestTabModel(
false, orderController, tabContentManager, tabPersistentStore, delegate);
mIncognitoTabModel = new TabModelSelectorTestTabModel(
true, orderController, tabContentManager, tabPersistentStore, delegate);
mSelector.initialize(false, mNormalTabModel, mIncognitoTabModel);
}
/**
* Test TabModel that exposes the needed capabilities for testing.
*/
public static class TabModelSelectorTestTabModel extends TabModelImpl {
private Set<TabModelObserver> mObserverSet = new HashSet<>();
public TabModelSelectorTestTabModel(boolean incognito,
TabModelOrderController orderController, TabContentManager tabContentManager,
TabPersistentStore tabPersistentStore, TabModelDelegate modelDelegate) {
super(incognito, false, null, null, null, orderController, tabContentManager,
tabPersistentStore, modelDelegate, false);
}
@Override
public void addObserver(TabModelObserver observer) {
super.addObserver(observer);
mObserverSet.add(observer);
}
@Override
public void removeObserver(TabModelObserver observer) {
super.removeObserver(observer);
mObserverSet.remove(observer);
}
public Set<TabModelObserver> getObservers() {
return mObserverSet;
}
}
}