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

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

Powered by Google App Engine
This is Rietveld 408576698