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