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

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

Issue 416493002: Fixed Gaia reloading. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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/signin_screen_handler.h ('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 <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"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 // Type of the login screen UI that is currently presented to user. 94 // Type of the login screen UI that is currently presented to user.
95 const char kSourceGaiaSignin[] = "gaia-signin"; 95 const char kSourceGaiaSignin[] = "gaia-signin";
96 const char kSourceAccountPicker[] = "account-picker"; 96 const char kSourceAccountPicker[] = "account-picker";
97 97
98 static bool Contains(const std::vector<std::string>& container, 98 static bool Contains(const std::vector<std::string>& container,
99 const std::string& value) { 99 const std::string& value) {
100 return std::find(container.begin(), container.end(), value) != 100 return std::find(container.begin(), container.end(), value) !=
101 container.end(); 101 container.end();
102 } 102 }
103 103
104 class CallOnReturn {
105 public:
106 explicit CallOnReturn(const base::Closure& callback)
107 : callback_(callback), call_scheduled_(false) {}
108
109 ~CallOnReturn() {
110 if (call_scheduled_ && !callback_.is_null())
111 callback_.Run();
112 }
113
114 void ScheduleCall() { call_scheduled_ = true; }
115
116 private:
117 base::Closure callback_;
118 bool call_scheduled_;
119
120 DISALLOW_COPY_AND_ASSIGN(CallOnReturn);
121 };
122
104 } // namespace 123 } // namespace
105 124
106 namespace chromeos { 125 namespace chromeos {
107 126
108 namespace { 127 namespace {
109 128
110 bool IsOnline(NetworkStateInformer::State state, 129 bool IsOnline(NetworkStateInformer::State state,
111 ErrorScreenActor::ErrorReason reason) { 130 ErrorScreenActor::ErrorReason reason) {
112 return state == NetworkStateInformer::ONLINE && 131 return state == NetworkStateInformer::ONLINE &&
113 reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED && 132 reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED &&
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 554 (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT);
536 const bool is_gaia_error = 555 const bool is_gaia_error =
537 FrameError() != net::OK && FrameError() != net::ERR_NETWORK_CHANGED; 556 FrameError() != net::OK && FrameError() != net::ERR_NETWORK_CHANGED;
538 const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError(); 557 const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError();
539 const bool error_screen_should_overlay = 558 const bool error_screen_should_overlay =
540 !offline_login_active_ && IsGaiaVisible(); 559 !offline_login_active_ && IsGaiaVisible();
541 const bool from_not_online_to_online_transition = 560 const bool from_not_online_to_online_transition =
542 is_online && last_network_state_ != NetworkStateInformer::ONLINE; 561 is_online && last_network_state_ != NetworkStateInformer::ONLINE;
543 last_network_state_ = state; 562 last_network_state_ = state;
544 563
564 CallOnReturn reload_gaia(base::Bind(
565 &SigninScreenHandler::ReloadGaia, weak_factory_.GetWeakPtr(), true));
566
545 if (is_online || !is_behind_captive_portal) 567 if (is_online || !is_behind_captive_portal)
546 error_screen_actor_->HideCaptivePortal(); 568 error_screen_actor_->HideCaptivePortal();
547 569
548 // Hide offline message (if needed) and return if current screen is 570 // Hide offline message (if needed) and return if current screen is
549 // not a Gaia frame. 571 // not a Gaia frame.
550 if (!is_gaia_signin) { 572 if (!is_gaia_signin) {
551 if (!IsSigninScreenHiddenByError()) 573 if (!IsSigninScreenHiddenByError())
552 HideOfflineMessage(state, reason); 574 HideOfflineMessage(state, reason);
553 return; 575 return;
554 } 576 }
555 577
556 // Reload frame if network state is changed from {!ONLINE} -> ONLINE state. 578 // Reload frame if network state is changed from {!ONLINE} -> ONLINE state.
557 if (reason == ErrorScreenActor::ERROR_REASON_NETWORK_STATE_CHANGED && 579 if (reason == ErrorScreenActor::ERROR_REASON_NETWORK_STATE_CHANGED &&
558 from_not_online_to_online_transition) { 580 from_not_online_to_online_transition) {
559 // Schedules a immediate retry. 581 // Schedules a immediate retry.
560 LOG(WARNING) << "Retry page load since network has been changed."; 582 LOG(WARNING) << "Retry frame load since network has been changed.";
561 ReloadGaiaScreen(); 583 reload_gaia.ScheduleCall();
562 } 584 }
563 585
564 if (reason == ErrorScreenActor::ERROR_REASON_PROXY_CONFIG_CHANGED && 586 if (reason == ErrorScreenActor::ERROR_REASON_PROXY_CONFIG_CHANGED &&
565 error_screen_should_overlay) { 587 error_screen_should_overlay) {
566 // Schedules a immediate retry. 588 // Schedules a immediate retry.
567 LOG(WARNING) << "Retry page load since proxy settings has been changed."; 589 LOG(WARNING) << "Retry frameload since proxy settings has been changed.";
568 ReloadGaiaScreen(); 590 reload_gaia.ScheduleCall();
569 } 591 }
570 592
571 if (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR && 593 if (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR &&
572 !IsProxyError(state, reason, FrameError())) { 594 !IsProxyError(state, reason, FrameError())) {
573 LOG(WARNING) << "Retry page load due to reason: " 595 LOG(WARNING) << "Retry frame load due to reason: "
574 << ErrorScreenActor::ErrorReasonString(reason); 596 << ErrorScreenActor::ErrorReasonString(reason);
575 ReloadGaiaScreen(); 597 reload_gaia.ScheduleCall();
598 }
599
600 if (is_gaia_loading_timeout) {
601 LOG(WARNING) << "Retry frame load due to loading timeout.";
602 reload_gaia.ScheduleCall();
576 } 603 }
577 604
578 if ((!is_online || is_gaia_loading_timeout || is_gaia_error) && 605 if ((!is_online || is_gaia_loading_timeout || is_gaia_error) &&
579 !offline_login_active_) { 606 !offline_login_active_) {
580 SetupAndShowOfflineMessage(state, reason); 607 SetupAndShowOfflineMessage(state, reason);
581 } else { 608 } else {
582 HideOfflineMessage(state, reason); 609 HideOfflineMessage(state, reason);
583 } 610 }
584 } 611 }
585 612
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 void SigninScreenHandler::HideOfflineMessage( 665 void SigninScreenHandler::HideOfflineMessage(
639 NetworkStateInformer::State state, 666 NetworkStateInformer::State state,
640 ErrorScreenActor::ErrorReason reason) { 667 ErrorScreenActor::ErrorReason reason) {
641 if (!IsSigninScreenHiddenByError()) 668 if (!IsSigninScreenHiddenByError())
642 return; 669 return;
643 670
644 error_screen_actor_->Hide(); 671 error_screen_actor_->Hide();
645 672
646 // Forces a reload for Gaia screen on hiding error message. 673 // Forces a reload for Gaia screen on hiding error message.
647 if (IsGaiaVisible() || IsGaiaHiddenByError()) 674 if (IsGaiaVisible() || IsGaiaHiddenByError())
648 ReloadGaiaScreen(); 675 ReloadGaia(false);
Nikita (slow) 2014/07/23 13:34:16 Comment says "Forces a reload for GAIA". Consideri
ygorshenin1 2014/07/23 13:38:48 Not sure, because we'll try to reload already relo
Nikita (slow) 2014/07/23 13:55:41 As far as I understand in case of IsGaiaHiddenByEr
ygorshenin1 2014/07/23 13:59:12 ReloadGaia(true) means "reload gaia in any case, e
649 } 676 }
650 677
651 void SigninScreenHandler::ReloadGaiaScreen() { 678 void SigninScreenHandler::ReloadGaia(bool force_reload) {
652 gaia_screen_handler_->ReloadGaia(); 679 gaia_screen_handler_->ReloadGaia(force_reload);
653 } 680 }
654 681
655 void SigninScreenHandler::Initialize() { 682 void SigninScreenHandler::Initialize() {
656 // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed), 683 // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed),
657 // don't do anything, just return. 684 // don't do anything, just return.
658 if (!delegate_) 685 if (!delegate_)
659 return; 686 return;
660 687
661 if (show_on_init_) { 688 if (show_on_init_) {
662 show_on_init_ = false; 689 show_on_init_ = false;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 const content::NotificationDetails& details) { 852 const content::NotificationDetails& details) {
826 switch (type) { 853 switch (type) {
827 case chrome::NOTIFICATION_AUTH_NEEDED: { 854 case chrome::NOTIFICATION_AUTH_NEEDED: {
828 has_pending_auth_ui_ = true; 855 has_pending_auth_ui_ = true;
829 break; 856 break;
830 } 857 }
831 case chrome::NOTIFICATION_AUTH_SUPPLIED: 858 case chrome::NOTIFICATION_AUTH_SUPPLIED:
832 has_pending_auth_ui_ = false; 859 has_pending_auth_ui_ = false;
833 // Reload auth extension as proxy credentials are supplied. 860 // Reload auth extension as proxy credentials are supplied.
834 if (!IsSigninScreenHiddenByError() && ui_state_ == UI_STATE_GAIA_SIGNIN) 861 if (!IsSigninScreenHiddenByError() && ui_state_ == UI_STATE_GAIA_SIGNIN)
835 ReloadGaiaScreen(); 862 ReloadGaia(true);
836 update_state_closure_.Cancel(); 863 update_state_closure_.Cancel();
837 break; 864 break;
838 case chrome::NOTIFICATION_AUTH_CANCELLED: { 865 case chrome::NOTIFICATION_AUTH_CANCELLED: {
839 // Don't reload auth extension if proxy auth dialog was cancelled. 866 // Don't reload auth extension if proxy auth dialog was cancelled.
840 has_pending_auth_ui_ = false; 867 has_pending_auth_ui_ = false;
841 update_state_closure_.Cancel(); 868 update_state_closure_.Cancel();
842 break; 869 break;
843 } 870 }
844 default: 871 default:
845 NOTREACHED() << "Unexpected notification " << type; 872 NOTREACHED() << "Unexpected notification " << type;
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 return gaia_screen_handler_->frame_error(); 1405 return gaia_screen_handler_->frame_error();
1379 } 1406 }
1380 1407
1381 void SigninScreenHandler::OnCapsLockChanged(bool enabled) { 1408 void SigninScreenHandler::OnCapsLockChanged(bool enabled) {
1382 caps_lock_enabled_ = enabled; 1409 caps_lock_enabled_ = enabled;
1383 if (page_is_ready()) 1410 if (page_is_ready())
1384 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_); 1411 CallJS("login.AccountPickerScreen.setCapsLockState", caps_lock_enabled_);
1385 } 1412 }
1386 1413
1387 } // namespace chromeos 1414 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698