Chromium Code Reviews| 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/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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |