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 "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chrome/browser/browser_process.h" | |
| 15 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" | 16 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" |
| 16 #include "chrome/browser/chromeos/login/screens/network_error.h" | 17 #include "chrome/browser/chromeos/login/screens/network_error.h" |
| 17 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 18 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| 19 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | |
| 18 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" | 20 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" |
| 19 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 21 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 20 #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" | 22 #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" |
| 21 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
| 22 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" | 24 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
| 23 #include "chrome/grit/generated_resources.h" | 25 #include "chrome/grit/generated_resources.h" |
| 24 #include "chromeos/network/network_state.h" | 26 #include "chromeos/network/network_state.h" |
| 25 #include "chromeos/network/network_state_handler.h" | 27 #include "chromeos/network/network_state_handler.h" |
| 26 #include "components/login/localized_values_builder.h" | 28 #include "components/login/localized_values_builder.h" |
| 27 #include "components/policy/core/browser/cloud/message_util.h" | 29 #include "components/policy/core/browser/cloud/message_util.h" |
| 28 #include "google_apis/gaia/gaia_auth_util.h" | 30 #include "google_apis/gaia/gaia_auth_util.h" |
| 29 #include "google_apis/gaia/gaia_urls.h" | 31 #include "google_apis/gaia/gaia_urls.h" |
| 30 #include "google_apis/gaia/google_service_auth_error.h" | 32 #include "google_apis/gaia/google_service_auth_error.h" |
| 31 #include "net/url_request/url_request_context_getter.h" | 33 #include "net/url_request/url_request_context_getter.h" |
| 32 #include "ui/base/l10n/l10n_util.h" | 34 #include "ui/base/l10n/l10n_util.h" |
| 33 | 35 |
| 34 namespace chromeos { | 36 namespace chromeos { |
| 35 namespace { | 37 namespace { |
| 36 | 38 |
| 37 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen"; | 39 const char kJsScreenPath[] = "login.OAuthEnrollmentScreen"; |
| 38 | 40 |
| 39 // Enrollment step names. | 41 // Enrollment step names. |
| 40 const char kEnrollmentStepSignin[] = "signin"; | 42 const char kEnrollmentStepSignin[] = "signin"; |
| 41 const char kEnrollmentStepSuccess[] = "success"; | 43 const char kEnrollmentStepSuccess[] = "success"; |
| 42 const char kEnrollmentStepWorking[] = "working"; | 44 const char kEnrollmentStepWorking[] = "working"; |
| 45 const char kEnrollmentStepNaming[] = "naming"; | |
| 43 | 46 |
| 44 // Enrollment mode constants used in the UI. This needs to be kept in sync with | 47 // Enrollment mode constants used in the UI. This needs to be kept in sync with |
| 45 // oobe_screen_oauth_enrollment.js. | 48 // oobe_screen_oauth_enrollment.js. |
| 46 const char kEnrollmentModeUIForced[] = "forced"; | 49 const char kEnrollmentModeUIForced[] = "forced"; |
| 47 const char kEnrollmentModeUIManual[] = "manual"; | 50 const char kEnrollmentModeUIManual[] = "manual"; |
| 48 const char kEnrollmentModeUIRecovery[] = "recovery"; | 51 const char kEnrollmentModeUIRecovery[] = "recovery"; |
| 49 | 52 |
| 50 // Enrollment help topic IDs. | 53 // Enrollment help topic IDs. |
| 51 const int kEnrollmentHelpTopicRegular = 6142332; | 54 const int kEnrollmentHelpTopicRegular = 6142332; |
| 52 const int kEnrollmentHelpTopicServerTriggered = 4631259; | 55 const int kEnrollmentHelpTopicServerTriggered = 4631259; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 | 144 |
| 142 void EnrollmentScreenHandler::RegisterMessages() { | 145 void EnrollmentScreenHandler::RegisterMessages() { |
| 143 AddCallback("oauthEnrollClose", | 146 AddCallback("oauthEnrollClose", |
| 144 &EnrollmentScreenHandler::HandleClose); | 147 &EnrollmentScreenHandler::HandleClose); |
| 145 AddCallback("oauthEnrollCompleteLogin", | 148 AddCallback("oauthEnrollCompleteLogin", |
| 146 &EnrollmentScreenHandler::HandleCompleteLogin); | 149 &EnrollmentScreenHandler::HandleCompleteLogin); |
| 147 AddCallback("oauthEnrollRetry", | 150 AddCallback("oauthEnrollRetry", |
| 148 &EnrollmentScreenHandler::HandleRetry); | 151 &EnrollmentScreenHandler::HandleRetry); |
| 149 AddCallback("frameLoadingCompleted", | 152 AddCallback("frameLoadingCompleted", |
| 150 &EnrollmentScreenHandler::HandleFrameLoadingCompleted); | 153 &EnrollmentScreenHandler::HandleFrameLoadingCompleted); |
| 154 AddCallback("oauthEnrollNaming", | |
|
Mattias Nissler (ping if slow)
2015/04/10 12:22:29
Let's change the language from naming -> attribute
Polina Bondarenko
2015/04/14 14:15:47
Done.
| |
| 155 &EnrollmentScreenHandler::HandleDeviceNaming); | |
| 151 } | 156 } |
| 152 | 157 |
| 153 // EnrollmentScreenHandler | 158 // EnrollmentScreenHandler |
| 154 // EnrollmentScreenActor implementation ----------------------------------- | 159 // EnrollmentScreenActor implementation ----------------------------------- |
| 155 | 160 |
| 156 void EnrollmentScreenHandler::SetParameters( | 161 void EnrollmentScreenHandler::SetParameters( |
| 157 Controller* controller, | 162 Controller* controller, |
| 158 const policy::EnrollmentConfig& config) { | 163 const policy::EnrollmentConfig& config) { |
| 159 CHECK_NE(policy::EnrollmentConfig::MODE_NONE, config.mode); | 164 CHECK_NE(policy::EnrollmentConfig::MODE_NONE, config.mode); |
| 160 controller_ = controller; | 165 controller_ = controller; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 177 } | 182 } |
| 178 | 183 |
| 179 void EnrollmentScreenHandler::Hide() { | 184 void EnrollmentScreenHandler::Hide() { |
| 180 } | 185 } |
| 181 | 186 |
| 182 void EnrollmentScreenHandler::ShowSigninScreen() { | 187 void EnrollmentScreenHandler::ShowSigninScreen() { |
| 183 observe_network_failure_ = true; | 188 observe_network_failure_ = true; |
| 184 ShowStep(kEnrollmentStepSignin); | 189 ShowStep(kEnrollmentStepSignin); |
| 185 } | 190 } |
| 186 | 191 |
| 192 void EnrollmentScreenHandler::ShowDeviceNamingScreen() { | |
| 193 base::DictionaryValue data; | |
| 194 | |
| 195 policy::BrowserPolicyConnectorChromeOS* connector = | |
|
Mattias Nissler (ping if slow)
2015/04/10 12:22:29
This should not grab the values from the connector
Polina Bondarenko
2015/04/14 14:15:47
Done.
| |
| 196 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | |
| 197 policy::DeviceCloudPolicyManagerChromeOS* policy_manager = | |
| 198 connector->GetDeviceCloudPolicyManager(); | |
| 199 | |
| 200 policy::CloudPolicyStore *store = policy_manager->core()->store(); | |
| 201 | |
| 202 const enterprise_management::PolicyData* policy = store->policy(); | |
| 203 | |
| 204 std::string annotated_asset_id = policy ? policy->annotated_asset_id() | |
| 205 : std::string(); | |
| 206 std::string annotated_location = policy ? policy->annotated_location() | |
| 207 : std::string(); | |
| 208 | |
| 209 data.SetString("device_asset_id", annotated_asset_id); | |
| 210 data.SetString("device_location", annotated_location); | |
| 211 | |
| 212 OnBeforeShowNaming(data); | |
| 213 ShowStep(kEnrollmentStepNaming); | |
|
Mattias Nissler (ping if slow)
2015/04/10 12:22:29
These two should be replaced by a single JS call t
Polina Bondarenko
2015/04/14 14:15:47
Done.
| |
| 214 } | |
| 215 | |
| 187 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() { | 216 void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() { |
| 188 ShowStep(kEnrollmentStepWorking); | 217 ShowStep(kEnrollmentStepWorking); |
| 189 } | 218 } |
| 190 | 219 |
| 191 void EnrollmentScreenHandler::ShowAuthError( | 220 void EnrollmentScreenHandler::ShowAuthError( |
| 192 const GoogleServiceAuthError& error) { | 221 const GoogleServiceAuthError& error) { |
| 193 switch (error.state()) { | 222 switch (error.state()) { |
| 194 case GoogleServiceAuthError::NONE: | 223 case GoogleServiceAuthError::NONE: |
| 195 case GoogleServiceAuthError::CAPTCHA_REQUIRED: | 224 case GoogleServiceAuthError::CAPTCHA_REQUIRED: |
| 196 case GoogleServiceAuthError::TWO_FACTOR: | 225 case GoogleServiceAuthError::TWO_FACTOR: |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 320 policy::FormatStoreStatus(status.store_status(), | 349 policy::FormatStoreStatus(status.store_status(), |
| 321 status.validation_status())), | 350 status.validation_status())), |
| 322 true); | 351 true); |
| 323 return; | 352 return; |
| 324 case policy::EnrollmentStatus::STATUS_STORE_TOKEN_AND_ID_FAILED: | 353 case policy::EnrollmentStatus::STATUS_STORE_TOKEN_AND_ID_FAILED: |
| 325 // This error should not happen for enterprise enrollment. | 354 // This error should not happen for enterprise enrollment. |
| 326 ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_STORE_TOKEN_AND_ID_FAILED, | 355 ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_STORE_TOKEN_AND_ID_FAILED, |
| 327 true); | 356 true); |
| 328 NOTREACHED(); | 357 NOTREACHED(); |
| 329 return; | 358 return; |
| 359 case policy::EnrollmentStatus::STATUS_DEVICE_NAMING_FAILED: | |
| 360 ShowError(IDS_ENTERPRISE_ENROLLMENT_DEVICE_NAMING_ERROR, false); | |
| 361 return; | |
| 330 } | 362 } |
| 331 NOTREACHED(); | 363 NOTREACHED(); |
| 332 } | 364 } |
| 333 | 365 |
| 334 // EnrollmentScreenHandler BaseScreenHandler implementation ----- | 366 // EnrollmentScreenHandler BaseScreenHandler implementation ----- |
| 335 | 367 |
| 336 void EnrollmentScreenHandler::Initialize() { | 368 void EnrollmentScreenHandler::Initialize() { |
| 337 if (show_on_init_) { | 369 if (show_on_init_) { |
| 338 Show(); | 370 Show(); |
| 339 show_on_init_ = false; | 371 show_on_init_ = false; |
| 340 } | 372 } |
| 341 } | 373 } |
| 342 | 374 |
| 343 void EnrollmentScreenHandler::DeclareLocalizedValues( | 375 void EnrollmentScreenHandler::DeclareLocalizedValues( |
| 344 ::login::LocalizedValuesBuilder* builder) { | 376 ::login::LocalizedValuesBuilder* builder) { |
| 345 builder->Add("oauthEnrollScreenTitle", | 377 builder->Add("oauthEnrollScreenTitle", |
| 346 IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE); | 378 IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE); |
| 347 builder->Add("oauthEnrollDescription", IDS_ENTERPRISE_ENROLLMENT_DESCRIPTION); | 379 builder->Add("oauthEnrollDescription", IDS_ENTERPRISE_ENROLLMENT_DESCRIPTION); |
| 348 builder->Add("oauthEnrollReEnrollmentText", | 380 builder->Add("oauthEnrollReEnrollmentText", |
| 349 IDS_ENTERPRISE_ENROLLMENT_RE_ENROLLMENT_TEXT); | 381 IDS_ENTERPRISE_ENROLLMENT_RE_ENROLLMENT_TEXT); |
| 350 builder->Add("oauthEnrollRetry", IDS_ENTERPRISE_ENROLLMENT_RETRY); | 382 builder->Add("oauthEnrollRetry", IDS_ENTERPRISE_ENROLLMENT_RETRY); |
| 351 builder->Add("oauthEnrollCancel", IDS_ENTERPRISE_ENROLLMENT_CANCEL); | 383 builder->Add("oauthEnrollCancel", IDS_ENTERPRISE_ENROLLMENT_CANCEL); |
| 352 builder->Add("oauthEnrollBack", IDS_ENTERPRISE_ENROLLMENT_BACK); | 384 builder->Add("oauthEnrollBack", IDS_ENTERPRISE_ENROLLMENT_BACK); |
| 353 builder->Add("oauthEnrollDone", IDS_ENTERPRISE_ENROLLMENT_DONE); | 385 builder->Add("oauthEnrollDone", IDS_ENTERPRISE_ENROLLMENT_DONE); |
| 386 builder->Add("oauthEnrollContinue", IDS_ENTERPRISE_ENROLLMENT_CONTINUE); | |
| 354 builder->Add("oauthEnrollSuccess", IDS_ENTERPRISE_ENROLLMENT_SUCCESS); | 387 builder->Add("oauthEnrollSuccess", IDS_ENTERPRISE_ENROLLMENT_SUCCESS); |
| 388 builder->Add("oauthEnrollNaming", IDS_ENTERPRISE_ENROLLMENT_NAMING); | |
| 355 builder->Add("oauthEnrollExplainLink", | 389 builder->Add("oauthEnrollExplainLink", |
| 356 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_LINK); | 390 IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_LINK); |
| 357 builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING); | 391 builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING); |
| 392 builder->Add("oauthEnrollAssetIdLabel", | |
| 393 IDS_ENTERPRISE_ENROLLMENT_ASSET_ID_LABEL); | |
| 394 builder->Add("oauthEnrollLocationLabel", | |
| 395 IDS_ENTERPRISE_ENROLLMENT_LOCATION_LABEL); | |
| 358 } | 396 } |
| 359 | 397 |
| 360 OobeUI::Screen EnrollmentScreenHandler::GetCurrentScreen() const { | 398 OobeUI::Screen EnrollmentScreenHandler::GetCurrentScreen() const { |
| 361 OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN; | 399 OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN; |
| 362 OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); | 400 OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); |
| 363 if (oobe_ui) | 401 if (oobe_ui) |
| 364 screen = oobe_ui->current_screen(); | 402 screen = oobe_ui->current_screen(); |
| 365 return screen; | 403 return screen; |
| 366 } | 404 } |
| 367 | 405 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 509 frame_error_ = frame_error; | 547 frame_error_ = frame_error; |
| 510 | 548 |
| 511 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) | 549 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) |
| 512 return; | 550 return; |
| 513 if (frame_error_) | 551 if (frame_error_) |
| 514 UpdateState(NetworkError::ERROR_REASON_FRAME_ERROR); | 552 UpdateState(NetworkError::ERROR_REASON_FRAME_ERROR); |
| 515 else | 553 else |
| 516 UpdateState(NetworkError::ERROR_REASON_UPDATE); | 554 UpdateState(NetworkError::ERROR_REASON_UPDATE); |
| 517 } | 555 } |
| 518 | 556 |
| 557 void EnrollmentScreenHandler::HandleDeviceNaming(const std::string& asset_id, | |
|
Mattias Nissler (ping if slow)
2015/04/10 12:22:29
nit: Let's improve the naming here, i.e. rename to
Polina Bondarenko
2015/04/14 14:15:47
Done.
| |
| 558 const std::string& location) { | |
| 559 controller_->OnDeviceNaming(asset_id, location); | |
| 560 } | |
| 561 | |
| 519 void EnrollmentScreenHandler::ShowStep(const char* step) { | 562 void EnrollmentScreenHandler::ShowStep(const char* step) { |
| 520 CallJS("showStep", std::string(step)); | 563 CallJS("showStep", std::string(step)); |
| 521 } | 564 } |
| 522 | 565 |
| 523 void EnrollmentScreenHandler::ShowError(int message_id, bool retry) { | 566 void EnrollmentScreenHandler::ShowError(int message_id, bool retry) { |
| 524 ShowErrorMessage(l10n_util::GetStringUTF8(message_id), retry); | 567 ShowErrorMessage(l10n_util::GetStringUTF8(message_id), retry); |
| 525 } | 568 } |
| 526 | 569 |
| 527 void EnrollmentScreenHandler::ShowErrorMessage(const std::string& message, | 570 void EnrollmentScreenHandler::ShowErrorMessage(const std::string& message, |
| 528 bool retry) { | 571 bool retry) { |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 547 : kEnrollmentHelpTopicRegular); | 590 : kEnrollmentHelpTopicRegular); |
| 548 | 591 |
| 549 ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data); | 592 ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data); |
| 550 if (first_show_) { | 593 if (first_show_) { |
| 551 first_show_ = false; | 594 first_show_ = false; |
| 552 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true); | 595 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true); |
| 553 } | 596 } |
| 554 histogram_helper_->OnScreenShow(); | 597 histogram_helper_->OnScreenShow(); |
| 555 } | 598 } |
| 556 | 599 |
| 600 void EnrollmentScreenHandler::OnBeforeShowNaming( | |
| 601 const base::DictionaryValue& data) { | |
| 602 CallJS("onBeforeShowNaming", data); | |
| 603 } | |
| 604 | |
| 557 } // namespace chromeos | 605 } // namespace chromeos |
| OLD | NEW |