diff options
author | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-30 14:00:37 +0000 |
---|---|---|
committer | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-30 14:00:37 +0000 |
commit | 81c937a4a23786cd944deebff39a00731ebbd772 (patch) | |
tree | 5718976739dc8cba8d434f375eb3b6fd05570fd5 | |
parent | b712d87e26302fc7ed494137586fd8f2b86937d8 (diff) | |
download | chromium_src-81c937a4a23786cd944deebff39a00731ebbd772.zip chromium_src-81c937a4a23786cd944deebff39a00731ebbd772.tar.gz chromium_src-81c937a4a23786cd944deebff39a00731ebbd772.tar.bz2 |
[cros] Login screen: 'Create user' link hidden when BWSI is disabled.
Also: login screen listens for device policy changes and updates links accordingly.
BUG=chromium-os:23664
TEST=Manual: see bug description.
Review URL: http://codereview.chromium.org/9046005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116047 0039d316-1c4b-4281-b951-d872f2087c98
3 files changed, 77 insertions, 11 deletions
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js index 57b6869..bfc702f 100644 --- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js +++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js @@ -141,11 +141,15 @@ cr.define('login', function() { document.removeEventListener('focusout', listener); }, + /** + * Loads the authentication extension into the iframe. + * @param {Object} data Extension parameters bag. + * @private + */ loadAuthExtension_: function(data) { this.silentLoad_ = data.silentLoad; - $('createAccount').hidden = !data.createAccount; - $('guestSignin').hidden = !data.guestSignin; + this.updateAuthExtension_(data); var params = []; if (data.gaiaOrigin) @@ -190,6 +194,16 @@ cr.define('login', function() { }, /** + * Updates the authentication extension with new parameters, if needed. + * @param {Object} data New extension parameters bag. + * @private + */ + updateAuthExtension_: function(data) { + $('createAccount').hidden = !data.createAccount; + $('guestSignin').hidden = !data.guestSignin; + }, + + /** * Checks if message comes from the loaded authentication extension. * @param e {object} Payload of the received HTML5 message. * @type {bool} @@ -306,10 +320,22 @@ cr.define('login', function() { } }; + /** + * Loads the authentication extension into the iframe. + * @param {Object} data Extension parameters bag. + */ GaiaSigninScreen.loadAuthExtension = function(data) { $('gaia-signin').loadAuthExtension_(data); }; + /** + * Updates the authentication extension with new parameters, if needed. + * @param {Object} data New extension parameters bag. + */ + GaiaSigninScreen.updateAuthExtension = function(data) { + $('gaia-signin').updateAuthExtension_(data); + }; + return { GaiaSigninScreen: GaiaSigninScreen }; diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index dfa05e9..e1ea228 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -88,6 +88,23 @@ void ClearDnsCache(IOThread* io_thread) { namespace chromeos { +namespace { + +// Updates params dictionary passed to the auth extension with related +// preferences from CrosSettings. +void UpdateAuthParamsFromSettings(DictionaryValue* params, + const CrosSettings* cros_settings) { + bool allow_new_user = true; + cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); + bool allow_guest = true; + cros_settings->GetBoolean(kAccountsPrefAllowGuest, &allow_guest); + // Account creation depends on Guest sign-in (http://crosbug.com/24570). + params->SetBoolean("createAccount", allow_new_user && allow_guest); + params->SetBoolean("guestSignin", allow_guest); +} + +} // namespace + // Class which observes network state changes and calls registered callbacks. // State is considered changed if connection or the active network has been // changed. Also, it answers to the requests about current network state. @@ -236,6 +253,8 @@ SigninScreenHandler::SigninScreenHandler() cookie_remover_(NULL), ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), key_event_listener_(NULL) { + CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowNewUser, this); + CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowGuest, this); } SigninScreenHandler::~SigninScreenHandler() { @@ -244,6 +263,8 @@ SigninScreenHandler::~SigninScreenHandler() { cookie_remover_->RemoveObserver(this); if (key_event_listener_) key_event_listener_->RemoveCapsLockObserver(this); + CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowNewUser, this); + CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowGuest, this); } void SigninScreenHandler::GetLocalizedStrings( @@ -461,6 +482,15 @@ void SigninScreenHandler::OnCapsLockChange(bool enabled) { } } +void SigninScreenHandler::Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) { + if (type == chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED) + UpdateAuthExtension(); + else + NOTREACHED(); +} + void SigninScreenHandler::OnDnsCleared() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); dns_clear_task_running_ = false; @@ -491,14 +521,7 @@ void SigninScreenHandler::LoadAuthExtension(bool force, bool silent_load) { params.SetString("email", email_); email_.clear(); - // TODO(pastarmovj): Watch for changes of this variables to update the UI - // properly when the policy has been fetched on sign-on screen. - bool allow_new_user = true; - CrosSettings::Get()->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); - params.SetBoolean("createAccount", allow_new_user); - bool allow_guest = true; - CrosSettings::Get()->GetBoolean(kAccountsPrefAllowGuest, &allow_guest); - params.SetBoolean("guestSignin", allow_guest); + UpdateAuthParamsFromSettings(¶ms, CrosSettings::Get()); const std::string app_locale = g_browser_process->GetApplicationLocale(); if (!app_locale.empty()) @@ -522,6 +545,12 @@ void SigninScreenHandler::LoadAuthExtension(bool force, bool silent_load) { params); } +void SigninScreenHandler::UpdateAuthExtension() { + DictionaryValue params; + UpdateAuthParamsFromSettings(¶ms, CrosSettings::Get()); + web_ui_->CallJavascriptFunction("login.GaiaSigninScreen.updateAuthExtension", + params); +} void SigninScreenHandler::ShowSigninScreenForCreds( const std::string& username, diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h index b974158..bb49f7e 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h @@ -17,6 +17,7 @@ #include "chrome/browser/chromeos/system_key_event_listener.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "content/browser/webui/web_ui.h" +#include "content/public/browser/notification_observer.h" class BrowsingDataRemover; @@ -105,7 +106,8 @@ class SigninScreenHandlerDelegate { class SigninScreenHandler : public BaseScreenHandler, public LoginDisplayWebUIHandler, public BrowsingDataRemover::Observer, - public SystemKeyEventListener::CapsLockObserver { + public SystemKeyEventListener::CapsLockObserver, + public content::NotificationObserver { public: SigninScreenHandler(); virtual ~SigninScreenHandler(); @@ -148,6 +150,11 @@ class SigninScreenHandler : public BaseScreenHandler, // SystemKeyEventListener::CapsLockObserver overrides. virtual void OnCapsLockChange(bool enabled) OVERRIDE; + // content::NotificationObserver implementation. + virtual void Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) OVERRIDE; + // Shows signin screen after dns cache and cookie cleanup operations finish. void ShowSigninScreenIfReady(); @@ -157,6 +164,10 @@ class SigninScreenHandler : public BaseScreenHandler, // shouldn't grab the focus. void LoadAuthExtension(bool force, bool silent_load); + // Updates authentication extension. Called when device settings that affect + // sign-in (allow BWSI and allow whitelist) are changed. + void UpdateAuthExtension(); + // Handles confirmation message of user authentication that was performed by // the authentication extension. void HandleCompleteLogin(const base::ListValue* args); |