1 // Copyright 2016 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_TOOLBAR_ACTIONS_BAR_BUBBLE_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_ACTIONS_BAR_BUBBLE_VIEWS_H_
7 
8 #include <memory>
9 
10 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h"
11 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
12 #include "ui/views/widget/widget_observer.h"
13 
14 class ToolbarActionsBarBubbleViewsTest;
15 
16 namespace views {
17 class ImageButton;
18 class Label;
19 }
20 
21 class ToolbarActionsBarBubbleViews : public views::BubbleDialogDelegateView,
22                                      public views::WidgetObserver {
23  public:
24   // Creates the bubble anchored to |anchor_view|, which may not be nullptr.
25   ToolbarActionsBarBubbleViews(
26       views::View* anchor_view,
27       bool anchored_to_action,
28       std::unique_ptr<ToolbarActionsBarBubbleDelegate> delegate);
29   ToolbarActionsBarBubbleViews(const ToolbarActionsBarBubbleViews&) = delete;
30   ToolbarActionsBarBubbleViews& operator=(const ToolbarActionsBarBubbleViews&) =
31       delete;
32   ~ToolbarActionsBarBubbleViews() override;
33 
34   std::string GetAnchorActionId();
35 
body_text()36   const views::Label* body_text() const { return body_text_; }
item_list()37   const views::Label* item_list() const { return item_list_; }
learn_more_button()38   views::ImageButton* learn_more_button() const { return learn_more_button_; }
39 
40  private:
41   friend class ToolbarActionsBarBubbleViewsTest;
42 
43   std::unique_ptr<views::View> CreateExtraInfoView();
44 
45   void ButtonPressed();
46 
47   void NotifyDelegateOfClose(
48       ToolbarActionsBarBubbleDelegate::CloseAction action);
49 
50   // views::BubbleDialogDelegateView:
51   base::string16 GetWindowTitle() const override;
52   bool ShouldShowCloseButton() const override;
53   void AddedToWidget() override;
54   void RemovedFromWidget() override;
55   void Init() override;
56 
57   // views::WidgetObserver:
58   void OnWidgetVisibilityChanged(views::Widget* widget, bool visible) override;
59 
60   std::unique_ptr<ToolbarActionsBarBubbleDelegate> delegate_;
61   bool delegate_notified_of_close_ = false;
62   bool observer_notified_of_show_ = false;
63   views::Label* body_text_ = nullptr;
64   views::Label* item_list_ = nullptr;
65   views::ImageButton* learn_more_button_ = nullptr;
66   const bool anchored_to_action_;
67 };
68 
69 #endif  // CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_ACTIONS_BAR_BUBBLE_VIEWS_H_
70