Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc

Issue 872633008: Migrate (Network)ErrorScreen to ScreenContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 &params, 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698