Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: chrome/browser/chromeos/login/wizard_controller.cc

Issue 14362031: Move part of WizardController static code to StartupUtils (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fighting with whitespaces again Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <signal.h> 7 #include <signal.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 10
(...skipping 23 matching lines...) Expand all
34 #include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_sc reen.h" 34 #include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_sc reen.h"
35 #include "chrome/browser/chromeos/login/oobe_display.h" 35 #include "chrome/browser/chromeos/login/oobe_display.h"
36 #include "chrome/browser/chromeos/login/screens/error_screen.h" 36 #include "chrome/browser/chromeos/login/screens/error_screen.h"
37 #include "chrome/browser/chromeos/login/screens/eula_screen.h" 37 #include "chrome/browser/chromeos/login/screens/eula_screen.h"
38 #include "chrome/browser/chromeos/login/screens/network_screen.h" 38 #include "chrome/browser/chromeos/login/screens/network_screen.h"
39 #include "chrome/browser/chromeos/login/screens/reset_screen.h" 39 #include "chrome/browser/chromeos/login/screens/reset_screen.h"
40 #include "chrome/browser/chromeos/login/screens/terms_of_service_screen.h" 40 #include "chrome/browser/chromeos/login/screens/terms_of_service_screen.h"
41 #include "chrome/browser/chromeos/login/screens/update_screen.h" 41 #include "chrome/browser/chromeos/login/screens/update_screen.h"
42 #include "chrome/browser/chromeos/login/screens/user_image_screen.h" 42 #include "chrome/browser/chromeos/login/screens/user_image_screen.h"
43 #include "chrome/browser/chromeos/login/screens/wrong_hwid_screen.h" 43 #include "chrome/browser/chromeos/login/screens/wrong_hwid_screen.h"
44 #include "chrome/browser/chromeos/login/startup_utils.h"
44 #include "chrome/browser/chromeos/login/user_manager.h" 45 #include "chrome/browser/chromeos/login/user_manager.h"
45 #include "chrome/browser/chromeos/net/network_portal_detector.h" 46 #include "chrome/browser/chromeos/net/network_portal_detector.h"
46 #include "chrome/browser/chromeos/settings/cros_settings.h" 47 #include "chrome/browser/chromeos/settings/cros_settings.h"
47 #include "chrome/browser/chromeos/settings/cros_settings_names.h" 48 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
48 #include "chrome/browser/profiles/profile.h" 49 #include "chrome/browser/profiles/profile.h"
49 #include "chrome/browser/profiles/profile_manager.h" 50 #include "chrome/browser/profiles/profile_manager.h"
50 #include "chrome/browser/ui/options/options_util.h" 51 #include "chrome/browser/ui/options/options_util.h"
51 #include "chrome/common/chrome_notification_types.h" 52 #include "chrome/common/chrome_notification_types.h"
52 #include "chrome/common/pref_names.h" 53 #include "chrome/common/pref_names.h"
53 #include "chromeos/dbus/dbus_thread_manager.h" 54 #include "chromeos/dbus/dbus_thread_manager.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 NOTREACHED() << "More than one controller are alive."; 169 NOTREACHED() << "More than one controller are alive.";
169 } 170 }
170 } 171 }
171 172
172 void WizardController::Init(const std::string& first_screen_name, 173 void WizardController::Init(const std::string& first_screen_name,
173 base::DictionaryValue* screen_parameters) { 174 base::DictionaryValue* screen_parameters) {
174 VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name; 175 VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name;
175 first_screen_name_ = first_screen_name; 176 first_screen_name_ = first_screen_name;
176 screen_parameters_.reset(screen_parameters); 177 screen_parameters_.reset(screen_parameters);
177 178
178 bool oobe_complete = IsOobeCompleted(); 179 bool oobe_complete = StartupUtils::IsOobeCompleted();
179 if (!oobe_complete || first_screen_name == kOutOfBoxScreenName) { 180 if (!oobe_complete || first_screen_name == kOutOfBoxScreenName) {
180 is_out_of_box_ = true; 181 is_out_of_box_ = true;
181 } 182 }
182 183
183 AdvanceToScreen(first_screen_name); 184 AdvanceToScreen(first_screen_name);
184 content::NotificationService::current()->Notify( 185 content::NotificationService::current()->Notify(
185 chrome::NOTIFICATION_WIZARD_FIRST_SCREEN_SHOWN, 186 chrome::NOTIFICATION_WIZARD_FIRST_SCREEN_SHOWN,
186 content::NotificationService::AllSources(), 187 content::NotificationService::AllSources(),
187 content::NotificationService::NoDetails()); 188 content::NotificationService::NoDetails());
188 if (!IsMachineHWIDCorrect() && !IsDeviceRegistered() && 189 if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() &&
189 first_screen_name.empty()) 190 first_screen_name.empty())
190 ShowWrongHWIDScreen(); 191 ShowWrongHWIDScreen();
191 } 192 }
192 193
193 chromeos::NetworkScreen* WizardController::GetNetworkScreen() { 194 chromeos::NetworkScreen* WizardController::GetNetworkScreen() {
194 if (!network_screen_.get()) 195 if (!network_screen_.get())
195 network_screen_.reset(new chromeos::NetworkScreen( 196 network_screen_.reset(new chromeos::NetworkScreen(
196 this, oobe_display_->GetNetworkScreenActor())); 197 this, oobe_display_->GetNetworkScreenActor()));
197 return network_screen_.get(); 198 return network_screen_.get();
198 } 199 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 384
384 void WizardController::ShowLocallyManagedUserCreationScreen() { 385 void WizardController::ShowLocallyManagedUserCreationScreen() {
385 VLOG(1) << "Showing Locally managed user creation screen screen."; 386 VLOG(1) << "Showing Locally managed user creation screen screen.";
386 SetStatusAreaVisible(true); 387 SetStatusAreaVisible(true);
387 LocallyManagedUserCreationScreen* screen = 388 LocallyManagedUserCreationScreen* screen =
388 GetLocallyManagedUserCreationScreen(); 389 GetLocallyManagedUserCreationScreen();
389 SetCurrentScreen(screen); 390 SetCurrentScreen(screen);
390 } 391 }
391 392
392 void WizardController::SkipToLoginForTesting() { 393 void WizardController::SkipToLoginForTesting() {
393 MarkEulaAccepted(); 394 StartupUtils::MarkEulaAccepted();
394 PerformPostEulaActions(); 395 PerformPostEulaActions();
395 PerformPostUpdateActions(); 396 PerformPostUpdateActions();
396 ShowLoginScreen(); 397 ShowLoginScreen();
397 } 398 }
398 399
399 void WizardController::SkipPostLoginScreensForTesting() { 400 void WizardController::SkipPostLoginScreensForTesting() {
400 skip_post_login_screens_ = true; 401 skip_post_login_screens_ = true;
401 } 402 }
402 403
403 void WizardController::AddObserver(Observer* observer) { 404 void WizardController::AddObserver(Observer* observer) {
404 observer_list_.AddObserver(observer); 405 observer_list_.AddObserver(observer);
405 } 406 }
406 407
407 void WizardController::RemoveObserver(Observer* observer) { 408 void WizardController::RemoveObserver(Observer* observer) {
408 observer_list_.RemoveObserver(observer); 409 observer_list_.RemoveObserver(observer);
409 } 410 }
410 411
411 void WizardController::OnSessionStart() { 412 void WizardController::OnSessionStart() {
412 FOR_EACH_OBSERVER(Observer, observer_list_, OnSessionStart()); 413 FOR_EACH_OBSERVER(Observer, observer_list_, OnSessionStart());
413 } 414 }
414 415
415 void WizardController::SkipUpdateEnrollAfterEula() { 416 void WizardController::SkipUpdateEnrollAfterEula() {
416 skip_update_enroll_after_eula_ = true; 417 skip_update_enroll_after_eula_ = true;
417 } 418 }
418 419
419 // static
420 void WizardController::RegisterPrefs(PrefRegistrySimple* registry) {
421 registry->RegisterBooleanPref(kOobeComplete, false);
422 registry->RegisterIntegerPref(kDeviceRegistered, -1);
423 registry->RegisterBooleanPref(prefs::kEulaAccepted, false);
424 registry->RegisterStringPref(kInitialLocale, "en-US");
425 }
426
427 /////////////////////////////////////////////////////////////////////////////// 420 ///////////////////////////////////////////////////////////////////////////////
428 // WizardController, ExitHandlers: 421 // WizardController, ExitHandlers:
429 void WizardController::OnNetworkConnected() { 422 void WizardController::OnNetworkConnected() {
430 if (is_official_build_) { 423 if (is_official_build_) {
431 if (!IsEulaAccepted()) { 424 if (!StartupUtils::IsEulaAccepted()) {
432 ShowEulaScreen(); 425 ShowEulaScreen();
433 } else { 426 } else {
434 // Possible cases: 427 // Possible cases:
435 // 1. EULA was accepted, forced shutdown/reboot during update. 428 // 1. EULA was accepted, forced shutdown/reboot during update.
436 // 2. EULA was accepted, planned reboot after update. 429 // 2. EULA was accepted, planned reboot after update.
437 // Make sure that device is up-to-date. 430 // Make sure that device is up-to-date.
438 InitiateOOBEUpdate(); 431 InitiateOOBEUpdate();
439 } 432 }
440 } else { 433 } else {
441 InitiateOOBEUpdate(); 434 InitiateOOBEUpdate();
(...skipping 10 matching lines...) Expand all
452 // TODO(dpolukhin): show error message after login screen is displayed. 445 // TODO(dpolukhin): show error message after login screen is displayed.
453 ShowLoginScreen(); 446 ShowLoginScreen();
454 } 447 }
455 448
456 void WizardController::OnUpdateCompleted() { 449 void WizardController::OnUpdateCompleted() {
457 OnOOBECompleted(); 450 OnOOBECompleted();
458 } 451 }
459 452
460 void WizardController::OnEulaAccepted() { 453 void WizardController::OnEulaAccepted() {
461 time_eula_accepted_ = base::Time::Now(); 454 time_eula_accepted_ = base::Time::Now();
462 MarkEulaAccepted(); 455 StartupUtils::MarkEulaAccepted();
463 bool uma_enabled = 456 bool uma_enabled =
464 OptionsUtil::ResolveMetricsReportingEnabled(usage_statistics_reporting_); 457 OptionsUtil::ResolveMetricsReportingEnabled(usage_statistics_reporting_);
465 458
466 content::NotificationService::current()->Notify( 459 content::NotificationService::current()->Notify(
467 chrome::NOTIFICATION_WIZARD_EULA_ACCEPTED, 460 chrome::NOTIFICATION_WIZARD_EULA_ACCEPTED,
468 content::NotificationSource(content::Source<WizardController>(this)), 461 content::NotificationSource(content::Source<WizardController>(this)),
469 content::NotificationService::NoDetails()); 462 content::NotificationService::NoDetails());
470 463
471 CrosSettings::Get()->SetBoolean(kStatsReportingPref, uma_enabled); 464 CrosSettings::Get()->SetBoolean(kStatsReportingPref, uma_enabled);
472 if (uma_enabled) { 465 if (uma_enabled) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 // ChromiumOS builds would go though this code path too. 575 // ChromiumOS builds would go though this code path too.
583 chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> 576 chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
584 SetDefaultCheckPortalList(); 577 SetDefaultCheckPortalList();
585 host_->CheckForAutoEnrollment(); 578 host_->CheckForAutoEnrollment();
586 NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance(); 579 NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance();
587 if (NetworkPortalDetector::IsEnabledInCommandLine() && detector) 580 if (NetworkPortalDetector::IsEnabledInCommandLine() && detector)
588 detector->Enable(true); 581 detector->Enable(true);
589 } 582 }
590 583
591 void WizardController::PerformPostUpdateActions() { 584 void WizardController::PerformPostUpdateActions() {
592 MarkOobeCompleted(); 585 StartupUtils::MarkOobeCompleted();
593 } 586 }
594 587
595 void WizardController::SetCurrentScreen(WizardScreen* new_current) { 588 void WizardController::SetCurrentScreen(WizardScreen* new_current) {
596 SetCurrentScreenSmooth(new_current, false); 589 SetCurrentScreenSmooth(new_current, false);
597 } 590 }
598 591
599 void WizardController::ShowCurrentScreen() { 592 void WizardController::ShowCurrentScreen() {
600 // ShowCurrentScreen may get called by smooth_show_timer_ even after 593 // ShowCurrentScreen may get called by smooth_show_timer_ even after
601 // flow has been switched to sign in screen (ExistingUserController). 594 // flow has been switched to sign in screen (ExistingUserController).
602 if (!oobe_display_) 595 if (!oobe_display_)
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 ShowLocallyManagedUserCreationScreen(); 663 ShowLocallyManagedUserCreationScreen();
671 } else if (screen_name != kTestNoScreenName) { 664 } else if (screen_name != kTestNoScreenName) {
672 if (is_out_of_box_) { 665 if (is_out_of_box_) {
673 ShowNetworkScreen(); 666 ShowNetworkScreen();
674 } else { 667 } else {
675 ShowLoginScreen(); 668 ShowLoginScreen();
676 } 669 }
677 } 670 }
678 } 671 }
679 672
680 // static
681 bool WizardController::IsEulaAccepted() {
682 return g_browser_process->local_state()->GetBoolean(prefs::kEulaAccepted);
683 }
684
685 // static
686 bool WizardController::IsOobeCompleted() {
687 return g_browser_process->local_state()->GetBoolean(kOobeComplete);
688 }
689
690 // static
691 void WizardController::MarkEulaAccepted() {
692 SaveBoolPreferenceForced(prefs::kEulaAccepted, true);
693 }
694
695 // static
696 void WizardController::MarkOobeCompleted() {
697 SaveBoolPreferenceForced(kOobeComplete, true);
698 }
699
700 // Returns the path to flag file indicating that both parts of OOBE were
701 // completed.
702 // On chrome device, returns /home/chronos/.oobe_completed.
703 // On Linux desktop, returns $HOME/.oobe_completed.
704 static base::FilePath GetOobeCompleteFlagPath() {
705 // The constant is defined here so it won't be referenced directly.
706 const char kOobeCompleteFlagFilePath[] = "/home/chronos/.oobe_completed";
707
708 if (base::chromeos::IsRunningOnChromeOS()) {
709 return base::FilePath(kOobeCompleteFlagFilePath);
710 } else {
711 const char* home = getenv("HOME");
712 // Unlikely but if HOME is not defined, use the current directory.
713 if (!home)
714 home = "";
715 return base::FilePath(home).AppendASCII(".oobe_completed");
716 }
717 }
718
719 static void CreateOobeCompleteFlagFile() {
720 // Create flag file for boot-time init scripts.
721 base::FilePath oobe_complete_path = GetOobeCompleteFlagPath();
722 if (!file_util::PathExists(oobe_complete_path)) {
723 FILE* oobe_flag_file = file_util::OpenFile(oobe_complete_path, "w+b");
724 if (oobe_flag_file == NULL)
725 DLOG(WARNING) << oobe_complete_path.value() << " doesn't exist.";
726 else
727 file_util::CloseFile(oobe_flag_file);
728 }
729 }
730
731 // static
732 bool WizardController::IsDeviceRegistered() {
733 int value = g_browser_process->local_state()->GetInteger(kDeviceRegistered);
734 if (value > 0) {
735 // Recreate flag file in case it was lost.
736 BrowserThread::PostTask(
737 BrowserThread::FILE,
738 FROM_HERE,
739 base::Bind(&CreateOobeCompleteFlagFile));
740 return true;
741 } else if (value == 0) {
742 return false;
743 } else {
744 // Pref is not set. For compatibility check flag file. It causes blocking
745 // IO on UI thread. But it's required for update from old versions.
746 base::ThreadRestrictions::ScopedAllowIO allow_io;
747 base::FilePath oobe_complete_flag_file_path = GetOobeCompleteFlagPath();
748 bool file_exists = file_util::PathExists(oobe_complete_flag_file_path);
749 SaveIntegerPreferenceForced(kDeviceRegistered, file_exists ? 1 : 0);
750 return file_exists;
751 }
752 }
753
754 // static
755 void WizardController::MarkDeviceRegistered() {
756 SaveIntegerPreferenceForced(kDeviceRegistered, 1);
757 BrowserThread::PostTask(
758 BrowserThread::FILE,
759 FROM_HERE,
760 base::Bind(&CreateOobeCompleteFlagFile));
761 }
762
763 // static
764 std::string WizardController::GetInitialLocale() {
765 std::string locale =
766 g_browser_process->local_state()->GetString(kInitialLocale);
767 if (!l10n_util::IsValidLocaleSyntax(locale))
768 locale = "en-US";
769 return locale;
770 }
771
772 // static
773 void WizardController::SetInitialLocale(const std::string& locale) {
774 if (l10n_util::IsValidLocaleSyntax(locale))
775 SaveStringPreferenceForced(kInitialLocale, locale);
776 else
777 NOTREACHED();
778 }
779
780 /////////////////////////////////////////////////////////////////////////////// 673 ///////////////////////////////////////////////////////////////////////////////
781 // WizardController, chromeos::ScreenObserver overrides: 674 // WizardController, chromeos::ScreenObserver overrides:
782 void WizardController::OnExit(ExitCodes exit_code) { 675 void WizardController::OnExit(ExitCodes exit_code) {
783 LOG(INFO) << "Wizard screen exit code: " << exit_code; 676 LOG(INFO) << "Wizard screen exit code: " << exit_code;
784 switch (exit_code) { 677 switch (exit_code) {
785 case NETWORK_CONNECTED: 678 case NETWORK_CONNECTED:
786 OnNetworkConnected(); 679 OnNetworkConnected();
787 break; 680 break;
788 case CONNECTION_FAILED: 681 case CONNECTION_FAILED:
789 OnConnectionFailed(); 682 OnConnectionFailed();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 return zero_delay_enabled_; 761 return zero_delay_enabled_;
869 } 762 }
870 763
871 // static 764 // static
872 void WizardController::SetZeroDelays() { 765 void WizardController::SetZeroDelays() {
873 kShowDelayMs = 0; 766 kShowDelayMs = 0;
874 zero_delay_enabled_ = true; 767 zero_delay_enabled_ = true;
875 } 768 }
876 769
877 } // namespace chromeos 770 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/wizard_controller.h ('k') | chrome/browser/chromeos/mobile_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698