Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(832)

Unified Diff: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc

Issue 304303005: ChromeOS login webui refactoring : Move GAIA-related code to gaia_screen_handler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
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 65b71a52bf127edaed558b36961e24cbbbe09b72..bf3411479ba65a060bfebe4c7fe1ff0115f8f408 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -63,7 +63,6 @@
#include "chromeos/ime/input_method_manager.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
-#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "google_apis/gaia/gaia_auth_util.h"
@@ -96,16 +95,6 @@ const int kConnectingTimeoutSec = 60;
const char kSourceGaiaSignin[] = "gaia-signin";
const char kSourceAccountPicker[] = "account-picker";
-// The Task posted to PostTaskAndReply in StartClearingDnsCache on the IO
-// thread.
-void ClearDnsCache(IOThread* io_thread) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (browser_shutdown::IsTryingToQuit())
- return;
-
- io_thread->ClearHostCache();
-}
-
static bool Contains(const std::vector<std::string>& container,
const std::string& value) {
return std::find(container.begin(), container.end(), value) !=
@@ -216,10 +205,6 @@ static bool SetUserInputMethodImpl(
return true;
}
-void RecordSAMLScrapingVerificationResultInHistogram(bool success) {
- UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.Scraping.VerificationResult", success);
-}
-
} // namespace
// LoginScreenContext implementation ------------------------------------------
@@ -254,15 +239,8 @@ SigninScreenHandler::SigninScreenHandler(
native_window_delegate_(NULL),
show_on_init_(false),
oobe_ui_(false),
- focus_stolen_(false),
- gaia_silent_load_(false),
is_account_picker_showing_first_time_(false),
- dns_cleared_(false),
- dns_clear_task_running_(false),
- cookies_cleared_(false),
network_state_informer_(network_state_informer),
- using_saml_api_(false),
- test_expects_complete_login_(false),
weak_factory_(this),
webui_visible_(false),
preferences_changed_delayed_(false),
@@ -432,10 +410,7 @@ void SigninScreenHandler::Show(const LoginScreenContext& context) {
// Just initialize internal fields from context and call ShowImpl().
oobe_ui_ = context.oobe_ui();
- if (!context.email().empty())
- email_ = context.email();
- else
- email_.clear();
+ gaia_screen_handler_->PopulateEmail(context.email());
ShowImpl();
}
@@ -458,7 +433,8 @@ void SigninScreenHandler::SetNativeWindowDelegate(
void SigninScreenHandler::OnNetworkReady() {
LOG(WARNING) << "OnNetworkReady() call.";
- MaybePreloadAuthExtension();
+ DCHECK(gaia_screen_handler_);
+ gaia_screen_handler_->MaybePreloadAuthExtension();
}
void SigninScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) {
@@ -475,7 +451,7 @@ void SigninScreenHandler::ShowImpl() {
if (oobe_ui_) {
// Shows new user sign-in for OOBE.
- OnShowAddUser(email_);
+ OnShowAddUser();
} else {
// Populates account picker. Animation is turned off for now until we
// figure out how to make it fast enough.
@@ -718,16 +694,8 @@ gfx::NativeWindow SigninScreenHandler::GetNativeWindow() {
}
void SigninScreenHandler::RegisterMessages() {
- AddCallback("usingSAMLAPI", &SigninScreenHandler::HandleUsingSAMLAPI);
- AddCallback("scrapedPasswordCount",
- &SigninScreenHandler::HandleScrapedPasswordCount);
- AddCallback("scrapedPasswordVerificationFailed",
- &SigninScreenHandler::HandleScrapedPasswordVerificationFailed);
AddCallback("authenticateUser", &SigninScreenHandler::HandleAuthenticateUser);
AddCallback("attemptUnlock", &SigninScreenHandler::HandleAttemptUnlock);
- AddCallback("completeLogin", &SigninScreenHandler::HandleCompleteLogin);
- AddCallback("completeAuthentication",
- &SigninScreenHandler::HandleCompleteAuthentication);
AddCallback("getUsers", &SigninScreenHandler::HandleGetUsers);
AddCallback("launchDemoUser", &SigninScreenHandler::HandleLaunchDemoUser);
AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito);
@@ -749,7 +717,6 @@ void SigninScreenHandler::RegisterMessages() {
AddCallback("accountPickerReady",
&SigninScreenHandler::HandleAccountPickerReady);
AddCallback("wallpaperReady", &SigninScreenHandler::HandleWallpaperReady);
- AddCallback("loginWebuiReady", &SigninScreenHandler::HandleLoginWebuiReady);
AddCallback("signOutUser", &SigninScreenHandler::HandleSignOutUser);
AddCallback("openProxySettings",
&SigninScreenHandler::HandleOpenProxySettings);
@@ -801,7 +768,7 @@ void SigninScreenHandler::RefocusCurrentPod() {
void SigninScreenHandler::OnUserRemoved(const std::string& username) {
CallJS("login.AccountPickerScreen.removeUser", username);
if (delegate_->GetUsers().empty())
- OnShowAddUser("");
+ OnShowAddUser();
}
void SigninScreenHandler::OnUserImageChanged(const User& user) {
@@ -856,9 +823,9 @@ void SigninScreenHandler::ShowSigninUI(const std::string& email) {
}
void SigninScreenHandler::ShowGaiaPasswordChanged(const std::string& username) {
- email_ = username;
- password_changed_for_.insert(email_);
- core_oobe_actor_->ShowSignInUI(email_);
+ gaia_screen_handler_->PasswordChangedFor(username);
+ gaia_screen_handler_->PopulateEmail(username);
+ core_oobe_actor_->ShowSignInUI(username);
CallJS("login.setAuthType",
username,
static_cast<int>(ONLINE_SIGN_IN),
@@ -872,26 +839,8 @@ void SigninScreenHandler::ShowPasswordChangedDialog(bool show_password_error) {
void SigninScreenHandler::ShowSigninScreenForCreds(
const std::string& username,
const std::string& password) {
- VLOG(2) << "ShowSigninScreenForCreds for user " << username
- << ", frame_state=" << FrameState();
-
- test_user_ = username;
- test_pass_ = password;
- test_expects_complete_login_ = true;
-
- // Submit login form for test if gaia is ready. If gaia is loading, login
- // will be attempted in HandleLoginWebuiReady after gaia is ready. Otherwise,
- // reload gaia then follow the loading case.
- if (FrameState() == GaiaScreenHandler::FRAME_STATE_LOADED)
- SubmitLoginFormForTest();
- else if (FrameState() != GaiaScreenHandler::FRAME_STATE_LOADING)
- HandleShowAddUser(NULL);
-}
-
-void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- cookies_cleared_ = true;
- on_clear_callback.Run();
+ DCHECK(gaia_screen_handler_);
+ gaia_screen_handler_->ShowSigninScreenForCreds(username, password);
}
void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) {
@@ -982,11 +931,9 @@ void SigninScreenHandler::Unlock(const std::string& user_email) {
ScreenLocker::Hide();
}
-void SigninScreenHandler::OnDnsCleared() {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- dns_clear_task_running_ = false;
- dns_cleared_ = true;
- ShowSigninScreenIfReady();
+bool SigninScreenHandler::ShouldLoadGaia() const {
+ return !ScreenLocker::default_screen_locker() &&
+ is_account_picker_showing_first_time_;
}
// Update keyboard layout to least recently used by the user.
@@ -1016,65 +963,6 @@ void SigninScreenHandler::SetUserInputMethod(const std::string& username) {
}
}
-void SigninScreenHandler::ShowSigninScreenIfReady() {
- LOG(WARNING) << "ShowSigninScreenIfReady() call.";
-
- if (!dns_cleared_ || !cookies_cleared_ || !delegate_)
- return;
-
- std::string active_network_path = network_state_informer_->network_path();
- if (gaia_silent_load_ &&
- (network_state_informer_->state() != NetworkStateInformer::ONLINE ||
- gaia_silent_load_network_ != active_network_path)) {
- // Network has changed. Force Gaia reload.
- gaia_silent_load_ = false;
- // Gaia page will be realoded, so focus isn't stolen anymore.
- focus_stolen_ = false;
- }
-
- // Note that LoadAuthExtension clears |email_|.
- if (email_.empty())
- delegate_->LoadSigninWallpaper();
- else
- delegate_->LoadWallpaper(email_);
-
- // Set Least Recently Used input method for the user.
- if (!email_.empty())
- SetUserInputMethod(email_);
-
- LoadAuthExtension(!gaia_silent_load_, false, false);
- UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL);
-
- if (gaia_silent_load_) {
- // The variable is assigned to false because silently loaded Gaia page was
- // used.
- gaia_silent_load_ = false;
- if (focus_stolen_)
- HandleLoginWebuiReady();
- }
-
- UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE);
-}
-
-void SigninScreenHandler::LoadAuthExtension(
- bool force, bool silent_load, bool offline) {
- GaiaContext context;
- context.force_reload = force;
- context.is_local = offline;
- context.password_changed =
- !email_.empty() && password_changed_for_.count(email_);
- if (delegate_)
- context.show_users = delegate_->IsShowUsers();
- context.use_offline = offline;
- if (delegate_)
- context.has_users = !delegate_->GetUsers().empty();
- context.email = email_;
-
- email_.clear();
-
- DCHECK(gaia_screen_handler_);
- gaia_screen_handler_->LoadGaia(context);
-}
void SigninScreenHandler::UserSettingsChanged() {
DCHECK(gaia_screen_handler_);
@@ -1090,65 +978,6 @@ void SigninScreenHandler::UpdateAddButtonStatus() {
AllWhitelistedUsersPresent());
}
-void SigninScreenHandler::HandleUsingSAMLAPI() {
- SetSAMLPrincipalsAPIUsed(true);
-}
-
-void SigninScreenHandler::HandleScrapedPasswordCount(int password_count) {
- SetSAMLPrincipalsAPIUsed(false);
- // Use a histogram that has 11 buckets, one for each of the values in [0, 9]
- // and an overflow bucket at the end.
- UMA_HISTOGRAM_ENUMERATION(
- "ChromeOS.SAML.Scraping.PasswordCount", std::min(password_count, 10), 11);
- if (password_count == 0)
- HandleScrapedPasswordVerificationFailed();
-}
-
-void SigninScreenHandler::HandleScrapedPasswordVerificationFailed() {
- RecordSAMLScrapingVerificationResultInHistogram(false);
-}
-
-void SigninScreenHandler::HandleCompleteLogin(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 SigninScreenHandler::HandleCompleteAuthentication(
- const std::string& email,
- const std::string& password,
- const std::string& auth_code) {
- if (!delegate_)
- return;
- delegate_->SetDisplayEmail(gaia::SanitizeEmail(email));
- UserContext user_context(email);
- user_context.SetKey(Key(password));
- user_context.SetAuthCode(auth_code);
- delegate_->CompleteLogin(user_context);
-}
-
void SigninScreenHandler::HandleAuthenticateUser(const std::string& username,
const std::string& password) {
if (!delegate_)
@@ -1211,11 +1040,13 @@ void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) {
NOTREACHED();
return;
}
- if (!args->GetString(0, &email_))
- email_.clear();
+ std::string email;
+ args->GetString(0, &email);
+
+ gaia_screen_handler_->PopulateEmail(email);
// Load auth extension. Parameters are: force reload, do not load extension in
// background, use offline version.
- LoadAuthExtension(true, false, true);
+ gaia_screen_handler_->LoadAuthExtension(true, false, true);
UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL);
}
@@ -1248,7 +1079,8 @@ void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) {
// |args| can be null if it's OOBE.
if (args)
args->GetString(0, &email);
- OnShowAddUser(email);
+ gaia_screen_handler_->PopulateEmail(email);
+ OnShowAddUser();
}
void SigninScreenHandler::HandleToggleEnrollmentScreen() {
@@ -1307,7 +1139,7 @@ void SigninScreenHandler::HandleAccountPickerReady() {
}
is_account_picker_showing_first_time_ = true;
- MaybePreloadAuthExtension();
+ gaia_screen_handler_->MaybePreloadAuthExtension();
if (ScreenLocker::default_screen_locker()) {
ScreenLocker::default_screen_locker()->delegate()->OnLockWebUIReady();
@@ -1325,40 +1157,6 @@ void SigninScreenHandler::HandleWallpaperReady() {
}
}
-void SigninScreenHandler::HandleLoginWebuiReady() {
- if (focus_stolen_) {
- // Set focus to the Gaia page.
- // TODO(altimofeev): temporary solution, until focus parameters are
- // implemented on the Gaia side.
- // Do this only once. Any subsequent call would relod GAIA frame.
- focus_stolen_ = false;
- const char code[] =
- "if (typeof gWindowOnLoad != 'undefined') gWindowOnLoad();";
- content::RenderFrameHost* frame =
- LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
- frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
- }
- if (gaia_silent_load_) {
- focus_stolen_ = true;
- // Prevent focus stealing by the Gaia page.
- // TODO(altimofeev): temporary solution, until focus parameters are
- // implemented on the Gaia side.
- const char code[] = "var gWindowOnLoad = window.onload; "
- "window.onload=function() {};";
- content::RenderFrameHost* frame =
- LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
- frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
- // As we could miss and window.onload could already be called, restore
- // focus to current pod (see crbug/175243).
- RefocusCurrentPod();
- }
- DCHECK(gaia_screen_handler_);
- gaia_screen_handler_->HandleFrameLoadingCompleted(0);
-
- if (test_expects_complete_login_)
- SubmitLoginFormForTest();
-}
-
void SigninScreenHandler::HandleSignOutUser() {
if (delegate_)
delegate_->Signout();
@@ -1392,9 +1190,9 @@ void SigninScreenHandler::HandleLoginVisible(const std::string& source) {
}
void SigninScreenHandler::HandleCancelPasswordChangedFlow() {
- StartClearingCookies(base::Bind(
- &SigninScreenHandler::CancelPasswordChangedFlowInternal,
- weak_factory_.GetWeakPtr()));
+ gaia_screen_handler_->StartClearingCookies(
+ base::Bind(&SigninScreenHandler::CancelPasswordChangedFlowInternal,
+ weak_factory_.GetWeakPtr()));
}
void SigninScreenHandler::HandleCancelUserAdding() {
@@ -1473,51 +1271,6 @@ void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id,
delegate_->LoginAsKioskApp(app_id, diagnostic_mode);
}
-void SigninScreenHandler::StartClearingDnsCache() {
- if (dns_clear_task_running_ || !g_browser_process->io_thread())
- return;
-
- dns_cleared_ = false;
- BrowserThread::PostTaskAndReply(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&ClearDnsCache, g_browser_process->io_thread()),
- base::Bind(&SigninScreenHandler::OnDnsCleared,
- weak_factory_.GetWeakPtr()));
- dns_clear_task_running_ = true;
-}
-
-void SigninScreenHandler::StartClearingCookies(
- const base::Closure& on_clear_callback) {
- cookies_cleared_ = false;
- ProfileHelper* profile_helper =
- g_browser_process->platform_part()->profile_helper();
- LOG_ASSERT(
- Profile::FromWebUI(web_ui()) == profile_helper->GetSigninProfile());
- profile_helper->ClearSigninProfile(base::Bind(
- &SigninScreenHandler::OnCookiesCleared,
- weak_factory_.GetWeakPtr(), on_clear_callback));
-}
-
-void SigninScreenHandler::MaybePreloadAuthExtension() {
- LOG(WARNING) << "MaybePreloadAuthExtension() call.";
-
- // Fetching of the extension is not started before account picker page is
- // loaded because it can affect the loading speed. Also if cookies clearing
- // was initiated or |dns_clear_task_running_| then auth extension showing has
- // already been initiated and preloading is senseless.
- // Do not load the extension for the screen locker, see crosbug.com/25018.
- if (is_account_picker_showing_first_time_ &&
- !gaia_silent_load_ &&
- !ScreenLocker::default_screen_locker() &&
- !cookies_cleared_ &&
- !dns_clear_task_running_ &&
- network_state_informer_->state() == NetworkStateInformer::ONLINE) {
- gaia_silent_load_ = true;
- gaia_silent_load_network_ = network_state_informer_->network_path();
- LoadAuthExtension(true, true, false);
- }
-}
-
bool SigninScreenHandler::AllWhitelistedUsersPresent() {
CrosSettings* cros_settings = CrosSettings::Get();
bool allow_new_user = false;
@@ -1593,23 +1346,6 @@ bool SigninScreenHandler::IsOfflineLoginAllowed() const {
return !show_pods;
}
-void SigninScreenHandler::SubmitLoginFormForTest() {
- VLOG(2) << "Submit login form for test, user=" << test_user_;
-
- std::string code;
- code += "document.getElementById('Email').value = '" + test_user_ + "';";
- code += "document.getElementById('Passwd').value = '" + test_pass_ + "';";
- code += "document.getElementById('signIn').click();";
-
- content::RenderFrameHost* frame =
- LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
- frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
-
- // Test properties are cleared in HandleCompleteLogin because the form
- // submission might fail and login will not be attempted after reloading
- // if they are cleared here.
-}
-
void SigninScreenHandler::ContinueKioskEnableFlow(
policy::AutoEnrollmentState state) {
// Do not proceed with kiosk enable when auto enroll will be enforced.
@@ -1637,25 +1373,10 @@ void SigninScreenHandler::ContinueKioskEnableFlow(
auto_enrollment_progress_subscription_.reset();
}
-void SigninScreenHandler::OnShowAddUser(const std::string& email) {
- email_ = email;
+void SigninScreenHandler::OnShowAddUser() {
is_account_picker_showing_first_time_ = false;
-
- if (gaia_silent_load_ && email_.empty()) {
- dns_cleared_ = true;
- cookies_cleared_ = true;
- ShowSigninScreenIfReady();
- } else {
- StartClearingDnsCache();
- StartClearingCookies(base::Bind(
- &SigninScreenHandler::ShowSigninScreenIfReady,
- weak_factory_.GetWeakPtr()));
- }
-}
-
-void SigninScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) {
- using_saml_api_ = api_used;
- UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used);
+ DCHECK(gaia_screen_handler_);
+ gaia_screen_handler_->ShowGaia();
}
GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const {

Powered by Google App Engine
This is Rietveld 408576698