chromium/chrome/browser/ui/tabs/existing_window_sub_menu_model_chromeos.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_TABS_EXISTING_WINDOW_SUB_MENU_MODEL_CHROMEOS_H_
#define CHROME_BROWSER_UI_TABS_EXISTING_WINDOW_SUB_MENU_MODEL_CHROMEOS_H_

#include <stddef.h>

#include "base/types/pass_key.h"
#include "chrome/browser/ui/tabs/existing_window_sub_menu_model.h"

class Browser;
class TabStripModel;
class TabMenuModelDelegate;

namespace chromeos {

class DesksHelper;

// ExistingWindowSubMenuModel implementation for chromeos specific code.
class ExistingWindowSubMenuModelChromeOS : public ExistingWindowSubMenuModel {
 public:
  ExistingWindowSubMenuModelChromeOS(
      base::PassKey<ExistingWindowSubMenuModel> passkey,
      ui::SimpleMenuModel::Delegate* parent_delegate,
      TabMenuModelDelegate* tab_menu_model_delegate,
      TabStripModel* model,
      int context_index);
  ExistingWindowSubMenuModelChromeOS(
      const ExistingWindowSubMenuModelChromeOS&) = delete;
  ExistingWindowSubMenuModelChromeOS& operator=(
      const ExistingWindowSubMenuModelChromeOS&) = delete;
  ~ExistingWindowSubMenuModelChromeOS() override;

 private:
  // Builds the submenu, grouping browsers from |existing_browsers| by desks.
  // Browsers within desk groupings maintain the originally provided order. I.e.
  // if browsers were provided in MRU order, then within desk groupings browsers
  // will be in MRU order.
  void BuildMenuGroupedByDesk(const std::vector<Browser*>& existing_browsers);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_UI_TABS_EXISTING_WINDOW_SUB_MENU_MODEL_CHROMEOS_H_