| 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 |