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 |