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