Infobar material design refresh: layout
[chromium-blink-merge.git] / chrome / browser / ui / views / toolbar / browser_action_test_util_views.cc
blobda6d8698875448b3ab6065ffb860e652ed1321b3
1 // Copyright 2013 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.
5 #include "chrome/browser/extensions/browser_action_test_util.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/browser_window.h"
10 #include "chrome/browser/ui/extensions/extension_action_view_controller.h"
11 #include "chrome/browser/ui/views/extensions/extension_popup.h"
12 #include "chrome/browser/ui/views/frame/browser_view.h"
13 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
14 #include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
15 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
16 #include "chrome/browser/ui/views/toolbar/wrench_toolbar_button.h"
17 #include "ui/aura/window.h"
18 #include "ui/gfx/geometry/rect.h"
19 #include "ui/gfx/geometry/size.h"
20 #include "ui/gfx/image/image.h"
21 #include "ui/views/widget/widget.h"
23 namespace {
25 // The views-specific implementation of the TestToolbarActionsBarHelper, which
26 // creates and owns a BrowserActionsContainer.
27 class TestToolbarActionsBarHelperViews : public TestToolbarActionsBarHelper {
28 public:
29 TestToolbarActionsBarHelperViews(Browser* browser,
30 BrowserActionsContainer* main_bar);
31 ~TestToolbarActionsBarHelperViews() override;
33 BrowserActionsContainer* browser_actions_container() {
34 return browser_actions_container_;
37 private:
38 // The parent of the BrowserActionsContainer, which directly owns the
39 // container as part of the views hierarchy.
40 views::View container_parent_;
42 // The created BrowserActionsContainer. Owned by |container_parent_|.
43 BrowserActionsContainer* browser_actions_container_;
45 DISALLOW_COPY_AND_ASSIGN(TestToolbarActionsBarHelperViews);
48 TestToolbarActionsBarHelperViews::TestToolbarActionsBarHelperViews(
49 Browser* browser,
50 BrowserActionsContainer* main_bar)
51 : browser_actions_container_(
52 new BrowserActionsContainer(browser, main_bar)) {
53 // The BrowserActionsContainer expects to have a parent (and be added to the
54 // view hierarchy), so wrap it in a shell view.
55 container_parent_.set_owned_by_client();
56 container_parent_.AddChildView(browser_actions_container_);
59 TestToolbarActionsBarHelperViews::~TestToolbarActionsBarHelperViews() {
62 BrowserActionsContainer* GetContainer(Browser* browser,
63 TestToolbarActionsBarHelper* helper) {
64 if (helper) {
65 return static_cast<TestToolbarActionsBarHelperViews*>(helper)
66 ->browser_actions_container();
68 return BrowserView::GetBrowserViewForBrowser(browser)->toolbar()->
69 browser_actions();
72 } // namespace
74 BrowserActionTestUtil::BrowserActionTestUtil(Browser* browser)
75 : BrowserActionTestUtil(browser, true) {
78 BrowserActionTestUtil::BrowserActionTestUtil(Browser* browser,
79 bool is_real_window)
80 : browser_(browser) {
81 if (!is_real_window)
82 test_helper_.reset(new TestToolbarActionsBarHelperViews(browser, nullptr));
85 BrowserActionTestUtil::~BrowserActionTestUtil() {
88 int BrowserActionTestUtil::NumberOfBrowserActions() {
89 return GetContainer(browser_, test_helper_.get())->num_toolbar_actions();
92 int BrowserActionTestUtil::VisibleBrowserActions() {
93 return GetContainer(browser_, test_helper_.get())->VisibleBrowserActions();
96 bool BrowserActionTestUtil::IsChevronShowing() {
97 BrowserActionsContainer* container =
98 GetContainer(browser_, test_helper_.get());
99 gfx::Size visible_size = container->GetVisibleBounds().size();
100 return container->chevron() &&
101 container->chevron()->visible() &&
102 visible_size.width() >=
103 container->chevron()->GetPreferredSize().width() &&
104 !visible_size.IsEmpty();
107 void BrowserActionTestUtil::InspectPopup(int index) {
108 ToolbarActionView* view =
109 GetContainer(browser_, test_helper_.get())->GetToolbarActionViewAt(index);
110 static_cast<ExtensionActionViewController*>(view->view_controller())->
111 InspectPopup();
114 bool BrowserActionTestUtil::HasIcon(int index) {
115 return !GetContainer(browser_, test_helper_.get())
116 ->GetToolbarActionViewAt(index)
117 ->GetImage(views::Button::STATE_NORMAL)
118 .isNull();
121 gfx::Image BrowserActionTestUtil::GetIcon(int index) {
122 gfx::ImageSkia icon = GetContainer(browser_, test_helper_.get())
123 ->GetToolbarActionViewAt(index)
124 ->GetIconForTest();
125 return gfx::Image(icon);
128 void BrowserActionTestUtil::Press(int index) {
129 GetContainer(browser_, test_helper_.get())
130 ->GetToolbarActionViewAt(index)
131 ->view_controller()
132 ->ExecuteAction(true);
135 std::string BrowserActionTestUtil::GetExtensionId(int index) {
136 return GetContainer(browser_, test_helper_.get())
137 ->GetToolbarActionViewAt(index)
138 ->view_controller()
139 ->GetId();
142 std::string BrowserActionTestUtil::GetTooltip(int index) {
143 base::string16 text;
144 GetContainer(browser_, test_helper_.get())
145 ->GetToolbarActionViewAt(index)
146 ->GetTooltipText(gfx::Point(), &text);
147 return base::UTF16ToUTF8(text);
150 gfx::NativeView BrowserActionTestUtil::GetPopupNativeView() {
151 ToolbarActionViewController* popup_owner =
152 GetToolbarActionsBar()->popup_owner();
153 return popup_owner ? popup_owner->GetPopupNativeView() : nullptr;
156 bool BrowserActionTestUtil::HasPopup() {
157 return GetPopupNativeView() != nullptr;
160 gfx::Size BrowserActionTestUtil::GetPopupSize() {
161 gfx::NativeView popup = GetPopupNativeView();
162 views::Widget* widget = views::Widget::GetWidgetForNativeView(popup);
163 return widget->GetWindowBoundsInScreen().size();
166 bool BrowserActionTestUtil::HidePopup() {
167 GetToolbarActionsBar()->HideActivePopup();
168 return !HasPopup();
171 bool BrowserActionTestUtil::ActionButtonWantsToRun(size_t index) {
172 return GetContainer(browser_, test_helper_.get())
173 ->GetToolbarActionViewAt(index)
174 ->wants_to_run_for_testing();
177 bool BrowserActionTestUtil::OverflowedActionButtonWantsToRun() {
178 return BrowserView::GetBrowserViewForBrowser(browser_)->toolbar()->
179 wrench_menu_badge_controller()->overflowed_toolbar_action_wants_to_run();
182 ToolbarActionsBar* BrowserActionTestUtil::GetToolbarActionsBar() {
183 return GetContainer(browser_, test_helper_.get())->toolbar_actions_bar();
186 scoped_ptr<BrowserActionTestUtil> BrowserActionTestUtil::CreateOverflowBar() {
187 CHECK(!GetToolbarActionsBar()->in_overflow_mode())
188 << "Only a main bar can create an overflow bar!";
189 return make_scoped_ptr(new BrowserActionTestUtil(browser_, this));
192 // static
193 gfx::Size BrowserActionTestUtil::GetMinPopupSize() {
194 return gfx::Size(ExtensionPopup::kMinWidth, ExtensionPopup::kMinHeight);
197 // static
198 gfx::Size BrowserActionTestUtil::GetMaxPopupSize() {
199 return gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight);
202 BrowserActionTestUtil::BrowserActionTestUtil(Browser* browser,
203 BrowserActionTestUtil* main_bar)
204 : browser_(browser),
205 test_helper_(new TestToolbarActionsBarHelperViews(
206 browser_,
207 GetContainer(browser_, main_bar->test_helper_.get()))) {