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

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: cleanup 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/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
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
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 &params, 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698