Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / toolbar / extension_toolbar_menu_view.h
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_