chromium/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelOrderController.java

// Copyright 2019 The Chromium Authors
// 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 org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabLaunchType;

/**
 * This class acts as a controller for determining where tabs should be inserted into a tab strip
 * model.
 *
 * <p>TODO(crbug.com/40152902): Move to chrome/browser/tabmodel/internal when all usages are
 * modularized.
 */
interface TabModelOrderController {
    /**
     * Determine the insertion index of the next tab. If it's not the result of
     * a link being pressed, the provided index will be returned.
     *
     * @param type The launch type of the new tab.
     * @param position The provided position.
     * @return Where to insert the tab.
     */
    int determineInsertionIndex(@TabLaunchType int type, int position, Tab newTab);

    /**
     * Determine the insertion index of the next tab.
     *
     * @param type The launch type of the new tab.
     * @return Where to insert the tab.
     */
    int determineInsertionIndex(@TabLaunchType int type, Tab newTab);

    /**
     * Determine if a launch type will result in the tab being opened in the foreground.
     *
     * @param type The type of opening event.
     * @param isNewTabIncognitoBranded True if the new opened tab is incognito.
     * @return True if the tab will be in the foreground
     */
    boolean willOpenInForeground(@TabLaunchType int type, boolean isNewTabIncognitoBranded);
}