Index: chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc |
index 5542049a2d0610a9441a217acae684a7e4523f2c..50025a0e9aeeacae8a5eb090a8eb5b32a668a983 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc |
+++ b/chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc |
@@ -5,7 +5,10 @@ |
#include "chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h" |
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
+#include "chrome/browser/chromeos/login/screens/error_screen_actor.h" |
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
+#include "chromeos/network/network_state.h" |
+#include "chromeos/network/network_state_handler.h" |
#include "grit/browser_resources.h" |
#include "grit/chrome_unscaled_resources.h" |
#include "grit/chromium_strings.h" |
@@ -18,18 +21,34 @@ namespace { |
const char kJsScreenPath[] = "login.AppLaunchSplashScreen"; |
+// Returns network name by service path. |
+std::string GetNetworkName(const std::string& service_path) { |
+ const chromeos::NetworkState* network = |
+ chromeos::NetworkHandler::Get()->network_state_handler()->GetNetworkState( |
+ service_path); |
+ if (!network) |
+ return std::string(); |
+ return network->name(); |
+} |
+ |
} // namespace |
namespace chromeos { |
-AppLaunchSplashScreenHandler::AppLaunchSplashScreenHandler() |
+AppLaunchSplashScreenHandler::AppLaunchSplashScreenHandler( |
+ const scoped_refptr<NetworkStateInformer>& network_state_informer, |
+ ErrorScreenActor* error_screen_actor) |
: BaseScreenHandler(kJsScreenPath), |
delegate_(NULL), |
show_on_init_(false), |
- state_(APP_LAUNCH_STATE_LOADING_AUTH_FILE) { |
+ state_(APP_LAUNCH_STATE_LOADING_AUTH_FILE), |
+ network_state_informer_(network_state_informer), |
+ error_screen_actor_(error_screen_actor) { |
+ network_state_informer_->AddObserver(this); |
} |
AppLaunchSplashScreenHandler::~AppLaunchSplashScreenHandler() { |
+ network_state_informer_->RemoveObserver(this); |
} |
void AppLaunchSplashScreenHandler::DeclareLocalizedValues( |
@@ -103,6 +122,7 @@ void AppLaunchSplashScreenHandler::UpdateAppLaunchState(AppLaunchState state) { |
SetLaunchText( |
l10n_util::GetStringUTF8(GetProgressMessageFromState(state_))); |
} |
+ UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); |
} |
void AppLaunchSplashScreenHandler::SetDelegate( |
@@ -110,6 +130,65 @@ void AppLaunchSplashScreenHandler::SetDelegate( |
delegate_ = delegate; |
} |
+void AppLaunchSplashScreenHandler::ShowNetworkConfigureUI() { |
+ NetworkStateInformer::State state = network_state_informer_->state(); |
+ if (state == NetworkStateInformer::ONLINE) { |
+ delegate_->OnNetworkStateChanged(true); |
+ return; |
+ } |
+ |
+ const std::string network_path = network_state_informer_->network_path(); |
+ const std::string network_name = GetNetworkName(network_path); |
+ |
+ error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_KIOSK_MODE); |
+ error_screen_actor_->AllowGuestSignin(false); |
+ error_screen_actor_->AllowOfflineLogin(false); |
+ |
+ switch (state) { |
+ case NetworkStateInformer::CAPTIVE_PORTAL: { |
+ error_screen_actor_->SetErrorState( |
+ ErrorScreen::ERROR_STATE_PORTAL, network_name); |
+ error_screen_actor_->FixCaptivePortal(); |
+ |
+ break; |
+ } |
+ case NetworkStateInformer::PROXY_AUTH_REQUIRED: { |
+ error_screen_actor_->SetErrorState( |
+ ErrorScreen::ERROR_STATE_PROXY, network_name); |
+ break; |
+ } |
+ case NetworkStateInformer::OFFLINE: { |
+ error_screen_actor_->SetErrorState( |
+ ErrorScreen::ERROR_STATE_OFFLINE, network_name); |
+ break; |
+ } |
+ default: |
+ error_screen_actor_->SetErrorState( |
+ ErrorScreen::ERROR_STATE_OFFLINE, network_name); |
+ NOTREACHED(); |
+ break; |
+ }; |
+ |
+ error_screen_actor_->Show(OobeDisplay::SCREEN_APP_LAUNCH_SPLASH, NULL); |
+} |
+ |
+void AppLaunchSplashScreenHandler::OnNetworkReady() { |
+ // Purposely leave blank because the online case is handled in UpdateState |
+ // call below. |
+} |
+ |
+void AppLaunchSplashScreenHandler::UpdateState( |
+ ErrorScreenActor::ErrorReason reason) { |
+ if (!delegate_ || |
+ (state_ != APP_LAUNCH_STATE_PREPARING_NETWORK && |
+ state_ != APP_LAUNCH_STATE_NETWORK_WAIT_TIMEOUT)) { |
+ return; |
+ } |
+ |
+ NetworkStateInformer::State state = network_state_informer_->state(); |
+ delegate_->OnNetworkStateChanged(state == NetworkStateInformer::ONLINE); |
+} |
+ |
void AppLaunchSplashScreenHandler::PopulateAppInfo( |
base::DictionaryValue* out_info) { |
KioskAppManager::App app; |