1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
7 
8 #include <memory>
9 
10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
12 #include "chrome/browser/ui/views/extensions/extension_context_menu_controller.h"
13 #include "chrome/browser/ui/views/toolbar/toolbar_action_view_delegate_views.h"
14 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
15 #include "ui/views/controls/button/label_button.h"
16 
17 class ExtensionsMenuItemView;
18 
19 namespace views {
20 class Button;
21 }  // namespace views
22 
23 // ExtensionsMenuButton is the single extension action button within a row in
24 // the extensions menu. This includes the extension icon and name and triggers
25 // the extension action.
26 class ExtensionsMenuButton : public views::LabelButton,
27                              public ToolbarActionViewDelegateViews {
28  public:
29   ExtensionsMenuButton(Browser* browser,
30                        ExtensionsMenuItemView* parent,
31                        ToolbarActionViewController* controller,
32                        bool allow_pinning);
33   ExtensionsMenuButton(const ExtensionsMenuButton&) = delete;
34   ExtensionsMenuButton& operator=(const ExtensionsMenuButton&) = delete;
35   ~ExtensionsMenuButton() override;
36 
37   static const char kClassName[];
38 
39   SkColor GetInkDropBaseColor() const override;
40   bool CanShowIconInToolbar() const override;
41 
label_text_for_testing()42   const base::string16& label_text_for_testing() const {
43     return label()->GetText();
44   }
45 
46  private:
47   // views::LabelButton:
48   const char* GetClassName() const override;
49 
50   // ToolbarActionViewDelegateViews:
51   views::View* GetAsView() override;
52   views::FocusManager* GetFocusManagerForAccelerator() override;
53   views::Button* GetReferenceButtonForPopup() override;
54   content::WebContents* GetCurrentWebContents() const override;
55   void UpdateState() override;
56   bool IsMenuRunning() const override;
57 
58   void ButtonPressed();
59 
60   Browser* const browser_;
61 
62   // The container containing this view.
63   ExtensionsMenuItemView* const parent_;
64 
65   // Responsible for executing the extension's actions.
66   ToolbarActionViewController* const controller_;
67 
68   bool allow_pinning_;
69 };
70 
71 #endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_BUTTON_H_
72