Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |