Commit 52999236 authored by leng@chromium.org's avatar leng@chromium.org

Changes cocoa implementation of permission bubble to better match mocks.

Specifically, when the bubble is in 'customize' mode, the UI to change
the setting of a permission (allow/deny) will be a drop-down menu rather
than a checkbox.

BUG=None

Review URL: https://codereview.chromium.org/242443005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266689 0039d316-1c4b-4281-b951-d872f2087c98
parent 3ab2dbbf
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#import "ui/events/test/cocoa_test_event_utils.h" #import "ui/events/test/cocoa_test_event_utils.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
@class ConstrainedWindowButton;
@interface PermissionBubbleController (ExposedForTesting) @interface PermissionBubbleController (ExposedForTesting)
- (void)ok:(id)sender; - (void)ok:(id)sender;
- (void)onAllow:(id)sender; - (void)onAllow:(id)sender;
...@@ -73,19 +75,28 @@ class PermissionBubbleControllerTest : public CocoaTest, ...@@ -73,19 +75,28 @@ class PermissionBubbleControllerTest : public CocoaTest,
} }
NSButton* FindButtonWithTitle(const std::string& title) { NSButton* FindButtonWithTitle(const std::string& title) {
return FindButtonWithTitle(base::SysUTF8ToNSString(title)); return FindButtonWithTitle(base::SysUTF8ToNSString(title),
[ConstrainedWindowButton class]);
} }
NSButton* FindButtonWithTitle(int title_id) { NSButton* FindButtonWithTitle(int title_id) {
return FindButtonWithTitle(l10n_util::GetNSString(title_id)); return FindButtonWithTitle(l10n_util::GetNSString(title_id),
[ConstrainedWindowButton class]);
} }
NSButton* FindButtonWithTitle(NSString* title) { NSButton* FindMenuButtonWithTitle(int title_id) {
NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]); return FindButtonWithTitle(l10n_util::GetNSString(title_id),
for (NSView* child in [parent subviews]) { [NSPopUpButton class]);
NSButton* button = base::mac::ObjCCast<NSButton>(child); }
if ([title isEqualToString:[button title]]) {
return button; // IDS_PERMISSION_ALLOW and IDS_PERMISSION_DENY are used for two distinct
// UI elements, both of which derive from NSButton. So check the expected
// class, not just NSButton, as well as the title.
NSButton* FindButtonWithTitle(NSString* title, Class button_class) {
for (NSButton* view in [[controller_ bubble] subviews]) {
if ([view isKindOfClass:button_class] &&
[title isEqualToString:[view title]]) {
return view;
} }
} }
return nil; return nil;
...@@ -109,6 +120,15 @@ class PermissionBubbleControllerTest : public CocoaTest, ...@@ -109,6 +120,15 @@ class PermissionBubbleControllerTest : public CocoaTest,
return textField; return textField;
} }
void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) {
NSMenu* menu = [base::mac::ObjCCastStrict<NSPopUpButton>(menu_button) menu];
NSString* next_title = l10n_util::GetNSString(next_title_id);
EXPECT_EQ([[menu itemWithTitle:[menu_button title]] state], NSOnState);
NSMenuItem* next_item = [menu itemWithTitle:next_title];
EXPECT_EQ([next_item state], NSOffState);
[menu performActionForItemAtIndex:[menu indexOfItem:next_item]];
}
NSMenuItem* FindCustomizeMenuItem() { NSMenuItem* FindCustomizeMenuItem() {
NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY); NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY);
if (!button || ![button isKindOfClass:[SplitBlockButton class]]) if (!button || ![button isKindOfClass:[SplitBlockButton class]])
...@@ -170,25 +190,35 @@ TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) { ...@@ -170,25 +190,35 @@ TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) {
EXPECT_FALSE(FindButtonWithTitle(IDS_OK)); EXPECT_FALSE(FindButtonWithTitle(IDS_OK));
} }
TEST_F(PermissionBubbleControllerTest, ShowCustomizationMode) { TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeAllow) {
AddRequest(kPermissionB);
accept_states_.push_back(true); accept_states_.push_back(true);
accept_states_.push_back(false); [controller_ showAtAnchor:NSZeroPoint
withDelegate:this
forRequests:requests_
acceptStates:accept_states_
customizationMode:YES];
// Test that there is one menu, with 'Allow' visible.
EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
EXPECT_FALSE(FindCustomizeMenuItem());
}
TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeBlock) {
accept_states_.push_back(false);
[controller_ showAtAnchor:NSZeroPoint [controller_ showAtAnchor:NSZeroPoint
withDelegate:this withDelegate:this
forRequests:requests_ forRequests:requests_
acceptStates:accept_states_ acceptStates:accept_states_
customizationMode:YES]; customizationMode:YES];
// Test that each checkbox is visible and only the first is checked. // Test that there is one menu, with 'Block' visible.
NSButton* checkbox_a = FindButtonWithTitle(kPermissionA); EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
NSButton* checkbox_b = FindButtonWithTitle(kPermissionB); EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
EXPECT_TRUE(checkbox_a);
EXPECT_TRUE(checkbox_b);
EXPECT_EQ(NSOnState, [checkbox_a state]);
EXPECT_EQ(NSOffState, [checkbox_b state]);
EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
...@@ -230,7 +260,7 @@ TEST_F(PermissionBubbleControllerTest, Deny) { ...@@ -230,7 +260,7 @@ TEST_F(PermissionBubbleControllerTest, Deny) {
[FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil]; [FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil];
} }
TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) { TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) {
AddRequest(kPermissionB); AddRequest(kPermissionB);
accept_states_.push_back(true); accept_states_.push_back(true);
...@@ -244,8 +274,10 @@ TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) { ...@@ -244,8 +274,10 @@ TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) {
EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1); EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1);
EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1); EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1);
[FindButtonWithTitle(kPermissionA) performClick:nil]; NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW);
[FindButtonWithTitle(kPermissionB) performClick:nil]; NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY);
ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY);
ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW);
} }
TEST_F(PermissionBubbleControllerTest, ClickCustomize) { TEST_F(PermissionBubbleControllerTest, ClickCustomize) {
......
...@@ -58,9 +58,9 @@ PermissionMenuModel::PermissionMenuModel(const GURL& url, ...@@ -58,9 +58,9 @@ PermissionMenuModel::PermissionMenuModel(const GURL& url,
permission_.setting = setting; permission_.setting = setting;
permission_.default_setting = CONTENT_SETTING_NUM_SETTINGS; permission_.default_setting = CONTENT_SETTING_NUM_SETTINGS;
AddCheckItem(CONTENT_SETTING_ALLOW, AddCheckItem(CONTENT_SETTING_ALLOW,
l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW)); l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW));
AddCheckItem(CONTENT_SETTING_BLOCK, AddCheckItem(CONTENT_SETTING_BLOCK,
l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK)); l10n_util::GetStringUTF16(IDS_PERMISSION_DENY));
} }
PermissionMenuModel::~PermissionMenuModel() {} PermissionMenuModel::~PermissionMenuModel() {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment