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 |