blob: 364d492a4282fd5892f3eed039a7ec9294dba850 [file] [log] [blame]
// Copyright 2022 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_VIEWS_EXTENSIONS_EXTENSIONS_REQUEST_ACCESS_BUTTON_H_
#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_REQUEST_ACCESS_BUTTON_H_
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "extensions/common/extension_id.h"
namespace content {
class WebContents;
} // namespace content
class Browser;
class ExtensionsContainer;
class ExtensionsRequestAccessHoverCardCoordinator;
// Button in the toolbar bar that displays the extensions that requests
// access, and are allowed to do so, and grants them access.
class ExtensionsRequestAccessButton : public ToolbarButton {
public:
explicit ExtensionsRequestAccessButton(
Browser* browser,
ExtensionsContainer* extensions_container);
ExtensionsRequestAccessButton(const ExtensionsRequestAccessButton&) = delete;
const ExtensionsRequestAccessButton& operator=(
const ExtensionsRequestAccessButton&) = delete;
~ExtensionsRequestAccessButton() override;
// Updates the button visibility and content given `extension_ids`.
void Update(std::vector<extensions::ExtensionId>& extension_ids);
// Displays the button's hover card, if possible.
void MaybeShowHoverCard();
// views::View:
void OnMouseMoved(const ui::MouseEvent& event) override;
void OnMouseEntered(const ui::MouseEvent& event) override;
void OnMouseExited(const ui::MouseEvent& event) override;
// ToolbarButton:
std::u16string GetTooltipText(const gfx::Point& p) const override;
// Accessors used by tests:
std::vector<extensions::ExtensionId> GetExtensionIdsForTesting() {
return extension_ids_;
}
ExtensionsRequestAccessHoverCardCoordinator*
GetHoverCardCoordinatorForTesting() {
return hover_card_coordinator_.get();
}
private:
// Runs `extension_ids_` actions in the current site.
void OnButtonPressed();
content::WebContents* GetActiveWebContents();
raw_ptr<Browser> browser_;
raw_ptr<ExtensionsContainer> extensions_container_;
std::unique_ptr<ExtensionsRequestAccessHoverCardCoordinator>
hover_card_coordinator_;
// Extensions included in the request access button.
std::vector<extensions::ExtensionId> extension_ids_;
};
#endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_REQUEST_ACCESS_BUTTON_H_