OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 #import "chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h
" | 5 #import "chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h
" |
6 | 6 |
7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | 122 |
123 void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) { | 123 void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) { |
124 NSMenu* menu = [base::mac::ObjCCastStrict<NSPopUpButton>(menu_button) menu]; | 124 NSMenu* menu = [base::mac::ObjCCastStrict<NSPopUpButton>(menu_button) menu]; |
125 NSString* next_title = l10n_util::GetNSString(next_title_id); | 125 NSString* next_title = l10n_util::GetNSString(next_title_id); |
126 EXPECT_EQ([[menu itemWithTitle:[menu_button title]] state], NSOnState); | 126 EXPECT_EQ([[menu itemWithTitle:[menu_button title]] state], NSOnState); |
127 NSMenuItem* next_item = [menu itemWithTitle:next_title]; | 127 NSMenuItem* next_item = [menu itemWithTitle:next_title]; |
128 EXPECT_EQ([next_item state], NSOffState); | 128 EXPECT_EQ([next_item state], NSOffState); |
129 [menu performActionForItemAtIndex:[menu indexOfItem:next_item]]; | 129 [menu performActionForItemAtIndex:[menu indexOfItem:next_item]]; |
130 } | 130 } |
131 | 131 |
132 NSMenuItem* FindCustomizeMenuItem() { | |
133 NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY); | |
134 if (!button || ![button isKindOfClass:[SplitBlockButton class]]) | |
135 return nil; | |
136 NSString* customize = l10n_util::GetNSString(IDS_PERMISSION_CUSTOMIZE); | |
137 SplitBlockButton* block_button = | |
138 base::mac::ObjCCast<SplitBlockButton>(button); | |
139 for (NSMenuItem* item in [[block_button menu] itemArray]) { | |
140 if ([[item title] isEqualToString:customize]) | |
141 return item; | |
142 } | |
143 return nil; | |
144 } | |
145 | |
146 protected: | 132 protected: |
147 PermissionBubbleController* controller_; // Weak; it deletes itself. | 133 PermissionBubbleController* controller_; // Weak; it deletes itself. |
148 scoped_ptr<PermissionBubbleCocoa> bridge_; | 134 scoped_ptr<PermissionBubbleCocoa> bridge_; |
149 std::vector<PermissionBubbleRequest*> requests_; | 135 std::vector<PermissionBubbleRequest*> requests_; |
150 std::vector<bool> accept_states_; | 136 std::vector<bool> accept_states_; |
151 }; | 137 }; |
152 | 138 |
153 TEST_F(PermissionBubbleControllerTest, ShowAndClose) { | 139 TEST_F(PermissionBubbleControllerTest, ShowAndClose) { |
154 EXPECT_FALSE([[controller_ window] isVisible]); | 140 EXPECT_FALSE([[controller_ window] isVisible]); |
155 [controller_ showWindow:nil]; | 141 [controller_ showWindow:nil]; |
156 EXPECT_TRUE([[controller_ window] isVisible]); | 142 EXPECT_TRUE([[controller_ window] isVisible]); |
157 } | 143 } |
158 | 144 |
159 TEST_F(PermissionBubbleControllerTest, ShowSinglePermission) { | 145 TEST_F(PermissionBubbleControllerTest, ShowSinglePermission) { |
160 [controller_ showAtAnchor:NSZeroPoint | 146 [controller_ showAtAnchor:NSZeroPoint |
161 withDelegate:this | 147 withDelegate:this |
162 forRequests:requests_ | 148 forRequests:requests_ |
163 acceptStates:accept_states_ | 149 acceptStates:accept_states_]; |
164 customizationMode:NO]; | |
165 | 150 |
166 EXPECT_TRUE(FindTextFieldWithString(kPermissionA)); | 151 EXPECT_TRUE(FindTextFieldWithString(kPermissionA)); |
167 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); | 152 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
168 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY)); | 153 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
169 EXPECT_FALSE(FindButtonWithTitle(IDS_OK)); | 154 EXPECT_FALSE(FindButtonWithTitle(IDS_OK)); |
170 EXPECT_FALSE(FindCustomizeMenuItem()); | |
171 } | 155 } |
172 | 156 |
173 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) { | 157 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) { |
174 AddRequest(kPermissionB); | 158 AddRequest(kPermissionB); |
175 AddRequest(kPermissionC); | 159 AddRequest(kPermissionC); |
176 | 160 |
| 161 accept_states_.push_back(true); // A |
| 162 accept_states_.push_back(true); // B |
| 163 accept_states_.push_back(true); // C |
| 164 |
177 [controller_ showAtAnchor:NSZeroPoint | 165 [controller_ showAtAnchor:NSZeroPoint |
178 withDelegate:this | 166 withDelegate:this |
179 forRequests:requests_ | 167 forRequests:requests_ |
180 acceptStates:accept_states_ | 168 acceptStates:accept_states_]; |
181 customizationMode:NO]; | |
182 | 169 |
183 EXPECT_TRUE(FindTextFieldWithString(kPermissionA)); | 170 EXPECT_TRUE(FindTextFieldWithString(kPermissionA)); |
184 EXPECT_TRUE(FindTextFieldWithString(kPermissionB)); | 171 EXPECT_TRUE(FindTextFieldWithString(kPermissionB)); |
185 EXPECT_TRUE(FindTextFieldWithString(kPermissionC)); | 172 EXPECT_TRUE(FindTextFieldWithString(kPermissionC)); |
186 | 173 |
187 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); | 174 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
188 EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY)); | 175 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
189 EXPECT_TRUE(FindCustomizeMenuItem()); | 176 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
190 EXPECT_FALSE(FindButtonWithTitle(IDS_OK)); | |
191 } | 177 } |
192 | 178 |
193 TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeAllow) { | 179 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsAllow) { |
194 accept_states_.push_back(true); | 180 AddRequest(kPermissionB); |
| 181 |
| 182 accept_states_.push_back(true); // A |
| 183 accept_states_.push_back(true); // B |
| 184 |
195 [controller_ showAtAnchor:NSZeroPoint | 185 [controller_ showAtAnchor:NSZeroPoint |
196 withDelegate:this | 186 withDelegate:this |
197 forRequests:requests_ | 187 forRequests:requests_ |
198 acceptStates:accept_states_ | 188 acceptStates:accept_states_]; |
199 customizationMode:YES]; | |
200 | 189 |
201 // Test that there is one menu, with 'Allow' visible. | 190 // Test that all menus have 'Allow' visible. |
202 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); | 191 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); |
203 EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); | 192 EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); |
204 | 193 |
205 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); | 194 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
206 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); | 195 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
207 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); | 196 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
208 EXPECT_FALSE(FindCustomizeMenuItem()); | |
209 } | 197 } |
210 | 198 |
211 TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeBlock) { | 199 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsBlock) { |
212 accept_states_.push_back(false); | 200 AddRequest(kPermissionB); |
| 201 |
| 202 accept_states_.push_back(false); // A |
| 203 accept_states_.push_back(false); // B |
| 204 |
213 [controller_ showAtAnchor:NSZeroPoint | 205 [controller_ showAtAnchor:NSZeroPoint |
214 withDelegate:this | 206 withDelegate:this |
215 forRequests:requests_ | 207 forRequests:requests_ |
216 acceptStates:accept_states_ | 208 acceptStates:accept_states_]; |
217 customizationMode:YES]; | |
218 | 209 |
219 // Test that there is one menu, with 'Block' visible. | 210 // Test that all menus have 'Block' visible. |
220 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); | 211 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); |
221 EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); | 212 EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); |
222 | 213 |
223 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); | 214 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
224 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); | 215 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
225 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); | 216 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
226 EXPECT_FALSE(FindCustomizeMenuItem()); | 217 } |
| 218 |
| 219 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissionsMixed) { |
| 220 AddRequest(kPermissionB); |
| 221 AddRequest(kPermissionC); |
| 222 |
| 223 accept_states_.push_back(false); // A |
| 224 accept_states_.push_back(false); // B |
| 225 accept_states_.push_back(true); // C |
| 226 |
| 227 [controller_ showAtAnchor:NSZeroPoint |
| 228 withDelegate:this |
| 229 forRequests:requests_ |
| 230 acceptStates:accept_states_]; |
| 231 |
| 232 // Test that both 'allow' and 'deny' are visible. |
| 233 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); |
| 234 EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); |
| 235 |
| 236 EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
| 237 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
| 238 EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
227 } | 239 } |
228 | 240 |
229 TEST_F(PermissionBubbleControllerTest, OK) { | 241 TEST_F(PermissionBubbleControllerTest, OK) { |
230 accept_states_.push_back(true); | 242 AddRequest(kPermissionB); |
| 243 |
| 244 accept_states_.push_back(true); // A |
| 245 accept_states_.push_back(true); // B |
| 246 |
231 [controller_ showAtAnchor:NSZeroPoint | 247 [controller_ showAtAnchor:NSZeroPoint |
232 withDelegate:this | 248 withDelegate:this |
233 forRequests:requests_ | 249 forRequests:requests_ |
234 acceptStates:accept_states_ | 250 acceptStates:accept_states_]; |
235 customizationMode:YES]; | |
236 | 251 |
237 EXPECT_CALL(*this, Closing()).Times(1); | 252 EXPECT_CALL(*this, Closing()).Times(1); |
238 [FindButtonWithTitle(IDS_OK) performClick:nil]; | 253 [FindButtonWithTitle(IDS_OK) performClick:nil]; |
239 } | 254 } |
240 | 255 |
241 TEST_F(PermissionBubbleControllerTest, Allow) { | 256 TEST_F(PermissionBubbleControllerTest, Allow) { |
242 [controller_ showAtAnchor:NSZeroPoint | 257 [controller_ showAtAnchor:NSZeroPoint |
243 withDelegate:this | 258 withDelegate:this |
244 forRequests:requests_ | 259 forRequests:requests_ |
245 acceptStates:accept_states_ | 260 acceptStates:accept_states_]; |
246 customizationMode:NO]; | |
247 | 261 |
248 EXPECT_CALL(*this, Accept()).Times(1); | 262 EXPECT_CALL(*this, Accept()).Times(1); |
249 [FindButtonWithTitle(IDS_PERMISSION_ALLOW) performClick:nil]; | 263 [FindButtonWithTitle(IDS_PERMISSION_ALLOW) performClick:nil]; |
250 } | 264 } |
251 | 265 |
252 TEST_F(PermissionBubbleControllerTest, Deny) { | 266 TEST_F(PermissionBubbleControllerTest, Deny) { |
253 [controller_ showAtAnchor:NSZeroPoint | 267 [controller_ showAtAnchor:NSZeroPoint |
254 withDelegate:this | 268 withDelegate:this |
255 forRequests:requests_ | 269 forRequests:requests_ |
256 acceptStates:accept_states_ | 270 acceptStates:accept_states_]; |
257 customizationMode:NO]; | |
258 | 271 |
259 EXPECT_CALL(*this, Deny()).Times(1); | 272 EXPECT_CALL(*this, Deny()).Times(1); |
260 [FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil]; | 273 [FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil]; |
261 } | 274 } |
262 | 275 |
263 TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) { | 276 TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) { |
264 AddRequest(kPermissionB); | 277 AddRequest(kPermissionB); |
265 | 278 |
266 accept_states_.push_back(true); | 279 accept_states_.push_back(true); // A |
267 accept_states_.push_back(false); | 280 accept_states_.push_back(false); // B |
268 | 281 |
269 [controller_ showAtAnchor:NSZeroPoint | 282 [controller_ showAtAnchor:NSZeroPoint |
270 withDelegate:this | 283 withDelegate:this |
271 forRequests:requests_ | 284 forRequests:requests_ |
272 acceptStates:accept_states_ | 285 acceptStates:accept_states_]; |
273 customizationMode:YES]; | |
274 | 286 |
275 EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1); | 287 EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1); |
276 EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1); | 288 EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1); |
277 NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW); | 289 NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW); |
278 NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY); | 290 NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY); |
279 ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY); | 291 ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY); |
280 ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW); | 292 ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW); |
281 } | 293 } |
282 | |
283 TEST_F(PermissionBubbleControllerTest, ClickCustomize) { | |
284 AddRequest(kPermissionB); | |
285 [controller_ showAtAnchor:NSZeroPoint | |
286 withDelegate:this | |
287 forRequests:requests_ | |
288 acceptStates:accept_states_ | |
289 customizationMode:NO]; | |
290 | |
291 EXPECT_CALL(*this, SetCustomizationMode()).Times(1); | |
292 NSMenuItem* customize_item = FindCustomizeMenuItem(); | |
293 EXPECT_TRUE(customize_item); | |
294 NSMenu* menu = [customize_item menu]; | |
295 [menu performActionForItemAtIndex:[menu indexOfItem:customize_item]]; | |
296 } | |
OLD | NEW |