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

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

Issue 12207077: Refactored error screen logic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 7 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/signin_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 146
147 bool IsSigninScreen(const OobeUI::Screen screen) { 147 bool IsSigninScreen(const OobeUI::Screen screen) {
148 return screen == OobeUI::SCREEN_GAIA_SIGNIN || 148 return screen == OobeUI::SCREEN_GAIA_SIGNIN ||
149 screen == OobeUI::SCREEN_ACCOUNT_PICKER; 149 screen == OobeUI::SCREEN_ACCOUNT_PICKER;
150 } 150 }
151 151
152 // Returns true if |state| is related to the sign-in screen errors. 152 // Returns true if |state| is related to the sign-in screen errors.
153 bool IsSigninScreenError(ErrorScreenActor::State state) { 153 bool IsSigninScreenError(ErrorScreenActor::State state) {
154 return state == ErrorScreenActor::STATE_PROXY_ERROR || 154 return state == ErrorScreenActor::STATE_PROXY_ERROR ||
155 state == ErrorScreenActor::STATE_CAPTIVE_PORTAL_ERROR || 155 state == ErrorScreenActor::STATE_CAPTIVE_PORTAL_ERROR ||
156 state == ErrorScreenActor::STATE_TIMEOUT_ERROR ||
156 state == ErrorScreenActor::STATE_OFFLINE_ERROR; 157 state == ErrorScreenActor::STATE_OFFLINE_ERROR;
157 } 158 }
158 159
159 // Returns a pointer to a Network instance by service path or NULL if 160 // Returns a pointer to a Network instance by service path or NULL if
160 // network can not be found. 161 // network can not be found.
161 Network* FindNetworkByPath(const std::string& service_path) { 162 Network* FindNetworkByPath(const std::string& service_path) {
162 CrosLibrary* cros = CrosLibrary::Get(); 163 CrosLibrary* cros = CrosLibrary::Get();
163 if (!cros) 164 if (!cros)
164 return NULL; 165 return NULL;
165 NetworkLibrary* network_library = cros->GetNetworkLibrary(); 166 NetworkLibrary* network_library = cros->GetNetworkLibrary();
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 base::TimeDelta::FromSeconds(kConnectingTimeoutSec)); 497 base::TimeDelta::FromSeconds(kConnectingTimeoutSec));
497 } 498 }
498 return; 499 return;
499 } 500 }
500 connecting_closure_.Cancel(); 501 connecting_closure_.Cancel();
501 502
502 bool is_online = (state == NetworkStateInformer::ONLINE); 503 bool is_online = (state == NetworkStateInformer::ONLINE);
503 bool is_under_captive_portal = 504 bool is_under_captive_portal =
504 (state == NetworkStateInformer::CAPTIVE_PORTAL); 505 (state == NetworkStateInformer::CAPTIVE_PORTAL);
505 bool is_proxy_error = IsProxyError(state, reason); 506 bool is_proxy_error = IsProxyError(state, reason);
506 bool is_timeout = (reason == ErrorScreenActor::kErrorReasonLoadingTimeout); 507 bool is_gaia_loading_timeout =
508 (reason == ErrorScreenActor::kErrorReasonLoadingTimeout);
507 bool is_gaia_signin = 509 bool is_gaia_signin =
508 (IsSigninScreen(GetCurrentScreen()) || IsSigninScreenHiddenByError()) && 510 (IsSigninScreen(GetCurrentScreen()) || IsSigninScreenHiddenByError()) &&
509 ui_state_ == UI_STATE_GAIA_SIGNIN; 511 ui_state_ == UI_STATE_GAIA_SIGNIN;
510 bool is_gaia_reloaded = false; 512 bool is_gaia_reloaded = false;
511 bool error_screen_should_overlay = !offline_login_active_ && IsGaiaLogin(); 513 bool error_screen_should_overlay = !offline_login_active_ && IsGaiaLogin();
512 514
513 // Reload frame if network is changed. 515 // Reload frame if network is changed.
514 if (reason == ErrorScreenActor::kErrorReasonNetworkChanged) { 516 if (reason == ErrorScreenActor::kErrorReasonNetworkChanged) {
515 if (is_online && 517 if (is_online &&
516 last_network_state_ != NetworkStateInformer::ONLINE && 518 last_network_state_ != NetworkStateInformer::ONLINE &&
517 is_gaia_signin && !is_gaia_reloaded) { 519 is_gaia_signin && !is_gaia_reloaded) {
518 // Schedules a immediate retry. 520 // Schedules a immediate retry.
519 LOG(WARNING) << "Retry page load since network has been changed."; 521 LOG(WARNING) << "Retry page load since network has been changed.";
520 ReloadGaiaScreen(); 522 ReloadGaiaScreen();
521 is_gaia_reloaded = true; 523 is_gaia_reloaded = true;
522 } 524 }
523 } 525 }
524 last_network_state_ = state; 526 last_network_state_ = state;
525 527
526 if (reason == ErrorScreenActor::kErrorReasonProxyConfigChanged && 528 if (reason == ErrorScreenActor::kErrorReasonProxyConfigChanged &&
527 error_screen_should_overlay && 529 error_screen_should_overlay &&
528 is_gaia_signin && !is_gaia_reloaded) { 530 is_gaia_signin && !is_gaia_reloaded) {
529 // Schedules a immediate retry. 531 // Schedules a immediate retry.
530 LOG(WARNING) << "Retry page load since proxy settings has been changed."; 532 LOG(WARNING) << "Retry page load since proxy settings has been changed.";
531 ReloadGaiaScreen(); 533 ReloadGaiaScreen();
532 is_gaia_reloaded = true; 534 is_gaia_reloaded = true;
533 } 535 }
534 536
535 // Fake portal state for loading timeout. 537 if (reason == ErrorScreenActor::kErrorReasonLoadingTimeout)
536 if (reason == ErrorScreenActor::kErrorReasonLoadingTimeout) {
537 is_online = false; 538 is_online = false;
538 is_under_captive_portal = true;
539 }
540 539
541 // Portal was detected via generate_204 redirect on Chrome side. 540 // Portal was detected via generate_204 redirect on Chrome side.
542 // Subsequent call to show dialog if it's already shown does nothing. 541 // Subsequent call to show dialog if it's already shown does nothing.
543 if (reason == ErrorScreenActor::kErrorReasonPortalDetected) { 542 if (reason == ErrorScreenActor::kErrorReasonPortalDetected) {
544 is_online = false; 543 is_online = false;
545 is_under_captive_portal = true; 544 is_under_captive_portal = true;
546 } 545 }
547 546
547 if (is_online || !is_under_captive_portal)
548 error_screen_actor_->HideCaptivePortal();
549
548 if (!is_online && is_gaia_signin && !offline_login_active_) { 550 if (!is_online && is_gaia_signin && !offline_login_active_) {
549 LOG(WARNING) << "Show offline message: state=" << state << ", " 551 LOG(WARNING) << "Show offline message: state=" << state << ", "
550 << "network_id=" << network_id << ", " 552 << "network_id=" << network_id << ", "
551 << "reason=" << reason << ", " 553 << "reason=" << reason << ", "
552 << "is_under_captive_portal=" << is_under_captive_portal; 554 << "is_under_captive_portal=" << is_under_captive_portal;
553 if (is_under_captive_portal && !is_proxy_error) { 555 if (is_proxy_error) {
556 error_screen_actor_->ShowProxyError();
557 } else if (is_under_captive_portal) {
554 // Do not bother a user with obsessive captive portal showing. This 558 // Do not bother a user with obsessive captive portal showing. This
555 // check makes captive portal being shown only once: either when error 559 // check makes captive portal being shown only once: either when error
556 // screen is shown for the first time or when switching from another 560 // screen is shown for the first time or when switching from another
557 // error screen (offline, proxy). 561 // error screen (offline, proxy).
558 if (!IsGaiaLogin() || 562 if (!IsGaiaLogin() ||
559 (error_screen_actor_->state() != 563 (error_screen_actor_->state() !=
560 ErrorScreenActor::STATE_CAPTIVE_PORTAL_ERROR)) { 564 ErrorScreenActor::STATE_CAPTIVE_PORTAL_ERROR)) {
561 // In case of timeout we're suspecting that network might be 565 error_screen_actor_->FixCaptivePortal();
562 // a captive portal but would like to check that first.
563 // Otherwise (signal from shill / generate_204 got redirected)
564 // show dialog right away.
565 if (is_timeout)
566 error_screen_actor_->FixCaptivePortal();
567 else
568 error_screen_actor_->ShowCaptivePortal();
569 } 566 }
570 } else { 567 std::string network_name = GetNetworkName(service_path);
571 error_screen_actor_->HideCaptivePortal(); 568 error_screen_actor_->ShowCaptivePortalError(network_name);
572 } 569 } else if (is_gaia_loading_timeout) {
573 570 error_screen_actor_->ShowTimeoutError();
574 if (is_under_captive_portal) {
575 if (is_proxy_error) {
576 error_screen_actor_->ShowProxyError();
577 } else {
578 std::string network_name = GetNetworkName(service_path);
579 error_screen_actor_->ShowCaptivePortalError(network_name);
580 }
581 } else if (is_proxy_error) {
582 error_screen_actor_->ShowProxyError();
583 } else { 571 } else {
584 error_screen_actor_->ShowOfflineError(); 572 error_screen_actor_->ShowOfflineError();
585 } 573 }
586 574
587 bool guest_signin_allowed = IsGuestSigninAllowed() && 575 bool guest_signin_allowed = IsGuestSigninAllowed() &&
588 IsSigninScreenError(error_screen_actor_->state()); 576 IsSigninScreenError(error_screen_actor_->state());
589 error_screen_actor_->AllowGuestSignin(guest_signin_allowed); 577 error_screen_actor_->AllowGuestSignin(guest_signin_allowed);
590 578
591 bool offline_login_allowed = IsOfflineLoginAllowed() && 579 bool offline_login_allowed = IsOfflineLoginAllowed() &&
592 IsSigninScreenError(error_screen_actor_->state()); 580 IsSigninScreenError(error_screen_actor_->state()) &&
581 error_screen_actor_->state() != ErrorScreenActor::STATE_TIMEOUT_ERROR;
593 error_screen_actor_->AllowOfflineLogin(offline_login_allowed); 582 error_screen_actor_->AllowOfflineLogin(offline_login_allowed);
594 583
595 if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { 584 if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) {
596 DictionaryValue params; 585 DictionaryValue params;
597 params.SetInteger("lastNetworkType", static_cast<int>(connection_type)); 586 params.SetInteger("lastNetworkType", static_cast<int>(connection_type));
598 error_screen_actor_->Show(OobeUI::SCREEN_GAIA_SIGNIN, &params); 587 error_screen_actor_->Show(OobeUI::SCREEN_GAIA_SIGNIN, &params);
599 } 588 }
600 } else { 589 } else {
601 error_screen_actor_->HideCaptivePortal();
602
603 if (IsSigninScreenHiddenByError()) { 590 if (IsSigninScreenHiddenByError()) {
604 LOG(WARNING) << "Hide offline message. state=" << state << ", " 591 LOG(WARNING) << "Hide offline message. state=" << state << ", "
605 << "network_id=" << network_id << ", " 592 << "network_id=" << network_id << ", "
606 << "reason=" << reason; 593 << "reason=" << reason;
607 error_screen_actor_->Hide(); 594 error_screen_actor_->Hide();
608 595
609 // Forces a reload for Gaia screen on hiding error message. 596 // Forces a reload for Gaia screen on hiding error message.
610 if (is_gaia_signin && !is_gaia_reloaded) { 597 if (is_gaia_signin && !is_gaia_reloaded) {
611 ReloadGaiaScreen(); 598 ReloadGaiaScreen();
612 is_gaia_reloaded = true; 599 is_gaia_reloaded = true;
(...skipping 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 if (!cros_settings) 1660 if (!cros_settings)
1674 return false; 1661 return false;
1675 1662
1676 // Offline login is allowed only when user pods are hidden. 1663 // Offline login is allowed only when user pods are hidden.
1677 bool show_pods; 1664 bool show_pods;
1678 cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods); 1665 cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods);
1679 return !show_pods; 1666 return !show_pods;
1680 } 1667 }
1681 1668
1682 } // namespace chromeos 1669 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698