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 <stddef.h> | 8 #include <stddef.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <sys/types.h> | 10 #include <sys/types.h> |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 histogram->AddTime(step_time); | 135 histogram->AddTime(step_time); |
136 } | 136 } |
137 | 137 |
138 bool IsRemoraRequisition() { | 138 bool IsRemoraRequisition() { |
139 return g_browser_process->platform_part() | 139 return g_browser_process->platform_part() |
140 ->browser_policy_connector_chromeos() | 140 ->browser_policy_connector_chromeos() |
141 ->GetDeviceCloudPolicyManager() | 141 ->GetDeviceCloudPolicyManager() |
142 ->IsRemoraRequisition(); | 142 ->IsRemoraRequisition(); |
143 } | 143 } |
144 | 144 |
145 // Checks if the device is a "Slave" device in the bootstrapping process. | 145 // Checks if a controller device ("Master") is detected during the bootstrapping |
146 bool IsBootstrappingSlave() { | 146 // or shark/remora setup process. |
147 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 147 bool IsControllerDetected() { |
148 chromeos::switches::kOobeBootstrappingSlave); | 148 return g_browser_process->local_state()->GetBoolean( |
| 149 prefs::kOobeControllerDetected); |
| 150 } |
| 151 |
| 152 void SetControllerDetectedPref(bool value) { |
| 153 PrefService* prefs = g_browser_process->local_state(); |
| 154 prefs->SetBoolean(prefs::kOobeControllerDetected, value); |
| 155 prefs->CommitPendingWrite(); |
149 } | 156 } |
150 | 157 |
151 // Checks if the device is a "Master" device in the bootstrapping process. | 158 // Checks if the device is a "Master" device in the bootstrapping process. |
152 bool IsBootstrappingMaster() { | 159 bool IsBootstrappingMaster() { |
153 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 160 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
154 chromeos::switches::kOobeBootstrappingMaster); | 161 chromeos::switches::kOobeBootstrappingMaster); |
155 } | 162 } |
156 | 163 |
157 bool NetworkAllowUpdate(const chromeos::NetworkState* network) { | 164 bool NetworkAllowUpdate(const chromeos::NetworkState* network) { |
158 if (!network || !network->IsConnectedState()) | 165 if (!network || !network->IsConnectedState()) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 DCHECK(default_controller_ == nullptr); | 238 DCHECK(default_controller_ == nullptr); |
232 default_controller_ = this; | 239 default_controller_ = this; |
233 AccessibilityManager* accessibility_manager = AccessibilityManager::Get(); | 240 AccessibilityManager* accessibility_manager = AccessibilityManager::Get(); |
234 CHECK(accessibility_manager); | 241 CHECK(accessibility_manager); |
235 accessibility_subscription_ = accessibility_manager->RegisterCallback( | 242 accessibility_subscription_ = accessibility_manager->RegisterCallback( |
236 base::Bind(&WizardController::OnAccessibilityStatusChanged, | 243 base::Bind(&WizardController::OnAccessibilityStatusChanged, |
237 base::Unretained(this))); | 244 base::Unretained(this))); |
238 } | 245 } |
239 | 246 |
240 WizardController::~WizardController() { | 247 WizardController::~WizardController() { |
| 248 if (shark_connection_listener_.get()) { |
| 249 base::MessageLoop::current()->DeleteSoon( |
| 250 FROM_HERE, shark_connection_listener_.release()); |
| 251 } |
241 if (default_controller_ == this) { | 252 if (default_controller_ == this) { |
242 default_controller_ = nullptr; | 253 default_controller_ = nullptr; |
243 } else { | 254 } else { |
244 NOTREACHED() << "More than one controller are alive."; | 255 NOTREACHED() << "More than one controller are alive."; |
245 } | 256 } |
246 } | 257 } |
247 | 258 |
248 void WizardController::Init(const std::string& first_screen_name) { | 259 void WizardController::Init(const std::string& first_screen_name) { |
249 VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name; | 260 VLOG(1) << "Starting OOBE wizard with screen: " << first_screen_name; |
250 first_screen_name_ = first_screen_name; | 261 first_screen_name_ = first_screen_name; |
(...skipping 27 matching lines...) Expand all Loading... |
278 | 289 |
279 // If the device is a Master device in bootstrapping process (mostly for demo | 290 // If the device is a Master device in bootstrapping process (mostly for demo |
280 // and test purpose), start the enrollment OOBE flow. | 291 // and test purpose), start the enrollment OOBE flow. |
281 if (IsBootstrappingMaster()) | 292 if (IsBootstrappingMaster()) |
282 connector->GetDeviceCloudPolicyManager()->SetDeviceEnrollmentAutoStart(); | 293 connector->GetDeviceCloudPolicyManager()->SetDeviceEnrollmentAutoStart(); |
283 | 294 |
284 // Use the saved screen preference from Local State. | 295 // Use the saved screen preference from Local State. |
285 const std::string screen_pref = | 296 const std::string screen_pref = |
286 GetLocalState()->GetString(prefs::kOobeScreenPending); | 297 GetLocalState()->GetString(prefs::kOobeScreenPending); |
287 if (is_out_of_box_ && !screen_pref.empty() && !IsRemoraPairingOobe() && | 298 if (is_out_of_box_ && !screen_pref.empty() && !IsRemoraPairingOobe() && |
288 !IsBootstrappingSlave() && | 299 !IsControllerDetected() && |
289 (first_screen_name.empty() || | 300 (first_screen_name.empty() || |
290 first_screen_name == WizardController::kTestNoScreenName)) { | 301 first_screen_name == WizardController::kTestNoScreenName)) { |
291 first_screen_name_ = screen_pref; | 302 first_screen_name_ = screen_pref; |
292 } | 303 } |
| 304 // We need to reset the kOobeControllerDetected pref to allow the user to have |
| 305 // the choice to setup the device manually. The pref will be set properly if |
| 306 // an eligible controller is detected later. |
| 307 SetControllerDetectedPref(false); |
293 | 308 |
294 AdvanceToScreen(first_screen_name_); | 309 AdvanceToScreen(first_screen_name_); |
295 if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() && | 310 if (!IsMachineHWIDCorrect() && !StartupUtils::IsDeviceRegistered() && |
296 first_screen_name_.empty()) | 311 first_screen_name_.empty()) |
297 ShowWrongHWIDScreen(); | 312 ShowWrongHWIDScreen(); |
298 } | 313 } |
299 | 314 |
300 ErrorScreen* WizardController::GetErrorScreen() { | 315 ErrorScreen* WizardController::GetErrorScreen() { |
301 return oobe_ui_->GetErrorScreen(); | 316 return oobe_ui_->GetErrorScreen(); |
302 } | 317 } |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 ShowLoginScreen(LoginScreenContext()); | 601 ShowLoginScreen(LoginScreenContext()); |
587 } | 602 } |
588 | 603 |
589 void WizardController::OnUpdateCompleted() { | 604 void WizardController::OnUpdateCompleted() { |
590 const bool is_shark = g_browser_process->platform_part() | 605 const bool is_shark = g_browser_process->platform_part() |
591 ->browser_policy_connector_chromeos() | 606 ->browser_policy_connector_chromeos() |
592 ->GetDeviceCloudPolicyManager() | 607 ->GetDeviceCloudPolicyManager() |
593 ->IsSharkRequisition(); | 608 ->IsSharkRequisition(); |
594 if (is_shark || IsBootstrappingMaster()) { | 609 if (is_shark || IsBootstrappingMaster()) { |
595 ShowControllerPairingScreen(); | 610 ShowControllerPairingScreen(); |
596 } else if (IsBootstrappingSlave() && shark_controller_detected_) { | 611 } else if (IsControllerDetected()) { |
597 ShowHostPairingScreen(); | 612 ShowHostPairingScreen(); |
598 } else { | 613 } else { |
599 ShowAutoEnrollmentCheckScreen(); | 614 ShowAutoEnrollmentCheckScreen(); |
600 } | 615 } |
601 } | 616 } |
602 | 617 |
603 void WizardController::OnEulaAccepted() { | 618 void WizardController::OnEulaAccepted() { |
604 time_eula_accepted_ = base::Time::Now(); | 619 time_eula_accepted_ = base::Time::Now(); |
605 StartupUtils::MarkEulaAccepted(); | 620 StartupUtils::MarkEulaAccepted(); |
606 InitiateMetricsReportingChange( | 621 InitiateMetricsReportingChange( |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
925 ShowHIDDetectionScreen(); | 940 ShowHIDDetectionScreen(); |
926 } else if (screen_name == kControllerPairingScreenName) { | 941 } else if (screen_name == kControllerPairingScreenName) { |
927 ShowControllerPairingScreen(); | 942 ShowControllerPairingScreen(); |
928 } else if (screen_name == kHostPairingScreenName) { | 943 } else if (screen_name == kHostPairingScreenName) { |
929 ShowHostPairingScreen(); | 944 ShowHostPairingScreen(); |
930 } else if (screen_name == kDeviceDisabledScreenName) { | 945 } else if (screen_name == kDeviceDisabledScreenName) { |
931 ShowDeviceDisabledScreen(); | 946 ShowDeviceDisabledScreen(); |
932 } else if (screen_name != kTestNoScreenName) { | 947 } else if (screen_name != kTestNoScreenName) { |
933 if (is_out_of_box_) { | 948 if (is_out_of_box_) { |
934 time_oobe_started_ = base::Time::Now(); | 949 time_oobe_started_ = base::Time::Now(); |
935 if (IsRemoraPairingOobe() || IsSlavePairingOobe()) { | 950 if (IsRemoraPairingOobe() || IsControllerDetected()) { |
936 ShowHostPairingScreen(); | 951 ShowHostPairingScreen(); |
937 } else if (CanShowHIDDetectionScreen()) { | 952 } else if (CanShowHIDDetectionScreen()) { |
938 hid_screen_ = GetScreen(kHIDDetectionScreenName); | 953 hid_screen_ = GetScreen(kHIDDetectionScreenName); |
939 base::Callback<void(bool)> on_check = base::Bind( | 954 base::Callback<void(bool)> on_check = base::Bind( |
940 &WizardController::OnHIDScreenNecessityCheck, | 955 &WizardController::OnHIDScreenNecessityCheck, |
941 weak_factory_.GetWeakPtr()); | 956 weak_factory_.GetWeakPtr()); |
942 oobe_ui_->GetHIDDetectionView()->CheckIsScreenRequired(on_check); | 957 oobe_ui_->GetHIDDetectionView()->CheckIsScreenRequired(on_check); |
943 } else { | 958 } else { |
944 ShowNetworkScreen(); | 959 ShowNetworkScreen(); |
945 } | 960 } |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1302 bool WizardController::SetOnTimeZoneResolvedForTesting( | 1317 bool WizardController::SetOnTimeZoneResolvedForTesting( |
1303 const base::Closure& callback) { | 1318 const base::Closure& callback) { |
1304 if (timezone_resolved_) | 1319 if (timezone_resolved_) |
1305 return false; | 1320 return false; |
1306 | 1321 |
1307 on_timezone_resolved_for_testing_ = callback; | 1322 on_timezone_resolved_for_testing_ = callback; |
1308 return true; | 1323 return true; |
1309 } | 1324 } |
1310 | 1325 |
1311 bool WizardController::IsRemoraPairingOobe() const { | 1326 bool WizardController::IsRemoraPairingOobe() const { |
1312 return IsRemoraRequisition() && | 1327 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
1313 (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1328 switches::kHostPairingOobe); |
1314 switches::kHostPairingOobe) || | |
1315 shark_controller_detected_); | |
1316 } | |
1317 | |
1318 bool WizardController::IsSlavePairingOobe() const { | |
1319 return IsBootstrappingSlave() && shark_controller_detected_; | |
1320 } | 1329 } |
1321 | 1330 |
1322 void WizardController::MaybeStartListeningForSharkConnection() { | 1331 void WizardController::MaybeStartListeningForSharkConnection() { |
1323 if (!IsRemoraRequisition() && !IsBootstrappingSlave()) | 1332 // We shouldn't be here if we are running pairing OOBE already. |
| 1333 if (IsControllerDetected()) |
1324 return; | 1334 return; |
1325 | 1335 |
1326 // We shouldn't be here if we are running pairing OOBE already. | |
1327 DCHECK(!IsRemoraPairingOobe() && !IsSlavePairingOobe()); | |
1328 | |
1329 if (!shark_connection_listener_) { | 1336 if (!shark_connection_listener_) { |
1330 shark_connection_listener_.reset( | 1337 shark_connection_listener_.reset( |
1331 new pairing_chromeos::SharkConnectionListener( | 1338 new pairing_chromeos::SharkConnectionListener( |
1332 base::Bind(&WizardController::OnSharkConnected, | 1339 base::Bind(&WizardController::OnSharkConnected, |
1333 weak_factory_.GetWeakPtr()))); | 1340 weak_factory_.GetWeakPtr()))); |
1334 } | 1341 } |
1335 } | 1342 } |
1336 | 1343 |
1337 void WizardController::OnSharkConnected( | 1344 void WizardController::OnSharkConnected( |
1338 scoped_ptr<pairing_chromeos::HostPairingController> remora_controller) { | 1345 scoped_ptr<pairing_chromeos::HostPairingController> remora_controller) { |
1339 VLOG(1) << "OnSharkConnected"; | 1346 VLOG(1) << "OnSharkConnected"; |
1340 remora_controller_ = std::move(remora_controller); | 1347 remora_controller_ = std::move(remora_controller); |
1341 base::MessageLoop::current()->DeleteSoon( | 1348 base::MessageLoop::current()->DeleteSoon( |
1342 FROM_HERE, shark_connection_listener_.release()); | 1349 FROM_HERE, shark_connection_listener_.release()); |
1343 shark_controller_detected_ = true; | 1350 SetControllerDetectedPref(true); |
1344 ShowHostPairingScreen(); | 1351 ShowHostPairingScreen(); |
1345 } | 1352 } |
1346 | 1353 |
1347 void WizardController::OnSetHostNetworkFailed() { | 1354 void WizardController::OnSetHostNetworkFailed() { |
1348 remora_controller_->OnNetworkConnectivityChanged( | 1355 remora_controller_->OnNetworkConnectivityChanged( |
1349 pairing_chromeos::HostPairingController::CONNECTIVITY_NONE); | 1356 pairing_chromeos::HostPairingController::CONNECTIVITY_NONE); |
1350 } | 1357 } |
1351 | 1358 |
1352 void WizardController::StartEnrollmentScreen() { | 1359 void WizardController::StartEnrollmentScreen() { |
1353 VLOG(1) << "Showing enrollment screen."; | 1360 VLOG(1) << "Showing enrollment screen."; |
1354 | 1361 |
1355 // Determine the effective enrollment configuration. If there is a valid | 1362 // Determine the effective enrollment configuration. If there is a valid |
1356 // prescribed configuration, use that. If not, figure out which variant of | 1363 // prescribed configuration, use that. If not, figure out which variant of |
1357 // manual enrollment is taking place. | 1364 // manual enrollment is taking place. |
1358 policy::EnrollmentConfig effective_config = prescribed_enrollment_config_; | 1365 policy::EnrollmentConfig effective_config = prescribed_enrollment_config_; |
1359 if (!effective_config.should_enroll()) { | 1366 if (!effective_config.should_enroll()) { |
1360 effective_config.mode = | 1367 effective_config.mode = |
1361 prescribed_enrollment_config_.management_domain.empty() | 1368 prescribed_enrollment_config_.management_domain.empty() |
1362 ? policy::EnrollmentConfig::MODE_MANUAL | 1369 ? policy::EnrollmentConfig::MODE_MANUAL |
1363 : policy::EnrollmentConfig::MODE_MANUAL_REENROLLMENT; | 1370 : policy::EnrollmentConfig::MODE_MANUAL_REENROLLMENT; |
1364 } | 1371 } |
1365 | 1372 |
1366 EnrollmentScreen* screen = EnrollmentScreen::Get(this); | 1373 EnrollmentScreen* screen = EnrollmentScreen::Get(this); |
1367 screen->SetParameters(effective_config, shark_controller_.get()); | 1374 screen->SetParameters(effective_config, shark_controller_.get()); |
1368 SetStatusAreaVisible(true); | 1375 SetStatusAreaVisible(true); |
1369 SetCurrentScreen(screen); | 1376 SetCurrentScreen(screen); |
1370 } | 1377 } |
1371 | 1378 |
1372 } // namespace chromeos | 1379 } // namespace chromeos |
OLD | NEW |