Commit b8c93c78 authored by Alex Ilin's avatar Alex Ilin Committed by Commit Bot

Inhibit creation of new users if it's disabled by policy

BrowserAddPersonEnabled policy controls whether Chrome allows Add Person
from the user manager. Hovewer, it doesn't inhibit the user from
creation of a new profile from the profile menu in the menu bar on Mac.

This CL removes Add Person menu item if BrowserAddPersonEnabled policy
is set to false.

Bug: 807860
Change-Id: Id8a34bbe164cad8998de2d36f2d23b9396d95c82
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645224Reviewed-by: default avatarElly Fong-Jones <ellyjones@chromium.org>
Commit-Queue: Alex Ilin <alexilin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#666298}
parent 8216a82e
...@@ -21,7 +21,9 @@ ...@@ -21,7 +21,9 @@
#include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h"
#include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/prefs/pref_service.h"
#include "components/signin/core/browser/account_consistency_method.h" #include "components/signin/core/browser/account_consistency_method.h"
#include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/l10n/l10n_util_mac.h"
#include "ui/gfx/image/image.h" #include "ui/gfx/image/image.h"
...@@ -40,6 +42,13 @@ enum ValidateMenuItemSelector { ...@@ -40,6 +42,13 @@ enum ValidateMenuItemSelector {
MAX_VALIDATE_MENU_SELECTOR, MAX_VALIDATE_MENU_SELECTOR,
}; };
// Check Add Person pref.
bool IsAddPersonEnabled() {
PrefService* service = g_browser_process->local_state();
DCHECK(service);
return service->GetBoolean(prefs::kBrowserAddPersonEnabled);
}
} // namespace } // namespace
@interface ProfileMenuController (Private) @interface ProfileMenuController (Private)
...@@ -181,6 +190,9 @@ class Observer : public BrowserListObserver, public AvatarMenuObserver { ...@@ -181,6 +190,9 @@ class Observer : public BrowserListObserver, public AvatarMenuObserver {
[menuItem action] != @selector(editProfile:); [menuItem action] != @selector(editProfile:);
} }
if (!IsAddPersonEnabled())
return [menuItem action] != @selector(newProfile:);
size_t index = avatarMenu_->GetActiveProfileIndex(); size_t index = avatarMenu_->GetActiveProfileIndex();
if (avatarMenu_->GetNumberOfItems() <= index) { if (avatarMenu_->GetNumberOfItems() <= index) {
ValidateMenuItemSelector currentSelector = UNKNOWN_SELECTOR; ValidateMenuItemSelector currentSelector = UNKNOWN_SELECTOR;
...@@ -241,11 +253,14 @@ class Observer : public BrowserListObserver, public AvatarMenuObserver { ...@@ -241,11 +253,14 @@ class Observer : public BrowserListObserver, public AvatarMenuObserver {
action:@selector(editProfile:)]; action:@selector(editProfile:)];
[[self menu] addItem:item]; [[self menu] addItem:item];
[[self menu] addItem:[NSMenuItem separatorItem]]; if (IsAddPersonEnabled()) {
item = [self createItemWithTitle:l10n_util::GetNSStringWithFixup( [[self menu] addItem:[NSMenuItem separatorItem]];
IDS_PROFILES_CREATE_NEW_PROFILE_OPTION)
action:@selector(newProfile:)]; item = [self createItemWithTitle:l10n_util::GetNSStringWithFixup(
[[self menu] addItem:item]; IDS_PROFILES_CREATE_NEW_PROFILE_OPTION)
action:@selector(newProfile:)];
[[self menu] addItem:item];
}
[self rebuildMenu]; [self rebuildMenu];
} }
......
...@@ -26,13 +26,7 @@ ...@@ -26,13 +26,7 @@
class ProfileMenuControllerTest : public CocoaProfileTest { class ProfileMenuControllerTest : public CocoaProfileTest {
public: public:
ProfileMenuControllerTest() { ProfileMenuControllerTest() { RebuildController(); }
item_.reset([[NSMenuItem alloc] initWithTitle:@"Users"
action:nil
keyEquivalent:@""]);
controller_.reset(
[[ProfileMenuController alloc] initWithMainMenuItem:item_]);
}
void SetUp() override { void SetUp() override {
CocoaProfileTest::SetUp(); CocoaProfileTest::SetUp();
...@@ -42,6 +36,14 @@ class ProfileMenuControllerTest : public CocoaProfileTest { ...@@ -42,6 +36,14 @@ class ProfileMenuControllerTest : public CocoaProfileTest {
chrome::testing::NSRunLoopRunAllPending(); chrome::testing::NSRunLoopRunAllPending();
} }
void RebuildController() {
item_.reset([[NSMenuItem alloc] initWithTitle:@"Users"
action:nil
keyEquivalent:@""]);
controller_.reset(
[[ProfileMenuController alloc] initWithMainMenuItem:item_]);
}
void TestBottomItems() { void TestBottomItems() {
NSMenu* menu = [controller() menu]; NSMenu* menu = [controller() menu];
NSInteger count = [menu numberOfItems]; NSInteger count = [menu numberOfItems];
...@@ -247,3 +249,23 @@ TEST_F(ProfileMenuControllerTest, DeleteActiveProfile) { ...@@ -247,3 +249,23 @@ TEST_F(ProfileMenuControllerTest, DeleteActiveProfile) {
[controller() activeBrowserChangedTo:NULL]; [controller() activeBrowserChangedTo:NULL];
base::ThreadRestrictions::SetIOAllowed(io_was_allowed); base::ThreadRestrictions::SetIOAllowed(io_was_allowed);
} }
TEST_F(ProfileMenuControllerTest, AddProfileDisabled) {
PrefService* local_state = g_browser_process->local_state();
local_state->SetBoolean(prefs::kBrowserAddPersonEnabled, false);
RebuildController();
// Spin the runloop so |-initializeMenu| gets called.
chrome::testing::NSRunLoopRunAllPending();
NSMenu* menu = [controller() menu];
NSInteger count = [menu numberOfItems];
ASSERT_GE(count, 2);
NSMenuItem* item = [menu itemAtIndex:count - 2];
EXPECT_TRUE([item isSeparatorItem]);
item = [menu itemAtIndex:count - 1];
EXPECT_EQ(@selector(editProfile:), [item action]);
}
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