blob: cda6bf3dfdcbc428d43d7e0cea6d2cab48798e05 [file]
// Copyright 2024 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_BROWSER_ACTIONS_H_
#define CHROME_BROWSER_UI_BROWSER_ACTIONS_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ref.h"
#include "ui/base/unowned_user_data/scoped_unowned_user_data.h"
class BrowserActionPrefsListener;
class BrowserWindowInterface;
class Profile;
namespace actions {
class ActionItem;
} // namespace actions
// Actions that a user can take that are scoped to a browser window.
class BrowserActions {
public:
DECLARE_USER_DATA(BrowserActions);
static BrowserActions* From(BrowserWindowInterface* browser);
static const BrowserActions* From(const BrowserWindowInterface* browser);
explicit BrowserActions(BrowserWindowInterface* bwi);
BrowserActions(const BrowserActions&) = delete;
BrowserActions& operator=(const BrowserActions&) = delete;
~BrowserActions();
static std::u16string GetCleanTitleAndTooltipText(std::u16string string);
actions::ActionItem* root_action_item() const { return root_action_item_; }
// Initialization is separate from construction to allow more precise timing.
void InitializeBrowserActions();
// Registers a window-scoped action item.
actions::ActionItem* RegisterAction(
std::unique_ptr<actions::ActionItem> action_item);
void set_root_action_item_for_testing(actions::ActionItem* item) {
root_action_item_ = item;
}
private:
// Helper functions to initialize actions grouped roughly by their type.
void InitializeSidePanelActions();
void InitializePageActionIconActions();
void InitializeChromeMenuActions();
void InitializeToolbarAndMiscActions();
void InitializeNavigationActions();
void InitializeSubmenuActions();
// Creates all the listeners for the action items that update different states
// and property of the action item.
void AddListeners();
raw_ptr<actions::ActionItem> root_action_item_ = nullptr;
std::unique_ptr<BrowserActionPrefsListener> browser_action_prefs_listener_;
const raw_ref<BrowserWindowInterface> bwi_;
const raw_ref<Profile> profile_;
ui::ScopedUnownedUserData<BrowserActions> scoped_unowned_user_data_;
};
#endif // CHROME_BROWSER_UI_BROWSER_ACTIONS_H_