Revert "Create a platform-independent ToolbarActionsBar"
[chromium-blink-merge.git] / chrome / browser / ui / views / toolbar / component_toolbar_actions_browsertest.cc
blob5967ff060aace5b682d93bcc243b88b4709c481a
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.
5 #include "base/macros.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
10 #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
11 #include "chrome/browser/ui/views/frame/browser_view.h"
12 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
13 #include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
14 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
15 #include "chrome/test/base/in_process_browser_test.h"
16 #include "extensions/common/feature_switch.h"
17 #include "grit/theme_resources.h"
18 #include "ui/base/resource/resource_bundle.h"
20 namespace {
22 const char kMockId[] = "mock_action";
24 class MockComponentAction : public ToolbarActionViewController {
25 public:
26 MockComponentAction() : click_count_(0u), id_(kMockId) {}
27 ~MockComponentAction() override {}
29 // ToolbarActionButtonController:
30 const std::string& GetId() const override { return id_; }
31 void SetDelegate(ToolbarActionViewDelegate* delegate) override {}
32 gfx::Image GetIcon(content::WebContents* web_contents) override {
33 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
34 IDR_BROWSER_ACTION);
36 gfx::ImageSkia GetIconWithBadge() override {
37 return *GetIcon(nullptr).ToImageSkia();
39 base::string16 GetActionName() const override {
40 return base::ASCIIToUTF16("Component Action");
42 base::string16 GetAccessibleName(content::WebContents* web_contents)
43 const override {
44 return GetActionName();
46 base::string16 GetTooltip(content::WebContents* web_contents)
47 const override {
48 return GetActionName();
50 bool IsEnabled(content::WebContents* web_contents) const override {
51 return true;
53 bool HasPopup(content::WebContents* web_contents) const override {
54 return true;
56 void HidePopup() override {}
57 gfx::NativeView GetPopupNativeView() override { return nullptr; }
58 bool CanDrag() const override { return false; }
59 bool IsMenuRunning() const override { return false; }
60 bool ExecuteAction(bool by_user) override {
61 ++click_count_;
62 return false;
65 size_t click_count() const { return click_count_; }
67 private:
68 size_t click_count_;
69 std::string id_;
71 DISALLOW_COPY_AND_ASSIGN(MockComponentAction);
74 class MockComponentToolbarActionsFactory
75 : public ComponentToolbarActionsFactory {
76 public:
77 MockComponentToolbarActionsFactory();
78 virtual ~MockComponentToolbarActionsFactory();
80 // ComponentToolbarActionsFactory:
81 ScopedVector<ToolbarActionViewController> GetComponentToolbarActions()
82 override;
84 private:
85 DISALLOW_COPY_AND_ASSIGN(MockComponentToolbarActionsFactory);
88 MockComponentToolbarActionsFactory::MockComponentToolbarActionsFactory() {
89 ComponentToolbarActionsFactory::SetTestingFactory(this);
92 MockComponentToolbarActionsFactory::~MockComponentToolbarActionsFactory() {
93 ComponentToolbarActionsFactory::SetTestingFactory(nullptr);
96 ScopedVector<ToolbarActionViewController>
97 MockComponentToolbarActionsFactory::GetComponentToolbarActions() {
98 ScopedVector<ToolbarActionViewController> component_actions;
99 component_actions.push_back(new MockComponentAction());
100 return component_actions.Pass();
103 } // namespace
105 class ComponentToolbarActionsBrowserTest : public InProcessBrowserTest {
106 protected:
107 ComponentToolbarActionsBrowserTest() {}
108 ~ComponentToolbarActionsBrowserTest() override {}
110 void SetUpCommandLine(base::CommandLine* command_line) override {
111 InProcessBrowserTest::SetUpCommandLine(command_line);
112 enable_redesign_.reset(new extensions::FeatureSwitch::ScopedOverride(
113 extensions::FeatureSwitch::extension_action_redesign(), true));
114 mock_actions_factory_.reset(new MockComponentToolbarActionsFactory());
117 private:
118 scoped_ptr<extensions::FeatureSwitch::ScopedOverride> enable_redesign_;
119 scoped_ptr<MockComponentToolbarActionsFactory> mock_actions_factory_;
121 DISALLOW_COPY_AND_ASSIGN(ComponentToolbarActionsBrowserTest);
124 // Test that Component Toolbar Actions appear in the browser actions container
125 // and can receive click events properly.
126 IN_PROC_BROWSER_TEST_F(ComponentToolbarActionsBrowserTest,
127 ComponentToolbarActionsShowUpAndRespondToClicks) {
128 BrowserActionsContainer* browser_actions_container =
129 BrowserView::GetBrowserViewForBrowser(browser())
130 ->toolbar()->browser_actions();
132 // There should be only one component action view.
133 ASSERT_EQ(1u, browser_actions_container->num_toolbar_actions());
135 ToolbarActionView* view =
136 browser_actions_container->GetToolbarActionViewAt(0u);
137 ASSERT_EQ(kMockId, view->view_controller()->GetId());
138 MockComponentAction* mock_component_action =
139 static_cast<MockComponentAction*>(view->view_controller());
141 // Test that clicking on the component action works.
142 EXPECT_EQ(0u, mock_component_action->click_count());
143 view->Activate();
144 EXPECT_EQ(1u, mock_component_action->click_count());