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