OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |