#include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h"
#include <memory>
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/user_metrics.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
#include "chrome/browser/favicon/favicon_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/ui/bookmarks/bookmark_drag_drop.h"
#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
#include "chrome/browser/ui/bookmarks/bookmark_utils_desktop.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/toolbar/app_menu_model.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
#include "chrome/browser/ui/views/event_utils.h"
#include "chrome/grit/generated_resources.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_model_observer.h"
#include "components/bookmarks/common/bookmark_pref_names.h"
#include "components/bookmarks/managed/managed_bookmark_service.h"
#include "components/prefs/pref_service.h"
#include "components/profile_metrics/browser_profile_type.h"
#include "components/url_formatter/url_formatter.h"
#include "content/public/browser/page_navigator.h"
#include "ui/base/accelerators/menu_label_accelerator_util.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
#include "ui/base/dragdrop/os_exchange_data.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/image_model.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/theme_provider.h"
#include "ui/base/ui_base_features.h"
#include "ui/base/window_open_disposition.h"
#include "ui/base/window_open_disposition_utils.h"
#include "ui/color/color_id.h"
#include "ui/resources/grit/ui_resources.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/controls/menu/submenu_view.h"
#include "ui/views/widget/tooltip_manager.h"
#include "ui/views/widget/widget.h"
UserMetricsAction;
BookmarkModel;
BookmarkNode;
BookmarkNodeData;
PageNavigator;
MenuItemView;
namespace {
const int kMaxMenuWidth = …;
ui::ImageModel GetFaviconForNode(BookmarkModel* model,
const BookmarkNode* node) { … }
class BookmarkModelDropObserver : public bookmarks::BaseBookmarkModelObserver { … };
}
BookmarkMenuDelegate::BookmarkMenuDelegate(Browser* browser,
views::Widget* parent)
: … { … }
BookmarkMenuDelegate::~BookmarkMenuDelegate() { … }
void BookmarkMenuDelegate::Init(views::MenuDelegate* real_delegate,
MenuItemView* parent,
const BookmarkNode* node,
size_t start_child_index,
ShowOptions show_options,
BookmarkLaunchLocation location) { … }
const BookmarkModel* BookmarkMenuDelegate::GetBookmarkModel() const { … }
bookmarks::ManagedBookmarkService*
BookmarkMenuDelegate::GetManagedBookmarkService() { … }
void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node,
size_t start_index) { … }
std::u16string BookmarkMenuDelegate::GetTooltipText(
int id,
const gfx::Point& screen_loc) const { … }
bool BookmarkMenuDelegate::IsTriggerableEvent(views::MenuItemView* menu,
const ui::Event& e) { … }
void BookmarkMenuDelegate::ExecuteCommand(int id, int mouse_event_flags) { … }
bool BookmarkMenuDelegate::ShouldExecuteCommandWithoutClosingMenu(
int id,
const ui::Event& event) { … }
bool BookmarkMenuDelegate::GetDropFormats(
MenuItemView* menu,
int* formats,
std::set<ui::ClipboardFormatType>* format_types) { … }
bool BookmarkMenuDelegate::AreDropTypesRequired(MenuItemView* menu) { … }
bool BookmarkMenuDelegate::CanDrop(MenuItemView* menu,
const ui::OSExchangeData& data) { … }
ui::mojom::DragOperation BookmarkMenuDelegate::GetDropOperation(
MenuItemView* item,
const ui::DropTargetEvent& event,
views::MenuDelegate::DropPosition* position) { … }
views::View::DropCallback BookmarkMenuDelegate::GetDropCallback(
views::MenuItemView* menu,
views::MenuDelegate::DropPosition position,
const ui::DropTargetEvent& event) { … }
bool BookmarkMenuDelegate::ShowContextMenu(MenuItemView* source,
int id,
const gfx::Point& p,
ui::MenuSourceType source_type) { … }
bool BookmarkMenuDelegate::CanDrag(MenuItemView* menu) { … }
void BookmarkMenuDelegate::WriteDragData(MenuItemView* sender,
ui::OSExchangeData* data) { … }
int BookmarkMenuDelegate::GetDragOperations(MenuItemView* sender) { … }
int BookmarkMenuDelegate::GetMaxWidthForMenu(MenuItemView* menu) { … }
void BookmarkMenuDelegate::WillShowMenu(MenuItemView* menu) { … }
void BookmarkMenuDelegate::BookmarkModelChanged() { … }
void BookmarkMenuDelegate::BookmarkNodeFaviconChanged(
const BookmarkNode* node) { … }
void BookmarkMenuDelegate::WillRemoveBookmarks(
const std::vector<raw_ptr<const BookmarkNode, VectorExperimental>>&
bookmarks) { … }
void BookmarkMenuDelegate::DidRemoveBookmarks() { … }
void BookmarkMenuDelegate::OnContextMenuClosed() { … }
bool BookmarkMenuDelegate::ShouldCloseOnRemove(const BookmarkNode* node) const { … }
MenuItemView* BookmarkMenuDelegate::CreateMenu(const BookmarkNode* parent,
size_t start_child_index,
ShowOptions show_options) { … }
void BookmarkMenuDelegate::BuildMenusForPermanentNodes(
views::MenuItemView* menu) { … }
void BookmarkMenuDelegate::BuildMenuForPermanentNode(const BookmarkNode* node,
const ui::ImageModel& icon,
MenuItemView* menu,
bool* added_separator) { … }
void BookmarkMenuDelegate::BuildMenuForManagedNode(MenuItemView* menu) { … }
void BookmarkMenuDelegate::BuildMenu(const BookmarkNode* parent,
size_t start_child_index,
MenuItemView* menu) { … }
void BookmarkMenuDelegate::AddMenuToMaps(MenuItemView* menu,
const BookmarkNode* node) { … }
std::u16string BookmarkMenuDelegate::MaybeEscapeLabel(
const std::u16string& label) { … }
int BookmarkMenuDelegate::GetAndIncrementNextMenuID() { … }