| 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/page_info/page_info_bubble_controller.h" | 5 #import "chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 namespace { | 53 namespace { |
| 54 | 54 |
| 55 // Indices of the menu items in the permission menu. | 55 // Indices of the menu items in the permission menu. |
| 56 enum PermissionMenuIndices { | 56 enum PermissionMenuIndices { |
| 57 kMenuIndexContentSettingAllow = 0, | 57 kMenuIndexContentSettingAllow = 0, |
| 58 kMenuIndexContentSettingBlock, | 58 kMenuIndexContentSettingBlock, |
| 59 kMenuIndexContentSettingDefault | 59 kMenuIndexContentSettingDefault |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 const ContentSettingsType kTestPermissionTypes[] = { | 62 const ContentSettingsType kTestPermissionTypes[] = { |
| 63 CONTENT_SETTINGS_TYPE_IMAGES, CONTENT_SETTINGS_TYPE_JAVASCRIPT, | 63 CONTENT_SETTINGS_TYPE_IMAGES, |
| 64 CONTENT_SETTINGS_TYPE_PLUGINS, CONTENT_SETTINGS_TYPE_POPUPS, | 64 CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
| 65 CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | 65 CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
| 66 CONTENT_SETTINGS_TYPE_PLUGINS, |
| 67 CONTENT_SETTINGS_TYPE_POPUPS, |
| 68 CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 69 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 66 CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC}; | 70 CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC}; |
| 67 | 71 |
| 68 const ContentSetting kTestSettings[] = { | 72 const ContentSetting kTestSettings[] = { |
| 69 CONTENT_SETTING_DEFAULT, CONTENT_SETTING_DEFAULT, CONTENT_SETTING_ALLOW, | 73 CONTENT_SETTING_DEFAULT, CONTENT_SETTING_DEFAULT, CONTENT_SETTING_DEFAULT, |
| 70 CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, | 74 CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ALLOW, |
| 71 CONTENT_SETTING_BLOCK}; | 75 CONTENT_SETTING_BLOCK, CONTENT_SETTING_BLOCK}; |
| 72 | 76 |
| 73 const ContentSetting kTestDefaultSettings[] = {CONTENT_SETTING_BLOCK, | 77 const ContentSetting kTestDefaultSettings[] = { |
| 74 CONTENT_SETTING_ASK}; | 78 CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK}; |
| 75 | 79 |
| 76 const content_settings::SettingSource kTestSettingSources[] = { | 80 const content_settings::SettingSource kTestSettingSources[] = { |
| 77 content_settings::SETTING_SOURCE_USER, | 81 content_settings::SETTING_SOURCE_USER, |
| 78 content_settings::SETTING_SOURCE_USER, | 82 content_settings::SETTING_SOURCE_USER, |
| 79 content_settings::SETTING_SOURCE_USER, | 83 content_settings::SETTING_SOURCE_USER, |
| 80 content_settings::SETTING_SOURCE_USER, | 84 content_settings::SETTING_SOURCE_USER, |
| 85 content_settings::SETTING_SOURCE_USER, |
| 81 content_settings::SETTING_SOURCE_POLICY, | 86 content_settings::SETTING_SOURCE_POLICY, |
| 82 content_settings::SETTING_SOURCE_POLICY, | 87 content_settings::SETTING_SOURCE_POLICY, |
| 83 content_settings::SETTING_SOURCE_EXTENSION}; | 88 content_settings::SETTING_SOURCE_EXTENSION}; |
| 84 | 89 |
| 85 class PageInfoBubbleControllerTest : public CocoaTest { | 90 class PageInfoBubbleControllerTest : public CocoaTest { |
| 86 public: | 91 public: |
| 87 PageInfoBubbleControllerTest() { controller_ = nil; } | 92 PageInfoBubbleControllerTest() { controller_ = nil; } |
| 88 | 93 |
| 89 void TearDown() override { | 94 void TearDown() override { |
| 90 [controller_ close]; | 95 [controller_ close]; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 [views addObject:view]; | 157 [views addObject:view]; |
| 153 } | 158 } |
| 154 return views; | 159 return views; |
| 155 } | 160 } |
| 156 | 161 |
| 157 // Sets up the dialog with some test permission settings. | 162 // Sets up the dialog with some test permission settings. |
| 158 void SetTestPermissions() { | 163 void SetTestPermissions() { |
| 159 // Create a list of 5 different permissions, corresponding to all the | 164 // Create a list of 5 different permissions, corresponding to all the |
| 160 // possible settings: | 165 // possible settings: |
| 161 // - [allow, block, ask] by default | 166 // - [allow, block, ask] by default |
| 162 // - [block, allow] * [by user, by policy, by extension] | 167 // - [block, allow] * by user |
| 163 PermissionInfoList permission_info_list; | 168 PermissionInfoList permission_info_list; |
| 164 PageInfoUI::PermissionInfo info; | 169 PageInfoUI::PermissionInfo info; |
| 165 for (size_t i = 0; i < arraysize(kTestPermissionTypes); ++i) { | 170 for (size_t i = 0; i < arraysize(kTestPermissionTypes); ++i) { |
| 166 info.type = kTestPermissionTypes[i]; | 171 info.type = kTestPermissionTypes[i]; |
| 167 info.setting = kTestSettings[i]; | 172 info.setting = kTestSettings[i]; |
| 168 if (info.setting == CONTENT_SETTING_DEFAULT) | 173 if (info.setting == CONTENT_SETTING_DEFAULT) |
| 169 info.default_setting = kTestDefaultSettings[i]; | 174 info.default_setting = kTestDefaultSettings[i]; |
| 170 info.source = kTestSettingSources[i]; | 175 info.source = kTestSettingSources[i]; |
| 171 info.is_incognito = false; | 176 info.is_incognito = false; |
| 172 permission_info_list.push_back(info); | 177 permission_info_list.push_back(info); |
| 173 } | 178 } |
| 174 ChosenObjectInfoList chosen_object_info_list; | 179 ChosenObjectInfoList chosen_object_info_list; |
| 175 bridge_->SetPermissionInfo(permission_info_list, | 180 bridge_->SetPermissionInfo(permission_info_list, |
| 176 std::move(chosen_object_info_list)); | 181 std::move(chosen_object_info_list)); |
| 177 } | 182 } |
| 178 | 183 |
| 184 int NumSettingsNotSetByUser() const { |
| 185 int num_non_user_settings = 0; |
| 186 for (size_t i = 0; i < arraysize(kTestSettingSources); ++i) { |
| 187 num_non_user_settings += |
| 188 (kTestSettingSources[i] != content_settings::SETTING_SOURCE_USER) ? 1 |
| 189 : 0; |
| 190 } |
| 191 return num_non_user_settings; |
| 192 } |
| 193 |
| 179 content::TestBrowserThreadBundle thread_bundle_; | 194 content::TestBrowserThreadBundle thread_bundle_; |
| 180 TestingProfile profile_; | 195 TestingProfile profile_; |
| 181 content::TestWebContentsFactory web_contents_factory_; | 196 content::TestWebContentsFactory web_contents_factory_; |
| 182 | 197 |
| 183 PageInfoBubbleControllerForTesting* controller_; // Weak, owns self. | 198 PageInfoBubbleControllerForTesting* controller_; // Weak, owns self. |
| 184 NSWindow* window_; // Weak, owned by controller. | 199 NSWindow* window_; // Weak, owned by controller. |
| 185 }; | 200 }; |
| 186 | 201 |
| 187 TEST_F(PageInfoBubbleControllerTest, ConnectionHelpButton) { | 202 TEST_F(PageInfoBubbleControllerTest, ConnectionHelpButton) { |
| 188 PageInfoUI::IdentityInfo info; | 203 PageInfoUI::IdentityInfo info; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 // when we set an identity with `show_ssl_decision_revoke_button == false` | 241 // when we set an identity with `show_ssl_decision_revoke_button == false` |
| 227 // again. | 242 // again. |
| 228 } | 243 } |
| 229 | 244 |
| 230 TEST_F(PageInfoBubbleControllerTest, SetPermissionInfo) { | 245 TEST_F(PageInfoBubbleControllerTest, SetPermissionInfo) { |
| 231 CreateBubble(); | 246 CreateBubble(); |
| 232 SetTestPermissions(); | 247 SetTestPermissions(); |
| 233 | 248 |
| 234 // There should be three subviews per permission. | 249 // There should be three subviews per permission. |
| 235 NSArray* subviews = [[controller_ permissionsView] subviews]; | 250 NSArray* subviews = [[controller_ permissionsView] subviews]; |
| 236 EXPECT_EQ(arraysize(kTestPermissionTypes) * 3, [subviews count]); | 251 EXPECT_EQ(arraysize(kTestPermissionTypes) * 3, |
| 252 [subviews count] - NumSettingsNotSetByUser()); |
| 237 | 253 |
| 238 // Ensure that there is a distinct label for each permission. | 254 // Ensure that there is a label for each permission. |
| 239 NSMutableSet* labels = [NSMutableSet set]; | 255 NSMutableArray* permission_labels = [NSMutableArray array]; |
| 240 for (NSView* view in subviews) { | 256 for (NSView* view in subviews) { |
| 241 if ([view isKindOfClass:[NSTextField class]]) | 257 if ([view isKindOfClass:[NSTextField class]]) |
| 242 [labels addObject:[static_cast<NSTextField*>(view) stringValue]]; | 258 [permission_labels |
| 259 addObject:[static_cast<NSTextField*>(view) stringValue]]; |
| 243 } | 260 } |
| 244 EXPECT_EQ(arraysize(kTestPermissionTypes), [labels count]); | 261 EXPECT_EQ(arraysize(kTestPermissionTypes), |
| 262 [permission_labels count] - NumSettingsNotSetByUser()); |
| 245 | 263 |
| 246 // Ensure that the button labels are distinct, and look for the correct | 264 // Ensure that the button labels are distinct, and look for the correct |
| 247 // number of disabled buttons. | 265 // number of disabled buttons. |
| 248 int disabled_count = 0; | 266 int disabled_count = 0; |
| 249 [labels removeAllObjects]; | 267 NSMutableSet* button_labels = [NSMutableSet set]; |
| 250 for (NSView* view in subviews) { | 268 for (NSView* view in subviews) { |
| 251 if ([view isKindOfClass:[NSPopUpButton class]]) { | 269 if ([view isKindOfClass:[NSPopUpButton class]]) { |
| 252 NSPopUpButton* button = static_cast<NSPopUpButton*>(view); | 270 NSPopUpButton* button = static_cast<NSPopUpButton*>(view); |
| 253 [labels addObject:[[button selectedCell] title]]; | 271 [button_labels addObject:[[button selectedCell] title]]; |
| 254 | 272 |
| 255 if (![button isEnabled]) | 273 if (![button isEnabled]) |
| 256 ++disabled_count; | 274 ++disabled_count; |
| 257 } | 275 } |
| 258 } | 276 } |
| 259 EXPECT_EQ(arraysize(kTestPermissionTypes), [labels count]); | 277 EXPECT_EQ(5UL, [button_labels count]); |
| 260 | 278 |
| 261 // 3 of the buttons should be disabled -- the ones that have a setting source | 279 // Permissions with a setting source of SETTING_SOURCE_POLICY or |
| 262 // of SETTING_SOURCE_POLICY or SETTING_SOURCE_EXTENSION. | 280 // SETTING_SOURCE_EXTENSION should have their buttons disabled. |
| 263 EXPECT_EQ(3, disabled_count); | 281 EXPECT_EQ(NumSettingsNotSetByUser(), disabled_count); |
| 264 } | 282 } |
| 265 | 283 |
| 266 TEST_F(PageInfoBubbleControllerTest, WindowWidth) { | 284 TEST_F(PageInfoBubbleControllerTest, WindowWidth) { |
| 267 const CGFloat kBigEnoughBubbleWidth = 310; | 285 const CGFloat kBigEnoughBubbleWidth = 310; |
| 268 // Creating a window that should fit everything. | 286 // Creating a window that should fit everything. |
| 269 CreateBubbleWithWidth(kBigEnoughBubbleWidth); | 287 CreateBubbleWithWidth(kBigEnoughBubbleWidth); |
| 270 SetTestPermissions(); | 288 SetTestPermissions(); |
| 271 | 289 |
| 272 CGFloat window_width = NSWidth([[controller_ window] frame]); | 290 CGFloat window_width = NSWidth([[controller_ window] frame]); |
| 273 | 291 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 294 } | 312 } |
| 295 if ([view isKindOfClass:[NSPopUpButton class]]) { | 313 if ([view isKindOfClass:[NSPopUpButton class]]) { |
| 296 NSPopUpButton* button = static_cast<NSPopUpButton*>(view); | 314 NSPopUpButton* button = static_cast<NSPopUpButton*>(view); |
| 297 EXPECT_LT(NSMaxX([button frame]), window_width); | 315 EXPECT_LT(NSMaxX([button frame]), window_width); |
| 298 } | 316 } |
| 299 } | 317 } |
| 300 } | 318 } |
| 301 } | 319 } |
| 302 | 320 |
| 303 } // namespace | 321 } // namespace |
| OLD | NEW |