| // 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_WINDOW_PUBLIC_BROWSER_WINDOW_FEATURES_H_ |
| #define CHROME_BROWSER_UI_BROWSER_WINDOW_PUBLIC_BROWSER_WINDOW_FEATURES_H_ |
| |
| #include <memory> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/common/buildflags.h" |
| #include "extensions/buildflags/buildflags.h" |
| #include "ui/base/unowned_user_data/user_data_factory.h" |
| |
| #if BUILDFLAG(ENABLE_GLIC) |
| namespace glic { |
| class GlicButtonController; |
| class GlicIphController; |
| class GlicSidePanelCoordinator; |
| } // namespace glic |
| |
| namespace tabs { |
| class GlicActorTaskIconController; |
| } // namespace tabs |
| #endif |
| |
| class ActorOverlayWindowController; |
| |
| class ActorBorderViewController; |
| class BookmarkBarController; |
| class BookmarksSidePanelCoordinator; |
| class BreadcrumbManagerBrowserAgent; |
| class Browser; |
| class BrowserActions; |
| class BrowserContentSettingBubbleModelDelegate; |
| class BrowserElements; |
| class BrowserInstantController; |
| class BrowserLiveTabContext; |
| class BrowserLocationBarModelDelegate; |
| class BrowserSyncedWindowDelegate; |
| class BrowserUserEducationInterface; |
| class BrowserView; |
| class BrowserWindowInterface; |
| class ChromeLabsCoordinator; |
| class ColorProviderBrowserHelper; |
| class CommentsSidePanelCoordinator; |
| class ContentsBorderController; |
| class CookieControlsBubbleCoordinator; |
| class DataSharingBubbleController; |
| class DesktopBrowserWindowCapabilities; |
| class DevtoolsUIController; |
| class ExtensionKeybindingRegistryViews; |
| class ExclusiveAccessManager; |
| class FindBarController; |
| class FindBarOwner; |
| class FullscreenControlHost; |
| class HistoryClustersSidePanelCoordinator; |
| class HistorySidePanelCoordinator; |
| class IncognitoClearBrowsingDataDialogCoordinator; |
| class ImmersiveModeController; |
| class LocationBarModel; |
| class MemorySaverOptInIPHController; |
| class PinnedToolbarActionsController; |
| class ProfileMenuCoordinator; |
| class ReadingListSidePanelCoordinator; |
| class RecentActivityBubbleCoordinator; |
| class BrowserSelectFileDialogController; |
| class ScrimViewController; |
| class SidePanelCoordinator; |
| class SidePanelUI; |
| class SigninViewController; |
| class TabMenuModelDelegate; |
| class TabSearchToolbarButtonController; |
| class TabListBridge; |
| class TabStripModel; |
| class TabStripServiceFeature; |
| class ToastController; |
| class ToastService; |
| class TranslateBubbleController; |
| class UpgradeNotificationController; |
| class WebUIBrowserSidePanelUI; |
| |
| #if BUILDFLAG(IS_WIN) |
| class WindowsTaskbarIconUpdater; |
| #endif |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) |
| namespace pdf::infobar { |
| class PdfInfoBarController; |
| } // namespace pdf::infobar |
| namespace default_browser { |
| class PinInfoBarController; |
| } // namespace default_browser |
| #endif |
| |
| #if !BUILDFLAG(IS_CHROMEOS) |
| class DownloadToolbarUIController; |
| #endif |
| |
| #if defined(USE_AURA) |
| class OverscrollPrefManager; |
| #endif // defined(USE_AURA) |
| |
| namespace extensions { |
| class BrowserExtensionWindowController; |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| class ExtensionBrowserWindowHelper; |
| #endif // BUILDFLAG(ENABLE_EXTENSIONS) |
| class ExtensionSidePanelManager; |
| class Mv2DisabledDialogController; |
| } // namespace extensions |
| |
| namespace tabs { |
| class TabDeclutterController; |
| class VerticalTabStripStateController; |
| } // namespace tabs |
| |
| namespace chrome { |
| class BrowserCommandController; |
| } // namespace chrome |
| |
| namespace commerce { |
| class ProductSpecificationsEntryPointController; |
| } // namespace commerce |
| |
| namespace tabs { |
| class GlicNudgeController; |
| } // namespace tabs |
| |
| namespace enterprise_data_protection { |
| class DataProtectionUIController; |
| } // namespace enterprise_data_protection |
| |
| namespace tab_groups { |
| class DeletionDialogController; |
| } // namespace tab_groups |
| |
| namespace lens { |
| class LensOverlayEntryPointController; |
| class LensRegionSearchController; |
| } // namespace lens |
| |
| namespace media_router { |
| class CastBrowserController; |
| } // namespace media_router |
| |
| namespace memory_saver { |
| class MemorySaverBubbleController; |
| } // namespace memory_saver |
| |
| namespace new_tab_footer { |
| class NewTabFooterController; |
| } // namespace new_tab_footer |
| |
| namespace tab_groups { |
| class SessionServiceTabGroupSyncObserver; |
| class SharedTabGroupFeedbackController; |
| class MostRecentSharedTabUpdateStore; |
| } // namespace tab_groups |
| |
| namespace send_tab_to_self { |
| class SendTabToSelfToolbarBubbleController; |
| } // namespace send_tab_to_self |
| |
| namespace split_tabs { |
| class SplitTabHighlightController; |
| } // namespace split_tabs |
| |
| namespace ui { |
| class AcceleratorProvider; |
| } // namespace ui |
| |
| namespace web_app { |
| class AppBrowserController; |
| } // namespace web_app |
| |
| // This class owns the core controllers for features that are scoped to a given |
| // browser window on desktop. |
| // |
| // To inject alternative versions of features or mocks for testing, make your |
| // feature compatible with `UnownedUserDataHost` and then use |
| // `GetUserDataFactoryForTesting()` to inject your test-specific feature |
| // object(s). |
| class BrowserWindowFeatures { |
| public: |
| BrowserWindowFeatures(); |
| ~BrowserWindowFeatures(); |
| |
| BrowserWindowFeatures(const BrowserWindowFeatures&) = delete; |
| BrowserWindowFeatures& operator=(const BrowserWindowFeatures&) = delete; |
| |
| // Called exactly once to initialize features. This is called prior to |
| // instantiating BrowserView, to allow the view hierarchy to depend on state |
| // in this class. |
| void Init(BrowserWindowInterface* browser); |
| |
| // Called exactly once to initialize features that depend on the window object |
| // being created. |
| void InitPostWindowConstruction(Browser* browser); |
| |
| // Called exactly once to initialize features that depend on the view |
| // hierarchy in BrowserView. |
| void InitPostBrowserViewConstruction(BrowserView* browser_view); |
| |
| // Called exactly once to tear down state that depends on the window object. |
| void TearDownPreBrowserWindowDestruction(); |
| |
| // Public accessors for features: |
| web_app::AppBrowserController* app_browser_controller() { |
| return app_browser_controller_.get(); |
| } |
| |
| const web_app::AppBrowserController* app_browser_controller() const { |
| return app_browser_controller_.get(); |
| } |
| |
| BrowserActions* browser_actions() { return browser_actions_.get(); } |
| |
| chrome::BrowserCommandController* browser_command_controller() { |
| return browser_command_controller_.get(); |
| } |
| |
| extensions::Mv2DisabledDialogController* |
| mv2_disabled_dialog_controller_for_testing() { |
| return mv2_disabled_dialog_controller_.get(); |
| } |
| |
| ChromeLabsCoordinator* chrome_labs_coordinator() { |
| return chrome_labs_coordinator_.get(); |
| } |
| |
| media_router::CastBrowserController* cast_browser_controller() { |
| return cast_browser_controller_.get(); |
| } |
| |
| HistorySidePanelCoordinator* history_side_panel_coordinator() { |
| return history_side_panel_coordinator_.get(); |
| } |
| |
| BookmarksSidePanelCoordinator* bookmarks_side_panel_coordinator() { |
| return bookmarks_side_panel_coordinator_.get(); |
| } |
| |
| CommentsSidePanelCoordinator* comments_side_panel_coordinator() { |
| return comments_side_panel_coordinator_.get(); |
| } |
| |
| #if BUILDFLAG(ENABLE_GLIC) |
| glic::GlicSidePanelCoordinator* glic_side_panel_coordinator() { |
| return glic_side_panel_coordinator_.get(); |
| } |
| #endif |
| |
| PinnedToolbarActionsController* pinned_toolbar_actions_controller() { |
| return pinned_toolbar_actions_controller_.get(); |
| } |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) |
| pdf::infobar::PdfInfoBarController* pdf_infobar_controller() { |
| return pdf_infobar_controller_.get(); |
| } |
| default_browser::PinInfoBarController* pin_infobar_controller() { |
| return pin_infobar_controller_.get(); |
| } |
| #endif |
| |
| // TODO(crbug.com/346158959): For historical reasons, side_panel_ui is an |
| // abstract base class that contains some, but not all of the public interface |
| // of SidePanelCoordinator. One of the accessors side_panel_ui() or |
| // side_panel_coordinator() should be removed. For consistency with the rest |
| // of this class, we use lowercase_with_underscores even though the |
| // implementation is not inlined. |
| SidePanelUI* side_panel_ui(); |
| |
| SidePanelCoordinator* side_panel_coordinator() { |
| return side_panel_coordinator_.get(); |
| } |
| |
| lens::LensOverlayEntryPointController* lens_overlay_entry_point_controller() { |
| return lens_overlay_entry_point_controller_.get(); |
| } |
| |
| lens::LensRegionSearchController* lens_region_search_controller() { |
| return lens_region_search_controller_.get(); |
| } |
| |
| tabs::TabDeclutterController* tab_declutter_controller() { |
| return tab_declutter_controller_.get(); |
| } |
| |
| tabs::VerticalTabStripStateController* vertical_tab_strip_state_controller() { |
| return vertical_tab_strip_state_controller_.get(); |
| } |
| |
| tabs::GlicNudgeController* glic_nudge_controller() { |
| return glic_nudge_controller_.get(); |
| } |
| |
| TabStripModel* tab_strip_model() { return tab_strip_model_; } |
| |
| // Returns a pointer to the ToastController for the browser window. This can |
| // return nullptr for non-normal browser windows because toasts are not |
| // supported for those cases. |
| ToastController* toast_controller(); |
| |
| // Returns a pointer to the ToastService for the browser window. This can |
| // return nullptr for non-normal browser windows because toasts are not |
| // supported for those cases. |
| ToastService* toast_service() { return toast_service_.get(); } |
| |
| send_tab_to_self::SendTabToSelfToolbarBubbleController* |
| send_tab_to_self_toolbar_bubble_controller() { |
| return send_tab_to_self_toolbar_bubble_controller_.get(); |
| } |
| |
| extensions::ExtensionSidePanelManager* extension_side_panel_manager() { |
| return extension_side_panel_manager_.get(); |
| } |
| |
| ExtensionKeybindingRegistryViews* extension_keybinding_registry() { |
| return extension_keybinding_registry_.get(); |
| } |
| |
| #if !BUILDFLAG(IS_CHROMEOS) |
| DownloadToolbarUIController* download_toolbar_ui_controller() { |
| return download_toolbar_ui_controller_.get(); |
| } |
| #endif |
| |
| tab_groups::MostRecentSharedTabUpdateStore* |
| most_recent_shared_tab_update_store() { |
| return most_recent_shared_tab_update_store_.get(); |
| } |
| |
| memory_saver::MemorySaverBubbleController* memory_saver_bubble_controller() { |
| return memory_saver_bubble_controller_.get(); |
| } |
| |
| tab_groups::SharedTabGroupFeedbackController* |
| shared_tab_group_feedback_controller() { |
| return shared_tab_group_feedback_controller_.get(); |
| } |
| |
| TabSearchToolbarButtonController* tab_search_toolbar_button_controller() { |
| return tab_search_toolbar_button_controller_.get(); |
| } |
| |
| BrowserSyncedWindowDelegate* synced_window_delegate() { |
| return synced_window_delegate_.get(); |
| } |
| |
| TabMenuModelDelegate* tab_menu_model_delegate() { |
| return tab_menu_model_delegate_.get(); |
| } |
| |
| tab_groups::DeletionDialogController* tab_group_deletion_dialog_controller() { |
| return tab_group_deletion_dialog_controller_.get(); |
| } |
| |
| SigninViewController* signin_view_controller() { |
| return signin_view_controller_.get(); |
| } |
| |
| // Only fetch the tab_strip_service to register a pending receiver. |
| TabStripServiceFeature* tab_strip_service_feature() { |
| return tab_strip_service_feature_.get(); |
| } |
| |
| LocationBarModel* location_bar_model() { return location_bar_model_.get(); } |
| const LocationBarModel* location_bar_model() const { |
| return location_bar_model_.get(); |
| } |
| #if defined(UNIT_TEST) |
| void swap_location_bar_models( |
| std::unique_ptr<LocationBarModel>* location_bar_model) { |
| location_bar_model->swap(location_bar_model_); |
| } |
| #endif |
| |
| ReadingListSidePanelCoordinator* reading_list_side_panel_coordinator() { |
| return reading_list_side_panel_coordinator_.get(); |
| } |
| |
| new_tab_footer::NewTabFooterController* new_tab_footer_controller() { |
| return new_tab_footer_controller_.get(); |
| } |
| |
| DevtoolsUIController* devtools_ui_controller() { |
| return devtools_ui_controller_.get(); |
| } |
| |
| split_tabs::SplitTabHighlightController* split_tab_highlight_controller() { |
| return split_tab_highlight_controller_.get(); |
| } |
| |
| ContentsBorderController* contents_border_controller() { |
| return contents_border_controller_.get(); |
| } |
| |
| ProfileMenuCoordinator* profile_menu_coordinator() { |
| return profile_menu_coordinator_.get(); |
| } |
| |
| IncognitoClearBrowsingDataDialogCoordinator* |
| incognito_clear_browsing_data_dialog_coordinator() { |
| return incognito_clear_browsing_data_dialog_coordinator_.get(); |
| } |
| |
| #if defined(USE_AURA) |
| OverscrollPrefManager* overscroll_pref_manager() { |
| return overscroll_pref_manager_.get(); |
| } |
| #endif // defined(USE_AURA) |
| |
| BrowserSelectFileDialogController* browser_select_file_dialog_controller() { |
| return browser_select_file_dialog_controller_.get(); |
| } |
| |
| // Get the FindBarController for this browser window, creating it if it does |
| // not yet exist. |
| FindBarController* GetFindBarController(); |
| |
| // Returns true if a FindBarController exists for this browser window. |
| bool HasFindBarController() const; |
| |
| ExclusiveAccessManager* exclusive_access_manager() { |
| return exclusive_access_manager_.get(); |
| } |
| |
| FullscreenControlHost* fullscreen_control_host() { |
| return fullscreen_control_host_.get(); |
| } |
| |
| HistoryClustersSidePanelCoordinator* |
| history_clusters_side_panel_coordinator() { |
| return history_clusters_side_panel_coordinator_.get(); |
| } |
| |
| ImmersiveModeController* immersive_mode_controller() { |
| return immersive_mode_controller_.get(); |
| } |
| const ImmersiveModeController* immersive_mode_controller() const { |
| return immersive_mode_controller_.get(); |
| } |
| |
| UpgradeNotificationController* upgrade_notification_controller() { |
| return upgrade_notification_controller_.get(); |
| } |
| |
| BrowserContentSettingBubbleModelDelegate* |
| content_setting_bubble_model_delegate() { |
| return content_setting_bubble_model_delegate_.get(); |
| } |
| |
| BrowserLiveTabContext* live_tab_context() { return live_tab_context_.get(); } |
| |
| ui::AcceleratorProvider* accelerator_provider() { |
| return accelerator_provider_; |
| } |
| |
| FindBarOwner* find_bar_owner() { return find_bar_owner_.get(); } |
| |
| static ui::UserDataFactoryWithOwner<BrowserWindowInterface>& |
| GetUserDataFactoryForTesting(); |
| |
| private: |
| static ui::UserDataFactoryWithOwner<BrowserWindowInterface>& |
| GetUserDataFactory(); |
| |
| // A collection of features specific to desktop versions of Chrome. |
| std::unique_ptr<DesktopBrowserWindowCapabilities> |
| desktop_browser_window_capabilities_; |
| |
| // Features that are per-browser window will each have a controller. e.g. |
| // std::unique_ptr<FooFeature> foo_feature_; |
| |
| // Helper which handles bookmark app specific browser configuration. |
| // This must be initialized before |command_controller_| to ensure the correct |
| // set of commands are enabled. |
| std::unique_ptr<web_app::AppBrowserController> app_browser_controller_; |
| |
| std::unique_ptr<BrowserActions> browser_actions_; |
| |
| std::unique_ptr<chrome::BrowserCommandController> browser_command_controller_; |
| |
| std::unique_ptr<BrowserElements> browser_elements_; |
| |
| std::unique_ptr<BookmarkBarController> bookmark_bar_controller_; |
| |
| std::unique_ptr<BrowserInstantController> instant_controller_; |
| |
| std::unique_ptr<send_tab_to_self::SendTabToSelfToolbarBubbleController> |
| send_tab_to_self_toolbar_bubble_controller_; |
| |
| std::unique_ptr<ChromeLabsCoordinator> chrome_labs_coordinator_; |
| |
| std::unique_ptr<commerce::ProductSpecificationsEntryPointController> |
| product_specifications_entry_point_controller_; |
| |
| std::unique_ptr<ImmersiveModeController> immersive_mode_controller_; |
| |
| std::unique_ptr<ExclusiveAccessManager> exclusive_access_manager_; |
| |
| std::unique_ptr<FullscreenControlHost> fullscreen_control_host_; |
| |
| std::unique_ptr<lens::LensOverlayEntryPointController> |
| lens_overlay_entry_point_controller_; |
| |
| std::unique_ptr<lens::LensRegionSearchController> |
| lens_region_search_controller_; |
| |
| std::unique_ptr<extensions::Mv2DisabledDialogController> |
| mv2_disabled_dialog_controller_; |
| |
| std::unique_ptr<tabs::TabDeclutterController> tab_declutter_controller_; |
| |
| std::unique_ptr<tabs::VerticalTabStripStateController> |
| vertical_tab_strip_state_controller_; |
| |
| std::unique_ptr<MemorySaverOptInIPHController> |
| memory_saver_opt_in_iph_controller_; |
| |
| std::unique_ptr<HistorySidePanelCoordinator> history_side_panel_coordinator_; |
| |
| std::unique_ptr<BookmarksSidePanelCoordinator> |
| bookmarks_side_panel_coordinator_; |
| |
| std::unique_ptr<CommentsSidePanelCoordinator> |
| comments_side_panel_coordinator_; |
| |
| std::unique_ptr<PinnedToolbarActionsController> |
| pinned_toolbar_actions_controller_; |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) |
| std::unique_ptr<pdf::infobar::PdfInfoBarController> pdf_infobar_controller_; |
| |
| std::unique_ptr<default_browser::PinInfoBarController> |
| pin_infobar_controller_; |
| #endif |
| |
| std::unique_ptr<ScrimViewController> scrim_view_controller_; |
| |
| std::unique_ptr<SidePanelCoordinator> side_panel_coordinator_; |
| |
| std::unique_ptr<WebUIBrowserSidePanelUI> webui_browser_side_panel_ui_; |
| |
| std::unique_ptr<tab_groups::SessionServiceTabGroupSyncObserver> |
| session_service_tab_group_sync_observer_; |
| |
| raw_ptr<TabStripModel> tab_strip_model_; |
| std::unique_ptr<ToastService> toast_service_; |
| |
| // The window-scoped extension side-panel manager. There is a separate |
| // tab-scoped extension side-panel manager. |
| std::unique_ptr<extensions::ExtensionSidePanelManager> |
| extension_side_panel_manager_; |
| |
| // The class that registers for keyboard shortcuts for extension commands. |
| std::unique_ptr<ExtensionKeybindingRegistryViews> |
| extension_keybinding_registry_; |
| |
| std::unique_ptr<media_router::CastBrowserController> cast_browser_controller_; |
| |
| #if !BUILDFLAG(IS_CHROMEOS) |
| std::unique_ptr<DownloadToolbarUIController> download_toolbar_ui_controller_; |
| #endif |
| |
| std::unique_ptr<ActorOverlayWindowController> |
| actor_overlay_window_controller_; |
| |
| std::unique_ptr<ActorBorderViewController> actor_border_view_controller_; |
| |
| std::unique_ptr<BrowserSelectFileDialogController> |
| browser_select_file_dialog_controller_; |
| |
| std::unique_ptr<tabs::GlicNudgeController> glic_nudge_controller_; |
| |
| #if BUILDFLAG(ENABLE_GLIC) |
| std::unique_ptr<tabs::GlicActorTaskIconController> |
| glic_actor_task_icon_controller_; |
| std::unique_ptr<glic::GlicButtonController> glic_button_controller_; |
| std::unique_ptr<glic::GlicIphController> glic_iph_controller_; |
| std::unique_ptr<glic::GlicSidePanelCoordinator> glic_side_panel_coordinator_; |
| #endif |
| |
| std::unique_ptr<tab_groups::MostRecentSharedTabUpdateStore> |
| most_recent_shared_tab_update_store_; |
| |
| std::unique_ptr<memory_saver::MemorySaverBubbleController> |
| memory_saver_bubble_controller_; |
| |
| std::unique_ptr<tab_groups::SharedTabGroupFeedbackController> |
| shared_tab_group_feedback_controller_; |
| |
| std::unique_ptr<TranslateBubbleController> translate_bubble_controller_; |
| |
| std::unique_ptr<TabSearchToolbarButtonController> |
| tab_search_toolbar_button_controller_; |
| |
| std::unique_ptr<CookieControlsBubbleCoordinator> |
| cookie_controls_bubble_coordinator_; |
| |
| std::unique_ptr<BrowserSyncedWindowDelegate> synced_window_delegate_; |
| |
| std::unique_ptr<TabMenuModelDelegate> tab_menu_model_delegate_; |
| |
| std::unique_ptr<tab_groups::DeletionDialogController> |
| tab_group_deletion_dialog_controller_; |
| |
| // Helper which implements the LocationBarModelDelegate interface. |
| std::unique_ptr<BrowserLocationBarModelDelegate> location_bar_model_delegate_; |
| |
| // The model for the toolbar view. |
| std::unique_ptr<LocationBarModel> location_bar_model_; |
| |
| std::unique_ptr<SigninViewController> signin_view_controller_; |
| |
| std::unique_ptr<new_tab_footer::NewTabFooterController> |
| new_tab_footer_controller_; |
| |
| std::unique_ptr<DevtoolsUIController> devtools_ui_controller_; |
| |
| std::unique_ptr<enterprise_data_protection::DataProtectionUIController> |
| data_protection_ui_controller_; |
| |
| std::unique_ptr<ReadingListSidePanelCoordinator> |
| reading_list_side_panel_coordinator_; |
| |
| std::unique_ptr<ProfileMenuCoordinator> profile_menu_coordinator_; |
| |
| std::unique_ptr<IncognitoClearBrowsingDataDialogCoordinator> |
| incognito_clear_browsing_data_dialog_coordinator_; |
| |
| #if defined(USE_AURA) |
| std::unique_ptr<OverscrollPrefManager> overscroll_pref_manager_; |
| #endif // defined(USE_AURA) |
| |
| std::unique_ptr<ColorProviderBrowserHelper> color_provider_browser_helper_; |
| |
| // This is an experimental API that interacts with the TabStripModel. |
| std::unique_ptr<TabStripServiceFeature> tab_strip_service_feature_; |
| |
| // The Find Bar. This may be NULL if there is no Find Bar, and if it is |
| // non-NULL, it may or may not be visible. |
| std::unique_ptr<FindBarController> find_bar_controller_; |
| |
| std::unique_ptr<DataSharingBubbleController> data_sharing_bubble_controller_; |
| |
| std::unique_ptr<TabListBridge> tab_list_bridge_; |
| |
| // Note: Depends on TabListBridge, so should come after it in the member list. |
| std::unique_ptr<extensions::BrowserExtensionWindowController> |
| extension_window_controller_; |
| |
| std::unique_ptr<HistoryClustersSidePanelCoordinator> |
| history_clusters_side_panel_coordinator_; |
| |
| std::unique_ptr<UpgradeNotificationController> |
| upgrade_notification_controller_; |
| |
| // Helper which implements the ContentSettingBubbleModel interface. |
| std::unique_ptr<BrowserContentSettingBubbleModelDelegate> |
| content_setting_bubble_model_delegate_; |
| |
| // Helper which implements the LiveTabContext interface. |
| std::unique_ptr<BrowserLiveTabContext> live_tab_context_; |
| |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| std::unique_ptr<extensions::ExtensionBrowserWindowHelper> |
| extension_browser_window_helper_; |
| #endif |
| |
| // Listens for browser-related breadcrumb events to be added to crash reports. |
| std::unique_ptr<BreadcrumbManagerBrowserAgent> |
| breadcrumb_manager_browser_agent_; |
| |
| // TODO(crbug.com/423956131): Remove this. |
| raw_ptr<BrowserWindowInterface> browser_ = nullptr; |
| |
| std::unique_ptr<split_tabs::SplitTabHighlightController> |
| split_tab_highlight_controller_; |
| |
| std::unique_ptr<RecentActivityBubbleCoordinator> |
| recent_activity_bubble_coordinator_; |
| |
| std::unique_ptr<ContentsBorderController> contents_border_controller_; |
| |
| #if BUILDFLAG(IS_WIN) |
| std::unique_ptr<WindowsTaskbarIconUpdater> windows_taskbar_icon_updater_; |
| #endif |
| |
| std::unique_ptr<BrowserUserEducationInterface> user_education_; |
| |
| // TODO(webium): Current both BrowserView and WebUIBrowserWindow implement |
| // AcceleratorProvider. Consider eliminating this inheritance and composing |
| // this functionality into its own class. |
| raw_ptr<ui::AcceleratorProvider> accelerator_provider_; |
| |
| std::unique_ptr<FindBarOwner> find_bar_owner_; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_BROWSER_WINDOW_PUBLIC_BROWSER_WINDOW_FEATURES_H_ |