OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/chromeos/login/wizard_controller.h" | 5 #include "chrome/browser/chromeos/login/wizard_controller.h" |
6 | 6 |
7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
8 #include <signal.h> | 8 #include <signal.h> |
9 #include <sys/types.h> | 9 #include <sys/types.h> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... | |
25 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 25 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
26 #include "chrome/browser/chromeos/language_preferences.h" | 26 #include "chrome/browser/chromeos/language_preferences.h" |
27 #include "chrome/browser/chromeos/login/account_screen.h" | 27 #include "chrome/browser/chromeos/login/account_screen.h" |
28 #include "chrome/browser/chromeos/login/apply_services_customization.h" | 28 #include "chrome/browser/chromeos/login/apply_services_customization.h" |
29 #include "chrome/browser/chromeos/login/background_view.h" | 29 #include "chrome/browser/chromeos/login/background_view.h" |
30 #include "chrome/browser/chromeos/login/eula_view.h" | 30 #include "chrome/browser/chromeos/login/eula_view.h" |
31 #include "chrome/browser/chromeos/login/existing_user_controller.h" | 31 #include "chrome/browser/chromeos/login/existing_user_controller.h" |
32 #include "chrome/browser/chromeos/login/helper.h" | 32 #include "chrome/browser/chromeos/login/helper.h" |
33 #include "chrome/browser/chromeos/login/html_page_screen.h" | 33 #include "chrome/browser/chromeos/login/html_page_screen.h" |
34 #include "chrome/browser/chromeos/login/language_switch_menu.h" | 34 #include "chrome/browser/chromeos/login/language_switch_menu.h" |
35 #include "chrome/browser/chromeos/login/login_screen.h" | |
36 #include "chrome/browser/chromeos/login/login_utils.h" | 35 #include "chrome/browser/chromeos/login/login_utils.h" |
37 #include "chrome/browser/chromeos/login/network_screen.h" | 36 #include "chrome/browser/chromeos/login/network_screen.h" |
38 #include "chrome/browser/chromeos/login/registration_screen.h" | 37 #include "chrome/browser/chromeos/login/registration_screen.h" |
39 #include "chrome/browser/chromeos/login/rounded_rect_painter.h" | 38 #include "chrome/browser/chromeos/login/rounded_rect_painter.h" |
40 #include "chrome/browser/chromeos/login/update_screen.h" | 39 #include "chrome/browser/chromeos/login/update_screen.h" |
41 #include "chrome/browser/chromeos/login/user_image_screen.h" | 40 #include "chrome/browser/chromeos/login/user_image_screen.h" |
42 #include "chrome/browser/chromeos/login/user_manager.h" | 41 #include "chrome/browser/chromeos/login/user_manager.h" |
43 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" | 42 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" |
44 #include "chrome/browser/chromeos/wm_ipc.h" | 43 #include "chrome/browser/chromeos/wm_ipc.h" |
45 #include "chrome/browser/prefs/pref_service.h" | 44 #include "chrome/browser/prefs/pref_service.h" |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
342 GetUpdateScreen()->CancelUpdate(); | 341 GetUpdateScreen()->CancelUpdate(); |
343 } | 342 } |
344 } | 343 } |
345 | 344 |
346 chromeos::NetworkScreen* WizardController::GetNetworkScreen() { | 345 chromeos::NetworkScreen* WizardController::GetNetworkScreen() { |
347 if (!network_screen_.get()) | 346 if (!network_screen_.get()) |
348 network_screen_.reset(new chromeos::NetworkScreen(this)); | 347 network_screen_.reset(new chromeos::NetworkScreen(this)); |
349 return network_screen_.get(); | 348 return network_screen_.get(); |
350 } | 349 } |
351 | 350 |
352 chromeos::LoginScreen* WizardController::GetLoginScreen() { | |
353 if (!login_screen_.get()) | |
354 login_screen_.reset(new chromeos::LoginScreen(this)); | |
355 return login_screen_.get(); | |
356 } | |
357 | |
358 chromeos::AccountScreen* WizardController::GetAccountScreen() { | 351 chromeos::AccountScreen* WizardController::GetAccountScreen() { |
359 if (!account_screen_.get()) | 352 if (!account_screen_.get()) |
360 account_screen_.reset(new chromeos::AccountScreen(this)); | 353 account_screen_.reset(new chromeos::AccountScreen(this)); |
361 return account_screen_.get(); | 354 return account_screen_.get(); |
362 } | 355 } |
363 | 356 |
364 chromeos::UpdateScreen* WizardController::GetUpdateScreen() { | 357 chromeos::UpdateScreen* WizardController::GetUpdateScreen() { |
365 if (!update_screen_.get()) { | 358 if (!update_screen_.get()) { |
366 update_screen_.reset(new chromeos::UpdateScreen(this)); | 359 update_screen_.reset(new chromeos::UpdateScreen(this)); |
367 update_screen_->SetMaximalCurtainTime(kMaximalCurtainTimeSec); | 360 update_screen_->SetMaximalCurtainTime(kMaximalCurtainTimeSec); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
411 background_view_->SetOobeProgress(chromeos::BackgroundView::SELECT_NETWORK); | 404 background_view_->SetOobeProgress(chromeos::BackgroundView::SELECT_NETWORK); |
412 } | 405 } |
413 | 406 |
414 chromeos::ExistingUserController* WizardController::ShowLoginScreen() { | 407 chromeos::ExistingUserController* WizardController::ShowLoginScreen() { |
415 SetStatusAreaVisible(true); | 408 SetStatusAreaVisible(true); |
416 background_view_->SetOobeProgress(chromeos::BackgroundView::SIGNIN); | 409 background_view_->SetOobeProgress(chromeos::BackgroundView::SIGNIN); |
417 | 410 |
418 // Initiate services customization. | 411 // Initiate services customization. |
419 chromeos::ApplyServicesCustomization::StartIfNeeded(); | 412 chromeos::ApplyServicesCustomization::StartIfNeeded(); |
420 | 413 |
421 // When run under automation test show plain login screen. | 414 std::vector<chromeos::UserManager::User> users; |
422 if (!is_test_mode_ && | 415 if (chromeos::CrosLibrary::Get()->EnsureLoaded()) |
423 chromeos::CrosLibrary::Get()->EnsureLoaded() && | 416 users = chromeos::UserManager::Get()->GetUsers(); |
424 CommandLine::ForCurrentProcess()->HasSwitch( | |
425 switches::kEnableLoginImages)) { | |
426 std::vector<chromeos::UserManager::User> users = | |
427 chromeos::UserManager::Get()->GetUsers(); | |
428 // ExistingUserController deletes itself. | |
429 gfx::Rect screen_bounds; | |
430 background_widget_->GetBounds(&screen_bounds, true); | |
431 chromeos::ExistingUserController* controller = | |
432 new chromeos::ExistingUserController(users, screen_bounds); | |
433 controller->OwnBackground(background_widget_, background_view_); | |
434 controller->Init(); | |
435 background_widget_ = NULL; | |
436 background_view_ = NULL; | |
437 | 417 |
438 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 418 // ExistingUserController deletes itself. |
419 gfx::Rect screen_bounds; | |
420 background_widget_->GetBounds(&screen_bounds, true); | |
421 chromeos::ExistingUserController* controller = | |
422 new chromeos::ExistingUserController(users, screen_bounds); | |
423 controller->OwnBackground(background_widget_, background_view_); | |
424 controller->Init(); | |
425 background_widget_ = NULL; | |
426 background_view_ = NULL; | |
439 | 427 |
440 return controller; | 428 MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
441 } | |
442 | 429 |
443 SetCurrentScreen(GetLoginScreen()); | 430 return controller; |
444 return NULL; | |
445 } | 431 } |
446 | 432 |
447 void WizardController::ShowAccountScreen() { | 433 void WizardController::ShowAccountScreen() { |
448 VLOG(1) << "Showing create account screen."; | 434 VLOG(1) << "Showing create account screen."; |
449 SetStatusAreaVisible(true); | 435 SetStatusAreaVisible(true); |
450 SetCurrentScreen(GetAccountScreen()); | 436 SetCurrentScreen(GetAccountScreen()); |
451 } | 437 } |
452 | 438 |
453 void WizardController::ShowUpdateScreen() { | 439 void WizardController::ShowUpdateScreen() { |
454 VLOG(1) << "Showing update screen."; | 440 VLOG(1) << "Showing update screen."; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
536 local_state->RegisterBooleanPref(kEulaAccepted, false); | 522 local_state->RegisterBooleanPref(kEulaAccepted, false); |
537 // Check if the pref is already registered in case | 523 // Check if the pref is already registered in case |
538 // Preferences::RegisterUserPrefs runs before this code in the future. | 524 // Preferences::RegisterUserPrefs runs before this code in the future. |
539 if (local_state->FindPreference(prefs::kAccessibilityEnabled) == NULL) { | 525 if (local_state->FindPreference(prefs::kAccessibilityEnabled) == NULL) { |
540 local_state->RegisterBooleanPref(prefs::kAccessibilityEnabled, false); | 526 local_state->RegisterBooleanPref(prefs::kAccessibilityEnabled, false); |
541 } | 527 } |
542 } | 528 } |
543 | 529 |
544 /////////////////////////////////////////////////////////////////////////////// | 530 /////////////////////////////////////////////////////////////////////////////// |
545 // WizardController, ExitHandlers: | 531 // WizardController, ExitHandlers: |
546 void WizardController::OnLoginSignInSelected() { | |
547 // Don't show user image screen in case of automated testing. | |
548 if (is_test_mode_) { | |
549 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | |
550 return; | |
551 } | |
552 // Don't launch browser until we pass image screen. | |
553 chromeos::LoginUtils::Get()->EnableBrowserLaunch(false); | |
554 ShowUserImageScreen(); | |
555 } | |
556 | |
557 void WizardController::OnLoginGuestUser() { | |
558 // We're on the stack, so don't try and delete us now. | |
559 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | |
560 } | |
561 | |
562 void WizardController::OnLoginCreateAccount() { | |
563 ShowAccountScreen(); | |
564 } | |
565 | |
566 void WizardController::OnNetworkConnected() { | 532 void WizardController::OnNetworkConnected() { |
567 if (is_official_build_) { | 533 if (is_official_build_) { |
568 if (!IsEulaAccepted()) { | 534 if (!IsEulaAccepted()) { |
569 ShowEulaScreen(); | 535 ShowEulaScreen(); |
570 } else { | 536 } else { |
571 // Possible cases: | 537 // Possible cases: |
572 // 1. EULA was accepted, forced shutdown/reboot during update. | 538 // 1. EULA was accepted, forced shutdown/reboot during update. |
573 // 2. EULA was accepted, planned reboot after update. | 539 // 2. EULA was accepted, planned reboot after update. |
574 // Make sure that device is up-to-date. | 540 // Make sure that device is up-to-date. |
575 InitiateOOBEUpdate(); | 541 InitiateOOBEUpdate(); |
(...skipping 10 matching lines...) Expand all Loading... | |
586 } | 552 } |
587 | 553 |
588 void WizardController::OnAccountCreateBack() { | 554 void WizardController::OnAccountCreateBack() { |
589 chromeos::ExistingUserController* controller = ShowLoginScreen(); | 555 chromeos::ExistingUserController* controller = ShowLoginScreen(); |
590 if (controller) | 556 if (controller) |
591 controller->SelectNewUser(); | 557 controller->SelectNewUser(); |
592 } | 558 } |
593 | 559 |
594 void WizardController::OnAccountCreated() { | 560 void WizardController::OnAccountCreated() { |
595 chromeos::ExistingUserController* controller = ShowLoginScreen(); | 561 chromeos::ExistingUserController* controller = ShowLoginScreen(); |
596 if (controller) | 562 if (controller) |
Dmitry Polukhin
2010/12/14 14:06:18
It should be DCHECK now.
whywhat
2010/12/16 10:47:52
Done.
| |
597 controller->LoginNewUser(username_, password_); | 563 controller->LoginNewUser(username_, password_); |
598 else | |
599 Login(username_, password_); | |
600 // TODO(dpolukhin): clear password memory for real. Now it is not | 564 // TODO(dpolukhin): clear password memory for real. Now it is not |
601 // a problem because we can't extract password from the form. | 565 // a problem because we can't extract password from the form. |
602 password_.clear(); | 566 password_.clear(); |
603 } | 567 } |
604 | 568 |
605 void WizardController::OnConnectionFailed() { | 569 void WizardController::OnConnectionFailed() { |
606 // TODO(dpolukhin): show error message after login screen is displayed. | 570 // TODO(dpolukhin): show error message after login screen is displayed. |
607 ShowLoginScreen(); | 571 ShowLoginScreen(); |
608 } | 572 } |
609 | 573 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
759 // to WizardController it happens after screen is shown. | 723 // to WizardController it happens after screen is shown. |
760 if (background_view_) { | 724 if (background_view_) { |
761 background_view_->SetStatusAreaVisible(visible); | 725 background_view_->SetStatusAreaVisible(visible); |
762 } | 726 } |
763 } | 727 } |
764 | 728 |
765 void WizardController::ShowFirstScreen(const std::string& first_screen_name) { | 729 void WizardController::ShowFirstScreen(const std::string& first_screen_name) { |
766 if (first_screen_name == kNetworkScreenName) { | 730 if (first_screen_name == kNetworkScreenName) { |
767 ShowNetworkScreen(); | 731 ShowNetworkScreen(); |
768 } else if (first_screen_name == kLoginScreenName) { | 732 } else if (first_screen_name == kLoginScreenName) { |
769 // This flag is passed if we're running under automation test. | |
770 is_test_mode_ = true; | |
771 ShowLoginScreen(); | 733 ShowLoginScreen(); |
772 } else if (first_screen_name == kAccountScreenName) { | 734 } else if (first_screen_name == kAccountScreenName) { |
773 ShowAccountScreen(); | 735 ShowAccountScreen(); |
774 } else if (first_screen_name == kUpdateScreenName) { | 736 } else if (first_screen_name == kUpdateScreenName) { |
775 InitiateOOBEUpdate(); | 737 InitiateOOBEUpdate(); |
776 } else if (first_screen_name == kUserImageScreenName) { | 738 } else if (first_screen_name == kUserImageScreenName) { |
777 ShowUserImageScreen(); | 739 ShowUserImageScreen(); |
778 } else if (first_screen_name == kEulaScreenName) { | 740 } else if (first_screen_name == kEulaScreenName) { |
779 ShowEulaScreen(); | 741 ShowEulaScreen(); |
780 } else if (first_screen_name == kRegistrationScreenName) { | 742 } else if (first_screen_name == kRegistrationScreenName) { |
781 if (is_official_build_) { | 743 if (is_official_build_) { |
782 ShowRegistrationScreen(); | 744 ShowRegistrationScreen(); |
783 } else { | 745 } else { |
784 // Just proceed to image screen. | 746 // Just proceed to image screen. |
785 OnRegistrationSuccess(); | 747 OnRegistrationSuccess(); |
786 } | 748 } |
787 } else if (first_screen_name == kHTMLPageScreenName) { | 749 } else if (first_screen_name == kHTMLPageScreenName) { |
788 ShowHTMLPageScreen(); | 750 ShowHTMLPageScreen(); |
789 } else if (first_screen_name != kTestNoScreenName) { | 751 } else if (first_screen_name != kTestNoScreenName) { |
790 if (is_out_of_box_) { | 752 if (is_out_of_box_) { |
791 ShowNetworkScreen(); | 753 ShowNetworkScreen(); |
792 } else { | 754 } else { |
793 ShowLoginScreen(); | 755 ShowLoginScreen(); |
794 } | 756 } |
795 } | 757 } |
796 } | 758 } |
797 | 759 |
798 void WizardController::Login(const std::string& username, | |
799 const std::string& password) { | |
800 chromeos::LoginScreen* login = GetLoginScreen(); | |
801 if (username.empty()) | |
802 return; | |
803 login->view()->SetUsername(username); | |
804 | |
805 if (password.empty()) | |
806 return; | |
807 login->view()->SetPassword(password); | |
808 login->view()->Login(); | |
809 } | |
810 | |
811 // static | 760 // static |
812 bool WizardController::IsEulaAccepted() { | 761 bool WizardController::IsEulaAccepted() { |
813 return g_browser_process->local_state()->GetBoolean(kEulaAccepted); | 762 return g_browser_process->local_state()->GetBoolean(kEulaAccepted); |
814 } | 763 } |
815 | 764 |
816 // static | 765 // static |
817 bool WizardController::IsOobeCompleted() { | 766 bool WizardController::IsOobeCompleted() { |
818 return g_browser_process->local_state()->GetBoolean(kOobeComplete); | 767 return g_browser_process->local_state()->GetBoolean(kOobeComplete); |
819 } | 768 } |
820 | 769 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
854 DCHECK(oobe_flag_file != NULL) << kOobeCompleteFlagFilePath; | 803 DCHECK(oobe_flag_file != NULL) << kOobeCompleteFlagFilePath; |
855 if (oobe_flag_file != NULL) | 804 if (oobe_flag_file != NULL) |
856 file_util::CloseFile(oobe_flag_file); | 805 file_util::CloseFile(oobe_flag_file); |
857 } | 806 } |
858 | 807 |
859 /////////////////////////////////////////////////////////////////////////////// | 808 /////////////////////////////////////////////////////////////////////////////// |
860 // WizardController, chromeos::ScreenObserver overrides: | 809 // WizardController, chromeos::ScreenObserver overrides: |
861 void WizardController::OnExit(ExitCodes exit_code) { | 810 void WizardController::OnExit(ExitCodes exit_code) { |
862 LOG(INFO) << "Wizard screen exit code: " << exit_code; | 811 LOG(INFO) << "Wizard screen exit code: " << exit_code; |
863 switch (exit_code) { | 812 switch (exit_code) { |
864 case LOGIN_SIGN_IN_SELECTED: | |
865 OnLoginSignInSelected(); | |
866 break; | |
867 case LOGIN_GUEST_SELECTED: | |
868 OnLoginGuestUser(); | |
869 break; | |
870 case LOGIN_CREATE_ACCOUNT: | |
871 OnLoginCreateAccount(); | |
872 break; | |
873 case NETWORK_CONNECTED: | 813 case NETWORK_CONNECTED: |
874 OnNetworkConnected(); | 814 OnNetworkConnected(); |
875 break; | 815 break; |
876 case NETWORK_OFFLINE: | 816 case NETWORK_OFFLINE: |
877 OnNetworkOffline(); | 817 OnNetworkOffline(); |
878 break; | 818 break; |
879 case ACCOUNT_CREATE_BACK: | 819 case ACCOUNT_CREATE_BACK: |
880 OnAccountCreateBack(); | 820 OnAccountCreateBack(); |
881 break; | 821 break; |
882 case ACCOUNT_CREATED: | 822 case ACCOUNT_CREATED: |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
958 chromeos::input_method::EnableInputMethods( | 898 chromeos::input_method::EnableInputMethods( |
959 locale, chromeos::input_method::kKeyboardLayoutsOnly, | 899 locale, chromeos::input_method::kKeyboardLayoutsOnly, |
960 initial_input_method_id); | 900 initial_input_method_id); |
961 } | 901 } |
962 | 902 |
963 gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(size)); | 903 gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(size)); |
964 | 904 |
965 // Check whether we need to execute OOBE process. | 905 // Check whether we need to execute OOBE process. |
966 bool oobe_complete = WizardController::IsOobeCompleted(); | 906 bool oobe_complete = WizardController::IsOobeCompleted(); |
967 | 907 |
968 if (first_screen_name.empty() && | 908 if (first_screen_name.empty() && |
Dmitry Polukhin
2010/12/14 14:06:18
Also we need to check that first screen is login.
whywhat
2010/12/16 10:47:52
Done.
| |
969 oobe_complete && | 909 oobe_complete && |
970 chromeos::CrosLibrary::Get()->EnsureLoaded() && | 910 chromeos::CrosLibrary::Get()->EnsureLoaded()) { |
971 CommandLine::ForCurrentProcess()->HasSwitch( | |
972 switches::kEnableLoginImages)) { | |
973 std::vector<chromeos::UserManager::User> users = | 911 std::vector<chromeos::UserManager::User> users = |
974 chromeos::UserManager::Get()->GetUsers(); | 912 chromeos::UserManager::Get()->GetUsers(); |
975 | 913 |
976 // Fix for users who updated device and thus never passed register screen. | 914 // Fix for users who updated device and thus never passed register screen. |
977 // If we already have user we assume that it is not a second part of OOBE. | 915 // If we already have users, we assume that it is not a second part of |
978 // See http://crosbug.com/6289 | 916 // OOBE. See http://crosbug.com/6289 |
979 if (!WizardController::IsDeviceRegistered() && !users.empty()) { | 917 if (!WizardController::IsDeviceRegistered() && !users.empty()) { |
980 VLOG(1) << "Mark device registered because there are remembered users: " | 918 VLOG(1) << "Mark device registered because there are remembered users: " |
981 << users.size(); | 919 << users.size(); |
982 WizardController::MarkDeviceRegistered(); | 920 WizardController::MarkDeviceRegistered(); |
983 } | 921 } |
984 | 922 |
985 // ExistingUserController deletes itself. | 923 // ExistingUserController deletes itself. |
986 (new chromeos::ExistingUserController(users, screen_bounds))->Init(); | 924 (new chromeos::ExistingUserController(users, screen_bounds))->Init(); |
987 | 925 |
988 // Initiate services customization. | 926 // Initiate services customization. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1036 // user has changed to during OOBE. | 974 // user has changed to during OOBE. |
1037 if (!timezone_name.empty()) { | 975 if (!timezone_name.empty()) { |
1038 icu::TimeZone* timezone = icu::TimeZone::createTimeZone( | 976 icu::TimeZone* timezone = icu::TimeZone::createTimeZone( |
1039 icu::UnicodeString::fromUTF8(timezone_name)); | 977 icu::UnicodeString::fromUTF8(timezone_name)); |
1040 chromeos::CrosLibrary::Get()->GetSystemLibrary()->SetTimezone(timezone); | 978 chromeos::CrosLibrary::Get()->GetSystemLibrary()->SetTimezone(timezone); |
1041 } | 979 } |
1042 } | 980 } |
1043 } | 981 } |
1044 | 982 |
1045 } // namespace browser | 983 } // namespace browser |
OLD | NEW |