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