summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-30 14:00:37 +0000
committerivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-30 14:00:37 +0000
commit81c937a4a23786cd944deebff39a00731ebbd772 (patch)
tree5718976739dc8cba8d434f375eb3b6fd05570fd5
parentb712d87e26302fc7ed494137586fd8f2b86937d8 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/resources/chromeos/login/screen_gaia_signin.js30
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc45
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h13
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(&params, 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(&params, 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);