| 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 |