Chromium Code Reviews| 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" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/debug/trace_event.h" | 12 #include "base/debug/trace_event.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 16 #include "base/prefs/pref_registry_simple.h" | 16 #include "base/prefs/pref_registry_simple.h" |
| 17 #include "base/prefs/pref_service.h" | 17 #include "base/prefs/pref_service.h" |
| 18 #include "base/prefs/scoped_user_pref_update.h" | 18 #include "base/prefs/scoped_user_pref_update.h" |
| 19 #include "base/strings/string16.h" | 19 #include "base/strings/string16.h" |
| 20 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
| 21 #include "base/strings/stringprintf.h" | 21 #include "base/strings/stringprintf.h" |
| 22 #include "base/strings/utf_string_conversions.h" | 22 #include "base/strings/utf_string_conversions.h" |
| 23 #include "base/sys_info.h" | |
| 23 #include "chrome/browser/browser_process.h" | 24 #include "chrome/browser/browser_process.h" |
| 24 #include "chrome/browser/browser_process_platform_part_chromeos.h" | 25 #include "chrome/browser/browser_process_platform_part_chromeos.h" |
| 25 #include "chrome/browser/browser_shutdown.h" | 26 #include "chrome/browser/browser_shutdown.h" |
| 26 #include "chrome/browser/chrome_notification_types.h" | 27 #include "chrome/browser/chrome_notification_types.h" |
| 27 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" | 28 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
| 28 #include "chrome/browser/chromeos/boot_times_loader.h" | 29 #include "chrome/browser/chromeos/boot_times_loader.h" |
| 29 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 30 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
| 30 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" | 31 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
| 31 #include "chrome/browser/chromeos/login/hwid_checker.h" | 32 #include "chrome/browser/chromeos/login/hwid_checker.h" |
| 32 #include "chrome/browser/chromeos/login/lock/screen_locker.h" | 33 #include "chrome/browser/chromeos/login/lock/screen_locker.h" |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 305 test_expects_complete_login_(false), | 306 test_expects_complete_login_(false), |
| 306 weak_factory_(this), | 307 weak_factory_(this), |
| 307 webui_visible_(false), | 308 webui_visible_(false), |
| 308 preferences_changed_delayed_(false), | 309 preferences_changed_delayed_(false), |
| 309 error_screen_actor_(error_screen_actor), | 310 error_screen_actor_(error_screen_actor), |
| 310 core_oobe_actor_(core_oobe_actor), | 311 core_oobe_actor_(core_oobe_actor), |
| 311 is_first_update_state_call_(true), | 312 is_first_update_state_call_(true), |
| 312 offline_login_active_(false), | 313 offline_login_active_(false), |
| 313 last_network_state_(NetworkStateInformer::UNKNOWN), | 314 last_network_state_(NetworkStateInformer::UNKNOWN), |
| 314 has_pending_auth_ui_(false), | 315 has_pending_auth_ui_(false), |
| 315 caps_lock_enabled_(false), | 316 caps_lock_enabled_(chromeos::input_method::InputMethodManager::Get() |
| 317 ->GetImeKeyboard() | |
| 318 ->CapsLockIsEnabled()), | |
| 316 gaia_screen_handler_(gaia_screen_handler) { | 319 gaia_screen_handler_(gaia_screen_handler) { |
| 317 DCHECK(network_state_informer_.get()); | 320 DCHECK(network_state_informer_.get()); |
| 318 DCHECK(error_screen_actor_); | 321 DCHECK(error_screen_actor_); |
| 319 DCHECK(core_oobe_actor_); | 322 DCHECK(core_oobe_actor_); |
| 320 DCHECK(gaia_screen_handler_); | 323 DCHECK(gaia_screen_handler_); |
| 321 gaia_screen_handler_->SetSigninScreenHandler(this); | 324 gaia_screen_handler_->SetSigninScreenHandler(this); |
| 322 network_state_informer_->AddObserver(this); | 325 network_state_informer_->AddObserver(this); |
| 323 allow_new_user_subscription_ = CrosSettings::Get()->AddSettingsObserver( | 326 allow_new_user_subscription_ = CrosSettings::Get()->AddSettingsObserver( |
| 324 kAccountsPrefAllowNewUser, | 327 kAccountsPrefAllowNewUser, |
| 325 base::Bind(&SigninScreenHandler::UserSettingsChanged, | 328 base::Bind(&SigninScreenHandler::UserSettingsChanged, |
| 326 base::Unretained(this))); | 329 base::Unretained(this))); |
| 327 allow_guest_subscription_ = CrosSettings::Get()->AddSettingsObserver( | 330 allow_guest_subscription_ = CrosSettings::Get()->AddSettingsObserver( |
| 328 kAccountsPrefAllowGuest, | 331 kAccountsPrefAllowGuest, |
| 329 base::Bind(&SigninScreenHandler::UserSettingsChanged, | 332 base::Bind(&SigninScreenHandler::UserSettingsChanged, |
| 330 base::Unretained(this))); | 333 base::Unretained(this))); |
| 331 | 334 |
| 332 registrar_.Add(this, | 335 registrar_.Add(this, |
| 333 chrome::NOTIFICATION_AUTH_NEEDED, | 336 chrome::NOTIFICATION_AUTH_NEEDED, |
| 334 content::NotificationService::AllSources()); | 337 content::NotificationService::AllSources()); |
| 335 registrar_.Add(this, | 338 registrar_.Add(this, |
| 336 chrome::NOTIFICATION_AUTH_SUPPLIED, | 339 chrome::NOTIFICATION_AUTH_SUPPLIED, |
| 337 content::NotificationService::AllSources()); | 340 content::NotificationService::AllSources()); |
| 338 registrar_.Add(this, | 341 registrar_.Add(this, |
| 339 chrome::NOTIFICATION_AUTH_CANCELLED, | 342 chrome::NOTIFICATION_AUTH_CANCELLED, |
| 340 content::NotificationService::AllSources()); | 343 content::NotificationService::AllSources()); |
| 344 | |
| 345 // Since keyboard handling differs between ChromeOS and Linux we need to | |
| 346 // use different observers depending on the two platforms. | |
| 347 if (base::SysInfo::IsRunningOnChromeOS()) { | |
| 348 chromeos::input_method::ImeKeyboard* keyboard = | |
| 349 chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); | |
| 350 keyboard->AddObserver(this); | |
| 351 } else { | |
| 352 ash::Shell::GetInstance()->PrependPreTargetHandler(this); | |
| 353 } | |
| 341 } | 354 } |
| 342 | 355 |
| 343 SigninScreenHandler::~SigninScreenHandler() { | 356 SigninScreenHandler::~SigninScreenHandler() { |
| 344 ash::Shell::GetInstance()->RemovePreTargetHandler(this); | 357 if (base::SysInfo::IsRunningOnChromeOS()) { |
| 358 chromeos::input_method::ImeKeyboard* keyboard = | |
| 359 chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard(); | |
| 360 keyboard->RemoveObserver(this); | |
| 361 } else { | |
| 362 ash::Shell::GetInstance()->RemovePreTargetHandler(this); | |
| 363 } | |
| 345 weak_factory_.InvalidateWeakPtrs(); | 364 weak_factory_.InvalidateWeakPtrs(); |
| 346 if (delegate_) | 365 if (delegate_) |
| 347 delegate_->SetWebUIHandler(NULL); | 366 delegate_->SetWebUIHandler(NULL); |
| 348 network_state_informer_->RemoveObserver(this); | 367 network_state_informer_->RemoveObserver(this); |
| 349 } | 368 } |
| 350 | 369 |
| 351 void SigninScreenHandler::DeclareLocalizedValues( | 370 void SigninScreenHandler::DeclareLocalizedValues( |
| 352 LocalizedValuesBuilder* builder) { | 371 LocalizedValuesBuilder* builder) { |
| 353 builder->Add("passwordHint", IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT); | 372 builder->Add("passwordHint", IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT); |
| 354 builder->Add("podMenuButtonAccessibleName", | 373 builder->Add("podMenuButtonAccessibleName", |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 719 void SigninScreenHandler::ReloadGaiaScreen() { | 738 void SigninScreenHandler::ReloadGaiaScreen() { |
| 720 gaia_screen_handler_->ReloadGaia(); | 739 gaia_screen_handler_->ReloadGaia(); |
| 721 } | 740 } |
| 722 | 741 |
| 723 void SigninScreenHandler::Initialize() { | 742 void SigninScreenHandler::Initialize() { |
| 724 // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed), | 743 // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed), |
| 725 // don't do anything, just return. | 744 // don't do anything, just return. |
| 726 if (!delegate_) | 745 if (!delegate_) |
| 727 return; | 746 return; |
| 728 | 747 |
| 729 // Make sure the event is processed by this before the IME. | |
| 730 ash::Shell::GetInstance()->PrependPreTargetHandler(this); | |
| 731 | |
| 732 if (show_on_init_) { | 748 if (show_on_init_) { |
| 733 show_on_init_ = false; | 749 show_on_init_ = false; |
| 734 ShowImpl(); | 750 ShowImpl(); |
| 735 } | 751 } |
| 736 } | 752 } |
| 737 | 753 |
| 738 gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { | 754 gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { |
| 739 if (native_window_delegate_) | 755 if (native_window_delegate_) |
| 740 return native_window_delegate_->GetNativeWindow(); | 756 return native_window_delegate_->GetNativeWindow(); |
| 741 return NULL; | 757 return NULL; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 966 HandleShowAddUser(NULL); | 982 HandleShowAddUser(NULL); |
| 967 } | 983 } |
| 968 | 984 |
| 969 void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) { | 985 void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) { |
| 970 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 986 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 971 cookies_cleared_ = true; | 987 cookies_cleared_ = true; |
| 972 on_clear_callback.Run(); | 988 on_clear_callback.Run(); |
| 973 } | 989 } |
| 974 | 990 |
| 975 void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) { | 991 void SigninScreenHandler::OnKeyEvent(ui::KeyEvent* key) { |
| 976 if (key->type() == ui::ET_KEY_PRESSED && | 992 if (key->type() == ui::ET_KEY_PRESSED && key->key_code() == ui::VKEY_CAPITAL) |
| 977 key->key_code() == ui::VKEY_CAPITAL) { | 993 OnCapsLockChanged(!caps_lock_enabled_); |
| 978 caps_lock_enabled_ = !caps_lock_enabled_; | |
| 979 if (page_is_ready()) | |
| 980 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); | |
| 981 } | |
| 982 } | 994 } |
| 983 | 995 |
| 984 void SigninScreenHandler::Observe(int type, | 996 void SigninScreenHandler::Observe(int type, |
| 985 const content::NotificationSource& source, | 997 const content::NotificationSource& source, |
| 986 const content::NotificationDetails& details) { | 998 const content::NotificationDetails& details) { |
| 987 switch (type) { | 999 switch (type) { |
| 988 case chrome::NOTIFICATION_AUTH_NEEDED: { | 1000 case chrome::NOTIFICATION_AUTH_NEEDED: { |
| 989 has_pending_auth_ui_ = true; | 1001 has_pending_auth_ui_ = true; |
| 990 break; | 1002 break; |
| 991 } | 1003 } |
| (...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1784 GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const { | 1796 GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const { |
| 1785 DCHECK(gaia_screen_handler_); | 1797 DCHECK(gaia_screen_handler_); |
| 1786 return gaia_screen_handler_->frame_state(); | 1798 return gaia_screen_handler_->frame_state(); |
| 1787 } | 1799 } |
| 1788 | 1800 |
| 1789 net::Error SigninScreenHandler::FrameError() const { | 1801 net::Error SigninScreenHandler::FrameError() const { |
| 1790 DCHECK(gaia_screen_handler_); | 1802 DCHECK(gaia_screen_handler_); |
| 1791 return gaia_screen_handler_->frame_error(); | 1803 return gaia_screen_handler_->frame_error(); |
| 1792 } | 1804 } |
| 1793 | 1805 |
| 1806 void SigninScreenHandler::OnCapsLockChanged(bool enabled) { | |
| 1807 caps_lock_enabled_ = enabled; | |
| 1808 if (page_is_ready()) | |
| 1809 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); | |
|
ygorshenin1
2014/05/20 16:37:57
nit: could you please add to the Initialize() meth
dzhioev (left Google)
2014/05/20 16:53:11
We reset Caps Lock state in ShowImpl.
| |
| 1810 } | |
| 1811 | |
| 1794 } // namespace chromeos | 1812 } // namespace chromeos |
| OLD | NEW |