OLD | NEW |
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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 #include "components/pairing/bluetooth_host_pairing_controller.h" | 78 #include "components/pairing/bluetooth_host_pairing_controller.h" |
79 #include "components/pairing/shark_connection_listener.h" | 79 #include "components/pairing/shark_connection_listener.h" |
80 #include "components/user_manager/user_manager.h" | 80 #include "components/user_manager/user_manager.h" |
81 #include "content/public/browser/browser_thread.h" | 81 #include "content/public/browser/browser_thread.h" |
82 #include "content/public/browser/notification_types.h" | 82 #include "content/public/browser/notification_types.h" |
83 #include "ui/base/accelerators/accelerator.h" | 83 #include "ui/base/accelerators/accelerator.h" |
84 | 84 |
85 using content::BrowserThread; | 85 using content::BrowserThread; |
86 | 86 |
87 namespace { | 87 namespace { |
88 // If reboot didn't happen, ask user to reboot device manually. | |
89 const int kWaitForRebootTimeSec = 3; | |
90 | |
91 // Interval in ms which is used for smooth screen showing. | 88 // Interval in ms which is used for smooth screen showing. |
92 static int kShowDelayMs = 400; | 89 static int kShowDelayMs = 400; |
93 | 90 |
94 // Total timezone resolving process timeout. | 91 // Total timezone resolving process timeout. |
95 const unsigned int kResolveTimeZoneTimeoutSeconds = 60; | 92 const unsigned int kResolveTimeZoneTimeoutSeconds = 60; |
96 | 93 |
97 // Stores the list of all screens that should be shown when resuming OOBE. | 94 // Stores the list of all screens that should be shown when resuming OOBE. |
98 const char *kResumableScreens[] = { | 95 const char *kResumableScreens[] = { |
99 chromeos::WizardController::kNetworkScreenName, | 96 chromeos::WizardController::kNetworkScreenName, |
100 chromeos::WizardController::kUpdateScreenName, | 97 chromeos::WizardController::kUpdateScreenName, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 bool WizardController::skip_post_login_screens_ = false; | 184 bool WizardController::skip_post_login_screens_ = false; |
188 | 185 |
189 // static | 186 // static |
190 bool WizardController::zero_delay_enabled_ = false; | 187 bool WizardController::zero_delay_enabled_ = false; |
191 | 188 |
192 /////////////////////////////////////////////////////////////////////////////// | 189 /////////////////////////////////////////////////////////////////////////////// |
193 // WizardController, public: | 190 // WizardController, public: |
194 | 191 |
195 PrefService* WizardController::local_state_for_testing_ = NULL; | 192 PrefService* WizardController::local_state_for_testing_ = NULL; |
196 | 193 |
197 WizardController::WizardController(chromeos::LoginDisplayHost* host, | 194 WizardController::WizardController(LoginDisplayHost* host, |
198 chromeos::OobeDisplay* oobe_display) | 195 OobeDisplay* oobe_display) |
199 : current_screen_(NULL), | 196 : current_screen_(NULL), |
200 previous_screen_(NULL), | 197 previous_screen_(NULL), |
201 #if defined(GOOGLE_CHROME_BUILD) | 198 #if defined(GOOGLE_CHROME_BUILD) |
202 is_official_build_(true), | 199 is_official_build_(true), |
203 #else | 200 #else |
204 is_official_build_(false), | 201 is_official_build_(false), |
205 #endif | 202 #endif |
206 is_out_of_box_(false), | 203 is_out_of_box_(false), |
207 host_(host), | 204 host_(host), |
208 oobe_display_(oobe_display), | 205 oobe_display_(oobe_display), |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 first_screen_name == WizardController::kTestNoScreenName)) { | 270 first_screen_name == WizardController::kTestNoScreenName)) { |
274 first_screen_name_ = screen_pref; | 271 first_screen_name_ = screen_pref; |
275 } | 272 } |
276 | 273 |
277 AdvanceToScreen(first_screen_name_); | 274 AdvanceToScreen(first_screen_name_); |
278 if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() && | 275 if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() && |
279 first_screen_name_.empty()) | 276 first_screen_name_.empty()) |
280 ShowWrongHWIDScreen(); | 277 ShowWrongHWIDScreen(); |
281 } | 278 } |
282 | 279 |
283 chromeos::ErrorScreen* WizardController::GetErrorScreen() { | 280 ErrorScreen* WizardController::GetErrorScreen() { |
284 return static_cast<chromeos::ErrorScreen*>(GetScreen(kErrorScreenName)); | 281 return static_cast<ErrorScreen*>(GetScreen(kErrorScreenName)); |
285 } | 282 } |
286 | 283 |
287 BaseScreen* WizardController::CreateScreen(const std::string& screen_name) { | 284 BaseScreen* WizardController::CreateScreen(const std::string& screen_name) { |
288 if (screen_name == kNetworkScreenName) { | 285 if (screen_name == kNetworkScreenName) { |
289 scoped_ptr<NetworkScreen> screen(new chromeos::NetworkScreen( | 286 scoped_ptr<NetworkScreen> screen( |
290 this, this, oobe_display_->GetNetworkView())); | 287 new NetworkScreen(this, this, oobe_display_->GetNetworkView())); |
291 screen->Initialize(nullptr /* context */); | 288 screen->Initialize(nullptr /* context */); |
292 return screen.release(); | 289 return screen.release(); |
293 } else if (screen_name == kErrorScreenName) { | 290 } else if (screen_name == kErrorScreenName) { |
294 return new chromeos::ErrorScreen(this, | 291 return new ErrorScreen(this, oobe_display_->GetErrorScreenActor()); |
295 oobe_display_->GetErrorScreenActor()); | |
296 } else if (screen_name == kUpdateScreenName) { | 292 } else if (screen_name == kUpdateScreenName) { |
297 chromeos::UpdateScreen* result = | 293 scoped_ptr<UpdateScreen> screen(new UpdateScreen( |
298 new chromeos::UpdateScreen(this, | 294 this, oobe_display_->GetUpdateView(), remora_controller_.get())); |
299 oobe_display_->GetUpdateScreenActor(), | 295 screen->Initialize(nullptr /* context */); |
300 remora_controller_.get()); | 296 return screen.release(); |
301 result->SetRebootCheckDelay(kWaitForRebootTimeSec); | |
302 return result; | |
303 } else if (screen_name == kUserImageScreenName) { | 297 } else if (screen_name == kUserImageScreenName) { |
304 return new chromeos::UserImageScreen(this, | 298 return new UserImageScreen(this, oobe_display_->GetUserImageView()); |
305 oobe_display_->GetUserImageView()); | |
306 } else if (screen_name == kEulaScreenName) { | 299 } else if (screen_name == kEulaScreenName) { |
307 return new chromeos::EulaScreen(this, this, oobe_display_->GetEulaView()); | 300 return new EulaScreen(this, this, oobe_display_->GetEulaView()); |
308 } else if (screen_name == kEnrollmentScreenName) { | 301 } else if (screen_name == kEnrollmentScreenName) { |
309 return new chromeos::EnrollmentScreen( | 302 return new EnrollmentScreen(this, |
310 this, oobe_display_->GetEnrollmentScreenActor()); | 303 oobe_display_->GetEnrollmentScreenActor()); |
311 } else if (screen_name == kResetScreenName) { | 304 } else if (screen_name == kResetScreenName) { |
312 return new chromeos::ResetScreen(this, | 305 return new ResetScreen(this, oobe_display_->GetResetScreenActor()); |
313 oobe_display_->GetResetScreenActor()); | |
314 } else if (screen_name == kEnableDebuggingScreenName) { | 306 } else if (screen_name == kEnableDebuggingScreenName) { |
315 return new chromeos::EnableDebuggingScreen( | 307 return new EnableDebuggingScreen( |
316 this, | 308 this, oobe_display_->GetEnableDebuggingScreenActor()); |
317 oobe_display_->GetEnableDebuggingScreenActor()); | |
318 } else if (screen_name == kKioskEnableScreenName) { | 309 } else if (screen_name == kKioskEnableScreenName) { |
319 return new chromeos::KioskEnableScreen( | 310 return new KioskEnableScreen(this, |
320 this, oobe_display_->GetKioskEnableScreenActor()); | 311 oobe_display_->GetKioskEnableScreenActor()); |
321 } else if (screen_name == kKioskAutolaunchScreenName) { | 312 } else if (screen_name == kKioskAutolaunchScreenName) { |
322 return new chromeos::KioskAutolaunchScreen( | 313 return new KioskAutolaunchScreen( |
323 this, oobe_display_->GetKioskAutolaunchScreenActor()); | 314 this, oobe_display_->GetKioskAutolaunchScreenActor()); |
324 } else if (screen_name == kTermsOfServiceScreenName) { | 315 } else if (screen_name == kTermsOfServiceScreenName) { |
325 return new chromeos::TermsOfServiceScreen( | 316 return new TermsOfServiceScreen( |
326 this, oobe_display_->GetTermsOfServiceScreenActor()); | 317 this, oobe_display_->GetTermsOfServiceScreenActor()); |
327 } else if (screen_name == kWrongHWIDScreenName) { | 318 } else if (screen_name == kWrongHWIDScreenName) { |
328 return new chromeos::WrongHWIDScreen( | 319 return new WrongHWIDScreen(this, oobe_display_->GetWrongHWIDScreenActor()); |
329 this, oobe_display_->GetWrongHWIDScreenActor()); | |
330 } else if (screen_name == kSupervisedUserCreationScreenName) { | 320 } else if (screen_name == kSupervisedUserCreationScreenName) { |
331 return new chromeos::SupervisedUserCreationScreen( | 321 return new SupervisedUserCreationScreen( |
332 this, oobe_display_->GetSupervisedUserCreationScreenActor()); | 322 this, oobe_display_->GetSupervisedUserCreationScreenActor()); |
333 } else if (screen_name == kHIDDetectionScreenName) { | 323 } else if (screen_name == kHIDDetectionScreenName) { |
334 return new chromeos::HIDDetectionScreen( | 324 return new HIDDetectionScreen(this, |
335 this, oobe_display_->GetHIDDetectionScreenActor()); | 325 oobe_display_->GetHIDDetectionScreenActor()); |
336 } else if (screen_name == kAutoEnrollmentCheckScreenName) { | 326 } else if (screen_name == kAutoEnrollmentCheckScreenName) { |
337 return new chromeos::AutoEnrollmentCheckScreen( | 327 return new AutoEnrollmentCheckScreen( |
338 this, oobe_display_->GetAutoEnrollmentCheckScreenActor()); | 328 this, oobe_display_->GetAutoEnrollmentCheckScreenActor()); |
339 } else if (screen_name == kControllerPairingScreenName) { | 329 } else if (screen_name == kControllerPairingScreenName) { |
340 if (!shark_controller_) { | 330 if (!shark_controller_) { |
341 shark_controller_.reset( | 331 shark_controller_.reset( |
342 new pairing_chromeos::BluetoothControllerPairingController()); | 332 new pairing_chromeos::BluetoothControllerPairingController()); |
343 } | 333 } |
344 return new ControllerPairingScreen( | 334 return new ControllerPairingScreen( |
345 this, | 335 this, |
346 this, | 336 this, |
347 oobe_display_->GetControllerPairingScreenActor(), | 337 oobe_display_->GetControllerPairingScreenActor(), |
348 shark_controller_.get()); | 338 shark_controller_.get()); |
349 } else if (screen_name == kHostPairingScreenName) { | 339 } else if (screen_name == kHostPairingScreenName) { |
350 if (!remora_controller_) { | 340 if (!remora_controller_) { |
351 remora_controller_.reset( | 341 remora_controller_.reset( |
352 new pairing_chromeos::BluetoothHostPairingController()); | 342 new pairing_chromeos::BluetoothHostPairingController()); |
353 remora_controller_->StartPairing(); | 343 remora_controller_->StartPairing(); |
354 } | 344 } |
355 return new HostPairingScreen(this, | 345 return new HostPairingScreen(this, |
356 this, | 346 this, |
357 oobe_display_->GetHostPairingScreenActor(), | 347 oobe_display_->GetHostPairingScreenActor(), |
358 remora_controller_.get()); | 348 remora_controller_.get()); |
359 } else if (screen_name == kDeviceDisabledScreenName) { | 349 } else if (screen_name == kDeviceDisabledScreenName) { |
360 return new chromeos::DeviceDisabledScreen( | 350 return new DeviceDisabledScreen( |
361 this, oobe_display_->GetDeviceDisabledScreenActor()); | 351 this, oobe_display_->GetDeviceDisabledScreenActor()); |
362 } | 352 } |
363 | 353 |
364 return NULL; | 354 return NULL; |
365 } | 355 } |
366 | 356 |
367 void WizardController::ShowNetworkScreen() { | 357 void WizardController::ShowNetworkScreen() { |
368 VLOG(1) << "Showing network screen."; | 358 VLOG(1) << "Showing network screen."; |
369 // Hide the status area initially; it only appears after OOBE first animates | 359 // Hide the status area initially; it only appears after OOBE first animates |
370 // in. Keep it visible if the user goes back to the existing network screen. | 360 // in. Keep it visible if the user goes back to the existing network screen. |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 "OOBE.BootToSignInCompleted", | 639 "OOBE.BootToSignInCompleted", |
650 delta, | 640 delta, |
651 base::TimeDelta::FromMilliseconds(10), | 641 base::TimeDelta::FromMilliseconds(10), |
652 base::TimeDelta::FromMinutes(30), | 642 base::TimeDelta::FromMinutes(30), |
653 100); | 643 100); |
654 time_oobe_started_ = base::Time(); | 644 time_oobe_started_ = base::Time(); |
655 } | 645 } |
656 | 646 |
657 // Launch browser and delete login host controller. | 647 // Launch browser and delete login host controller. |
658 BrowserThread::PostTask( | 648 BrowserThread::PostTask( |
659 BrowserThread::UI, | 649 BrowserThread::UI, FROM_HERE, |
660 FROM_HERE, | 650 base::Bind(&LoginUtils::DoBrowserLaunch, |
661 base::Bind(&chromeos::LoginUtils::DoBrowserLaunch, | 651 base::Unretained(LoginUtils::Get()), |
662 base::Unretained(chromeos::LoginUtils::Get()), | |
663 ProfileManager::GetActiveUserProfile(), host_)); | 652 ProfileManager::GetActiveUserProfile(), host_)); |
664 host_ = NULL; | 653 host_ = NULL; |
665 } | 654 } |
666 | 655 |
667 void WizardController::OnUserImageSkipped() { | 656 void WizardController::OnUserImageSkipped() { |
668 OnUserImageSelected(); | 657 OnUserImageSelected(); |
669 } | 658 } |
670 | 659 |
671 void WizardController::OnEnrollmentDone() { | 660 void WizardController::OnEnrollmentDone() { |
672 // If the enrollment screen was shown as part of OOBE, OOBE is considered | 661 // If the enrollment screen was shown as part of OOBE, OOBE is considered |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 } else { | 914 } else { |
926 ShowNetworkScreen(); | 915 ShowNetworkScreen(); |
927 } | 916 } |
928 } else { | 917 } else { |
929 ShowLoginScreen(LoginScreenContext()); | 918 ShowLoginScreen(LoginScreenContext()); |
930 } | 919 } |
931 } | 920 } |
932 } | 921 } |
933 | 922 |
934 /////////////////////////////////////////////////////////////////////////////// | 923 /////////////////////////////////////////////////////////////////////////////// |
935 // WizardController, chromeos::BaseScreenDelegate overrides: | 924 // WizardController, BaseScreenDelegate overrides: |
936 void WizardController::OnExit(BaseScreen& /* screen */, | 925 void WizardController::OnExit(BaseScreen& /* screen */, |
937 ExitCodes exit_code, | 926 ExitCodes exit_code, |
938 const ::login::ScreenContext* /* context */) { | 927 const ::login::ScreenContext* /* context */) { |
939 VLOG(1) << "Wizard screen exit code: " << exit_code; | 928 VLOG(1) << "Wizard screen exit code: " << exit_code; |
940 std::string previous_screen_id = current_screen_->GetName(); | 929 std::string previous_screen_id = current_screen_->GetName(); |
941 if (IsOOBEStepToTrack(previous_screen_id)) { | 930 if (IsOOBEStepToTrack(previous_screen_id)) { |
942 RecordUMAHistogramForOOBEStepCompletionTime( | 931 RecordUMAHistogramForOOBEStepCompletionTime( |
943 previous_screen_id, | 932 previous_screen_id, |
944 base::Time::Now() - screen_show_times_[previous_screen_id]); | 933 base::Time::Now() - screen_show_times_[previous_screen_id]); |
945 } | 934 } |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1186 | 1175 |
1187 if (timezone->status != TimeZoneResponseData::OK) { | 1176 if (timezone->status != TimeZoneResponseData::OK) { |
1188 LOG(WARNING) << "Resolve TimeZone: failed to resolve timezone."; | 1177 LOG(WARNING) << "Resolve TimeZone: failed to resolve timezone."; |
1189 return; | 1178 return; |
1190 } | 1179 } |
1191 | 1180 |
1192 policy::BrowserPolicyConnectorChromeOS* connector = | 1181 policy::BrowserPolicyConnectorChromeOS* connector = |
1193 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 1182 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
1194 if (connector->IsEnterpriseManaged()) { | 1183 if (connector->IsEnterpriseManaged()) { |
1195 std::string policy_timezone; | 1184 std::string policy_timezone; |
1196 if (chromeos::CrosSettings::Get()->GetString( | 1185 if (CrosSettings::Get()->GetString(kSystemTimezonePolicy, |
1197 chromeos::kSystemTimezonePolicy, &policy_timezone) && | 1186 &policy_timezone) && |
1198 !policy_timezone.empty()) { | 1187 !policy_timezone.empty()) { |
1199 VLOG(1) << "Resolve TimeZone: TimeZone settings are overridden" | 1188 VLOG(1) << "Resolve TimeZone: TimeZone settings are overridden" |
1200 << " by DevicePolicy."; | 1189 << " by DevicePolicy."; |
1201 return; | 1190 return; |
1202 } | 1191 } |
1203 } | 1192 } |
1204 | 1193 |
1205 if (!timezone->timeZoneId.empty()) { | 1194 if (!timezone->timeZoneId.empty()) { |
1206 VLOG(1) << "Resolve TimeZone: setting timezone to '" << timezone->timeZoneId | 1195 VLOG(1) << "Resolve TimeZone: setting timezone to '" << timezone->timeZoneId |
1207 << "'"; | 1196 << "'"; |
1208 | 1197 |
1209 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( | 1198 system::TimezoneSettings::GetInstance()->SetTimezoneFromID( |
1210 base::UTF8ToUTF16(timezone->timeZoneId)); | 1199 base::UTF8ToUTF16(timezone->timeZoneId)); |
1211 } | 1200 } |
1212 } | 1201 } |
1213 | 1202 |
1214 TimeZoneProvider* WizardController::GetTimezoneProvider() { | 1203 TimeZoneProvider* WizardController::GetTimezoneProvider() { |
1215 if (!timezone_provider_) { | 1204 if (!timezone_provider_) { |
1216 timezone_provider_.reset( | 1205 timezone_provider_.reset( |
1217 new TimeZoneProvider(g_browser_process->system_request_context(), | 1206 new TimeZoneProvider(g_browser_process->system_request_context(), |
1218 DefaultTimezoneProviderURL())); | 1207 DefaultTimezoneProviderURL())); |
1219 } | 1208 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1302 } | 1291 } |
1303 | 1292 |
1304 EnrollmentScreen* screen = EnrollmentScreen::Get(this); | 1293 EnrollmentScreen* screen = EnrollmentScreen::Get(this); |
1305 screen->SetParameters(effective_config, shark_controller_.get(), | 1294 screen->SetParameters(effective_config, shark_controller_.get(), |
1306 remora_controller_.get()); | 1295 remora_controller_.get()); |
1307 SetStatusAreaVisible(true); | 1296 SetStatusAreaVisible(true); |
1308 SetCurrentScreen(screen); | 1297 SetCurrentScreen(screen); |
1309 } | 1298 } |
1310 | 1299 |
1311 } // namespace chromeos | 1300 } // namespace chromeos |
OLD | NEW |