summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormlerman <mlerman@chromium.org>2014-09-08 11:52:50 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-08 18:54:27 +0000
commit46a8366faec20a16c85109f480bfa7b348480cac (patch)
treed1b0e0a699b4abc3681bb3d6f4cc9c6cf060ae5e /chrome
parent041843cbf814dbd52542a985b638d76457290879 (diff)
downloadchromium_src-46a8366faec20a16c85109f480bfa7b348480cac.zip
chromium_src-46a8366faec20a16c85109f480bfa7b348480cac.tar.gz
chromium_src-46a8366faec20a16c85109f480bfa7b348480cac.tar.bz2
Settings to control Add Person and Browse as Guest.
The settings page will now have two options near the profile management, which will control whether Browse As Guest and Add Person will be available from the User Manager. These settings will not be available to supervised users, and will appear only on Desktop OSes. Also, add a new enterprise policy for the Enable Add Person preference (Browse As Guest policy already exists). BUG=406473 NOTE: I will remove PRESUBMIT.py from this CL before landing it. It needs to be modified to upload to rietveld from my Windows machine, see crbug.com/409029 Review URL: https://codereview.chromium.org/518063002 Cr-Commit-Position: refs/heads/master@{#293763}
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/browser_process_impl.cc2
-rw-r--r--chrome/browser/policy/configuration_policy_handler_list_factory.cc3
-rw-r--r--chrome/browser/profiles/profiles_state.cc5
-rw-r--r--chrome/browser/resources/options/browser_options.css6
-rw-r--r--chrome/browser/resources/options/browser_options.html14
-rw-r--r--chrome/browser/resources/options/options.html3
-rw-r--r--chrome/browser/resources/user_manager/user_manager.js8
-rw-r--r--chrome/browser/ui/webui/options/browser_options_handler.cc2
-rw-r--r--chrome/browser/ui/webui/options/core_options_handler.cc10
-rw-r--r--chrome/browser/ui/webui/options/core_options_handler.h3
-rw-r--r--chrome/browser/ui/webui/signin/user_manager_screen_handler.cc21
-rw-r--r--chrome/common/pref_names.cc3
-rw-r--r--chrome/common/pref_names.h1
-rw-r--r--chrome/test/data/policy/policy_test_cases.json10
15 files changed, 87 insertions, 10 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index df62191..d5b906e 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -11572,6 +11572,12 @@ Chrome ran out of memory.
<message name="IDS_PROFILES_DEFAULT_NAME" desc="The name to display for a profile when the user is not signed in.">
Default
</message>
+ <message name="IDS_PROFILE_ADD_PERSON_ENABLE" desc="The text for the settings checkbox that indicates whether new profiles can be added from the user manager.">
+ Enable user creation from the profile manager
+ </message>
+ <message name="IDS_PROFILE_BROWSER_GUEST_ENABLE" desc="The text for the settings checkbox that indicates whether guest mode is available for this browser.">
+ Enable Guest browsing
+ </message>
<message name="IDS_SYNC_CUSTOMIZE_LINK_LABEL" desc="The text to display on the link to customize the sync settings.">
Advanced
</message>
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 75bc30f..03f9702 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -785,8 +785,6 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(prefs::kAllowCrossOriginAuthPrompt, false);
- registry->RegisterBooleanPref(prefs::kBrowserGuestModeEnabled, true);
-
#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_IOS)
registry->RegisterBooleanPref(prefs::kEulaAccepted, false);
#endif // defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_IOS)
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 3c85652..99340ef 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -483,6 +483,9 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
{ key::kBrowserGuestModeEnabled,
prefs::kBrowserGuestModeEnabled,
base::Value::TYPE_BOOLEAN },
+ { key::kBrowserAddPersonEnabled,
+ prefs::kBrowserAddPersonEnabled,
+ base::Value::TYPE_BOOLEAN },
#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
};
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc
index 03fa429..068ddff 100644
--- a/chrome/browser/profiles/profiles_state.cc
+++ b/chrome/browser/profiles/profiles_state.cc
@@ -41,9 +41,14 @@ base::FilePath GetDefaultProfileDir(const base::FilePath& user_data_dir) {
}
void RegisterPrefs(PrefRegistrySimple* registry) {
+ // Preferences about global profile information.
registry->RegisterStringPref(prefs::kProfileLastUsed, std::string());
registry->RegisterIntegerPref(prefs::kProfilesNumCreated, 1);
registry->RegisterListPref(prefs::kProfilesLastActive);
+
+ // Preferences about the user manager.
+ registry->RegisterBooleanPref(prefs::kBrowserGuestModeEnabled, true);
+ registry->RegisterBooleanPref(prefs::kBrowserAddPersonEnabled, true);
}
base::string16 GetAvatarNameForProfile(const base::FilePath& profile_path) {
diff --git a/chrome/browser/resources/options/browser_options.css b/chrome/browser/resources/options/browser_options.css
index 39e34ca..f3ef248 100644
--- a/chrome/browser/resources/options/browser_options.css
+++ b/chrome/browser/resources/options/browser_options.css
@@ -463,6 +463,12 @@ div[guestmode=true] :-webkit-any(
display: none;
}
+div[supervisedMode=true] :-webkit-any(
+ #profiles-enable-guest,
+ #profiles-enable-add-person) {
+ display: none;
+}
+
footer {
display: flex;
}
diff --git a/chrome/browser/resources/options/browser_options.html b/chrome/browser/resources/options/browser_options.html
index 5391f01..72e39e7 100644
--- a/chrome/browser/resources/options/browser_options.html
+++ b/chrome/browser/resources/options/browser_options.html
@@ -176,6 +176,20 @@
<div id="profiles-single-message" class="settings-row"
i18n-content="profilesSingleUser">
</div>
+<if expr="not chromeos">
+ <div id="profiles-enable-guest" class="checkbox">
+ <label>
+ <input pref="profile.browser_guest_enabled" type="checkbox">
+ <span i18n-content="profileBrowserGuestEnable"></span>
+ </label>
+ </div>
+ <div id="profiles-enable-add-person" class="checkbox">
+ <label>
+ <input pref="profile.add_person_enabled" type="checkbox">
+ <span i18n-content="profileAddPersonEnable"></span>
+ </label>
+ </div>
+</if>
<div id="profiles-buttons">
<button id="profiles-create" i18n-content="profilesCreate"></button>
<if expr="enable_settings_app">
diff --git a/chrome/browser/resources/options/options.html b/chrome/browser/resources/options/options.html
index 8d4f097..988ff3f 100644
--- a/chrome/browser/resources/options/options.html
+++ b/chrome/browser/resources/options/options.html
@@ -191,7 +191,8 @@
<button i18n-content="extensionDisable"></button>
</div>
-<div id="main-content" i18n-values="guestMode:profileIsGuest">
+<div id="main-content"
+ i18n-values="guestMode:profileIsGuest;supervisedMode:profileIsSupervised">
<div id="mainview">
<div id="mainview-content">
<div id="page-container">
diff --git a/chrome/browser/resources/user_manager/user_manager.js b/chrome/browser/resources/user_manager/user_manager.js
index 84fab31..c748b2f 100644
--- a/chrome/browser/resources/user_manager/user_manager.js
+++ b/chrome/browser/resources/user_manager/user_manager.js
@@ -32,17 +32,19 @@ cr.define('cr.ui', function() {
/**
* Shows the given screen.
- * @param {Object} screen Screen params dict, e.g. {id: screenId, data: data}
+ * @param {bool} showGuest Whether the 'Browse as Guest' button is displayed.
+ * @param {bool} showAddPerson Whether the 'Add Person' button is displayed.
*/
- Oobe.showUserManagerScreen = function(showGuest) {
+ Oobe.showUserManagerScreen = function(showGuest, showAddPerson) {
Oobe.getInstance().showScreen({id: 'account-picker',
data: {disableAddUser: false}});
// The ChromeOS account-picker will hide the AddUser button if a user is
// logged in and the screen is "locked", so we must re-enabled it
$('add-user-header-bar-item').hidden = false;
- // Hide the Guest Mode option if the user is not permitted to select it.
+ // Hide control options if the user does not have the right permissions.
$('guest-user-button').hidden = !showGuest;
+ $('add-user-button').hidden = !showAddPerson;
$('login-header-bar').hidden = false;
// Disable the context menu, as the Print/Inspect element items don't
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index d3b772e..4d47b81 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -292,6 +292,8 @@ void BrowserOptionsHandler::GetLocalizedValues(base::DictionaryValue* values) {
{ "privacyClearDataButton", IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON },
{ "privacyContentSettingsButton",
IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON },
+ { "profileAddPersonEnable", IDS_PROFILE_ADD_PERSON_ENABLE },
+ { "profileBrowserGuestEnable", IDS_PROFILE_BROWSER_GUEST_ENABLE },
{ "profilesCreate", using_new_profiles_ui ?
IDS_NEW_PROFILES_CREATE_BUTTON_LABEL :
IDS_PROFILES_CREATE_BUTTON_LABEL },
diff --git a/chrome/browser/ui/webui/options/core_options_handler.cc b/chrome/browser/ui/webui/options/core_options_handler.cc
index b7bc0ff..dec707a4 100644
--- a/chrome/browser/ui/webui/options/core_options_handler.cc
+++ b/chrome/browser/ui/webui/options/core_options_handler.cc
@@ -92,6 +92,12 @@ void CoreOptionsHandler::InitializeHandler() {
pref_change_filters_[prefs::kMetricsReportingEnabled] =
base::Bind(&AllowMetricsReportingChange);
+ pref_change_filters_[prefs::kBrowserGuestModeEnabled] =
+ base::Bind(&CoreOptionsHandler::IsUserUnsupervised,
+ base::Unretained(this));
+ pref_change_filters_[prefs::kBrowserAddPersonEnabled] =
+ base::Bind(&CoreOptionsHandler::IsUserUnsupervised,
+ base::Unretained(this));
}
void CoreOptionsHandler::InitializePage() {
@@ -657,4 +663,8 @@ void CoreOptionsHandler::UpdatePepperFlashSettingsEnabled() {
"OptionsPage.setPepperFlashSettingsEnabled", enabled);
}
+bool CoreOptionsHandler::IsUserUnsupervised(const base::Value* to_value) {
+ return !Profile::FromWebUI(web_ui())->IsSupervised();
+}
+
} // namespace options
diff --git a/chrome/browser/ui/webui/options/core_options_handler.h b/chrome/browser/ui/webui/options/core_options_handler.h
index 5976d49..163cef1 100644
--- a/chrome/browser/ui/webui/options/core_options_handler.h
+++ b/chrome/browser/ui/webui/options/core_options_handler.h
@@ -163,6 +163,9 @@ class CoreOptionsHandler : public OptionsPageUIHandler {
void UpdateClearPluginLSOData();
void UpdatePepperFlashSettingsEnabled();
+ // Checks that the current profile is not supervised. Used as a pref filter.
+ bool IsUserUnsupervised(const base::Value* to_value);
+
OptionsPageUIHandlerHost* handlers_host_;
// This registrar keeps track of user prefs.
PrefChangeRegistrar registrar_;
diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
index 5bd6b06..6347f05 100644
--- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
+++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
@@ -148,6 +148,12 @@ bool IsGuestModeEnabled() {
return service->GetBoolean(prefs::kBrowserGuestModeEnabled);
}
+bool IsAddPersonEnabled() {
+ PrefService* service = g_browser_process->local_state();
+ DCHECK(service);
+ return service->GetBoolean(prefs::kBrowserAddPersonEnabled);
+}
+
} // namespace
// ProfileUpdateObserver ------------------------------------------------------
@@ -289,7 +295,8 @@ void UserManagerScreenHandler::Unlock(const std::string& user_email) {
void UserManagerScreenHandler::HandleInitialize(const base::ListValue* args) {
SendUserList();
web_ui()->CallJavascriptFunction("cr.ui.Oobe.showUserManagerScreen",
- base::FundamentalValue(IsGuestModeEnabled()));
+ base::FundamentalValue(IsGuestModeEnabled()),
+ base::FundamentalValue(IsAddPersonEnabled()));
desktop_type_ = chrome::GetHostDesktopTypeForNativeView(
web_ui()->GetWebContents()->GetNativeView());
@@ -297,9 +304,15 @@ void UserManagerScreenHandler::HandleInitialize(const base::ListValue* args) {
}
void UserManagerScreenHandler::HandleAddUser(const base::ListValue* args) {
- profiles::CreateAndSwitchToNewProfile(desktop_type_,
- base::Bind(&OnSwitchToProfileComplete),
- ProfileMetrics::ADD_NEW_USER_MANAGER);
+ if (!IsAddPersonEnabled()) {
+ // The 'Add User' UI should not be showing.
+ NOTREACHED();
+ return;
+ }
+ profiles::CreateAndSwitchToNewProfile(
+ desktop_type_,
+ base::Bind(&OnSwitchToProfileComplete),
+ ProfileMetrics::ADD_NEW_USER_MANAGER);
}
void UserManagerScreenHandler::HandleAuthenticatedLaunchUser(
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 431de5a..d2ab104 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2324,4 +2324,7 @@ const char kQuickCheckEnabled[] = "proxy.quick_check_enabled";
// Whether Guest Mode is enabled within the browser.
const char kBrowserGuestModeEnabled[] = "profile.browser_guest_enabled";
+// Whether Adding a new Person is enabled within the user manager.
+const char kBrowserAddPersonEnabled[] = "profile.add_person_enabled";
+
} // namespace prefs
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 6e4a982..3b7eac3 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -819,6 +819,7 @@ extern const char kPartnerBookmarkMappings[];
extern const char kQuickCheckEnabled[];
extern const char kBrowserGuestModeEnabled[];
+extern const char kBrowserAddPersonEnabled[];
} // namespace prefs
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index ebe2035..5dc0266 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -1661,6 +1661,16 @@
]
},
+ "BrowserAddPersonEnabled": {
+ "os": ["win", "linux", "mac"],
+ "test_policy": { "BrowserAddPersonEnabled": true },
+ "pref_mappings": [
+ { "pref": "profile.add_person_enabled",
+ "local_state": true
+ }
+ ]
+ },
+
"----- Chrome OS policies ------------------------------------------------": {},
"ChromeOsLockOnIdleSuspend": {