Index: chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm |
=================================================================== |
--- chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm (revision 171257) |
+++ chrome/browser/ui/cocoa/website_settings_bubble_controller_unittest.mm (working copy) |
@@ -61,6 +61,24 @@ |
} |
@end |
+@interface WebsiteSettingsBubbleControllerForTesting |
+ : WebsiteSettingsBubbleController { |
+ @private |
+ CGFloat defaultWindowWidth_; |
+} |
+@end |
+ |
+@implementation WebsiteSettingsBubbleControllerForTesting |
+- (void)setDefaultWindowWidth:(CGFloat)width { |
+ defaultWindowWidth_ = width; |
+} |
+- (CGFloat)defaultWindowWidth { |
+ // If |defaultWindowWidth_| is 0, use the superclass implementation. |
+ return defaultWindowWidth_ ? |
+ defaultWindowWidth_ : [super defaultWindowWidth]; |
+} |
+@end |
+ |
namespace { |
// Indices of the menu items in the permission menu. |
@@ -70,6 +88,50 @@ |
kMenuIndexContentSettingDefault |
}; |
+const ContentSettingsType kTestPermissionTypes[] = { |
+ // NOTE: FULLSCREEN does not support "Always block", so it must appear as |
+ // one of the first three permissions. |
+ CONTENT_SETTINGS_TYPE_FULLSCREEN, |
+ CONTENT_SETTINGS_TYPE_IMAGES, |
+ CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
+ CONTENT_SETTINGS_TYPE_PLUGINS, |
+ CONTENT_SETTINGS_TYPE_POPUPS, |
+ CONTENT_SETTINGS_TYPE_GEOLOCATION, |
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
+ CONTENT_SETTINGS_TYPE_MOUSELOCK, |
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM, |
+}; |
+ |
+const ContentSetting kTestSettings[] = { |
+ CONTENT_SETTING_DEFAULT, |
+ CONTENT_SETTING_DEFAULT, |
+ CONTENT_SETTING_DEFAULT, |
+ CONTENT_SETTING_ALLOW, |
+ CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ALLOW, |
+ CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ALLOW, |
+ CONTENT_SETTING_BLOCK, |
+}; |
+ |
+const ContentSetting kTestDefaultSettings[] = { |
+ CONTENT_SETTING_ALLOW, |
+ CONTENT_SETTING_BLOCK, |
+ CONTENT_SETTING_ASK |
+}; |
+ |
+const content_settings::SettingSource kTestSettingSources[] = { |
+ content_settings::SETTING_SOURCE_USER, |
+ content_settings::SETTING_SOURCE_USER, |
+ content_settings::SETTING_SOURCE_USER, |
+ content_settings::SETTING_SOURCE_USER, |
+ content_settings::SETTING_SOURCE_USER, |
+ content_settings::SETTING_SOURCE_POLICY, |
+ content_settings::SETTING_SOURCE_POLICY, |
+ content_settings::SETTING_SOURCE_EXTENSION, |
+ content_settings::SETTING_SOURCE_EXTENSION, |
+}; |
+ |
class WebsiteSettingsBubbleControllerTest : public CocoaTest { |
public: |
WebsiteSettingsBubbleControllerTest() { |
@@ -89,20 +151,26 @@ |
TEXT_NOT_EQUAL |
}; |
- void CreateBubble() { |
+ // Creates a new website settings bubble, with the given default width. |
+ // If |default_width| is 0, the *default* default width will be used. |
+ void CreateBubbleWithWidth(CGFloat default_width) { |
bridge_ = new WebsiteSettingsUIBridge(); |
// The controller cleans up after itself when the window closes. |
- controller_ = |
- [[WebsiteSettingsBubbleController alloc] |
- initWithParentWindow:test_window() |
- websiteSettingsUIBridge:bridge_ |
- tabContents:nil |
- isInternalPage:NO]; |
+ controller_ = [WebsiteSettingsBubbleControllerForTesting alloc]; |
+ [controller_ setDefaultWindowWidth:default_width]; |
+ [controller_ initWithParentWindow:test_window() |
+ websiteSettingsUIBridge:bridge_ |
+ tabContents:nil |
+ isInternalPage:NO]; |
window_ = [controller_ window]; |
[controller_ showWindow:nil]; |
} |
+ void CreateBubble() { |
+ CreateBubbleWithWidth(0.0); |
+ } |
+ |
// Return a pointer to the first NSTextField found that either matches, or |
// doesn't match, the given text. |
NSTextField* FindTextField(MatchType match_type, NSString* text) { |
@@ -137,7 +205,26 @@ |
return views; |
} |
- WebsiteSettingsBubbleController* controller_; // Weak, owns self. |
+ // Sets up the dialog with some test permission settings. |
+ void SetTestPermissions() { |
+ // Create a list of 5 different permissions, corresponding to all the |
+ // possible settings: |
+ // - [allow, block, ask] by default |
+ // - [block, allow] * [by user, by policy, by extension] |
+ PermissionInfoList list; |
+ WebsiteSettingsUI::PermissionInfo info; |
+ for (size_t i = 0; i < arraysize(kTestPermissionTypes); ++i) { |
+ info.type = kTestPermissionTypes[i]; |
+ info.setting = kTestSettings[i]; |
+ if (info.setting == CONTENT_SETTING_DEFAULT) |
+ info.default_setting = kTestDefaultSettings[i]; |
+ info.source = kTestSettingSources[i]; |
+ list.push_back(info); |
+ } |
+ bridge_->SetPermissionInfo(list); |
+ } |
+ |
+ WebsiteSettingsBubbleControllerForTesting* controller_; // Weak, owns self. |
NSWindow* window_; // Weak, owned by controller. |
}; |
@@ -238,67 +325,8 @@ |
TEST_F(WebsiteSettingsBubbleControllerTest, SetPermissionInfo) { |
CreateBubble(); |
+ SetTestPermissions(); |
- const ContentSettingsType kTestPermissionTypes[] = { |
- // NOTE: FULLSCREEN does not support "Always block", so it must appear as |
- // one of the first three permissions. |
- CONTENT_SETTINGS_TYPE_FULLSCREEN, |
- CONTENT_SETTINGS_TYPE_IMAGES, |
- CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
- CONTENT_SETTINGS_TYPE_PLUGINS, |
- CONTENT_SETTINGS_TYPE_POPUPS, |
- CONTENT_SETTINGS_TYPE_GEOLOCATION, |
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
- CONTENT_SETTINGS_TYPE_MOUSELOCK, |
- CONTENT_SETTINGS_TYPE_MEDIASTREAM, |
- }; |
- |
- const ContentSetting kTestSettings[] = { |
- CONTENT_SETTING_DEFAULT, |
- CONTENT_SETTING_DEFAULT, |
- CONTENT_SETTING_DEFAULT, |
- CONTENT_SETTING_ALLOW, |
- CONTENT_SETTING_BLOCK, |
- CONTENT_SETTING_ALLOW, |
- CONTENT_SETTING_BLOCK, |
- CONTENT_SETTING_ALLOW, |
- CONTENT_SETTING_BLOCK, |
- }; |
- |
- const ContentSetting kTestDefaultSettings[] = { |
- CONTENT_SETTING_ALLOW, |
- CONTENT_SETTING_BLOCK, |
- CONTENT_SETTING_ASK |
- }; |
- |
- const content_settings::SettingSource kTestSettingSources[] = { |
- content_settings::SETTING_SOURCE_USER, |
- content_settings::SETTING_SOURCE_USER, |
- content_settings::SETTING_SOURCE_USER, |
- content_settings::SETTING_SOURCE_USER, |
- content_settings::SETTING_SOURCE_USER, |
- content_settings::SETTING_SOURCE_POLICY, |
- content_settings::SETTING_SOURCE_POLICY, |
- content_settings::SETTING_SOURCE_EXTENSION, |
- content_settings::SETTING_SOURCE_EXTENSION, |
- }; |
- |
- // Create a list of 5 different permissions, corresponding to all the |
- // possible settings: |
- // - [allow, block, ask] by default |
- // - [block, allow] * [by user, by policy, by extension] |
- PermissionInfoList list; |
- WebsiteSettingsUI::PermissionInfo info; |
- for (size_t i = 0; i < arraysize(kTestPermissionTypes); ++i) { |
- info.type = kTestPermissionTypes[i]; |
- info.setting = kTestSettings[i]; |
- if (info.setting == CONTENT_SETTING_DEFAULT) |
- info.default_setting = kTestDefaultSettings[i]; |
- info.source = kTestSettingSources[i]; |
- list.push_back(info); |
- } |
- bridge_->SetPermissionInfo(list); |
- |
// There should be three subviews per permission (an icon, a label and a |
// select box), plus a text label for the Permission section. |
NSArray* subviews = [[controller_ permissionsView] subviews]; |
@@ -349,4 +377,24 @@ |
EXPECT_EQ(1, [tabView indexOfTabViewItem:[tabView selectedTabViewItem]]); |
} |
+TEST_F(WebsiteSettingsBubbleControllerTest, WindowWidth) { |
+ // Try creating a window that is obviously too small. |
+ CreateBubbleWithWidth(30.0); |
+ SetTestPermissions(); |
+ |
+ CGFloat window_width = NSWidth([[controller_ window] frame]); |
+ |
+ // Check the window was made bigger to fit the content. |
+ EXPECT_LT(30.0, window_width); |
+ |
+ // Check that the window is wider than the right edge of all the permission |
+ // popup buttons. |
+ for (NSView* view in [[controller_ permissionsView] subviews]) { |
+ if ([view isKindOfClass:[NSPopUpButton class]]) { |
+ NSPopUpButton* button = static_cast<NSPopUpButton*>(view); |
+ EXPECT_LT(NSMaxX([button frame]), window_width); |
+ } |
+ } |
+} |
+ |
} // namespace |