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

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc

Issue 2433363004: Chromad: added AD Join ui, authpolicy_client (Closed)
Patch Set: More polishing Created 4 years, 1 month 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/ui/webui/chromeos/login/enrollment_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/common/system/chromeos/devicetype_utils.h" 9 #include "ash/common/system/chromeos/devicetype_utils.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/files/file_util.h"
12 #include "base/logging.h" 13 #include "base/logging.h"
13 #include "base/macros.h" 14 #include "base/macros.h"
14 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
15 #include "base/values.h" 16 #include "base/values.h"
16 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/browser_process_platform_part.h" 18 #include "chrome/browser/browser_process_platform_part.h"
18 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" 19 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h"
19 #include "chrome/browser/chromeos/login/help_app_launcher.h" 20 #include "chrome/browser/chromeos/login/help_app_launcher.h"
20 #include "chrome/browser/chromeos/login/screens/network_error.h" 21 #include "chrome/browser/chromeos/login/screens/network_error.h"
21 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 22 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
22 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" 23 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
23 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" 24 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
24 #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h" 25 #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h"
25 #include "chrome/browser/ui/webui/chromeos/login/oobe_screen.h" 26 #include "chrome/browser/ui/webui/chromeos/login/oobe_screen.h"
26 #include "chrome/grit/generated_resources.h" 27 #include "chrome/grit/generated_resources.h"
28 #include "chromeos/dbus/auth_policy_client.h"
29 #include "chromeos/dbus/dbus_thread_manager.h"
27 #include "chromeos/network/network_state.h" 30 #include "chromeos/network/network_state.h"
28 #include "chromeos/network/network_state_handler.h" 31 #include "chromeos/network/network_state_handler.h"
29 #include "components/login/localized_values_builder.h" 32 #include "components/login/localized_values_builder.h"
30 #include "components/policy/core/browser/cloud/message_util.h" 33 #include "components/policy/core/browser/cloud/message_util.h"
34 #include "content/public/browser/browser_thread.h"
31 #include "google_apis/gaia/gaia_auth_util.h" 35 #include "google_apis/gaia/gaia_auth_util.h"
32 #include "google_apis/gaia/gaia_urls.h" 36 #include "google_apis/gaia/gaia_urls.h"
33 #include "google_apis/gaia/google_service_auth_error.h" 37 #include "google_apis/gaia/google_service_auth_error.h"
34 #include "ui/base/l10n/l10n_util.h" 38 #include "ui/base/l10n/l10n_util.h"
35 39
36 namespace chromeos { 40 namespace chromeos {
37 namespace { 41 namespace {
38 42
39 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen"; 43 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen";
40 44
41 // Enrollment step names. 45 // Enrollment step names.
42 const char kEnrollmentStepSignin[] = "signin"; 46 const char kEnrollmentStepSignin[] = "signin";
47 const char kEnrollmentStepADJoin[] = "ad-join";
43 const char kEnrollmentStepSuccess[] = "success"; 48 const char kEnrollmentStepSuccess[] = "success";
44 const char kEnrollmentStepWorking[] = "working"; 49 const char kEnrollmentStepWorking[] = "working";
45 50
46 // Enrollment mode constants used in the UI. This needs to be kept in sync with 51 // Enrollment mode constants used in the UI. This needs to be kept in sync with
47 // oobe_screen_oauth_enrollment.js. 52 // oobe_screen_oauth_enrollment.js.
48 const char kEnrollmentModeUIForced[] = "forced"; 53 const char kEnrollmentModeUIForced[] = "forced";
49 const char kEnrollmentModeUIManual[] = "manual"; 54 const char kEnrollmentModeUIManual[] = "manual";
50 const char kEnrollmentModeUIRecovery[] = "recovery"; 55 const char kEnrollmentModeUIRecovery[] = "recovery";
51 56
52 // Converts |mode| to a mode identifier for the UI. 57 // Converts |mode| to a mode identifier for the UI.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 } 101 }
97 102
98 103
99 // Returns the enterprise domain after enrollment, or an empty string. 104 // Returns the enterprise domain after enrollment, or an empty string.
100 std::string GetEnterpriseDomain() { 105 std::string GetEnterpriseDomain() {
101 policy::BrowserPolicyConnectorChromeOS* connector = 106 policy::BrowserPolicyConnectorChromeOS* connector =
102 g_browser_process->platform_part()->browser_policy_connector_chromeos(); 107 g_browser_process->platform_part()->browser_policy_connector_chromeos();
103 return connector->GetEnterpriseDomain(); 108 return connector->GetEnterpriseDomain();
104 } 109 }
105 110
111 // Returns file descriptor of a pipe, open for reading. Pipe keeps user
112 // password, which can be read from the returned descriptor.
113 base::ScopedFD GetPasswordReadPipe(const std::string& password) {
114 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
115 int pipe_fds[2];
116 if (!base::CreateLocalNonBlockingPipe(pipe_fds)) {
117 LOG(ERROR) << "Failed to create pipe";
118 return base::ScopedFD();
119 }
120 base::ScopedFD pipe_read_end(pipe_fds[0]);
121 base::ScopedFD pipe_write_end(pipe_fds[1]);
122
123 if (!base::WriteFileDescriptor(pipe_write_end.get(),
124 password.c_str(),
125 password.size())) {
126 LOG(ERROR) << "Failed to write to pipe";
Dan Beam 2016/10/28 21:13:03 do you want this in release builds? this bloats t
Roman Sorokin (ftl) 2016/10/31 11:37:11 I see there calls in the files. Would that matter
Dan Beam 2016/10/31 23:52:25 yes, more calls = more bloat ;)
Alexander Alekseev 2016/11/01 06:18:32 I'd vote for this error to stay. This may fail if
127 return base::ScopedFD();
128 }
129 return pipe_read_end;
130 }
131
106 } // namespace 132 } // namespace
107 133
108 // EnrollmentScreenHandler, public ------------------------------ 134 // EnrollmentScreenHandler, public ------------------------------
109 135
110 EnrollmentScreenHandler::EnrollmentScreenHandler( 136 EnrollmentScreenHandler::EnrollmentScreenHandler(
111 const scoped_refptr<NetworkStateInformer>& network_state_informer, 137 const scoped_refptr<NetworkStateInformer>& network_state_informer,
112 NetworkErrorModel* network_error_model) 138 NetworkErrorModel* network_error_model)
113 : BaseScreenHandler(kJsScreenPath), 139 : BaseScreenHandler(kJsScreenPath),
114 controller_(NULL), 140 controller_(NULL),
115 show_on_init_(false), 141 show_on_init_(false),
(...skipping 16 matching lines...) Expand all
132 158
133 // EnrollmentScreenHandler, WebUIMessageHandler implementation -- 159 // EnrollmentScreenHandler, WebUIMessageHandler implementation --
134 160
135 void EnrollmentScreenHandler::RegisterMessages() { 161 void EnrollmentScreenHandler::RegisterMessages() {
136 AddCallback("toggleFakeEnrollment", 162 AddCallback("toggleFakeEnrollment",
137 &EnrollmentScreenHandler::HandleToggleFakeEnrollment); 163 &EnrollmentScreenHandler::HandleToggleFakeEnrollment);
138 AddCallback("oauthEnrollClose", 164 AddCallback("oauthEnrollClose",
139 &EnrollmentScreenHandler::HandleClose); 165 &EnrollmentScreenHandler::HandleClose);
140 AddCallback("oauthEnrollCompleteLogin", 166 AddCallback("oauthEnrollCompleteLogin",
141 &EnrollmentScreenHandler::HandleCompleteLogin); 167 &EnrollmentScreenHandler::HandleCompleteLogin);
168 AddCallback("oauthEnrollADCompleteLogin",
169 &EnrollmentScreenHandler::HandleADCompleteLogin);
142 AddCallback("oauthEnrollRetry", 170 AddCallback("oauthEnrollRetry",
143 &EnrollmentScreenHandler::HandleRetry); 171 &EnrollmentScreenHandler::HandleRetry);
144 AddCallback("frameLoadingCompleted", 172 AddCallback("frameLoadingCompleted",
145 &EnrollmentScreenHandler::HandleFrameLoadingCompleted); 173 &EnrollmentScreenHandler::HandleFrameLoadingCompleted);
146 AddCallback("oauthEnrollAttributes", 174 AddCallback("oauthEnrollAttributes",
147 &EnrollmentScreenHandler::HandleDeviceAttributesProvided); 175 &EnrollmentScreenHandler::HandleDeviceAttributesProvided);
148 AddCallback("oauthEnrollOnLearnMore", 176 AddCallback("oauthEnrollOnLearnMore",
149 &EnrollmentScreenHandler::HandleOnLearnMore); 177 &EnrollmentScreenHandler::HandleOnLearnMore);
150 } 178 }
151 179
(...skipping 19 matching lines...) Expand all
171 } 199 }
172 200
173 void EnrollmentScreenHandler::Hide() { 201 void EnrollmentScreenHandler::Hide() {
174 } 202 }
175 203
176 void EnrollmentScreenHandler::ShowSigninScreen() { 204 void EnrollmentScreenHandler::ShowSigninScreen() {
177 observe_network_failure_ = true; 205 observe_network_failure_ = true;
178 ShowStep(kEnrollmentStepSignin); 206 ShowStep(kEnrollmentStepSignin);
179 } 207 }
180 208
209 void EnrollmentScreenHandler::ShowADJoin() {
210 observe_network_failure_ = false;
211 ShowStep(kEnrollmentStepADJoin);
212 }
213
181 void EnrollmentScreenHandler::ShowAttributePromptScreen( 214 void EnrollmentScreenHandler::ShowAttributePromptScreen(
182 const std::string& asset_id, 215 const std::string& asset_id,
183 const std::string& location) { 216 const std::string& location) {
184 CallJS("showAttributePromptStep", asset_id, location); 217 CallJS("showAttributePromptStep", asset_id, location);
185 } 218 }
186 219
187 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() { 220 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() {
188 ShowStep(kEnrollmentStepWorking); 221 ShowStep(kEnrollmentStepWorking);
189 } 222 }
190 223
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_ATTRIBUTE_LINK); 412 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_ATTRIBUTE_LINK);
380 builder->Add("oauthEnrollAttributeExplanation", 413 builder->Add("oauthEnrollAttributeExplanation",
381 IDS_ENTERPRISE_ENROLLMENT_ATTRIBUTE_EXPLANATION); 414 IDS_ENTERPRISE_ENROLLMENT_ATTRIBUTE_EXPLANATION);
382 builder->Add("oauthEnrollAssetIdLabel", 415 builder->Add("oauthEnrollAssetIdLabel",
383 IDS_ENTERPRISE_ENROLLMENT_ASSET_ID_LABEL); 416 IDS_ENTERPRISE_ENROLLMENT_ASSET_ID_LABEL);
384 builder->Add("oauthEnrollLocationLabel", 417 builder->Add("oauthEnrollLocationLabel",
385 IDS_ENTERPRISE_ENROLLMENT_LOCATION_LABEL); 418 IDS_ENTERPRISE_ENROLLMENT_LOCATION_LABEL);
386 builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING_MESSAGE); 419 builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING_MESSAGE);
387 // Do not use AddF for this string as it will be rendered by the JS code. 420 // Do not use AddF for this string as it will be rendered by the JS code.
388 builder->Add("oauthEnrollAbeSuccess", IDS_ENTERPRISE_ENROLLMENT_ABE_SUCCESS); 421 builder->Add("oauthEnrollAbeSuccess", IDS_ENTERPRISE_ENROLLMENT_ABE_SUCCESS);
422 builder->Add("oauthEnrollADMachineNameInput",
423 IDS_AD_MACHINE_NAME_INPUT_LABEL);
424 builder->Add("oauthEnrollADDomainJoinWelcomeMessage",
425 IDS_AD_DOMAIN_JOIN_WELCOME_MESSAGE);
426 builder->Add("adLoginUser", IDS_AD_LOGIN_USER);
427 builder->Add("adLoginPassword", IDS_AD_LOGIN_PASSWORD);
389 } 428 }
390 429
391 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const { 430 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const {
392 return (GetCurrentScreen() == OobeScreen::SCREEN_OOBE_ENROLLMENT); 431 return (GetCurrentScreen() == OobeScreen::SCREEN_OOBE_ENROLLMENT);
393 } 432 }
394 433
395 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const { 434 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const {
396 return (GetCurrentScreen() == OobeScreen::SCREEN_ERROR_MESSAGE && 435 return (GetCurrentScreen() == OobeScreen::SCREEN_ERROR_MESSAGE &&
397 network_error_model_->GetParentScreen() == 436 network_error_model_->GetParentScreen() ==
398 OobeScreen::SCREEN_OOBE_ENROLLMENT); 437 OobeScreen::SCREEN_OOBE_ENROLLMENT);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 } 547 }
509 548
510 void EnrollmentScreenHandler::HandleCompleteLogin( 549 void EnrollmentScreenHandler::HandleCompleteLogin(
511 const std::string& user, 550 const std::string& user,
512 const std::string& auth_code) { 551 const std::string& auth_code) {
513 observe_network_failure_ = false; 552 observe_network_failure_ = false;
514 DCHECK(controller_); 553 DCHECK(controller_);
515 controller_->OnLoginDone(gaia::SanitizeEmail(user), auth_code); 554 controller_->OnLoginDone(gaia::SanitizeEmail(user), auth_code);
516 } 555 }
517 556
557 void EnrollmentScreenHandler::HandleADCompleteLogin(
558 const std::string& machine_name,
559 const std::string& user,
560 const std::string& password) {
561 observe_network_failure_ = false;
562 DCHECK(controller_);
563 base::PostTaskAndReplyWithResult(
564 content::BrowserThread::GetBlockingPool(), FROM_HERE,
565 base::Bind(&GetPasswordReadPipe, password),
566 base::Bind(&EnrollmentScreenHandler::OnPasswordPipeReady,
567 weak_ptr_factory_.GetWeakPtr(), machine_name, user));
568 }
569
570 void EnrollmentScreenHandler::OnPasswordPipeReady(
571 const std::string& machine_name,
572 const std::string& user,
573 base::ScopedFD password_fd) {
574 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
575 if (!password_fd.is_valid()) {
576 LOG(ERROR) << "Got invalid password_fd";
577 return;
578 }
579 chromeos::AuthPolicyClient* client =
580 chromeos::DBusThreadManager::Get()->GetAuthPolicyClient();
581
582 client->JoinADDomain(machine_name,
583 user,
584 password_fd.get(),
585 base::Bind(&EnrollmentScreenHandler::HandleADDomainJoin,
586 weak_ptr_factory_.GetWeakPtr(),
587 machine_name,
588 user));
589 }
590
591 void EnrollmentScreenHandler::HandleADDomainJoin(
592 const std::string& machine_name,
593 const std::string& user,
594 int code) {
595 if (code == 0) {
596 controller_->OnADJoined(gaia::ExtractDomainName(user));
597 return;
598 }
599 // TODO(rsorokin): Add passing/displaying error codes. (see crbug.com/659984)
600 CallJS("invalidateAD", machine_name, user);
601 }
602
518 void EnrollmentScreenHandler::HandleRetry() { 603 void EnrollmentScreenHandler::HandleRetry() {
519 DCHECK(controller_); 604 DCHECK(controller_);
520 controller_->OnRetry(); 605 controller_->OnRetry();
521 } 606 }
522 607
523 void EnrollmentScreenHandler::HandleFrameLoadingCompleted() { 608 void EnrollmentScreenHandler::HandleFrameLoadingCompleted() {
524 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) 609 if (network_state_informer_->state() != NetworkStateInformer::ONLINE)
525 return; 610 return;
526 611
527 UpdateState(NetworkError::ERROR_REASON_UPDATE); 612 UpdateState(NetworkError::ERROR_REASON_UPDATE);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 661
577 ShowScreenWithData(OobeScreen::SCREEN_OOBE_ENROLLMENT, &screen_data); 662 ShowScreenWithData(OobeScreen::SCREEN_OOBE_ENROLLMENT, &screen_data);
578 if (first_show_) { 663 if (first_show_) {
579 first_show_ = false; 664 first_show_ = false;
580 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true); 665 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true);
581 } 666 }
582 histogram_helper_->OnScreenShow(); 667 histogram_helper_->OnScreenShow();
583 } 668 }
584 669
585 } // namespace chromeos 670 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698