blob: 0e1902ab213a42d9eb75baa869d0d775e2e8231d [file] [log] [blame]
// Copyright 2025 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_WEBUI_BROWSER_WEBUI_BROWSER_UI_H_
#define CHROME_BROWSER_UI_WEBUI_BROWSER_WEBUI_BROWSER_UI_H_
#include <memory>
#include "chrome/browser/ui/tabs/tab_strip_api/tab_strip_api.mojom.h"
#include "chrome/browser/ui/views/side_panel/side_panel_entry_key.h"
#include "chrome/browser/ui/webui/metrics_reporter/metrics_reporter.h"
#include "chrome/browser/ui/webui_browser/bookmark_bar.mojom.h"
#include "chrome/browser/ui/webui_browser/browser.mojom.h"
#include "chrome/browser/ui/webui_browser/webui_browser_window.h"
#include "components/guest_contents/common/guest_contents.mojom.h"
#include "content/public/browser/web_ui_controller.h"
#include "content/public/browser/webui_config.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "ui/webui/mojo_web_ui_controller.h"
#include "ui/webui/resources/js/tracked_element/tracked_element.mojom.h"
class Browser;
namespace content {
class BrowserContext;
} // namespace content
namespace searchbox::mojom {
class PageHandler;
} // namespace searchbox::mojom
namespace ui {
class TrackedElementHandler;
} // namespace ui
class RealboxHandler;
class WebUIBrowserUI;
class WebUIBrowserBookmarkBarPageHandler;
class WebUIBrowserUIConfig
: public content::DefaultWebUIConfig<WebUIBrowserUI> {
public:
WebUIBrowserUIConfig();
// content::DefaultWebUIConfig:
bool IsWebUIEnabled(content::BrowserContext* browser_context) override;
};
// The WebUI for chrome://webui-browser
class WebUIBrowserUI : public ui::MojoWebUIController,
public webui_browser::mojom::PageHandlerFactory,
public bookmark_bar::mojom::PageHandlerFactory {
public:
explicit WebUIBrowserUI(content::WebUI* web_ui);
~WebUIBrowserUI() override;
void BindInterface(
mojo::PendingReceiver<webui_browser::mojom::PageHandlerFactory> receiver);
void BindInterface(
mojo::PendingReceiver<bookmark_bar::mojom::PageHandlerFactory> receiver);
void BindInterface(mojo::PendingReceiver<searchbox::mojom::PageHandler>
pending_page_handler);
void BindInterface(
mojo::PendingReceiver<metrics_reporter::mojom::PageMetricsHost> receiver);
void BindInterface(
mojo::PendingReceiver<guest_contents::mojom::GuestContentsHost> receiver);
void BindInterface(
mojo::PendingReceiver<tabs_api::mojom::TabStripService> receiver);
void BindInterface(
mojo::PendingReceiver<tracked_element::mojom::TrackedElementHandler>
receiver);
void BookmarkBarStateChanged(BookmarkBar::AnimateChangeType change_type);
void ShowSidePanel(SidePanelEntryKey side_panel_entry_key);
void CloseSidePanel();
Browser* browser() { return browser_; }
WebUIBrowserWindow* browser_window() {
return static_cast<WebUIBrowserWindow*>(browser_->window());
}
webui_browser::mojom::Page* page() { return page_.get(); }
base::WeakPtr<WebUIBrowserUI> GetWeakPtr();
private:
WEB_UI_CONTROLLER_TYPE_DECL();
// webui_browser::mojom::PageHandlerFactory:
void CreatePageHandler(
mojo::PendingRemote<webui_browser::mojom::Page> page,
mojo::PendingReceiver<webui_browser::mojom::PageHandler> receiver)
override;
// bookmark_bar::mojom::PageHandlerFactory:
void CreatePageHandler(mojo::PendingRemote<bookmark_bar::mojom::Page> page,
mojo::PendingReceiver<bookmark_bar::mojom::PageHandler>
receiver) override;
// Returns the list of known element identifiers. These elements are HTML
// elements tracked by ui/webui/tracked_element. Used for anchoring secondary
// UIs.
const std::vector<ui::ElementIdentifier>& GetKnownElementIdentifiers() const;
MetricsReporter metrics_reporter_;
std::unique_ptr<RealboxHandler> realbox_handler_;
std::unique_ptr<WebUIBrowserBookmarkBarPageHandler>
bookmark_bar_page_handler_;
std::unique_ptr<ui::TrackedElementHandler> tracked_element_handler_;
mojo::Remote<webui_browser::mojom::Page> page_;
mojo::Receiver<webui_browser::mojom::PageHandlerFactory>
page_factory_receiver_{this};
mojo::Receiver<bookmark_bar::mojom::PageHandlerFactory>
bookmark_bar_page_factory_receiver_{this};
raw_ptr<Browser> browser_;
base::WeakPtrFactory<WebUIBrowserUI> weak_factory_{this};
};
#endif // CHROME_BROWSER_UI_WEBUI_BROWSER_WEBUI_BROWSER_UI_H_