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

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: Not close password_fd in AuthPolicyClient 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/command_line.h"
xiyuan 2016/10/26 22:03:16 nit: not used?
Roman Sorokin (ftl) 2016/10/27 13:10:46 Done.
13 #include "base/files/file_util.h"
12 #include "base/logging.h" 14 #include "base/logging.h"
13 #include "base/macros.h" 15 #include "base/macros.h"
14 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
15 #include "base/values.h" 17 #include "base/values.h"
16 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/browser_process_platform_part.h" 19 #include "chrome/browser/browser_process_platform_part.h"
18 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" 20 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h"
19 #include "chrome/browser/chromeos/login/help_app_launcher.h" 21 #include "chrome/browser/chromeos/login/help_app_launcher.h"
20 #include "chrome/browser/chromeos/login/screens/network_error.h" 22 #include "chrome/browser/chromeos/login/screens/network_error.h"
21 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 23 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
22 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" 24 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
23 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" 25 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
24 #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h" 26 #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h"
25 #include "chrome/browser/ui/webui/chromeos/login/oobe_screen.h" 27 #include "chrome/browser/ui/webui/chromeos/login/oobe_screen.h"
26 #include "chrome/grit/generated_resources.h" 28 #include "chrome/grit/generated_resources.h"
29 #include "chromeos/dbus/auth_policy_client.h"
30 #include "chromeos/dbus/dbus_thread_manager.h"
27 #include "chromeos/network/network_state.h" 31 #include "chromeos/network/network_state.h"
28 #include "chromeos/network/network_state_handler.h" 32 #include "chromeos/network/network_state_handler.h"
29 #include "components/login/localized_values_builder.h" 33 #include "components/login/localized_values_builder.h"
30 #include "components/policy/core/browser/cloud/message_util.h" 34 #include "components/policy/core/browser/cloud/message_util.h"
35 #include "content/public/browser/browser_thread.h"
xiyuan 2016/10/26 22:03:16 nit: remove if we don't use.
Roman Sorokin (ftl) 2016/10/27 13:10:46 Done.
31 #include "google_apis/gaia/gaia_auth_util.h" 36 #include "google_apis/gaia/gaia_auth_util.h"
32 #include "google_apis/gaia/gaia_urls.h" 37 #include "google_apis/gaia/gaia_urls.h"
33 #include "google_apis/gaia/google_service_auth_error.h" 38 #include "google_apis/gaia/google_service_auth_error.h"
34 #include "ui/base/l10n/l10n_util.h" 39 #include "ui/base/l10n/l10n_util.h"
35 40
36 namespace chromeos { 41 namespace chromeos {
37 namespace { 42 namespace {
38 43
39 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen"; 44 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen";
40 45
41 // Enrollment step names. 46 // Enrollment step names.
42 const char kEnrollmentStepSignin[] = "signin"; 47 const char kEnrollmentStepSignin[] = "signin";
48 const char kEnrollmentStepADJoin[] = "ad-join";
43 const char kEnrollmentStepSuccess[] = "success"; 49 const char kEnrollmentStepSuccess[] = "success";
44 const char kEnrollmentStepWorking[] = "working"; 50 const char kEnrollmentStepWorking[] = "working";
45 51
46 // Enrollment mode constants used in the UI. This needs to be kept in sync with 52 // Enrollment mode constants used in the UI. This needs to be kept in sync with
47 // oobe_screen_oauth_enrollment.js. 53 // oobe_screen_oauth_enrollment.js.
48 const char kEnrollmentModeUIForced[] = "forced"; 54 const char kEnrollmentModeUIForced[] = "forced";
49 const char kEnrollmentModeUIManual[] = "manual"; 55 const char kEnrollmentModeUIManual[] = "manual";
50 const char kEnrollmentModeUIRecovery[] = "recovery"; 56 const char kEnrollmentModeUIRecovery[] = "recovery";
51 57
52 // Converts |mode| to a mode identifier for the UI. 58 // Converts |mode| to a mode identifier for the UI.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 138
133 // EnrollmentScreenHandler, WebUIMessageHandler implementation -- 139 // EnrollmentScreenHandler, WebUIMessageHandler implementation --
134 140
135 void EnrollmentScreenHandler::RegisterMessages() { 141 void EnrollmentScreenHandler::RegisterMessages() {
136 AddCallback("toggleFakeEnrollment", 142 AddCallback("toggleFakeEnrollment",
137 &EnrollmentScreenHandler::HandleToggleFakeEnrollment); 143 &EnrollmentScreenHandler::HandleToggleFakeEnrollment);
138 AddCallback("oauthEnrollClose", 144 AddCallback("oauthEnrollClose",
139 &EnrollmentScreenHandler::HandleClose); 145 &EnrollmentScreenHandler::HandleClose);
140 AddCallback("oauthEnrollCompleteLogin", 146 AddCallback("oauthEnrollCompleteLogin",
141 &EnrollmentScreenHandler::HandleCompleteLogin); 147 &EnrollmentScreenHandler::HandleCompleteLogin);
148 AddCallback("oauthEnrollADCompleteLogin",
149 &EnrollmentScreenHandler::HandleADCompleteLogin);
142 AddCallback("oauthEnrollRetry", 150 AddCallback("oauthEnrollRetry",
143 &EnrollmentScreenHandler::HandleRetry); 151 &EnrollmentScreenHandler::HandleRetry);
144 AddCallback("frameLoadingCompleted", 152 AddCallback("frameLoadingCompleted",
145 &EnrollmentScreenHandler::HandleFrameLoadingCompleted); 153 &EnrollmentScreenHandler::HandleFrameLoadingCompleted);
146 AddCallback("oauthEnrollAttributes", 154 AddCallback("oauthEnrollAttributes",
147 &EnrollmentScreenHandler::HandleDeviceAttributesProvided); 155 &EnrollmentScreenHandler::HandleDeviceAttributesProvided);
148 AddCallback("oauthEnrollOnLearnMore", 156 AddCallback("oauthEnrollOnLearnMore",
149 &EnrollmentScreenHandler::HandleOnLearnMore); 157 &EnrollmentScreenHandler::HandleOnLearnMore);
150 } 158 }
151 159
(...skipping 19 matching lines...) Expand all
171 } 179 }
172 180
173 void EnrollmentScreenHandler::Hide() { 181 void EnrollmentScreenHandler::Hide() {
174 } 182 }
175 183
176 void EnrollmentScreenHandler::ShowSigninScreen() { 184 void EnrollmentScreenHandler::ShowSigninScreen() {
177 observe_network_failure_ = true; 185 observe_network_failure_ = true;
178 ShowStep(kEnrollmentStepSignin); 186 ShowStep(kEnrollmentStepSignin);
179 } 187 }
180 188
189 void EnrollmentScreenHandler::ShowADJoin() {
190 observe_network_failure_ = false;
191 ShowStep(kEnrollmentStepADJoin);
192 }
193
181 void EnrollmentScreenHandler::ShowAttributePromptScreen( 194 void EnrollmentScreenHandler::ShowAttributePromptScreen(
182 const std::string& asset_id, 195 const std::string& asset_id,
183 const std::string& location) { 196 const std::string& location) {
184 CallJS("showAttributePromptStep", asset_id, location); 197 CallJS("showAttributePromptStep", asset_id, location);
185 } 198 }
186 199
187 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() { 200 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() {
188 ShowStep(kEnrollmentStepWorking); 201 ShowStep(kEnrollmentStepWorking);
189 } 202 }
190 203
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_ATTRIBUTE_LINK); 392 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_ATTRIBUTE_LINK);
380 builder->Add("oauthEnrollAttributeExplanation", 393 builder->Add("oauthEnrollAttributeExplanation",
381 IDS_ENTERPRISE_ENROLLMENT_ATTRIBUTE_EXPLANATION); 394 IDS_ENTERPRISE_ENROLLMENT_ATTRIBUTE_EXPLANATION);
382 builder->Add("oauthEnrollAssetIdLabel", 395 builder->Add("oauthEnrollAssetIdLabel",
383 IDS_ENTERPRISE_ENROLLMENT_ASSET_ID_LABEL); 396 IDS_ENTERPRISE_ENROLLMENT_ASSET_ID_LABEL);
384 builder->Add("oauthEnrollLocationLabel", 397 builder->Add("oauthEnrollLocationLabel",
385 IDS_ENTERPRISE_ENROLLMENT_LOCATION_LABEL); 398 IDS_ENTERPRISE_ENROLLMENT_LOCATION_LABEL);
386 builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING_MESSAGE); 399 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. 400 // 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); 401 builder->Add("oauthEnrollAbeSuccess", IDS_ENTERPRISE_ENROLLMENT_ABE_SUCCESS);
402 builder->Add("oauthEnrollADMachineNameInput",
403 IDS_AD_MACHINE_NAME_INPUT_LABEL);
404 builder->Add("oauthEnrollADDomainJoinWelcomeMessage",
405 IDS_AD_DOMAIN_JOIN_WELCOME_MESSAGE);
406 builder->Add("ADLoginUser", IDS_AD_LOGIN_USER);
xiyuan 2016/10/26 22:03:16 nit: ADLoginUser -> adLoginUser, similarly for ADL
Roman Sorokin (ftl) 2016/10/27 13:10:46 Done.
407 builder->Add("ADLoginPassword", IDS_AD_LOGIN_PASSWORD);
389 } 408 }
390 409
391 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const { 410 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const {
392 return (GetCurrentScreen() == OobeScreen::SCREEN_OOBE_ENROLLMENT); 411 return (GetCurrentScreen() == OobeScreen::SCREEN_OOBE_ENROLLMENT);
393 } 412 }
394 413
395 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const { 414 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const {
396 return (GetCurrentScreen() == OobeScreen::SCREEN_ERROR_MESSAGE && 415 return (GetCurrentScreen() == OobeScreen::SCREEN_ERROR_MESSAGE &&
397 network_error_model_->GetParentScreen() == 416 network_error_model_->GetParentScreen() ==
398 OobeScreen::SCREEN_OOBE_ENROLLMENT); 417 OobeScreen::SCREEN_OOBE_ENROLLMENT);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 } 527 }
509 528
510 void EnrollmentScreenHandler::HandleCompleteLogin( 529 void EnrollmentScreenHandler::HandleCompleteLogin(
511 const std::string& user, 530 const std::string& user,
512 const std::string& auth_code) { 531 const std::string& auth_code) {
513 observe_network_failure_ = false; 532 observe_network_failure_ = false;
514 DCHECK(controller_); 533 DCHECK(controller_);
515 controller_->OnLoginDone(gaia::SanitizeEmail(user), auth_code); 534 controller_->OnLoginDone(gaia::SanitizeEmail(user), auth_code);
516 } 535 }
517 536
537 void EnrollmentScreenHandler::HandleADCompleteLogin(
538 const std::string& machine_name,
539 const std::string& user,
540 const std::string& password) {
541 observe_network_failure_ = false;
542 DCHECK(controller_);
543 chromeos::AuthPolicyClient* client =
544 chromeos::DBusThreadManager::Get()->GetAuthPolicyClient();
545 int pipe_fds[2];
546 if (!base::CreateLocalNonBlockingPipe(pipe_fds)) {
xiyuan 2016/10/26 22:03:16 Are we allowed to do this (and the write on Line 5
Roman Sorokin (ftl) 2016/10/27 13:10:45 Moved onto BlockingPool
547 LOG(ERROR) << "Failed to create pipes";
548 return;
549 }
550 base::ScopedFD pipe_read_end(pipe_fds[0]);
551 base::ScopedFD pipe_write_end(pipe_fds[1]);
552
553 if (!base::WriteFileDescriptor(pipe_write_end.get(),
554 password.c_str(),
555 password.size())) {
556 LOG(ERROR) << "Failed to write to pipe";
557 return;
558 }
559
560 client->JoinADDomain(machine_name,
561 user,
562 pipe_read_end.get(),
563 base::Bind(&EnrollmentScreenHandler::HandleADDomainJoin,
564 weak_ptr_factory_.GetWeakPtr(),
565 machine_name,
566 user));
567 }
568
569 void EnrollmentScreenHandler::HandleADDomainJoin(
570 const std::string& machine_name,
571 const std::string& user,
572 int code) {
573 if (code == 0) {
574 controller_->OnADJoined(gaia::ExtractDomainName(user));
575 } else {
576 CallJS("invalidateAD", machine_name, user);
xiyuan 2016/10/26 22:03:16 Does this mean the join fails? Do we need to show
Roman Sorokin (ftl) 2016/10/27 13:10:45 Yes! But we don't have list of errors just yet. Ad
577 }
578 }
579
518 void EnrollmentScreenHandler::HandleRetry() { 580 void EnrollmentScreenHandler::HandleRetry() {
519 DCHECK(controller_); 581 DCHECK(controller_);
520 controller_->OnRetry(); 582 controller_->OnRetry();
521 } 583 }
522 584
523 void EnrollmentScreenHandler::HandleFrameLoadingCompleted() { 585 void EnrollmentScreenHandler::HandleFrameLoadingCompleted() {
524 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) 586 if (network_state_informer_->state() != NetworkStateInformer::ONLINE)
525 return; 587 return;
526 588
527 UpdateState(NetworkError::ERROR_REASON_UPDATE); 589 UpdateState(NetworkError::ERROR_REASON_UPDATE);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 638
577 ShowScreenWithData(OobeScreen::SCREEN_OOBE_ENROLLMENT, &screen_data); 639 ShowScreenWithData(OobeScreen::SCREEN_OOBE_ENROLLMENT, &screen_data);
578 if (first_show_) { 640 if (first_show_) {
579 first_show_ = false; 641 first_show_ = false;
580 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true); 642 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true);
581 } 643 }
582 histogram_helper_->OnScreenShow(); 644 histogram_helper_->OnScreenShow();
583 } 645 }
584 646
585 } // namespace chromeos 647 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698