#ifndef CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_ZOOM_BUBBLE_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_ZOOM_BUBBLE_VIEW_H_
#include <memory>
#include <string>
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/views/location_bar/location_bar_bubble_delegate_view.h"
#include "components/sessions/core/session_id.h"
#include "content/public/browser/web_contents_observer.h"
#include "extensions/browser/extension_icon_image.h"
#include "ui/views/controls/label.h"
class Browser;
namespace content {
class WebContents;
}
namespace views {
class Button;
class ImageButton;
}
class ZoomBubbleView : public LocationBarBubbleDelegateView,
public extensions::IconImage::Observer {
METADATA_HEADER(ZoomBubbleView, LocationBarBubbleDelegateView)
public:
ZoomBubbleView(Browser* browser,
views::View* anchor_view,
content::WebContents* web_contents,
DisplayReason reason);
~ZoomBubbleView() override;
ZoomBubbleView(const ZoomBubbleView&) = delete;
ZoomBubbleView& operator=(const ZoomBubbleView&) = delete;
void Refresh();
void SetExtensionInfo(const extensions::Extension* extension);
const std::string& extension_id() const { return extension_info_.id; }
std::u16string_view GetLabelForTesting() const;
base::OneShotTimer* GetAutoCloseTimerForTesting();
views::Button* GetResetButtonForTesting();
views::Button* GetZoomInButtonForTesting();
void OnKeyEventForTesting(ui::KeyEvent* event);
private:
static bool CanRefresh(const content::WebContents* web_contents);
struct ZoomBubbleExtensionInfo {
ZoomBubbleExtensionInfo();
~ZoomBubbleExtensionInfo();
std::string id;
std::string name;
std::unique_ptr<const extensions::IconImage> icon_image;
};
std::u16string GetAccessibleWindowTitle() const override;
void OnFocus() override;
void OnBlur() override;
void OnGestureEvent(ui::GestureEvent* event) override;
void OnKeyEvent(ui::KeyEvent* event) override;
void OnMouseEntered(const ui::MouseEvent& event) override;
void OnMouseExited(const ui::MouseEvent& event) override;
void Init() override;
void OnExtensionIconImageChanged(extensions::IconImage* ) override;
void Close();
void UpdateZoomPercent();
void StartTimerIfNecessary();
void StopTimer();
void ButtonPressed(base::RepeatingClosure closure);
void ImageButtonPressed();
raw_ptr<Browser> browser_;
ZoomBubbleExtensionInfo extension_info_;
base::OneShotTimer auto_close_timer_;
base::TimeDelta auto_close_duration_;
raw_ptr<views::ImageButton> image_button_ = nullptr;
raw_ptr<views::Label> label_ = nullptr;
raw_ptr<views::Button> zoom_out_button_ = nullptr;
raw_ptr<views::Button> zoom_in_button_ = nullptr;
raw_ptr<views::Button> reset_button_ = nullptr;
bool auto_close_;
bool ignore_close_bubble_ = false;
};
#endif