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 |