1 // Copyright 2014 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_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_ 6 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_ 7 8 #include "base/memory/weak_ptr.h" 9 #include "base/scoped_observer.h" 10 #include "chrome/browser/ui/views/toolbar/browser_actions_container_observer.h" 11 #include "ui/views/view.h" 12 13 class Browser; 14 class BrowserActionsContainer; 15 class WrenchMenu; 16 17 // ExtensionToolbarMenuView is the view containing the extension actions that 18 // overflowed from the BrowserActionsContainer, and is contained in and owned by 19 // the wrench menu. 20 // In the event that the WrenchMenu was opened for an Extension Action drag-and- 21 // drop, this will also close the menu upon completion. 22 class ExtensionToolbarMenuView : public views::View, 23 public BrowserActionsContainerObserver { 24 public: 25 ExtensionToolbarMenuView(Browser* browser, WrenchMenu* wrench_menu); 26 virtual ~ExtensionToolbarMenuView(); 27 28 // Returns whether the wrench menu should show this view. This is true when 29 // either |container_| has icons to display or the menu was opened for a drag- 30 // and-drop operation. 31 bool ShouldShow(); 32 33 // views::View: 34 virtual gfx::Size GetPreferredSize() const OVERRIDE; 35 virtual int GetHeightForWidth(int width) const OVERRIDE; 36 virtual void Layout() OVERRIDE; 37 38 private: 39 // BrowserActionsContainerObserver: 40 virtual void OnBrowserActionDragDone() OVERRIDE; 41 42 // Closes the |wrench_menu_|. 43 void CloseWrenchMenu(); 44 45 // The associated browser. 46 Browser* browser_; 47 48 // The WrenchMenu, which may need to be closed after a drag-and-drop. 49 WrenchMenu* wrench_menu_; 50 51 // The overflow BrowserActionsContainer which is nested in this view. 52 BrowserActionsContainer* container_; 53 54 ScopedObserver<BrowserActionsContainer, BrowserActionsContainerObserver> 55 browser_actions_container_observer_; 56 57 base::WeakPtrFactory<ExtensionToolbarMenuView> weak_factory_; 58 59 DISALLOW_COPY_AND_ASSIGN(ExtensionToolbarMenuView); 60 }; 61 62 #endif // CHROME_BROWSER_UI_VIEWS_TOOLBAR_EXTENSION_TOOLBAR_MENU_VIEW_H_ 63