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 @@
#import "ui/events/test/cocoa_test_event_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
@class ConstrainedWindowButton;
@interface PermissionBubbleController (ExposedForTesting)
- (void)ok:(id)sender;
- (void)onAllow:(id)sender;
......@@ -73,19 +75,28 @@ class PermissionBubbleControllerTest : public CocoaTest,
}
NSButton* FindButtonWithTitle(const std::string& title) {
return FindButtonWithTitle(base::SysUTF8ToNSString(title));
return FindButtonWithTitle(base::SysUTF8ToNSString(title),
[ConstrainedWindowButton class]);
}
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) {
NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]);
for (NSView* child in [parent subviews]) {
NSButton* button = base::mac::ObjCCast<NSButton>(child);
if ([title isEqualToString:[button title]]) {
return button;
NSButton* FindMenuButtonWithTitle(int title_id) {
return FindButtonWithTitle(l10n_util::GetNSString(title_id),
[NSPopUpButton class]);
}
// 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;
......@@ -109,6 +120,15 @@ class PermissionBubbleControllerTest : public CocoaTest,
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() {
NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY);
if (!button || ![button isKindOfClass:[SplitBlockButton class]])
......@@ -170,25 +190,35 @@ TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) {
EXPECT_FALSE(FindButtonWithTitle(IDS_OK));
}
TEST_F(PermissionBubbleControllerTest, ShowCustomizationMode) {
AddRequest(kPermissionB);
TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeAllow) {
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
withDelegate:this
forRequests:requests_
acceptStates:accept_states_
customizationMode:YES];
// Test that each checkbox is visible and only the first is checked.
NSButton* checkbox_a = FindButtonWithTitle(kPermissionA);
NSButton* checkbox_b = FindButtonWithTitle(kPermissionB);
EXPECT_TRUE(checkbox_a);
EXPECT_TRUE(checkbox_b);
EXPECT_EQ(NSOnState, [checkbox_a state]);
EXPECT_EQ(NSOffState, [checkbox_b state]);
// Test that there is one menu, with 'Block' visible.
EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY));
EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW));
EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
......@@ -230,7 +260,7 @@ TEST_F(PermissionBubbleControllerTest, Deny) {
[FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil];
}
TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) {
TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) {
AddRequest(kPermissionB);
accept_states_.push_back(true);
......@@ -244,8 +274,10 @@ TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) {
EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1);
EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1);
[FindButtonWithTitle(kPermissionA) performClick:nil];
[FindButtonWithTitle(kPermissionB) performClick:nil];
NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW);
NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY);
ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY);
ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW);
}
TEST_F(PermissionBubbleControllerTest, ClickCustomize) {
......
......@@ -58,9 +58,9 @@ PermissionMenuModel::PermissionMenuModel(const GURL& url,
permission_.setting = setting;
permission_.default_setting = CONTENT_SETTING_NUM_SETTINGS;
AddCheckItem(CONTENT_SETTING_ALLOW,
l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW));
l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW));
AddCheckItem(CONTENT_SETTING_BLOCK,
l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK));
l10n_util::GetStringUTF16(IDS_PERMISSION_DENY));
}
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