#ifndef CHROME_BROWSER_UI_VIEWS_BUBBLE_WEBUI_BUBBLE_MANAGER_H_
#define CHROME_BROWSER_UI_VIEWS_BUBBLE_WEBUI_BUBBLE_MANAGER_H_
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/observer_list.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h"
#include "chrome/browser/ui/views/bubble/webui_bubble_manager_observer.h"
#include "chrome/browser/ui/views/close_bubble_on_tab_activation_helper.h"
#include "chrome/browser/ui/webui/top_chrome/webui_contents_warmup_level.h"
#include "chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_service.h"
#include "chrome/browser/ui/webui/top_chrome/webui_contents_wrapper_service_factory.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_observer.h"
class GURL;
class Profile;
class WebUIBubbleDialogView;
class WebUIBubbleManager : public views::WidgetObserver { … };
template <typename T>
class WebUIBubbleManagerImpl : public WebUIBubbleManager { … };
template <typename Controller>
std::unique_ptr<WebUIBubbleManager> WebUIBubbleManager::Create(
views::View* anchor_view,
Profile* profile,
const GURL& webui_url,
int task_manager_string_id,
bool force_load_on_create) { … }
template <typename T>
void WebUIBubbleManagerImpl<T>::MaybeInitPersistentRenderer() { … }
template <typename T>
base::WeakPtr<WebUIBubbleDialogView>
WebUIBubbleManagerImpl<T>::CreateWebUIBubbleDialog(
const std::optional<gfx::Rect>& anchor,
views::BubbleBorder::Arrow arrow) { … }
template <typename T>
WebUIContentsWrapper* WebUIBubbleManagerImpl<T>::GetContentsWrapper() { … }
#endif