| Index: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| index acf85b41e0bd5215ab72514834b4a80569e76412..23667ceca8dda292c7dd2d2ee4a0b72b23f4b643 100644
|
| --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| @@ -13,6 +14,7 @@
|
| #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
|
| #include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
|
| #include "chrome/browser/chromeos/login/users/user_manager.h"
|
| +#include "chrome/browser/chromeos/policy/consumer_management_service.h"
|
| #include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #include "chrome/browser/io_thread.h"
|
| @@ -36,7 +38,8 @@ namespace {
|
|
|
| const char kJsScreenPath[] = "login.GaiaSigninScreen";
|
|
|
| -void UpdateAuthParams(base::DictionaryValue* params, bool has_users,
|
| +void UpdateAuthParams(base::DictionaryValue* params,
|
| + bool has_users,
|
| bool is_enrolling_consumer_management) {
|
| CrosSettings* cros_settings = CrosSettings::Get();
|
| bool allow_new_user = true;
|
| @@ -109,11 +112,13 @@ GaiaContext::GaiaContext()
|
| has_users(false) {}
|
|
|
| GaiaScreenHandler::GaiaScreenHandler(
|
| - const scoped_refptr<NetworkStateInformer>& network_state_informer)
|
| + const scoped_refptr<NetworkStateInformer>& network_state_informer,
|
| + policy::ConsumerManagementService* management_service)
|
| : BaseScreenHandler(kJsScreenPath),
|
| frame_state_(FRAME_STATE_UNKNOWN),
|
| frame_error_(net::OK),
|
| network_state_informer_(network_state_informer),
|
| + management_service_(management_service),
|
| dns_cleared_(false),
|
| dns_clear_task_running_(false),
|
| cookies_cleared_(false),
|
| @@ -132,6 +137,8 @@ GaiaScreenHandler::~GaiaScreenHandler() {
|
|
|
| void GaiaScreenHandler::LoadGaia(const GaiaContext& context) {
|
| base::DictionaryValue params;
|
| + const bool is_enrolling_consumer_management =
|
| + context.is_enrolling_consumer_management;
|
|
|
| params.SetBoolean("forceReload", context.force_reload);
|
| params.SetBoolean("isLocal", context.is_local);
|
| @@ -140,10 +147,11 @@ void GaiaScreenHandler::LoadGaia(const GaiaContext& context) {
|
| params.SetBoolean("useOffline", context.use_offline);
|
| params.SetString("email", context.email);
|
| params.SetBoolean("isEnrollingConsumerManagement",
|
| - context.is_enrolling_consumer_management);
|
| + is_enrolling_consumer_management);
|
|
|
| - UpdateAuthParams(¶ms, context.has_users,
|
| - context.is_enrolling_consumer_management);
|
| + UpdateAuthParams(¶ms,
|
| + context.has_users,
|
| + is_enrolling_consumer_management);
|
|
|
| if (!context.use_offline) {
|
| const std::string app_locale = g_browser_process->GetApplicationLocale();
|
| @@ -289,37 +297,28 @@ void GaiaScreenHandler::HandleCompleteAuthentication(
|
| void GaiaScreenHandler::HandleCompleteLogin(const std::string& typed_email,
|
| const std::string& password,
|
| bool using_saml) {
|
| - std::string owner_email = UserManager::Get()->GetOwnerEmail();
|
| - if (is_enrolling_consumer_management_ && typed_email != owner_email) {
|
| - // Show Gaia signin page again since we only allow the owner to sign in.
|
| - populated_email_ = owner_email;
|
| - ShowGaia(is_enrolling_consumer_management_);
|
| + if (!is_enrolling_consumer_management_) {
|
| + DoCompleteLogin(typed_email, password, using_saml);
|
| return;
|
| }
|
|
|
| - if (!Delegate())
|
| + // Consumer management enrollment is in progress.
|
| + const std::string owner_email = UserManager::Get()->GetOwnerEmail();
|
| + if (typed_email != owner_email) {
|
| + // Show Gaia sign-in screen again, since we only allow the owner to sign
|
| + // in.
|
| + populated_email_ = owner_email;
|
| + ShowGaia(is_enrolling_consumer_management_);
|
| return;
|
| -
|
| - if (using_saml && !using_saml_api_)
|
| - RecordSAMLScrapingVerificationResultInHistogram(true);
|
| -
|
| - const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
|
| - Delegate()->SetDisplayEmail(sanitized_email);
|
| - UserContext user_context(sanitized_email);
|
| - user_context.SetKey(Key(password));
|
| - user_context.SetAuthFlow(using_saml
|
| - ? UserContext::AUTH_FLOW_GAIA_WITH_SAML
|
| - : UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML);
|
| - Delegate()->CompleteLogin(user_context);
|
| -
|
| - if (test_expects_complete_login_) {
|
| - VLOG(2) << "Complete test login for " << typed_email
|
| - << ", requested=" << test_user_;
|
| -
|
| - test_expects_complete_login_ = false;
|
| - test_user_.clear();
|
| - test_pass_.clear();
|
| }
|
| +
|
| + CHECK(management_service_);
|
| + management_service_->SetOwner(owner_email,
|
| + base::Bind(&GaiaScreenHandler::OnSetOwnerDone,
|
| + weak_factory_.GetWeakPtr(),
|
| + typed_email,
|
| + password,
|
| + using_saml));
|
| }
|
|
|
| void GaiaScreenHandler::HandleUsingSAMLAPI() {
|
| @@ -376,6 +375,47 @@ void GaiaScreenHandler::HandleGaiaUIReady() {
|
| SubmitLoginFormForTest();
|
| }
|
|
|
| +void GaiaScreenHandler::OnSetOwnerDone(const std::string& typed_email,
|
| + const std::string& password,
|
| + bool using_saml,
|
| + bool success) {
|
| + if (!success) {
|
| + LOG(ERROR) << "Failed to write owner e-mail to boot lockbox.";
|
| + CHECK(management_service_);
|
| + management_service_->SetEnrollmentState(
|
| + policy::ConsumerManagementService::ENROLLMENT_BOOT_LOCKBOX_FAILED);
|
| + }
|
| + DoCompleteLogin(typed_email, password, using_saml);
|
| +}
|
| +
|
| +void GaiaScreenHandler::DoCompleteLogin(const std::string& typed_email,
|
| + const std::string& password,
|
| + bool using_saml) {
|
| + if (!Delegate())
|
| + return;
|
| +
|
| + if (using_saml && !using_saml_api_)
|
| + RecordSAMLScrapingVerificationResultInHistogram(true);
|
| +
|
| + const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
|
| + Delegate()->SetDisplayEmail(sanitized_email);
|
| + UserContext user_context(sanitized_email);
|
| + user_context.SetKey(Key(password));
|
| + user_context.SetAuthFlow(using_saml
|
| + ? UserContext::AUTH_FLOW_GAIA_WITH_SAML
|
| + : UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML);
|
| + Delegate()->CompleteLogin(user_context);
|
| +
|
| + if (test_expects_complete_login_) {
|
| + VLOG(2) << "Complete test login for " << typed_email
|
| + << ", requested=" << test_user_;
|
| +
|
| + test_expects_complete_login_ = false;
|
| + test_user_.clear();
|
| + test_pass_.clear();
|
| + }
|
| +}
|
| +
|
| void GaiaScreenHandler::PopulateEmail(const std::string& user_id) {
|
| populated_email_ = user_id;
|
| }
|
|
|