blob: 50bf0ff9e92fa8eff6b191496242fcd099d5a7da [file] [log] [blame]
// Copyright 2013 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_VIEWS_FRAME_SYSTEM_MENU_MODEL_BUILDER_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_SYSTEM_MENU_MODEL_BUILDER_H_
#include <memory>
#include "chrome/browser/ui/views/frame/system_menu_model_delegate.h"
#include "ui/base/interaction/element_identifier.h"
#if BUILDFLAG(IS_CHROMEOS)
namespace chromeos {
class MoveToDesksMenuModel;
}
#endif
class Browser;
namespace ui {
class AcceleratorProvider;
class MenuModel;
class SimpleMenuModel;
} // namespace ui
// SystemMenuModelBuilder is responsible for building and owning the system menu
// model.
class SystemMenuModelBuilder {
public:
DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kToggleVerticalTabsElementId);
SystemMenuModelBuilder(ui::AcceleratorProvider* provider, Browser* browser);
SystemMenuModelBuilder(const SystemMenuModelBuilder&) = delete;
SystemMenuModelBuilder& operator=(const SystemMenuModelBuilder&) = delete;
~SystemMenuModelBuilder();
// Populates the menu.
void Init();
// Returns the menu model. SystemMenuModelBuilder owns the returned model.
ui::MenuModel* menu_model() { return menu_model_.get(); }
private:
Browser* browser() { return menu_delegate_.browser(); }
// Populates |model| with the appropriate contents.
void BuildMenu(ui::SimpleMenuModel* model);
void BuildSystemMenuForBrowserWindow(ui::SimpleMenuModel* model);
void BuildSystemMenuForAppOrPopupWindow(ui::SimpleMenuModel* model);
#if BUILDFLAG(IS_CHROMEOS)
// Add the submenu for move to desks.
void AppendMoveToDesksMenu(ui::SimpleMenuModel* model);
#endif
// Add the items to allow the window to visit the desktop of another user.
void AppendTeleportMenu(ui::SimpleMenuModel* model);
SystemMenuModelDelegate menu_delegate_;
std::unique_ptr<ui::MenuModel> menu_model_;
std::unique_ptr<ui::SimpleMenuModel> zoom_menu_contents_;
#if BUILDFLAG(IS_CHROMEOS)
std::unique_ptr<chromeos::MoveToDesksMenuModel> move_to_desks_model_;
#endif
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_SYSTEM_MENU_MODEL_BUILDER_H_