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

Side by Side Diff: trunk/src/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc

Issue 310313006: Revert 275154 "ChromeOS login webui refactoring : Move GAIA-rela..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « trunk/src/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "chrome/common/chrome_switches.h" 56 #include "chrome/common/chrome_switches.h"
57 #include "chrome/common/pref_names.h" 57 #include "chrome/common/pref_names.h"
58 #include "chrome/common/url_constants.h" 58 #include "chrome/common/url_constants.h"
59 #include "chromeos/chromeos_switches.h" 59 #include "chromeos/chromeos_switches.h"
60 #include "chromeos/dbus/dbus_thread_manager.h" 60 #include "chromeos/dbus/dbus_thread_manager.h"
61 #include "chromeos/dbus/power_manager_client.h" 61 #include "chromeos/dbus/power_manager_client.h"
62 #include "chromeos/ime/ime_keyboard.h" 62 #include "chromeos/ime/ime_keyboard.h"
63 #include "chromeos/ime/input_method_manager.h" 63 #include "chromeos/ime/input_method_manager.h"
64 #include "chromeos/network/network_state.h" 64 #include "chromeos/network/network_state.h"
65 #include "chromeos/network/network_state_handler.h" 65 #include "chromeos/network/network_state_handler.h"
66 #include "content/public/browser/browser_thread.h"
66 #include "content/public/browser/render_frame_host.h" 67 #include "content/public/browser/render_frame_host.h"
67 #include "content/public/browser/web_contents.h" 68 #include "content/public/browser/web_contents.h"
68 #include "google_apis/gaia/gaia_auth_util.h" 69 #include "google_apis/gaia/gaia_auth_util.h"
69 #include "grit/chromium_strings.h" 70 #include "grit/chromium_strings.h"
70 #include "grit/generated_resources.h" 71 #include "grit/generated_resources.h"
71 #include "net/url_request/url_request_context_getter.h" 72 #include "net/url_request/url_request_context_getter.h"
72 #include "third_party/cros_system_api/dbus/service_constants.h" 73 #include "third_party/cros_system_api/dbus/service_constants.h"
73 #include "ui/base/webui/web_ui_util.h" 74 #include "ui/base/webui/web_ui_util.h"
74 75
75 #if defined(USE_AURA) 76 #if defined(USE_AURA)
(...skipping 12 matching lines...) Expand all
88 // current network. 89 // current network.
89 const int kOfflineTimeoutSec = 5; 90 const int kOfflineTimeoutSec = 5;
90 91
91 // Timeout used to prevent infinite connecting to a flaky network. 92 // Timeout used to prevent infinite connecting to a flaky network.
92 const int kConnectingTimeoutSec = 60; 93 const int kConnectingTimeoutSec = 60;
93 94
94 // Type of the login screen UI that is currently presented to user. 95 // Type of the login screen UI that is currently presented to user.
95 const char kSourceGaiaSignin[] = "gaia-signin"; 96 const char kSourceGaiaSignin[] = "gaia-signin";
96 const char kSourceAccountPicker[] = "account-picker"; 97 const char kSourceAccountPicker[] = "account-picker";
97 98
99 // The Task posted to PostTaskAndReply in StartClearingDnsCache on the IO
100 // thread.
101 void ClearDnsCache(IOThread* io_thread) {
102 DCHECK_CURRENTLY_ON(BrowserThread::IO);
103 if (browser_shutdown::IsTryingToQuit())
104 return;
105
106 io_thread->ClearHostCache();
107 }
108
98 static bool Contains(const std::vector<std::string>& container, 109 static bool Contains(const std::vector<std::string>& container,
99 const std::string& value) { 110 const std::string& value) {
100 return std::find(container.begin(), container.end(), value) != 111 return std::find(container.begin(), container.end(), value) !=
101 container.end(); 112 container.end();
102 } 113 }
103 114
104 } // namespace 115 } // namespace
105 116
106 namespace chromeos { 117 namespace chromeos {
107 118
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 DLOG(ERROR) << "SigninScreenHandler::SetUserInputMethod('" << username 209 DLOG(ERROR) << "SigninScreenHandler::SetUserInputMethod('" << username
199 << "'): user input method '" << input_method 210 << "'): user input method '" << input_method
200 << "' is not enabled and enabling failed (ignored!)."; 211 << "' is not enabled and enabling failed (ignored!).";
201 } 212 }
202 } 213 }
203 manager->ChangeInputMethod(input_method); 214 manager->ChangeInputMethod(input_method);
204 215
205 return true; 216 return true;
206 } 217 }
207 218
219 void RecordSAMLScrapingVerificationResultInHistogram(bool success) {
220 UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.Scraping.VerificationResult", success);
221 }
222
208 } // namespace 223 } // namespace
209 224
210 // LoginScreenContext implementation ------------------------------------------ 225 // LoginScreenContext implementation ------------------------------------------
211 226
212 LoginScreenContext::LoginScreenContext() { 227 LoginScreenContext::LoginScreenContext() {
213 Init(); 228 Init();
214 } 229 }
215 230
216 LoginScreenContext::LoginScreenContext(const base::ListValue* args) { 231 LoginScreenContext::LoginScreenContext(const base::ListValue* args) {
217 Init(); 232 Init();
(...skipping 14 matching lines...) Expand all
232 SigninScreenHandler::SigninScreenHandler( 247 SigninScreenHandler::SigninScreenHandler(
233 const scoped_refptr<NetworkStateInformer>& network_state_informer, 248 const scoped_refptr<NetworkStateInformer>& network_state_informer,
234 ErrorScreenActor* error_screen_actor, 249 ErrorScreenActor* error_screen_actor,
235 CoreOobeActor* core_oobe_actor, 250 CoreOobeActor* core_oobe_actor,
236 GaiaScreenHandler* gaia_screen_handler) 251 GaiaScreenHandler* gaia_screen_handler)
237 : ui_state_(UI_STATE_UNKNOWN), 252 : ui_state_(UI_STATE_UNKNOWN),
238 delegate_(NULL), 253 delegate_(NULL),
239 native_window_delegate_(NULL), 254 native_window_delegate_(NULL),
240 show_on_init_(false), 255 show_on_init_(false),
241 oobe_ui_(false), 256 oobe_ui_(false),
257 focus_stolen_(false),
258 gaia_silent_load_(false),
242 is_account_picker_showing_first_time_(false), 259 is_account_picker_showing_first_time_(false),
260 dns_cleared_(false),
261 dns_clear_task_running_(false),
262 cookies_cleared_(false),
243 network_state_informer_(network_state_informer), 263 network_state_informer_(network_state_informer),
264 using_saml_api_(false),
265 test_expects_complete_login_(false),
266 weak_factory_(this),
244 webui_visible_(false), 267 webui_visible_(false),
245 preferences_changed_delayed_(false), 268 preferences_changed_delayed_(false),
246 error_screen_actor_(error_screen_actor), 269 error_screen_actor_(error_screen_actor),
247 core_oobe_actor_(core_oobe_actor), 270 core_oobe_actor_(core_oobe_actor),
248 is_first_update_state_call_(true), 271 is_first_update_state_call_(true),
249 offline_login_active_(false), 272 offline_login_active_(false),
250 last_network_state_(NetworkStateInformer::UNKNOWN), 273 last_network_state_(NetworkStateInformer::UNKNOWN),
251 has_pending_auth_ui_(false), 274 has_pending_auth_ui_(false),
252 caps_lock_enabled_(chromeos::input_method::InputMethodManager::Get() 275 caps_lock_enabled_(chromeos::input_method::InputMethodManager::Get()
253 ->GetImeKeyboard() 276 ->GetImeKeyboard()
254 ->CapsLockIsEnabled()), 277 ->CapsLockIsEnabled()),
255 gaia_screen_handler_(gaia_screen_handler), 278 gaia_screen_handler_(gaia_screen_handler) {
256 weak_factory_(this) {
257 DCHECK(network_state_informer_.get()); 279 DCHECK(network_state_informer_.get());
258 DCHECK(error_screen_actor_); 280 DCHECK(error_screen_actor_);
259 DCHECK(core_oobe_actor_); 281 DCHECK(core_oobe_actor_);
260 DCHECK(gaia_screen_handler_); 282 DCHECK(gaia_screen_handler_);
261 gaia_screen_handler_->SetSigninScreenHandler(this); 283 gaia_screen_handler_->SetSigninScreenHandler(this);
262 network_state_informer_->AddObserver(this); 284 network_state_informer_->AddObserver(this);
263 285
264 registrar_.Add(this, 286 registrar_.Add(this,
265 chrome::NOTIFICATION_AUTH_NEEDED, 287 chrome::NOTIFICATION_AUTH_NEEDED,
266 content::NotificationService::AllSources()); 288 content::NotificationService::AllSources());
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 builder->Add("runType", CommandLine::ForCurrentProcess()->HasSwitch( 419 builder->Add("runType", CommandLine::ForCurrentProcess()->HasSwitch(
398 switches::kFirstExecAfterBoot) ? "firstExecAfterBoot" : 420 switches::kFirstExecAfterBoot) ? "firstExecAfterBoot" :
399 "notFirstExecAfterBoot"); 421 "notFirstExecAfterBoot");
400 } 422 }
401 423
402 void SigninScreenHandler::Show(const LoginScreenContext& context) { 424 void SigninScreenHandler::Show(const LoginScreenContext& context) {
403 CHECK(delegate_); 425 CHECK(delegate_);
404 426
405 // Just initialize internal fields from context and call ShowImpl(). 427 // Just initialize internal fields from context and call ShowImpl().
406 oobe_ui_ = context.oobe_ui(); 428 oobe_ui_ = context.oobe_ui();
407 gaia_screen_handler_->PopulateEmail(context.email()); 429 if (!context.email().empty())
430 email_ = context.email();
431 else
432 email_.clear();
408 ShowImpl(); 433 ShowImpl();
409 } 434 }
410 435
411 void SigninScreenHandler::ShowRetailModeLoginSpinner() { 436 void SigninScreenHandler::ShowRetailModeLoginSpinner() {
412 CallJS("showLoginSpinner"); 437 CallJS("showLoginSpinner");
413 } 438 }
414 439
415 void SigninScreenHandler::SetDelegate(SigninScreenHandlerDelegate* delegate) { 440 void SigninScreenHandler::SetDelegate(SigninScreenHandlerDelegate* delegate) {
416 delegate_ = delegate; 441 delegate_ = delegate;
417 if (delegate_) 442 if (delegate_)
418 delegate_->SetWebUIHandler(this); 443 delegate_->SetWebUIHandler(this);
419 else 444 else
420 auto_enrollment_progress_subscription_.reset(); 445 auto_enrollment_progress_subscription_.reset();
421 } 446 }
422 447
423 void SigninScreenHandler::SetNativeWindowDelegate( 448 void SigninScreenHandler::SetNativeWindowDelegate(
424 NativeWindowDelegate* native_window_delegate) { 449 NativeWindowDelegate* native_window_delegate) {
425 native_window_delegate_ = native_window_delegate; 450 native_window_delegate_ = native_window_delegate;
426 } 451 }
427 452
428 void SigninScreenHandler::OnNetworkReady() { 453 void SigninScreenHandler::OnNetworkReady() {
429 LOG(WARNING) << "OnNetworkReady() call."; 454 LOG(WARNING) << "OnNetworkReady() call.";
430 DCHECK(gaia_screen_handler_); 455 MaybePreloadAuthExtension();
431 gaia_screen_handler_->MaybePreloadAuthExtension();
432 } 456 }
433 457
434 void SigninScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) { 458 void SigninScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) {
435 UpdateStateInternal(reason, false); 459 UpdateStateInternal(reason, false);
436 } 460 }
437 461
438 // SigninScreenHandler, private: ----------------------------------------------- 462 // SigninScreenHandler, private: -----------------------------------------------
439 463
440 void SigninScreenHandler::ShowImpl() { 464 void SigninScreenHandler::ShowImpl() {
441 if (!page_is_ready()) { 465 if (!page_is_ready()) {
442 show_on_init_ = true; 466 show_on_init_ = true;
443 return; 467 return;
444 } 468 }
445 469
446 if (oobe_ui_) { 470 if (oobe_ui_) {
447 // Shows new user sign-in for OOBE. 471 // Shows new user sign-in for OOBE.
448 OnShowAddUser(); 472 OnShowAddUser(email_);
449 } else { 473 } else {
450 // Populates account picker. Animation is turned off for now until we 474 // Populates account picker. Animation is turned off for now until we
451 // figure out how to make it fast enough. 475 // figure out how to make it fast enough.
452 delegate_->HandleGetUsers(); 476 delegate_->HandleGetUsers();
453 477
454 // Reset Caps Lock state when login screen is shown. 478 // Reset Caps Lock state when login screen is shown.
455 input_method::InputMethodManager::Get() 479 input_method::InputMethodManager::Get()
456 ->GetImeKeyboard() 480 ->GetImeKeyboard()
457 ->SetCapsLockEnabled(false); 481 ->SetCapsLockEnabled(false);
458 482
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 } 705 }
682 } 706 }
683 707
684 gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { 708 gfx::NativeWindow SigninScreenHandler::GetNativeWindow() {
685 if (native_window_delegate_) 709 if (native_window_delegate_)
686 return native_window_delegate_->GetNativeWindow(); 710 return native_window_delegate_->GetNativeWindow();
687 return NULL; 711 return NULL;
688 } 712 }
689 713
690 void SigninScreenHandler::RegisterMessages() { 714 void SigninScreenHandler::RegisterMessages() {
715 AddCallback("usingSAMLAPI", &SigninScreenHandler::HandleUsingSAMLAPI);
716 AddCallback("scrapedPasswordCount",
717 &SigninScreenHandler::HandleScrapedPasswordCount);
718 AddCallback("scrapedPasswordVerificationFailed",
719 &SigninScreenHandler::HandleScrapedPasswordVerificationFailed);
691 AddCallback("authenticateUser", &SigninScreenHandler::HandleAuthenticateUser); 720 AddCallback("authenticateUser", &SigninScreenHandler::HandleAuthenticateUser);
692 AddCallback("attemptUnlock", &SigninScreenHandler::HandleAttemptUnlock); 721 AddCallback("attemptUnlock", &SigninScreenHandler::HandleAttemptUnlock);
722 AddCallback("completeLogin", &SigninScreenHandler::HandleCompleteLogin);
723 AddCallback("completeAuthentication",
724 &SigninScreenHandler::HandleCompleteAuthentication);
693 AddCallback("getUsers", &SigninScreenHandler::HandleGetUsers); 725 AddCallback("getUsers", &SigninScreenHandler::HandleGetUsers);
694 AddCallback("launchDemoUser", &SigninScreenHandler::HandleLaunchDemoUser); 726 AddCallback("launchDemoUser", &SigninScreenHandler::HandleLaunchDemoUser);
695 AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito); 727 AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito);
696 AddCallback("showLocallyManagedUserCreationScreen", 728 AddCallback("showLocallyManagedUserCreationScreen",
697 &SigninScreenHandler::HandleShowLocallyManagedUserCreationScreen); 729 &SigninScreenHandler::HandleShowLocallyManagedUserCreationScreen);
698 AddCallback("launchPublicAccount", 730 AddCallback("launchPublicAccount",
699 &SigninScreenHandler::HandleLaunchPublicAccount); 731 &SigninScreenHandler::HandleLaunchPublicAccount);
700 AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin); 732 AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin);
701 AddCallback("rebootSystem", &SigninScreenHandler::HandleRebootSystem); 733 AddCallback("rebootSystem", &SigninScreenHandler::HandleRebootSystem);
702 AddRawCallback("showAddUser", &SigninScreenHandler::HandleShowAddUser); 734 AddRawCallback("showAddUser", &SigninScreenHandler::HandleShowAddUser);
703 AddCallback("shutdownSystem", &SigninScreenHandler::HandleShutdownSystem); 735 AddCallback("shutdownSystem", &SigninScreenHandler::HandleShutdownSystem);
704 AddCallback("loadWallpaper", &SigninScreenHandler::HandleLoadWallpaper); 736 AddCallback("loadWallpaper", &SigninScreenHandler::HandleLoadWallpaper);
705 AddCallback("removeUser", &SigninScreenHandler::HandleRemoveUser); 737 AddCallback("removeUser", &SigninScreenHandler::HandleRemoveUser);
706 AddCallback("toggleEnrollmentScreen", 738 AddCallback("toggleEnrollmentScreen",
707 &SigninScreenHandler::HandleToggleEnrollmentScreen); 739 &SigninScreenHandler::HandleToggleEnrollmentScreen);
708 AddCallback("toggleKioskEnableScreen", 740 AddCallback("toggleKioskEnableScreen",
709 &SigninScreenHandler::HandleToggleKioskEnableScreen); 741 &SigninScreenHandler::HandleToggleKioskEnableScreen);
710 AddCallback("createAccount", &SigninScreenHandler::HandleCreateAccount); 742 AddCallback("createAccount", &SigninScreenHandler::HandleCreateAccount);
711 AddCallback("accountPickerReady", 743 AddCallback("accountPickerReady",
712 &SigninScreenHandler::HandleAccountPickerReady); 744 &SigninScreenHandler::HandleAccountPickerReady);
713 AddCallback("wallpaperReady", &SigninScreenHandler::HandleWallpaperReady); 745 AddCallback("wallpaperReady", &SigninScreenHandler::HandleWallpaperReady);
746 AddCallback("loginWebuiReady", &SigninScreenHandler::HandleLoginWebuiReady);
714 AddCallback("signOutUser", &SigninScreenHandler::HandleSignOutUser); 747 AddCallback("signOutUser", &SigninScreenHandler::HandleSignOutUser);
715 AddCallback("openProxySettings", 748 AddCallback("openProxySettings",
716 &SigninScreenHandler::HandleOpenProxySettings); 749 &SigninScreenHandler::HandleOpenProxySettings);
717 AddCallback("loginVisible", &SigninScreenHandler::HandleLoginVisible); 750 AddCallback("loginVisible", &SigninScreenHandler::HandleLoginVisible);
718 AddCallback("cancelPasswordChangedFlow", 751 AddCallback("cancelPasswordChangedFlow",
719 &SigninScreenHandler::HandleCancelPasswordChangedFlow); 752 &SigninScreenHandler::HandleCancelPasswordChangedFlow);
720 AddCallback("cancelUserAdding", 753 AddCallback("cancelUserAdding",
721 &SigninScreenHandler::HandleCancelUserAdding); 754 &SigninScreenHandler::HandleCancelUserAdding);
722 AddCallback("migrateUserData", &SigninScreenHandler::HandleMigrateUserData); 755 AddCallback("migrateUserData", &SigninScreenHandler::HandleMigrateUserData);
723 AddCallback("resyncUserData", &SigninScreenHandler::HandleResyncUserData); 756 AddCallback("resyncUserData", &SigninScreenHandler::HandleResyncUserData);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 core_oobe_actor_->ClearUserPodPassword(); 788 core_oobe_actor_->ClearUserPodPassword();
756 } 789 }
757 790
758 void SigninScreenHandler::RefocusCurrentPod() { 791 void SigninScreenHandler::RefocusCurrentPod() {
759 core_oobe_actor_->RefocusCurrentPod(); 792 core_oobe_actor_->RefocusCurrentPod();
760 } 793 }
761 794
762 void SigninScreenHandler::OnUserRemoved(const std::string& username) { 795 void SigninScreenHandler::OnUserRemoved(const std::string& username) {
763 CallJS("login.AccountPickerScreen.removeUser", username); 796 CallJS("login.AccountPickerScreen.removeUser", username);
764 if (delegate_->GetUsers().empty()) 797 if (delegate_->GetUsers().empty())
765 OnShowAddUser(); 798 OnShowAddUser("");
766 } 799 }
767 800
768 void SigninScreenHandler::OnUserImageChanged(const User& user) { 801 void SigninScreenHandler::OnUserImageChanged(const User& user) {
769 if (page_is_ready()) 802 if (page_is_ready())
770 CallJS("login.AccountPickerScreen.updateUserImage", user.email()); 803 CallJS("login.AccountPickerScreen.updateUserImage", user.email());
771 } 804 }
772 805
773 void SigninScreenHandler::OnPreferencesChanged() { 806 void SigninScreenHandler::OnPreferencesChanged() {
774 // Make sure that one of the login UI is fully functional now, otherwise 807 // Make sure that one of the login UI is fully functional now, otherwise
775 // preferences update would be picked up next time it will be shown. 808 // preferences update would be picked up next time it will be shown.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 NOTREACHED() << "Unknown sign in error"; 843 NOTREACHED() << "Unknown sign in error";
811 break; 844 break;
812 } 845 }
813 } 846 }
814 847
815 void SigninScreenHandler::ShowSigninUI(const std::string& email) { 848 void SigninScreenHandler::ShowSigninUI(const std::string& email) {
816 core_oobe_actor_->ShowSignInUI(email); 849 core_oobe_actor_->ShowSignInUI(email);
817 } 850 }
818 851
819 void SigninScreenHandler::ShowGaiaPasswordChanged(const std::string& username) { 852 void SigninScreenHandler::ShowGaiaPasswordChanged(const std::string& username) {
820 gaia_screen_handler_->PasswordChangedFor(username); 853 email_ = username;
821 gaia_screen_handler_->PopulateEmail(username); 854 password_changed_for_.insert(email_);
822 core_oobe_actor_->ShowSignInUI(username); 855 core_oobe_actor_->ShowSignInUI(email_);
823 CallJS("login.setAuthType", 856 CallJS("login.setAuthType",
824 username, 857 username,
825 static_cast<int>(ONLINE_SIGN_IN), 858 static_cast<int>(ONLINE_SIGN_IN),
826 base::StringValue("")); 859 base::StringValue(""));
827 } 860 }
828 861
829 void SigninScreenHandler::ShowPasswordChangedDialog(bool show_password_error) { 862 void SigninScreenHandler::ShowPasswordChangedDialog(bool show_password_error) {
830 core_oobe_actor_->ShowPasswordChangedScreen(show_password_error); 863 core_oobe_actor_->ShowPasswordChangedScreen(show_password_error);
831 } 864 }
832 865
833 void SigninScreenHandler::ShowSigninScreenForCreds( 866 void SigninScreenHandler::ShowSigninScreenForCreds(
834 const std::string& username, 867 const std::string& username,
835 const std::string& password) { 868 const std::string& password) {
836 DCHECK(gaia_screen_handler_); 869 VLOG(2) << "ShowSigninScreenForCreds for user " << username
837 gaia_screen_handler_->ShowSigninScreenForCreds(username, password); 870 << ", frame_state=" << FrameState();
871
872 test_user_ = username;
873 test_pass_ = password;
874 test_expects_complete_login_ = true;
875
876 // Submit login form for test if gaia is ready. If gaia is loading, login
877 // will be attempted in HandleLoginWebuiReady after gaia is ready. Otherwise,
878 // reload gaia then follow the loading case.
879 if (FrameState() == GaiaScreenHandler::FRAME_STATE_LOADED)
880 SubmitLoginFormForTest();
881 else if (FrameState() != GaiaScreenHandler::FRAME_STATE_LOADING)
882 HandleShowAddUser(NULL);
883 }
884
885 void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) {
886 DCHECK_CURRENTLY_ON(BrowserThread::UI);
887 cookies_cleared_ = true;
888 on_clear_callback.Run();
838 } 889 }
839 890
840 void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) { 891 void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) {
841 if (key->type() == ui::ET_KEY_PRESSED && key->key_code() == ui::VKEY_CAPITAL) 892 if (key->type() == ui::ET_KEY_PRESSED && key->key_code() == ui::VKEY_CAPITAL)
842 OnCapsLockChanged(!caps_lock_enabled_); 893 OnCapsLockChanged(!caps_lock_enabled_);
843 } 894 }
844 895
845 void SigninScreenHandler::Observe(int type, 896 void SigninScreenHandler::Observe(int type,
846 const content::NotificationSource& source, 897 const content::NotificationSource& source,
847 const content::NotificationDetails& details) { 898 const content::NotificationDetails& details) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 ScreenlockBridge::LockHandler::AuthType SigninScreenHandler::GetAuthType( 969 ScreenlockBridge::LockHandler::AuthType SigninScreenHandler::GetAuthType(
919 const std::string& username) const { 970 const std::string& username) const {
920 return delegate_->GetAuthType(username); 971 return delegate_->GetAuthType(username);
921 } 972 }
922 973
923 void SigninScreenHandler::Unlock(const std::string& user_email) { 974 void SigninScreenHandler::Unlock(const std::string& user_email) {
924 DCHECK(ScreenLocker::default_screen_locker()); 975 DCHECK(ScreenLocker::default_screen_locker());
925 ScreenLocker::Hide(); 976 ScreenLocker::Hide();
926 } 977 }
927 978
928 bool SigninScreenHandler::ShouldLoadGaia() const { 979 void SigninScreenHandler::OnDnsCleared() {
929 // Fetching of the extension is not started before account picker page is 980 DCHECK_CURRENTLY_ON(BrowserThread::UI);
930 // loaded because it can affect the loading speed. 981 dns_clear_task_running_ = false;
931 // Do not load the extension for the screen locker, see crosbug.com/25018. 982 dns_cleared_ = true;
932 return !ScreenLocker::default_screen_locker() && 983 ShowSigninScreenIfReady();
933 is_account_picker_showing_first_time_;
934 } 984 }
935 985
936 // Update keyboard layout to least recently used by the user. 986 // Update keyboard layout to least recently used by the user.
937 void SigninScreenHandler::SetUserInputMethod(const std::string& username) { 987 void SigninScreenHandler::SetUserInputMethod(const std::string& username) {
938 UserManager* user_manager = UserManager::Get(); 988 UserManager* user_manager = UserManager::Get();
939 if (user_manager->IsUserLoggedIn()) { 989 if (user_manager->IsUserLoggedIn()) {
940 // We are on sign-in screen inside user session (adding new user to 990 // We are on sign-in screen inside user session (adding new user to
941 // the session or on lock screen), don't switch input methods in this case. 991 // the session or on lock screen), don't switch input methods in this case.
942 // TODO(dpolukhin): adding user and sign-in should be consistent 992 // TODO(dpolukhin): adding user and sign-in should be consistent
943 // crbug.com/292774 993 // crbug.com/292774
944 return; 994 return;
945 } 995 }
946 996
947 chromeos::input_method::InputMethodManager* const manager = 997 chromeos::input_method::InputMethodManager* const manager =
948 chromeos::input_method::InputMethodManager::Get(); 998 chromeos::input_method::InputMethodManager::Get();
949 999
950 const bool succeed = SetUserInputMethodImpl(username, manager); 1000 const bool succeed = SetUserInputMethodImpl(username, manager);
951 1001
952 // This is also a case when LRU layout is set only for a few local users, 1002 // This is also a case when LRU layout is set only for a few local users,
953 // thus others need to be switched to default locale. 1003 // thus others need to be switched to default locale.
954 // Otherwise they will end up using another user's locale to log in. 1004 // Otherwise they will end up using another user's locale to log in.
955 if (!succeed) { 1005 if (!succeed) {
956 DVLOG(0) << "SetUserInputMethod('" << username 1006 DVLOG(0) << "SetUserInputMethod('" << username
957 << "'): failed to set user layout. Switching to default."; 1007 << "'): failed to set user layout. Switching to default.";
958 1008
959 manager->SetInputMethodLoginDefault(); 1009 manager->SetInputMethodLoginDefault();
960 } 1010 }
961 } 1011 }
962 1012
1013 void SigninScreenHandler::ShowSigninScreenIfReady() {
1014 LOG(WARNING) << "ShowSigninScreenIfReady() call.";
1015
1016 if (!dns_cleared_ || !cookies_cleared_ || !delegate_)
1017 return;
1018
1019 std::string active_network_path = network_state_informer_->network_path();
1020 if (gaia_silent_load_ &&
1021 (network_state_informer_->state() != NetworkStateInformer::ONLINE ||
1022 gaia_silent_load_network_ != active_network_path)) {
1023 // Network has changed. Force Gaia reload.
1024 gaia_silent_load_ = false;
1025 // Gaia page will be realoded, so focus isn't stolen anymore.
1026 focus_stolen_ = false;
1027 }
1028
1029 // Note that LoadAuthExtension clears |email_|.
1030 if (email_.empty())
1031 delegate_->LoadSigninWallpaper();
1032 else
1033 delegate_->LoadWallpaper(email_);
1034
1035 // Set Least Recently Used input method for the user.
1036 if (!email_.empty())
1037 SetUserInputMethod(email_);
1038
1039 LoadAuthExtension(!gaia_silent_load_, false, false);
1040 UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL);
1041
1042 if (gaia_silent_load_) {
1043 // The variable is assigned to false because silently loaded Gaia page was
1044 // used.
1045 gaia_silent_load_ = false;
1046 if (focus_stolen_)
1047 HandleLoginWebuiReady();
1048 }
1049
1050 UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE);
1051 }
1052
1053 void SigninScreenHandler::LoadAuthExtension(
1054 bool force, bool silent_load, bool offline) {
1055 GaiaContext context;
1056 context.force_reload = force;
1057 context.is_local = offline;
1058 context.password_changed =
1059 !email_.empty() && password_changed_for_.count(email_);
1060 if (delegate_)
1061 context.show_users = delegate_->IsShowUsers();
1062 context.use_offline = offline;
1063 if (delegate_)
1064 context.has_users = !delegate_->GetUsers().empty();
1065 context.email = email_;
1066
1067 email_.clear();
1068
1069 DCHECK(gaia_screen_handler_);
1070 gaia_screen_handler_->LoadGaia(context);
1071 }
963 1072
964 void SigninScreenHandler::UserSettingsChanged() { 1073 void SigninScreenHandler::UserSettingsChanged() {
965 DCHECK(gaia_screen_handler_); 1074 DCHECK(gaia_screen_handler_);
966 GaiaContext context; 1075 GaiaContext context;
967 if (delegate_) 1076 if (delegate_)
968 context.has_users = !delegate_->GetUsers().empty(); 1077 context.has_users = !delegate_->GetUsers().empty();
969 gaia_screen_handler_->UpdateGaia(context); 1078 gaia_screen_handler_->UpdateGaia(context);
970 UpdateAddButtonStatus(); 1079 UpdateAddButtonStatus();
971 } 1080 }
972 1081
973 void SigninScreenHandler::UpdateAddButtonStatus() { 1082 void SigninScreenHandler::UpdateAddButtonStatus() {
974 CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus", 1083 CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus",
975 AllWhitelistedUsersPresent()); 1084 AllWhitelistedUsersPresent());
976 } 1085 }
977 1086
1087 void SigninScreenHandler::HandleUsingSAMLAPI() {
1088 SetSAMLPrincipalsAPIUsed(true);
1089 }
1090
1091 void SigninScreenHandler::HandleScrapedPasswordCount(int password_count) {
1092 SetSAMLPrincipalsAPIUsed(false);
1093 // Use a histogram that has 11 buckets, one for each of the values in [0, 9]
1094 // and an overflow bucket at the end.
1095 UMA_HISTOGRAM_ENUMERATION(
1096 "ChromeOS.SAML.Scraping.PasswordCount", std::min(password_count, 10), 11);
1097 if (password_count == 0)
1098 HandleScrapedPasswordVerificationFailed();
1099 }
1100
1101 void SigninScreenHandler::HandleScrapedPasswordVerificationFailed() {
1102 RecordSAMLScrapingVerificationResultInHistogram(false);
1103 }
1104
1105 void SigninScreenHandler::HandleCompleteLogin(const std::string& typed_email,
1106 const std::string& password,
1107 bool using_saml) {
1108 if (!delegate_)
1109 return;
1110
1111 if (using_saml && !using_saml_api_)
1112 RecordSAMLScrapingVerificationResultInHistogram(true);
1113
1114 const std::string sanitized_email = gaia::SanitizeEmail(typed_email);
1115 delegate_->SetDisplayEmail(sanitized_email);
1116 UserContext user_context(sanitized_email);
1117 user_context.SetKey(Key(password));
1118 user_context.SetAuthFlow(using_saml ?
1119 UserContext::AUTH_FLOW_GAIA_WITH_SAML :
1120 UserContext::AUTH_FLOW_GAIA_WITHOUT_SAML);
1121 delegate_->CompleteLogin(user_context);
1122
1123 if (test_expects_complete_login_) {
1124 VLOG(2) << "Complete test login for " << typed_email
1125 << ", requested=" << test_user_;
1126
1127 test_expects_complete_login_ = false;
1128 test_user_.clear();
1129 test_pass_.clear();
1130 }
1131 }
1132
1133 void SigninScreenHandler::HandleCompleteAuthentication(
1134 const std::string& email,
1135 const std::string& password,
1136 const std::string& auth_code) {
1137 if (!delegate_)
1138 return;
1139 delegate_->SetDisplayEmail(gaia::SanitizeEmail(email));
1140 UserContext user_context(email);
1141 user_context.SetKey(Key(password));
1142 user_context.SetAuthCode(auth_code);
1143 delegate_->CompleteLogin(user_context);
1144 }
1145
978 void SigninScreenHandler::HandleAuthenticateUser(const std::string& username, 1146 void SigninScreenHandler::HandleAuthenticateUser(const std::string& username,
979 const std::string& password) { 1147 const std::string& password) {
980 if (!delegate_) 1148 if (!delegate_)
981 return; 1149 return;
982 UserContext user_context(username); 1150 UserContext user_context(username);
983 user_context.SetKey(Key(password)); 1151 user_context.SetKey(Key(password));
984 delegate_->Login(user_context); 1152 delegate_->Login(user_context);
985 } 1153 }
986 1154
987 void SigninScreenHandler::HandleAttemptUnlock(const std::string& username) { 1155 void SigninScreenHandler::HandleAttemptUnlock(const std::string& username) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 const std::string& username) { 1198 const std::string& username) {
1031 if (delegate_) 1199 if (delegate_)
1032 delegate_->LoginAsPublicAccount(username); 1200 delegate_->LoginAsPublicAccount(username);
1033 } 1201 }
1034 1202
1035 void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { 1203 void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) {
1036 if (!delegate_ || delegate_->IsShowUsers()) { 1204 if (!delegate_ || delegate_->IsShowUsers()) {
1037 NOTREACHED(); 1205 NOTREACHED();
1038 return; 1206 return;
1039 } 1207 }
1040 std::string email; 1208 if (!args->GetString(0, &email_))
1041 args->GetString(0, &email); 1209 email_.clear();
1042
1043 gaia_screen_handler_->PopulateEmail(email);
1044 // Load auth extension. Parameters are: force reload, do not load extension in 1210 // Load auth extension. Parameters are: force reload, do not load extension in
1045 // background, use offline version. 1211 // background, use offline version.
1046 gaia_screen_handler_->LoadAuthExtension(true, false, true); 1212 LoadAuthExtension(true, false, true);
1047 UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL); 1213 UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL);
1048 } 1214 }
1049 1215
1050 void SigninScreenHandler::HandleShutdownSystem() { 1216 void SigninScreenHandler::HandleShutdownSystem() {
1051 ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown(); 1217 ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown();
1052 } 1218 }
1053 1219
1054 void SigninScreenHandler::HandleLoadWallpaper(const std::string& email) { 1220 void SigninScreenHandler::HandleLoadWallpaper(const std::string& email) {
1055 if (delegate_) 1221 if (delegate_)
1056 delegate_->LoadWallpaper(email); 1222 delegate_->LoadWallpaper(email);
(...skipping 12 matching lines...) Expand all
1069 1235
1070 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { 1236 void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) {
1071 TRACE_EVENT_ASYNC_STEP_INTO0("ui", 1237 TRACE_EVENT_ASYNC_STEP_INTO0("ui",
1072 "ShowLoginWebUI", 1238 "ShowLoginWebUI",
1073 LoginDisplayHostImpl::kShowLoginWebUIid, 1239 LoginDisplayHostImpl::kShowLoginWebUIid,
1074 "ShowAddUser"); 1240 "ShowAddUser");
1075 std::string email; 1241 std::string email;
1076 // |args| can be null if it's OOBE. 1242 // |args| can be null if it's OOBE.
1077 if (args) 1243 if (args)
1078 args->GetString(0, &email); 1244 args->GetString(0, &email);
1079 gaia_screen_handler_->PopulateEmail(email); 1245 OnShowAddUser(email);
1080 OnShowAddUser();
1081 } 1246 }
1082 1247
1083 void SigninScreenHandler::HandleToggleEnrollmentScreen() { 1248 void SigninScreenHandler::HandleToggleEnrollmentScreen() {
1084 if (delegate_) 1249 if (delegate_)
1085 delegate_->ShowEnterpriseEnrollmentScreen(); 1250 delegate_->ShowEnterpriseEnrollmentScreen();
1086 } 1251 }
1087 1252
1088 void SigninScreenHandler::HandleToggleKioskEnableScreen() { 1253 void SigninScreenHandler::HandleToggleKioskEnableScreen() {
1089 policy::BrowserPolicyConnectorChromeOS* connector = 1254 policy::BrowserPolicyConnectorChromeOS* connector =
1090 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 1255 g_browser_process->platform_part()->browser_policy_connector_chromeos();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 } 1294 }
1130 1295
1131 PrefService* prefs = g_browser_process->local_state(); 1296 PrefService* prefs = g_browser_process->local_state();
1132 if (prefs->GetBoolean(prefs::kFactoryResetRequested)) { 1297 if (prefs->GetBoolean(prefs::kFactoryResetRequested)) {
1133 if (core_oobe_actor_) 1298 if (core_oobe_actor_)
1134 core_oobe_actor_->ShowDeviceResetScreen(); 1299 core_oobe_actor_->ShowDeviceResetScreen();
1135 return; 1300 return;
1136 } 1301 }
1137 1302
1138 is_account_picker_showing_first_time_ = true; 1303 is_account_picker_showing_first_time_ = true;
1139 gaia_screen_handler_->MaybePreloadAuthExtension(); 1304 MaybePreloadAuthExtension();
1140 1305
1141 if (ScreenLocker::default_screen_locker()) { 1306 if (ScreenLocker::default_screen_locker()) {
1142 ScreenLocker::default_screen_locker()->delegate()->OnLockWebUIReady(); 1307 ScreenLocker::default_screen_locker()->delegate()->OnLockWebUIReady();
1143 ScreenlockBridge::Get()->SetLockHandler(this); 1308 ScreenlockBridge::Get()->SetLockHandler(this);
1144 } 1309 }
1145 1310
1146 if (delegate_) 1311 if (delegate_)
1147 delegate_->OnSigninScreenReady(); 1312 delegate_->OnSigninScreenReady();
1148 } 1313 }
1149 1314
1150 void SigninScreenHandler::HandleWallpaperReady() { 1315 void SigninScreenHandler::HandleWallpaperReady() {
1151 if (ScreenLocker::default_screen_locker()) { 1316 if (ScreenLocker::default_screen_locker()) {
1152 ScreenLocker::default_screen_locker()->delegate()-> 1317 ScreenLocker::default_screen_locker()->delegate()->
1153 OnLockBackgroundDisplayed(); 1318 OnLockBackgroundDisplayed();
1154 } 1319 }
1155 } 1320 }
1156 1321
1322 void SigninScreenHandler::HandleLoginWebuiReady() {
1323 if (focus_stolen_) {
1324 // Set focus to the Gaia page.
1325 // TODO(altimofeev): temporary solution, until focus parameters are
1326 // implemented on the Gaia side.
1327 // Do this only once. Any subsequent call would relod GAIA frame.
1328 focus_stolen_ = false;
1329 const char code[] =
1330 "if (typeof gWindowOnLoad != 'undefined') gWindowOnLoad();";
1331 content::RenderFrameHost* frame =
1332 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
1333 frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
1334 }
1335 if (gaia_silent_load_) {
1336 focus_stolen_ = true;
1337 // Prevent focus stealing by the Gaia page.
1338 // TODO(altimofeev): temporary solution, until focus parameters are
1339 // implemented on the Gaia side.
1340 const char code[] = "var gWindowOnLoad = window.onload; "
1341 "window.onload=function() {};";
1342 content::RenderFrameHost* frame =
1343 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
1344 frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
1345 // As we could miss and window.onload could already be called, restore
1346 // focus to current pod (see crbug/175243).
1347 RefocusCurrentPod();
1348 }
1349 DCHECK(gaia_screen_handler_);
1350 gaia_screen_handler_->HandleFrameLoadingCompleted(0);
1351
1352 if (test_expects_complete_login_)
1353 SubmitLoginFormForTest();
1354 }
1355
1157 void SigninScreenHandler::HandleSignOutUser() { 1356 void SigninScreenHandler::HandleSignOutUser() {
1158 if (delegate_) 1357 if (delegate_)
1159 delegate_->Signout(); 1358 delegate_->Signout();
1160 } 1359 }
1161 1360
1162 void SigninScreenHandler::HandleCreateAccount() { 1361 void SigninScreenHandler::HandleCreateAccount() {
1163 if (delegate_) 1362 if (delegate_)
1164 delegate_->CreateAccount(); 1363 delegate_->CreateAccount();
1165 } 1364 }
1166 1365
(...skipping 13 matching lines...) Expand all
1180 content::NotificationService::NoDetails()); 1379 content::NotificationService::NoDetails());
1181 TRACE_EVENT_ASYNC_END0( 1380 TRACE_EVENT_ASYNC_END0(
1182 "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid); 1381 "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid);
1183 } 1382 }
1184 webui_visible_ = true; 1383 webui_visible_ = true;
1185 if (preferences_changed_delayed_) 1384 if (preferences_changed_delayed_)
1186 OnPreferencesChanged(); 1385 OnPreferencesChanged();
1187 } 1386 }
1188 1387
1189 void SigninScreenHandler::HandleCancelPasswordChangedFlow() { 1388 void SigninScreenHandler::HandleCancelPasswordChangedFlow() {
1190 gaia_screen_handler_->StartClearingCookies( 1389 StartClearingCookies(base::Bind(
1191 base::Bind(&SigninScreenHandler::CancelPasswordChangedFlowInternal, 1390 &SigninScreenHandler::CancelPasswordChangedFlowInternal,
1192 weak_factory_.GetWeakPtr())); 1391 weak_factory_.GetWeakPtr()));
1193 } 1392 }
1194 1393
1195 void SigninScreenHandler::HandleCancelUserAdding() { 1394 void SigninScreenHandler::HandleCancelUserAdding() {
1196 if (delegate_) 1395 if (delegate_)
1197 delegate_->CancelUserAdding(); 1396 delegate_->CancelUserAdding();
1198 } 1397 }
1199 1398
1200 void SigninScreenHandler::HandleMigrateUserData( 1399 void SigninScreenHandler::HandleMigrateUserData(
1201 const std::string& old_password) { 1400 const std::string& old_password) {
1202 if (delegate_) 1401 if (delegate_)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 "login.GaiaSigninScreen.setAuthenticatedUserEmail", 1460 "login.GaiaSigninScreen.setAuthenticatedUserEmail",
1262 attempt_token), 1461 attempt_token),
1263 Profile::FromWebUI(web_ui())->GetRequestContext())); 1462 Profile::FromWebUI(web_ui())->GetRequestContext()));
1264 } 1463 }
1265 1464
1266 void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id, 1465 void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id,
1267 bool diagnostic_mode) { 1466 bool diagnostic_mode) {
1268 delegate_->LoginAsKioskApp(app_id, diagnostic_mode); 1467 delegate_->LoginAsKioskApp(app_id, diagnostic_mode);
1269 } 1468 }
1270 1469
1470 void SigninScreenHandler::StartClearingDnsCache() {
1471 if (dns_clear_task_running_ || !g_browser_process->io_thread())
1472 return;
1473
1474 dns_cleared_ = false;
1475 BrowserThread::PostTaskAndReply(
1476 BrowserThread::IO, FROM_HERE,
1477 base::Bind(&ClearDnsCache, g_browser_process->io_thread()),
1478 base::Bind(&SigninScreenHandler::OnDnsCleared,
1479 weak_factory_.GetWeakPtr()));
1480 dns_clear_task_running_ = true;
1481 }
1482
1483 void SigninScreenHandler::StartClearingCookies(
1484 const base::Closure& on_clear_callback) {
1485 cookies_cleared_ = false;
1486 ProfileHelper* profile_helper =
1487 g_browser_process->platform_part()->profile_helper();
1488 LOG_ASSERT(
1489 Profile::FromWebUI(web_ui()) == profile_helper->GetSigninProfile());
1490 profile_helper->ClearSigninProfile(base::Bind(
1491 &SigninScreenHandler::OnCookiesCleared,
1492 weak_factory_.GetWeakPtr(), on_clear_callback));
1493 }
1494
1495 void SigninScreenHandler::MaybePreloadAuthExtension() {
1496 LOG(WARNING) << "MaybePreloadAuthExtension() call.";
1497
1498 // Fetching of the extension is not started before account picker page is
1499 // loaded because it can affect the loading speed. Also if cookies clearing
1500 // was initiated or |dns_clear_task_running_| then auth extension showing has
1501 // already been initiated and preloading is senseless.
1502 // Do not load the extension for the screen locker, see crosbug.com/25018.
1503 if (is_account_picker_showing_first_time_ &&
1504 !gaia_silent_load_ &&
1505 !ScreenLocker::default_screen_locker() &&
1506 !cookies_cleared_ &&
1507 !dns_clear_task_running_ &&
1508 network_state_informer_->state() == NetworkStateInformer::ONLINE) {
1509 gaia_silent_load_ = true;
1510 gaia_silent_load_network_ = network_state_informer_->network_path();
1511 LoadAuthExtension(true, true, false);
1512 }
1513 }
1514
1271 bool SigninScreenHandler::AllWhitelistedUsersPresent() { 1515 bool SigninScreenHandler::AllWhitelistedUsersPresent() {
1272 CrosSettings* cros_settings = CrosSettings::Get(); 1516 CrosSettings* cros_settings = CrosSettings::Get();
1273 bool allow_new_user = false; 1517 bool allow_new_user = false;
1274 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); 1518 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user);
1275 if (allow_new_user) 1519 if (allow_new_user)
1276 return false; 1520 return false;
1277 UserManager* user_manager = UserManager::Get(); 1521 UserManager* user_manager = UserManager::Get();
1278 const UserList& users = user_manager->GetUsers(); 1522 const UserList& users = user_manager->GetUsers();
1279 if (!delegate_ || users.size() > kMaxUsers) { 1523 if (!delegate_ || users.size() > kMaxUsers) {
1280 return false; 1524 return false;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 CrosSettings* cros_settings = CrosSettings::Get(); 1580 CrosSettings* cros_settings = CrosSettings::Get();
1337 if (!cros_settings) 1581 if (!cros_settings)
1338 return false; 1582 return false;
1339 1583
1340 // Offline login is allowed only when user pods are hidden. 1584 // Offline login is allowed only when user pods are hidden.
1341 bool show_pods; 1585 bool show_pods;
1342 cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods); 1586 cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods);
1343 return !show_pods; 1587 return !show_pods;
1344 } 1588 }
1345 1589
1590 void SigninScreenHandler::SubmitLoginFormForTest() {
1591 VLOG(2) << "Submit login form for test, user=" << test_user_;
1592
1593 std::string code;
1594 code += "document.getElementById('Email').value = '" + test_user_ + "';";
1595 code += "document.getElementById('Passwd').value = '" + test_pass_ + "';";
1596 code += "document.getElementById('signIn').click();";
1597
1598 content::RenderFrameHost* frame =
1599 LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
1600 frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
1601
1602 // Test properties are cleared in HandleCompleteLogin because the form
1603 // submission might fail and login will not be attempted after reloading
1604 // if they are cleared here.
1605 }
1606
1346 void SigninScreenHandler::ContinueKioskEnableFlow( 1607 void SigninScreenHandler::ContinueKioskEnableFlow(
1347 policy::AutoEnrollmentState state) { 1608 policy::AutoEnrollmentState state) {
1348 // Do not proceed with kiosk enable when auto enroll will be enforced. 1609 // Do not proceed with kiosk enable when auto enroll will be enforced.
1349 // TODO(xiyuan): Add an error UI feedkback so user knows what happens. 1610 // TODO(xiyuan): Add an error UI feedkback so user knows what happens.
1350 switch (state) { 1611 switch (state) {
1351 case policy::AUTO_ENROLLMENT_STATE_IDLE: 1612 case policy::AUTO_ENROLLMENT_STATE_IDLE:
1352 case policy::AUTO_ENROLLMENT_STATE_PENDING: 1613 case policy::AUTO_ENROLLMENT_STATE_PENDING:
1353 case policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR: 1614 case policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR:
1354 // Wait for the next callback. 1615 // Wait for the next callback.
1355 return; 1616 return;
1356 case policy::AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT: 1617 case policy::AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT:
1357 // Auto-enrollment is on. 1618 // Auto-enrollment is on.
1358 LOG(WARNING) << "Kiosk enable flow aborted because auto enrollment is " 1619 LOG(WARNING) << "Kiosk enable flow aborted because auto enrollment is "
1359 "going to be enforced."; 1620 "going to be enforced.";
1360 if (!kiosk_enable_flow_aborted_callback_for_test_.is_null()) 1621 if (!kiosk_enable_flow_aborted_callback_for_test_.is_null())
1361 kiosk_enable_flow_aborted_callback_for_test_.Run(); 1622 kiosk_enable_flow_aborted_callback_for_test_.Run();
1362 break; 1623 break;
1363 case policy::AUTO_ENROLLMENT_STATE_SERVER_ERROR: 1624 case policy::AUTO_ENROLLMENT_STATE_SERVER_ERROR:
1364 case policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT: 1625 case policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT:
1365 // Auto-enrollment not applicable. 1626 // Auto-enrollment not applicable.
1366 if (delegate_) 1627 if (delegate_)
1367 delegate_->ShowKioskEnableScreen(); 1628 delegate_->ShowKioskEnableScreen();
1368 break; 1629 break;
1369 } 1630 }
1370 auto_enrollment_progress_subscription_.reset(); 1631 auto_enrollment_progress_subscription_.reset();
1371 } 1632 }
1372 1633
1373 void SigninScreenHandler::OnShowAddUser() { 1634 void SigninScreenHandler::OnShowAddUser(const std::string& email) {
1635 email_ = email;
1374 is_account_picker_showing_first_time_ = false; 1636 is_account_picker_showing_first_time_ = false;
1375 DCHECK(gaia_screen_handler_); 1637
1376 gaia_screen_handler_->ShowGaia(); 1638 if (gaia_silent_load_ && email_.empty()) {
1639 dns_cleared_ = true;
1640 cookies_cleared_ = true;
1641 ShowSigninScreenIfReady();
1642 } else {
1643 StartClearingDnsCache();
1644 StartClearingCookies(base::Bind(
1645 &SigninScreenHandler::ShowSigninScreenIfReady,
1646 weak_factory_.GetWeakPtr()));
1647 }
1648 }
1649
1650 void SigninScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) {
1651 using_saml_api_ = api_used;
1652 UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used);
1377 } 1653 }
1378 1654
1379 GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const { 1655 GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const {
1380 DCHECK(gaia_screen_handler_); 1656 DCHECK(gaia_screen_handler_);
1381 return gaia_screen_handler_->frame_state(); 1657 return gaia_screen_handler_->frame_state();
1382 } 1658 }
1383 1659
1384 net::Error SigninScreenHandler::FrameError() const { 1660 net::Error SigninScreenHandler::FrameError() const {
1385 DCHECK(gaia_screen_handler_); 1661 DCHECK(gaia_screen_handler_);
1386 return gaia_screen_handler_->frame_error(); 1662 return gaia_screen_handler_->frame_error();
1387 } 1663 }
1388 1664
1389 void SigninScreenHandler::OnCapsLockChanged(bool enabled) { 1665 void SigninScreenHandler::OnCapsLockChanged(bool enabled) {
1390 caps_lock_enabled_ = enabled; 1666 caps_lock_enabled_ = enabled;
1391 if (page_is_ready()) 1667 if (page_is_ready())
1392 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); 1668 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_);
1393 } 1669 }
1394 1670
1395 } // namespace chromeos 1671 } // namespace chromeos
OLDNEW
« no previous file with comments | « trunk/src/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698