| 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/chromeos/login/error_screens_histogram_helper.h" | 15 #include "chrome/browser/chromeos/login/error_screens_histogram_helper.h" |
| 16 #include "chrome/browser/chromeos/login/screens/network_error.h" |
| 16 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 17 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| 17 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" | 18 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" |
| 18 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 19 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 19 #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" | 20 #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" |
| 20 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
| 21 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" | 22 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
| 22 #include "chrome/grit/generated_resources.h" | 23 #include "chrome/grit/generated_resources.h" |
| 23 #include "chromeos/network/network_state.h" | 24 #include "chromeos/network/network_state.h" |
| 24 #include "chromeos/network/network_state_handler.h" | 25 #include "chromeos/network/network_state_handler.h" |
| 25 #include "components/login/localized_values_builder.h" | 26 #include "components/login/localized_values_builder.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 std::string GetNetworkName(const std::string& service_path) { | 76 std::string GetNetworkName(const std::string& service_path) { |
| 76 const NetworkState* network = | 77 const NetworkState* network = |
| 77 NetworkHandler::Get()->network_state_handler()->GetNetworkState( | 78 NetworkHandler::Get()->network_state_handler()->GetNetworkState( |
| 78 service_path); | 79 service_path); |
| 79 if (!network) | 80 if (!network) |
| 80 return std::string(); | 81 return std::string(); |
| 81 return network->name(); | 82 return network->name(); |
| 82 } | 83 } |
| 83 | 84 |
| 84 bool IsBehindCaptivePortal(NetworkStateInformer::State state, | 85 bool IsBehindCaptivePortal(NetworkStateInformer::State state, |
| 85 ErrorScreenActor::ErrorReason reason) { | 86 NetworkError::ErrorReason reason) { |
| 86 return state == NetworkStateInformer::CAPTIVE_PORTAL || | 87 return state == NetworkStateInformer::CAPTIVE_PORTAL || |
| 87 reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED; | 88 reason == NetworkError::ERROR_REASON_PORTAL_DETECTED; |
| 88 } | 89 } |
| 89 | 90 |
| 90 bool IsProxyError(NetworkStateInformer::State state, | 91 bool IsProxyError(NetworkStateInformer::State state, |
| 91 ErrorScreenActor::ErrorReason reason) { | 92 NetworkError::ErrorReason reason) { |
| 92 return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || | 93 return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || |
| 93 reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED || | 94 reason == NetworkError::ERROR_REASON_PROXY_AUTH_CANCELLED || |
| 94 reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED; | 95 reason == NetworkError::ERROR_REASON_PROXY_CONNECTION_FAILED; |
| 95 } | 96 } |
| 96 | 97 |
| 97 } // namespace | 98 } // namespace |
| 98 | 99 |
| 99 // EnrollmentScreenHandler, public ------------------------------ | 100 // EnrollmentScreenHandler, public ------------------------------ |
| 100 | 101 |
| 101 EnrollmentScreenHandler::EnrollmentScreenHandler( | 102 EnrollmentScreenHandler::EnrollmentScreenHandler( |
| 102 const scoped_refptr<NetworkStateInformer>& network_state_informer, | 103 const scoped_refptr<NetworkStateInformer>& network_state_informer, |
| 103 ErrorScreenActor* error_screen_actor) | 104 NetworkErrorModel* network_error_model) |
| 104 : BaseScreenHandler(kJsScreenPath), | 105 : BaseScreenHandler(kJsScreenPath), |
| 105 controller_(NULL), | 106 controller_(NULL), |
| 106 show_on_init_(false), | 107 show_on_init_(false), |
| 107 frame_error_(net::OK), | 108 frame_error_(net::OK), |
| 108 first_show_(true), | 109 first_show_(true), |
| 109 observe_network_failure_(false), | 110 observe_network_failure_(false), |
| 110 network_state_informer_(network_state_informer), | 111 network_state_informer_(network_state_informer), |
| 111 error_screen_actor_(error_screen_actor), | 112 network_error_model_(network_error_model), |
| 112 histogram_helper_(new ErrorScreensHistogramHelper("Enrollment")), | 113 histogram_helper_(new ErrorScreensHistogramHelper("Enrollment")), |
| 113 auth_extension_(nullptr), | 114 auth_extension_(nullptr), |
| 114 weak_ptr_factory_(this) { | 115 weak_ptr_factory_(this) { |
| 115 set_async_assets_load_id(OobeUI::kScreenOobeEnrollment); | 116 set_async_assets_load_id(OobeUI::kScreenOobeEnrollment); |
| 116 DCHECK(network_state_informer_.get()); | 117 DCHECK(network_state_informer_.get()); |
| 117 DCHECK(error_screen_actor_); | 118 DCHECK(network_error_model_); |
| 118 network_state_informer_->AddObserver(this); | 119 network_state_informer_->AddObserver(this); |
| 119 | 120 |
| 120 if (chromeos::LoginDisplayHostImpl::default_host()) { | 121 if (chromeos::LoginDisplayHostImpl::default_host()) { |
| 121 chromeos::WebUILoginView* login_view = | 122 chromeos::WebUILoginView* login_view = |
| 122 chromeos::LoginDisplayHostImpl::default_host()->GetWebUILoginView(); | 123 chromeos::LoginDisplayHostImpl::default_host()->GetWebUILoginView(); |
| 123 if (login_view) | 124 if (login_view) |
| 124 login_view->AddFrameObserver(this); | 125 login_view->AddFrameObserver(this); |
| 125 } | 126 } |
| 126 } | 127 } |
| 127 | 128 |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 screen = oobe_ui->current_screen(); | 364 screen = oobe_ui->current_screen(); |
| 364 return screen; | 365 return screen; |
| 365 } | 366 } |
| 366 | 367 |
| 367 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const { | 368 bool EnrollmentScreenHandler::IsOnEnrollmentScreen() const { |
| 368 return (GetCurrentScreen() == OobeUI::SCREEN_OOBE_ENROLLMENT); | 369 return (GetCurrentScreen() == OobeUI::SCREEN_OOBE_ENROLLMENT); |
| 369 } | 370 } |
| 370 | 371 |
| 371 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const { | 372 bool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const { |
| 372 return (GetCurrentScreen() == OobeUI::SCREEN_ERROR_MESSAGE && | 373 return (GetCurrentScreen() == OobeUI::SCREEN_ERROR_MESSAGE && |
| 373 error_screen_actor_->parent_screen() == | 374 network_error_model_->GetParentScreen() == |
| 374 OobeUI::SCREEN_OOBE_ENROLLMENT); | 375 OobeUI::SCREEN_OOBE_ENROLLMENT); |
| 375 } | 376 } |
| 376 | 377 |
| 377 void EnrollmentScreenHandler::UpdateState( | 378 void EnrollmentScreenHandler::UpdateState(NetworkError::ErrorReason reason) { |
| 378 ErrorScreenActor::ErrorReason reason) { | |
| 379 UpdateStateInternal(reason, false); | 379 UpdateStateInternal(reason, false); |
| 380 } | 380 } |
| 381 | 381 |
| 382 // TODO(rsorokin): This function is mostly copied from SigninScreenHandler and | 382 // TODO(rsorokin): This function is mostly copied from SigninScreenHandler and |
| 383 // should be refactored in the future. | 383 // should be refactored in the future. |
| 384 void EnrollmentScreenHandler::UpdateStateInternal( | 384 void EnrollmentScreenHandler::UpdateStateInternal( |
| 385 ErrorScreenActor::ErrorReason reason, | 385 NetworkError::ErrorReason reason, |
| 386 bool force_update) { | 386 bool force_update) { |
| 387 if (!force_update && !IsOnEnrollmentScreen() && | 387 if (!force_update && !IsOnEnrollmentScreen() && |
| 388 !IsEnrollmentScreenHiddenByError()) { | 388 !IsEnrollmentScreenHiddenByError()) { |
| 389 return; | 389 return; |
| 390 } | 390 } |
| 391 | 391 |
| 392 if (!force_update && !observe_network_failure_) | 392 if (!force_update && !observe_network_failure_) |
| 393 return; | 393 return; |
| 394 | 394 |
| 395 NetworkStateInformer::State state = network_state_informer_->state(); | 395 NetworkStateInformer::State state = network_state_informer_->state(); |
| 396 const std::string network_path = network_state_informer_->network_path(); | 396 const std::string network_path = network_state_informer_->network_path(); |
| 397 const bool is_online = (state == NetworkStateInformer::ONLINE); | 397 const bool is_online = (state == NetworkStateInformer::ONLINE); |
| 398 const bool is_behind_captive_portal = | 398 const bool is_behind_captive_portal = |
| 399 (state == NetworkStateInformer::CAPTIVE_PORTAL); | 399 (state == NetworkStateInformer::CAPTIVE_PORTAL); |
| 400 const bool is_frame_error = | 400 const bool is_frame_error = |
| 401 (frame_error() != net::OK) || | 401 (frame_error() != net::OK) || |
| 402 (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR); | 402 (reason == NetworkError::ERROR_REASON_FRAME_ERROR); |
| 403 | 403 |
| 404 LOG(WARNING) << "EnrollmentScreenHandler::UpdateState(): " | 404 LOG(WARNING) << "EnrollmentScreenHandler::UpdateState(): " |
| 405 << "state=" << NetworkStateInformer::StatusString(state) << ", " | 405 << "state=" << NetworkStateInformer::StatusString(state) << ", " |
| 406 << "reason=" << ErrorScreenActor::ErrorReasonString(reason); | 406 << "reason=" << NetworkError::ErrorReasonString(reason); |
| 407 | 407 |
| 408 if (is_online || !is_behind_captive_portal) | 408 if (is_online || !is_behind_captive_portal) |
| 409 error_screen_actor_->HideCaptivePortal(); | 409 network_error_model_->HideCaptivePortal(); |
| 410 | 410 |
| 411 if (is_frame_error) { | 411 if (is_frame_error) { |
| 412 LOG(WARNING) << "Retry page load"; | 412 LOG(WARNING) << "Retry page load"; |
| 413 // TODO(rsorokin): Too many consecutive reloads. | 413 // TODO(rsorokin): Too many consecutive reloads. |
| 414 CallJS("doReload"); | 414 CallJS("doReload"); |
| 415 } | 415 } |
| 416 | 416 |
| 417 if (!is_online || is_frame_error) | 417 if (!is_online || is_frame_error) |
| 418 SetupAndShowOfflineMessage(state, reason); | 418 SetupAndShowOfflineMessage(state, reason); |
| 419 else | 419 else |
| 420 HideOfflineMessage(state, reason); | 420 HideOfflineMessage(state, reason); |
| 421 } | 421 } |
| 422 | 422 |
| 423 void EnrollmentScreenHandler::SetupAndShowOfflineMessage( | 423 void EnrollmentScreenHandler::SetupAndShowOfflineMessage( |
| 424 NetworkStateInformer::State state, | 424 NetworkStateInformer::State state, |
| 425 ErrorScreenActor::ErrorReason reason) { | 425 NetworkError::ErrorReason reason) { |
| 426 const std::string network_path = network_state_informer_->network_path(); | 426 const std::string network_path = network_state_informer_->network_path(); |
| 427 const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason); | 427 const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason); |
| 428 const bool is_proxy_error = IsProxyError(state, reason); | 428 const bool is_proxy_error = IsProxyError(state, reason); |
| 429 const bool is_frame_error = | 429 const bool is_frame_error = |
| 430 (frame_error() != net::OK) || | 430 (frame_error() != net::OK) || |
| 431 (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR); | 431 (reason == NetworkError::ERROR_REASON_FRAME_ERROR); |
| 432 | 432 |
| 433 if (is_proxy_error) { | 433 if (is_proxy_error) { |
| 434 error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY, | 434 network_error_model_->SetErrorState(NetworkError::ERROR_STATE_PROXY, |
| 435 std::string()); | 435 std::string()); |
| 436 } else if (is_behind_captive_portal) { | 436 } else if (is_behind_captive_portal) { |
| 437 // Do not bother a user with obsessive captive portal showing. This | 437 // Do not bother a user with obsessive captive portal showing. This |
| 438 // check makes captive portal being shown only once: either when error | 438 // check makes captive portal being shown only once: either when error |
| 439 // screen is shown for the first time or when switching from another | 439 // screen is shown for the first time or when switching from another |
| 440 // error screen (offline, proxy). | 440 // error screen (offline, proxy). |
| 441 if (IsOnEnrollmentScreen() || (error_screen_actor_->error_state() != | 441 if (IsOnEnrollmentScreen() || (network_error_model_->GetErrorState() != |
| 442 ErrorScreen::ERROR_STATE_PORTAL)) { | 442 NetworkError::ERROR_STATE_PORTAL)) { |
| 443 error_screen_actor_->FixCaptivePortal(); | 443 network_error_model_->FixCaptivePortal(); |
| 444 } | 444 } |
| 445 const std::string network_name = GetNetworkName(network_path); | 445 const std::string network_name = GetNetworkName(network_path); |
| 446 error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, | 446 network_error_model_->SetErrorState(NetworkError::ERROR_STATE_PORTAL, |
| 447 network_name); | 447 network_name); |
| 448 } else if (is_frame_error) { | 448 } else if (is_frame_error) { |
| 449 error_screen_actor_->SetErrorState( | 449 network_error_model_->SetErrorState( |
| 450 ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT, std::string()); | 450 NetworkError::ERROR_STATE_AUTH_EXT_TIMEOUT, std::string()); |
| 451 } else { | 451 } else { |
| 452 error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, | 452 network_error_model_->SetErrorState(NetworkError::ERROR_STATE_OFFLINE, |
| 453 std::string()); | 453 std::string()); |
| 454 } | 454 } |
| 455 | 455 |
| 456 if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { | 456 if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { |
| 457 base::DictionaryValue params; | |
| 458 const std::string network_type = network_state_informer_->network_type(); | 457 const std::string network_type = network_state_informer_->network_type(); |
| 459 params.SetString("lastNetworkType", network_type); | 458 network_error_model_->SetUIState(NetworkError::UI_STATE_SIGNIN); |
| 460 error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_SIGNIN); | 459 network_error_model_->SetParentScreen(OobeUI::SCREEN_OOBE_ENROLLMENT); |
| 461 error_screen_actor_->Show(OobeUI::SCREEN_OOBE_ENROLLMENT, | 460 network_error_model_->SetHideCallback(base::Bind( |
| 462 ¶ms, | 461 &EnrollmentScreenHandler::DoShow, weak_ptr_factory_.GetWeakPtr())); |
| 463 base::Bind(&EnrollmentScreenHandler::DoShow, | 462 network_error_model_->Show(); |
| 464 weak_ptr_factory_.GetWeakPtr())); | 463 histogram_helper_->OnErrorShow(network_error_model_->GetErrorState()); |
| 465 histogram_helper_->OnErrorShow(error_screen_actor_->error_state()); | |
| 466 } | 464 } |
| 467 } | 465 } |
| 468 | 466 |
| 469 void EnrollmentScreenHandler::HideOfflineMessage( | 467 void EnrollmentScreenHandler::HideOfflineMessage( |
| 470 NetworkStateInformer::State state, | 468 NetworkStateInformer::State state, |
| 471 ErrorScreenActor::ErrorReason reason) { | 469 NetworkError::ErrorReason reason) { |
| 472 if (IsEnrollmentScreenHiddenByError()) | 470 if (IsEnrollmentScreenHiddenByError()) |
| 473 error_screen_actor_->Hide(); | 471 network_error_model_->Hide(); |
| 474 histogram_helper_->OnErrorHide(); | 472 histogram_helper_->OnErrorHide(); |
| 475 } | 473 } |
| 476 | 474 |
| 477 void EnrollmentScreenHandler::OnFrameError( | 475 void EnrollmentScreenHandler::OnFrameError( |
| 478 const std::string& frame_unique_name) { | 476 const std::string& frame_unique_name) { |
| 479 if (frame_unique_name == "oauth-enroll-signin-frame") { | 477 if (frame_unique_name == "oauth-enroll-signin-frame") { |
| 480 HandleFrameLoadingCompleted(net::ERR_FAILED); | 478 HandleFrameLoadingCompleted(net::ERR_FAILED); |
| 481 } | 479 } |
| 482 } | 480 } |
| 483 // EnrollmentScreenHandler, private ----------------------------- | 481 // EnrollmentScreenHandler, private ----------------------------- |
| (...skipping 20 matching lines...) Expand all Loading... |
| 504 controller_->OnRetry(); | 502 controller_->OnRetry(); |
| 505 } | 503 } |
| 506 | 504 |
| 507 void EnrollmentScreenHandler::HandleFrameLoadingCompleted(int status) { | 505 void EnrollmentScreenHandler::HandleFrameLoadingCompleted(int status) { |
| 508 const net::Error frame_error = static_cast<net::Error>(status); | 506 const net::Error frame_error = static_cast<net::Error>(status); |
| 509 frame_error_ = frame_error; | 507 frame_error_ = frame_error; |
| 510 | 508 |
| 511 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) | 509 if (network_state_informer_->state() != NetworkStateInformer::ONLINE) |
| 512 return; | 510 return; |
| 513 if (frame_error_) | 511 if (frame_error_) |
| 514 UpdateState(ErrorScreenActor::ERROR_REASON_FRAME_ERROR); | 512 UpdateState(NetworkError::ERROR_REASON_FRAME_ERROR); |
| 515 else | 513 else |
| 516 UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); | 514 UpdateState(NetworkError::ERROR_REASON_UPDATE); |
| 517 } | 515 } |
| 518 | 516 |
| 519 void EnrollmentScreenHandler::ShowStep(const char* step) { | 517 void EnrollmentScreenHandler::ShowStep(const char* step) { |
| 520 CallJS("showStep", std::string(step)); | 518 CallJS("showStep", std::string(step)); |
| 521 } | 519 } |
| 522 | 520 |
| 523 void EnrollmentScreenHandler::ShowError(int message_id, bool retry) { | 521 void EnrollmentScreenHandler::ShowError(int message_id, bool retry) { |
| 524 ShowErrorMessage(l10n_util::GetStringUTF8(message_id), retry); | 522 ShowErrorMessage(l10n_util::GetStringUTF8(message_id), retry); |
| 525 } | 523 } |
| 526 | 524 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 542 config_.mode == policy::EnrollmentConfig::MODE_SERVER_ADVERTISED || | 540 config_.mode == policy::EnrollmentConfig::MODE_SERVER_ADVERTISED || |
| 543 config_.mode == policy::EnrollmentConfig::MODE_SERVER_FORCED; | 541 config_.mode == policy::EnrollmentConfig::MODE_SERVER_FORCED; |
| 544 screen_data.SetInteger("learn_more_help_topic_id", | 542 screen_data.SetInteger("learn_more_help_topic_id", |
| 545 is_server_triggered_enrollment | 543 is_server_triggered_enrollment |
| 546 ? kEnrollmentHelpTopicServerTriggered | 544 ? kEnrollmentHelpTopicServerTriggered |
| 547 : kEnrollmentHelpTopicRegular); | 545 : kEnrollmentHelpTopicRegular); |
| 548 | 546 |
| 549 ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data); | 547 ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data); |
| 550 if (first_show_) { | 548 if (first_show_) { |
| 551 first_show_ = false; | 549 first_show_ = false; |
| 552 UpdateStateInternal(ErrorScreenActor::ERROR_REASON_UPDATE, true); | 550 UpdateStateInternal(NetworkError::ERROR_REASON_UPDATE, true); |
| 553 } | 551 } |
| 554 histogram_helper_->OnScreenShow(); | 552 histogram_helper_->OnScreenShow(); |
| 555 } | 553 } |
| 556 | 554 |
| 557 } // namespace chromeos | 555 } // namespace chromeos |
| OLD | NEW |