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

Side by Side Diff: chrome/browser/chromeos/login/enrollment/enrollment_screen.cc

Issue 547503002: Redirect to the enterprise enrollment screen during remora and shark pairing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review fix. Created 6 years, 3 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
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/enrollment/enrollment_screen.h" 5 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/browser_process_platform_part.h" 13 #include "chrome/browser/browser_process_platform_part.h"
14 #include "chrome/browser/chromeos/login/login_utils.h" 14 #include "chrome/browser/chromeos/login/login_utils.h"
15 #include "chrome/browser/chromeos/login/screen_manager.h" 15 #include "chrome/browser/chromeos/login/screen_manager.h"
16 #include "chrome/browser/chromeos/login/screens/screen_observer.h" 16 #include "chrome/browser/chromeos/login/screens/screen_observer.h"
17 #include "chrome/browser/chromeos/login/startup_utils.h" 17 #include "chrome/browser/chromeos/login/startup_utils.h"
18 #include "chrome/browser/chromeos/login/wizard_controller.h" 18 #include "chrome/browser/chromeos/login/wizard_controller.h"
19 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h" 19 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
20 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 20 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
21 #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h" 21 #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h"
22 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" 22 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
23 #include "chromeos/dbus/cryptohome_client.h" 23 #include "chromeos/dbus/cryptohome_client.h"
24 #include "chromeos/dbus/dbus_method_call_status.h" 24 #include "chromeos/dbus/dbus_method_call_status.h"
25 #include "chromeos/dbus/dbus_thread_manager.h" 25 #include "chromeos/dbus/dbus_thread_manager.h"
26 #include "chromeos/dbus/session_manager_client.h" 26 #include "chromeos/dbus/session_manager_client.h"
27 #include "components/pairing/controller_pairing_controller.h"
27 #include "google_apis/gaia/gaia_auth_util.h" 28 #include "google_apis/gaia/gaia_auth_util.h"
28 #include "google_apis/gaia/google_service_auth_error.h" 29 #include "google_apis/gaia/google_service_auth_error.h"
29 #include "policy/proto/device_management_backend.pb.h" 30 #include "policy/proto/device_management_backend.pb.h"
30 31
32 using namespace pairing_chromeos;
33
31 namespace chromeos { 34 namespace chromeos {
32 35
33 // static 36 // static
34 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) { 37 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) {
35 return static_cast<EnrollmentScreen*>( 38 return static_cast<EnrollmentScreen*>(
36 manager->GetScreen(WizardController::kEnrollmentScreenName)); 39 manager->GetScreen(WizardController::kEnrollmentScreenName));
37 } 40 }
38 41
39 EnrollmentScreen::EnrollmentScreen( 42 EnrollmentScreen::EnrollmentScreen(
40 ScreenObserver* observer, 43 ScreenObserver* observer,
41 EnrollmentScreenActor* actor) 44 EnrollmentScreenActor* actor)
42 : WizardScreen(observer), 45 : WizardScreen(observer),
46 shark_controller_(NULL),
47 remora_controller_(NULL),
43 actor_(actor), 48 actor_(actor),
44 enrollment_mode_(EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL), 49 enrollment_mode_(EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL),
45 enrollment_failed_once_(false), 50 enrollment_failed_once_(false),
46 remora_token_sent_(false), 51 remora_token_sent_(false),
47 lockbox_init_duration_(0), 52 lockbox_init_duration_(0),
48 weak_ptr_factory_(this) { 53 weak_ptr_factory_(this) {
49 // Init the TPM if it has not been done until now (in debug build we might 54 // Init the TPM if it has not been done until now (in debug build we might
50 // have not done that yet). 55 // have not done that yet).
51 DBusThreadManager::Get()->GetCryptohomeClient()->TpmCanAttemptOwnership( 56 DBusThreadManager::Get()->GetCryptohomeClient()->TpmCanAttemptOwnership(
52 EmptyVoidDBusMethodCallback()); 57 EmptyVoidDBusMethodCallback());
53 } 58 }
54 59
55 EnrollmentScreen::~EnrollmentScreen() {} 60 EnrollmentScreen::~EnrollmentScreen() {
61 if (remora_controller_) {
62 remora_controller_->RemoveObserver(this);
63 }
64 }
56 65
57 void EnrollmentScreen::SetParameters( 66 void EnrollmentScreen::SetParameters(
58 EnrollmentScreenActor::EnrollmentMode enrollment_mode, 67 EnrollmentScreenActor::EnrollmentMode enrollment_mode,
59 const std::string& management_domain, 68 const std::string& management_domain,
60 const std::string& user, 69 const std::string& user,
61 const std::string& auth_token) { 70 const std::string& auth_token,
71 pairing_chromeos::ControllerPairingController* shark_controller,
72 pairing_chromeos::HostPairingController* remora_controller) {
62 enrollment_mode_ = enrollment_mode; 73 enrollment_mode_ = enrollment_mode;
63 user_ = user.empty() ? user : gaia::CanonicalizeEmail(user); 74 user_ = user.empty() ? user : gaia::CanonicalizeEmail(user);
64 auth_token_ = auth_token; 75 auth_token_ = auth_token;
76 shark_controller_ = shark_controller;
77 DCHECK(!remora_controller_);
78 remora_controller_ = remora_controller;
79 if (remora_controller_) {
80 remora_controller_->AddObserver(this);
81 }
65 actor_->SetParameters(this, enrollment_mode_, management_domain); 82 actor_->SetParameters(this, enrollment_mode_, management_domain);
66 } 83 }
67 84
68 void EnrollmentScreen::PrepareToShow() { 85 void EnrollmentScreen::PrepareToShow() {
69 actor_->PrepareToShow(); 86 actor_->PrepareToShow();
70 } 87 }
71 88
72 void EnrollmentScreen::Show() { 89 void EnrollmentScreen::Show() {
73 if (is_auto_enrollment() && !enrollment_failed_once_) { 90 if (is_auto_enrollment() && !enrollment_failed_once_) {
74 actor_->Show(); 91 actor_->Show();
(...skipping 13 matching lines...) Expand all
88 105
89 void EnrollmentScreen::Hide() { 106 void EnrollmentScreen::Hide() {
90 actor_->Hide(); 107 actor_->Hide();
91 weak_ptr_factory_.InvalidateWeakPtrs(); 108 weak_ptr_factory_.InvalidateWeakPtrs();
92 } 109 }
93 110
94 std::string EnrollmentScreen::GetName() const { 111 std::string EnrollmentScreen::GetName() const {
95 return WizardController::kEnrollmentScreenName; 112 return WizardController::kEnrollmentScreenName;
96 } 113 }
97 114
115 void EnrollmentScreen::PairingStageChanged(Stage new_stage) {
116 switch (new_stage) {
117 case HostPairingController::STAGE_NONE:
118 case HostPairingController::STAGE_INITIALIZATION_ERROR:
119 case HostPairingController::STAGE_WAITING_FOR_CONTROLLER:
120 case HostPairingController::STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE:
121 case HostPairingController::STAGE_WAITING_FOR_CODE_CONFIRMATION:
122 case HostPairingController::STAGE_UPDATING:
123 case HostPairingController::STAGE_WAITING_FOR_CREDENTIALS:
124 case HostPairingController::STAGE_ENROLLING:
dzhioev (left Google) 2014/09/09 01:58:09 nit: you can replace all these cases with a single
Zachary Kuznia 2014/09/09 02:17:51 When switching on enums, I leave off the default c
125 NOTREACHED();
126 break;
127
128 case HostPairingController::STAGE_ENROLLMENT_ERROR:
129 case HostPairingController::STAGE_PAIRING_DONE:
130 break;
131
132 case HostPairingController::STAGE_FINISHED: {
133 remora_controller_->RemoveObserver(this);
134 remora_controller_ = NULL;
135 get_screen_observer()->OnExit(
136 WizardController::ENTERPRISE_AUTO_MAGIC_ENROLLMENT_COMPLETED);
dzhioev (left Google) 2014/09/09 01:35:40 a) Why do you use ENTERPRISE_AUTO_MAGIC_ENROLLMENT
Zachary Kuznia 2014/09/09 02:17:51 a: I reused the exit code from elsewhere in this f
dzhioev (left Google) 2014/09/09 02:46:50 What do you see on host's screen after enrollment
Zachary Kuznia 2014/09/09 23:53:58 After enrollment, the host launches Hangouts. ach
achuithb 2014/09/10 08:04:20 We can do this, or use ENTERPRISE_ENROLLMENT_COMPL
Zachary Kuznia 2014/09/10 15:57:25 Ok, I'll leave this as is for now. I've filed a b
137 break;
138 }
139 }
140 }
141
142 void EnrollmentScreen::ConfigureHost(bool accepted_eula,
143 const std::string& lang,
144 const std::string& timezone,
145 bool send_reports,
146 const std::string& keyboard_layout) {
147 // Host configuration should already be complete.
148 NOTREACHED();
149 }
150
151 void EnrollmentScreen::EnrollHost(const std::string& auth_token) {
152 // Enrollment should already be complete.
153 NOTREACHED();
154 }
155
98 void EnrollmentScreen::OnLoginDone(const std::string& user) { 156 void EnrollmentScreen::OnLoginDone(const std::string& user) {
99 user_ = gaia::CanonicalizeEmail(user); 157 user_ = gaia::CanonicalizeEmail(user);
100 158
101 if (is_auto_enrollment()) 159 if (is_auto_enrollment())
102 UMA(policy::kMetricEnrollmentAutoRetried); 160 UMA(policy::kMetricEnrollmentAutoRetried);
103 else if (enrollment_failed_once_) 161 else if (enrollment_failed_once_)
104 UMA(policy::kMetricEnrollmentRetried); 162 UMA(policy::kMetricEnrollmentRetried);
105 else 163 else
106 UMA(policy::kMetricEnrollmentStarted); 164 UMA(policy::kMetricEnrollmentStarted);
107 165
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 CHECK(dcp_initializer); 290 CHECK(dcp_initializer);
233 dcp_initializer->StartEnrollment( 291 dcp_initializer->StartEnrollment(
234 enterprise_management::PolicyData::ENTERPRISE_MANAGED, 292 enterprise_management::PolicyData::ENTERPRISE_MANAGED,
235 connector->device_management_service(), 293 connector->device_management_service(),
236 token, is_auto_enrollment(), device_modes, 294 token, is_auto_enrollment(), device_modes,
237 base::Bind(&EnrollmentScreen::ReportEnrollmentStatus, 295 base::Bind(&EnrollmentScreen::ReportEnrollmentStatus,
238 weak_ptr_factory_.GetWeakPtr())); 296 weak_ptr_factory_.GetWeakPtr()));
239 } 297 }
240 298
241 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { 299 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) {
242 // TODO(achuith, zork): Send token via Bluetooth to remote device. 300 // TODO(achuith, zork): Extract and send domain.
301 if (shark_controller_)
302 shark_controller_->OnAuthenticationDone("", token);
243 } 303 }
244 304
245 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess( 305 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess(
246 const policy::EnrollmentStatus& status) { 306 const policy::EnrollmentStatus& status) {
247 actor_->ShowEnrollmentStatus(status); 307 actor_->ShowEnrollmentStatus(status);
248 StartupUtils::MarkOobeCompleted(); 308 StartupUtils::MarkOobeCompleted();
249 } 309 }
250 310
251 void EnrollmentScreen::ReportEnrollmentStatus(policy::EnrollmentStatus status) { 311 void EnrollmentScreen::ReportEnrollmentStatus(policy::EnrollmentStatus status) {
252 switch (status.status()) { 312 switch (status.status()) {
253 case policy::EnrollmentStatus::STATUS_SUCCESS: 313 case policy::EnrollmentStatus::STATUS_SUCCESS:
254 StartupUtils::MarkDeviceRegistered( 314 StartupUtils::MarkDeviceRegistered(
255 base::Bind(&EnrollmentScreen::ShowEnrollmentStatusOnSuccess, 315 base::Bind(&EnrollmentScreen::ShowEnrollmentStatusOnSuccess,
256 weak_ptr_factory_.GetWeakPtr(), 316 weak_ptr_factory_.GetWeakPtr(),
257 status)); 317 status));
258 UMA(is_auto_enrollment() ? policy::kMetricEnrollmentAutoOK 318 UMA(is_auto_enrollment() ? policy::kMetricEnrollmentAutoOK
259 : policy::kMetricEnrollmentOK); 319 : policy::kMetricEnrollmentOK);
320 remora_controller_->SetEnrollmentComplete(true);
dzhioev (left Google) 2014/09/09 01:35:40 Why do you assume everywhere that |remora_controll
Zachary Kuznia 2014/09/09 02:17:50 That is a bad assumption on my part. Fixed.
260 return; 321 return;
261 case policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED: 322 case policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED:
262 case policy::EnrollmentStatus::STATUS_POLICY_FETCH_FAILED: 323 case policy::EnrollmentStatus::STATUS_POLICY_FETCH_FAILED:
263 switch (status.client_status()) { 324 switch (status.client_status()) {
264 case policy::DM_STATUS_SUCCESS: 325 case policy::DM_STATUS_SUCCESS:
265 case policy::DM_STATUS_REQUEST_INVALID: 326 case policy::DM_STATUS_REQUEST_INVALID:
266 case policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND: 327 case policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND:
267 case policy::DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID: 328 case policy::DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID:
268 case policy::DM_STATUS_SERVICE_ACTIVATION_PENDING: 329 case policy::DM_STATUS_SERVICE_ACTIVATION_PENDING:
269 case policy::DM_STATUS_SERVICE_DEVICE_ID_CONFLICT: 330 case policy::DM_STATUS_SERVICE_DEVICE_ID_CONFLICT:
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 UMAFailure(policy::kMetricEnrollmentRobotRefreshTokenStoreFailed); 385 UMAFailure(policy::kMetricEnrollmentRobotRefreshTokenStoreFailed);
325 break; 386 break;
326 case policy::EnrollmentStatus::STATUS_STORE_TOKEN_AND_ID_FAILED: 387 case policy::EnrollmentStatus::STATUS_STORE_TOKEN_AND_ID_FAILED:
327 // This error should not happen for enterprise enrollment, it only affects 388 // This error should not happen for enterprise enrollment, it only affects
328 // consumer enrollment. 389 // consumer enrollment.
329 UMAFailure(policy::kMetricEnrollmentStoreTokenAndIdFailed); 390 UMAFailure(policy::kMetricEnrollmentStoreTokenAndIdFailed);
330 NOTREACHED(); 391 NOTREACHED();
331 break; 392 break;
332 } 393 }
333 394
395 remora_controller_->SetEnrollmentComplete(false);
334 enrollment_failed_once_ = true; 396 enrollment_failed_once_ = true;
335 actor_->ShowEnrollmentStatus(status); 397 actor_->ShowEnrollmentStatus(status);
336 } 398 }
337 399
338 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { 400 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) {
339 if (enrollment_mode_ == EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY) { 401 if (enrollment_mode_ == EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY) {
340 UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollmentRecovery, sample, 402 UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollmentRecovery, sample,
341 policy::kMetricEnrollmentSize); 403 policy::kMetricEnrollmentSize);
342 } else { 404 } else {
343 UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment, sample, 405 UMA_HISTOGRAM_ENUMERATION(policy::kMetricEnrollment, sample,
344 policy::kMetricEnrollmentSize); 406 policy::kMetricEnrollmentSize);
345 } 407 }
346 } 408 }
347 409
348 void EnrollmentScreen::UMAFailure(policy::MetricEnrollment sample) { 410 void EnrollmentScreen::UMAFailure(policy::MetricEnrollment sample) {
349 if (is_auto_enrollment()) 411 if (is_auto_enrollment())
350 sample = policy::kMetricEnrollmentAutoFailed; 412 sample = policy::kMetricEnrollmentAutoFailed;
351 UMA(sample); 413 UMA(sample);
352 } 414 }
353 415
354 void EnrollmentScreen::ShowSigninScreen() { 416 void EnrollmentScreen::ShowSigninScreen() {
355 actor_->Show(); 417 actor_->Show();
356 actor_->ShowSigninScreen(); 418 actor_->ShowSigninScreen();
357 } 419 }
358 420
359 } // namespace chromeos 421 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698