Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Side by Side Diff: chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc

Issue 2721953002: [Media Router] Add "Hide in menu/Show in toolbar" option to Cast toolbar icon (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <memory> 5 #include <memory>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "chrome/app/chrome_command_ids.h" 8 #include "chrome/app/chrome_command_ids.h"
9 #include "chrome/browser/extensions/browser_action_test_util.h" 9 #include "chrome/browser/extensions/browser_action_test_util.h"
10 #include "chrome/browser/extensions/extension_action_test_util.h" 10 #include "chrome/browser/extensions/extension_action_test_util.h"
11 #include "chrome/browser/signin/fake_signin_manager_builder.h" 11 #include "chrome/browser/signin/fake_signin_manager_builder.h"
12 #include "chrome/browser/signin/signin_manager_factory.h" 12 #include "chrome/browser/signin/signin_manager_factory.h"
13 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h" 13 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
14 #include "chrome/browser/ui/toolbar/media_router_action.h" 14 #include "chrome/browser/ui/toolbar/media_router_action.h"
15 #include "chrome/browser/ui/toolbar/media_router_action_controller.h" 15 #include "chrome/browser/ui/toolbar/media_router_action_controller.h"
16 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h" 16 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h"
17 #include "chrome/grit/chromium_strings.h"
18 #include "chrome/grit/generated_resources.h"
17 #include "chrome/test/base/browser_with_test_window_test.h" 19 #include "chrome/test/base/browser_with_test_window_test.h"
20 #include "ui/base/l10n/l10n_util.h"
18 21
19 namespace { 22 namespace {
20 23
21 bool HasCommandId(ui::MenuModel* menu_model, int command_id) { 24 bool HasCommandId(ui::MenuModel* menu_model, int command_id) {
22 for (int i = 0; i < menu_model->GetItemCount(); i++) { 25 for (int i = 0; i < menu_model->GetItemCount(); i++) {
23 if (menu_model->GetCommandIdAt(i) == command_id) 26 if (menu_model->GetCommandIdAt(i) == command_id)
24 return true; 27 return true;
25 } 28 }
26 return false; 29 return false;
27 } 30 }
28 31
29 } // namespace 32 } // namespace
30 33
31 class MediaRouterContextualMenuUnitTest : public BrowserWithTestWindowTest { 34 class MediaRouterContextualMenuUnitTest : public BrowserWithTestWindowTest {
32 public: 35 public:
33 MediaRouterContextualMenuUnitTest() {} 36 MediaRouterContextualMenuUnitTest() {}
34 ~MediaRouterContextualMenuUnitTest() override {} 37 ~MediaRouterContextualMenuUnitTest() override {}
35 38
36 void SetUp() override { 39 void SetUp() override {
37 BrowserWithTestWindowTest::SetUp(); 40 BrowserWithTestWindowTest::SetUp();
38 41
39 toolbar_actions_model_ = 42 toolbar_actions_model_ =
40 extensions::extension_action_test_util::CreateToolbarModelForProfile( 43 extensions::extension_action_test_util::CreateToolbarModelForProfile(
41 profile()); 44 profile());
42 45
43 signin_manager_ = 46 signin_manager_ =
44 SigninManagerFactory::GetInstance()->GetForProfile(profile()); 47 SigninManagerFactory::GetInstance()->GetForProfile(profile());
45 browser_action_test_util_.reset( 48 browser_action_test_util_ =
46 new BrowserActionTestUtil(browser(), false)); 49 base::MakeUnique<BrowserActionTestUtil>(browser(), false);
47 action_.reset(new MediaRouterAction(browser(), 50 action_ = base::MakeUnique<MediaRouterAction>(
48 browser_action_test_util_->GetToolbarActionsBar())); 51 browser(), browser_action_test_util_->GetToolbarActionsBar());
52
53 // Pin the Media Router action to the toolbar.
54 MediaRouterActionController::SetAlwaysShowActionPref(profile(), true);
49 model_ = static_cast<ui::SimpleMenuModel*>(action_->GetContextMenu()); 55 model_ = static_cast<ui::SimpleMenuModel*>(action_->GetContextMenu());
50 } 56 }
51 57
52 void TearDown() override { 58 void TearDown() override {
53 action_.reset(); 59 action_.reset();
54 browser_action_test_util_.reset(); 60 browser_action_test_util_.reset();
55 BrowserWithTestWindowTest::TearDown(); 61 BrowserWithTestWindowTest::TearDown();
56 } 62 }
57 63
58 SigninManagerBase* signin_manager() { return signin_manager_; } 64 protected:
59 ui::SimpleMenuModel* model() { return model_; } 65 // These constants are used to specify the state of the Media Router action
60 ToolbarActionsModel* toolbar_actions_model() { 66 // that is inferred in the production code.
61 return toolbar_actions_model_; 67 static const bool kInToolbar = true;
62 } 68 static const bool kInOverflowMenu = false;
69 static const bool kShownByPolicy = true;
70 static const bool kShownByUser = false;
71
72 std::unique_ptr<BrowserActionTestUtil> browser_action_test_util_;
73 std::unique_ptr<MediaRouterAction> action_;
74 SigninManagerBase* signin_manager_ = nullptr;
75 ui::SimpleMenuModel* model_ = nullptr;
76 ToolbarActionsModel* toolbar_actions_model_ = nullptr;
63 77
64 private: 78 private:
65 std::unique_ptr<BrowserActionTestUtil> browser_action_test_util_;
66 std::unique_ptr<MediaRouterAction> action_;
67 SigninManagerBase* signin_manager_;
68 ui::SimpleMenuModel* model_;
69 ToolbarActionsModel* toolbar_actions_model_;
70
71 DISALLOW_COPY_AND_ASSIGN(MediaRouterContextualMenuUnitTest); 79 DISALLOW_COPY_AND_ASSIGN(MediaRouterContextualMenuUnitTest);
72 }; 80 };
73 81
74 // Tests the basic state of the contextual menu. 82 // Tests the basic state of the contextual menu.
75 TEST_F(MediaRouterContextualMenuUnitTest, Basic) { 83 TEST_F(MediaRouterContextualMenuUnitTest, Basic) {
76 // About 84 // About
77 // ----- 85 // -----
78 // Learn more 86 // Learn more
79 // Help 87 // Help
80 // Always show icon (checkbox) 88 // Always show icon (checkbox)
89 // Hide in Chrome menu / Show in toolbar
81 // ----- 90 // -----
82 // Enable cloud services (checkbox) 91 // Enable cloud services (checkbox)
83 // Report an issue 92 // Report an issue
84 int expected_number_items = 8; 93 int expected_number_items = 9;
85 94
86 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 95 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
87 // On all platforms except Linux, there's an additional menu item to access 96 // On all platforms except Linux, there's an additional menu item to access
88 // Cast device management. 97 // Cast device management.
89 expected_number_items++; 98 expected_number_items++;
90 #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 99 #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
91 100
92 // Verify the number of menu items, including separators. 101 // Verify the number of menu items, including separators.
93 EXPECT_EQ(model()->GetItemCount(), expected_number_items); 102 EXPECT_EQ(model_->GetItemCount(), expected_number_items);
94 103
95 for (int i = 0; i < expected_number_items; i++) { 104 for (int i = 0; i < expected_number_items; i++) {
96 EXPECT_TRUE(model()->IsEnabledAt(i)); 105 EXPECT_TRUE(model_->IsEnabledAt(i));
97 106
98 // The cloud services toggle exists and is enabled, but not visible until 107 // The cloud services toggle exists and is enabled, but not visible until
99 // the user has authenticated their account. 108 // the user has authenticated their account.
100 const bool expected_visibility = 109 const bool expected_visibility =
101 model()->GetCommandIdAt(i) != IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE; 110 model_->GetCommandIdAt(i) != IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE;
102 EXPECT_EQ(expected_visibility, model()->IsVisibleAt(i)); 111 EXPECT_EQ(expected_visibility, model_->IsVisibleAt(i));
103 } 112 }
104 113
105 // Set up an authenticated account. 114 // Set up an authenticated account.
106 signin_manager()->SetAuthenticatedAccountInfo("foo@bar.com", "password"); 115 signin_manager_->SetAuthenticatedAccountInfo("foo@bar.com", "password");
107 116
108 // Run the same checks as before. All existing menu items should be now 117 // Run the same checks as before. All existing menu items should be now
109 // enabled and visible. 118 // enabled and visible.
110 EXPECT_EQ(model()->GetItemCount(), expected_number_items); 119 EXPECT_EQ(model_->GetItemCount(), expected_number_items);
111 for (int i = 0; i < expected_number_items; i++) { 120 for (int i = 0; i < expected_number_items; i++) {
112 EXPECT_TRUE(model()->IsEnabledAt(i)); 121 EXPECT_TRUE(model_->IsEnabledAt(i));
113 EXPECT_TRUE(model()->IsVisibleAt(i)); 122 EXPECT_TRUE(model_->IsVisibleAt(i));
114 } 123 }
115 } 124 }
116 125
117 // Tests whether the cloud services item is correctly toggled. This menu item 126 // Tests whether the cloud services item is correctly toggled. This menu item
118 // is only availble on official Chrome builds. 127 // is only availble on official Chrome builds.
119 TEST_F(MediaRouterContextualMenuUnitTest, ToggleCloudServicesItem) { 128 TEST_F(MediaRouterContextualMenuUnitTest, ToggleCloudServicesItem) {
120 // The Media Router Action has a getter for the model, but not the delegate. 129 // The Media Router Action has a getter for the model, but not the delegate.
121 // Create the MediaRouterContextualMenu ui::SimpleMenuModel::Delegate here. 130 // Create the MediaRouterContextualMenu ui::SimpleMenuModel::Delegate here.
122 MediaRouterContextualMenu menu(browser()); 131 MediaRouterContextualMenu menu(browser(), kInToolbar, kShownByPolicy);
123 132
124 // Set up an authenticated account such that the cloud services menu item is 133 // Set up an authenticated account such that the cloud services menu item is
125 // surfaced. Whether or not it is surfaced is tested in the "Basic" test. 134 // surfaced. Whether or not it is surfaced is tested in the "Basic" test.
126 signin_manager()->SetAuthenticatedAccountInfo("foo@bar.com", "password"); 135 signin_manager_->SetAuthenticatedAccountInfo("foo@bar.com", "password");
127 136
128 // By default, the command is not checked. 137 // By default, the command is not checked.
129 EXPECT_FALSE(menu.IsCommandIdChecked( 138 EXPECT_FALSE(menu.IsCommandIdChecked(
130 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE)); 139 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE));
131 140
132 menu.ExecuteCommand(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 0); 141 menu.ExecuteCommand(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 0);
133 EXPECT_TRUE(menu.IsCommandIdChecked( 142 EXPECT_TRUE(menu.IsCommandIdChecked(
134 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE)); 143 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE));
135 144
136 menu.ExecuteCommand(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 0); 145 menu.ExecuteCommand(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 0);
137 EXPECT_FALSE(menu.IsCommandIdChecked( 146 EXPECT_FALSE(menu.IsCommandIdChecked(
138 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE)); 147 IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE));
139 } 148 }
140 149
141 TEST_F(MediaRouterContextualMenuUnitTest, ToggleAlwaysShowIconItem) { 150 TEST_F(MediaRouterContextualMenuUnitTest, ToggleAlwaysShowIconItem) {
142 MediaRouterContextualMenu menu(browser()); 151 MediaRouterContextualMenu menu(browser(), kInToolbar, kShownByUser);
143 152
144 // Whether the option is checked should reflect the pref. 153 // Whether the option is checked should reflect the pref.
145 MediaRouterActionController::SetAlwaysShowActionPref(profile(), true); 154 MediaRouterActionController::SetAlwaysShowActionPref(profile(), true);
146 EXPECT_TRUE( 155 EXPECT_TRUE(
147 menu.IsCommandIdChecked(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION)); 156 menu.IsCommandIdChecked(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION));
148 157
149 MediaRouterActionController::SetAlwaysShowActionPref(profile(), false); 158 MediaRouterActionController::SetAlwaysShowActionPref(profile(), false);
150 EXPECT_FALSE( 159 EXPECT_FALSE(
151 menu.IsCommandIdChecked(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION)); 160 menu.IsCommandIdChecked(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION));
152 161
153 // Executing the option should toggle the pref. 162 // Executing the option should toggle the pref.
154 menu.ExecuteCommand(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION, 0); 163 menu.ExecuteCommand(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION, 0);
155 EXPECT_TRUE(MediaRouterActionController::GetAlwaysShowActionPref(profile())); 164 EXPECT_TRUE(MediaRouterActionController::GetAlwaysShowActionPref(profile()));
156 165
157 menu.ExecuteCommand(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION, 0); 166 menu.ExecuteCommand(IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION, 0);
158 EXPECT_FALSE(MediaRouterActionController::GetAlwaysShowActionPref(profile())); 167 EXPECT_FALSE(MediaRouterActionController::GetAlwaysShowActionPref(profile()));
159 } 168 }
160 169
161 TEST_F(MediaRouterContextualMenuUnitTest, ActionShownByPolicy) { 170 TEST_F(MediaRouterContextualMenuUnitTest, ActionShownByPolicy) {
162 // Create a contextual menu for an icon shown by administrator policy. 171 // Create a contextual menu for an icon shown by administrator policy.
163 MediaRouterContextualMenu menu(browser(), true); 172 MediaRouterContextualMenu menu(browser(), kInToolbar, kShownByPolicy);
164 173
165 // The item "Added by your administrator" should be shown disabled. 174 // The item "Added by your administrator" should be shown disabled.
166 EXPECT_TRUE(menu.IsCommandIdVisible(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY)); 175 EXPECT_TRUE(menu.IsCommandIdVisible(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY));
167 EXPECT_FALSE(menu.IsCommandIdEnabled(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY)); 176 EXPECT_FALSE(menu.IsCommandIdEnabled(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY));
168 177
169 // The checkbox item "Always show icon" should not be shown. 178 // The checkbox item "Always show icon" should not be shown.
170 EXPECT_FALSE(HasCommandId(menu.menu_model(), 179 EXPECT_FALSE(HasCommandId(menu.menu_model(),
171 IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION)); 180 IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION));
172 } 181 }
182
183 TEST_F(MediaRouterContextualMenuUnitTest, HideActionInOverflowItem) {
184 MediaRouterContextualMenu menu(browser(), kInToolbar, kShownByUser);
185
186 // When the action icon is in the toolbar, this menu item should say "Hide
187 // in Chrome menu."
apacible 2017/03/02 02:02:57 nit here and below: period outside quotes since it
takumif 2017/03/03 00:10:48 Done.
188 const base::string16& menu_item_label = menu.menu_model()->GetLabelAt(
189 menu.menu_model()->GetIndexOfCommandId(IDC_MEDIA_ROUTER_SHOW_IN_TOOLBAR));
190 EXPECT_EQ(menu_item_label,
191 l10n_util::GetStringUTF16(IDS_EXTENSIONS_HIDE_BUTTON_IN_MENU));
192 }
193
194 TEST_F(MediaRouterContextualMenuUnitTest, ShowActionInToolbarItem) {
195 MediaRouterContextualMenu menu(browser(), kInOverflowMenu, kShownByUser);
196
197 // When the action icon is in the overflow menu, this menu item should say
198 // "Show in toolbar."
199 const base::string16& menu_item_label = menu.menu_model()->GetLabelAt(
200 menu.menu_model()->GetIndexOfCommandId(IDC_MEDIA_ROUTER_SHOW_IN_TOOLBAR));
201 EXPECT_EQ(menu_item_label,
202 l10n_util::GetStringUTF16(IDS_EXTENSIONS_SHOW_BUTTON_IN_TOOLBAR));
203 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698