| Index: chrome/browser/chromeos/login/app_launch_controller.cc
|
| diff --git a/chrome/browser/chromeos/login/app_launch_controller.cc b/chrome/browser/chromeos/login/app_launch_controller.cc
|
| index ecaf9ae8db0ed3a5de55921c1864a2ebb6a177ec..cf415c0dc9dfad35818dbb420ca48b808354c1cf 100644
|
| --- a/chrome/browser/chromeos/login/app_launch_controller.cc
|
| +++ b/chrome/browser/chromeos/login/app_launch_controller.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/json/json_file_value_serializer.h"
|
| #include "base/time/time.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/chromeos/app_mode/app_session_lifetime.h"
|
| #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
|
| @@ -19,7 +20,9 @@
|
| #include "chrome/browser/chromeos/login/oobe_display.h"
|
| #include "chrome/browser/chromeos/login/screens/error_screen_actor.h"
|
| #include "chrome/browser/chromeos/login/webui_login_view.h"
|
| +#include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #include "chrome/browser/lifetime/application_lifetime.h"
|
| +#include "chrome/browser/policy/browser_policy_connector.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h"
|
| #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
|
| @@ -40,8 +43,10 @@ const int kAppInstallSplashScreenMinTimeMS = 3000;
|
| bool AppLaunchController::skip_splash_wait_ = false;
|
| int AppLaunchController::network_wait_time_ = 10;
|
| base::Closure* AppLaunchController::network_timeout_callback_ = NULL;
|
| -AppLaunchController::CanConfigureNetworkCallback*
|
| +AppLaunchController::ReturnBoolCallback*
|
| AppLaunchController::can_configure_network_callback_ = NULL;
|
| +AppLaunchController::ReturnBoolCallback*
|
| + AppLaunchController::need_owner_auth_to_configure_network_callback_ = NULL;
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // AppLaunchController::AppWindowWatcher
|
| @@ -88,15 +93,12 @@ AppLaunchController::AppLaunchController(const std::string& app_id,
|
| oobe_display_(oobe_display),
|
| app_launch_splash_screen_actor_(
|
| oobe_display_->GetAppLaunchSplashScreenActor()),
|
| - error_screen_actor_(oobe_display_->GetErrorScreenActor()),
|
| webui_visible_(false),
|
| launcher_ready_(false),
|
| waiting_for_network_(false),
|
| network_wait_timedout_(false),
|
| showing_network_dialog_(false),
|
| launch_splash_start_time_(0) {
|
| - signin_screen_.reset(new AppLaunchSigninScreen(
|
| - static_cast<OobeUI*>(oobe_display_), this));
|
| }
|
|
|
| AppLaunchController::~AppLaunchController() {
|
| @@ -122,28 +124,40 @@ void AppLaunchController::StartAppLaunch() {
|
| kiosk_profile_loader_->Start();
|
| }
|
|
|
| +// static
|
| void AppLaunchController::SkipSplashWaitForTesting() {
|
| skip_splash_wait_ = true;
|
| }
|
|
|
| +// static
|
| void AppLaunchController::SetNetworkWaitForTesting(int wait_time_secs) {
|
| network_wait_time_ = wait_time_secs;
|
| }
|
|
|
| +// static
|
| void AppLaunchController::SetNetworkTimeoutCallbackForTesting(
|
| base::Closure* callback) {
|
| network_timeout_callback_ = callback;
|
| }
|
|
|
| +// static
|
| void AppLaunchController::SetCanConfigureNetworkCallbackForTesting(
|
| - CanConfigureNetworkCallback* can_configure_network_callback) {
|
| + ReturnBoolCallback* can_configure_network_callback) {
|
| can_configure_network_callback_ = can_configure_network_callback;
|
| }
|
|
|
| +// static
|
| +void AppLaunchController::SetNeedOwnerAuthToConfigureNetworkCallbackForTesting(
|
| + ReturnBoolCallback* need_owner_auth_callback) {
|
| + need_owner_auth_to_configure_network_callback_ = need_owner_auth_callback;
|
| +}
|
| +
|
| void AppLaunchController::OnConfigureNetwork() {
|
| DCHECK(profile_);
|
| showing_network_dialog_ = true;
|
| - if (CanConfigureNetwork()) {
|
| + if (CanConfigureNetwork() && NeedOwnerAuthToConfigureNetwork()) {
|
| + signin_screen_.reset(new AppLaunchSigninScreen(
|
| + static_cast<OobeUI*>(oobe_display_), this));
|
| signin_screen_->Show();
|
| } else {
|
| // If kiosk mode was configured through enterprise policy, we may
|
| @@ -155,12 +169,7 @@ void AppLaunchController::OnConfigureNetwork() {
|
| }
|
|
|
| void AppLaunchController::OnOwnerSigninSuccess() {
|
| - error_screen_actor_->SetErrorState(
|
| - ErrorScreen::ERROR_STATE_OFFLINE, std::string());
|
| - error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_KIOSK_MODE);
|
| -
|
| - error_screen_actor_->Show(OobeDisplay::SCREEN_APP_LAUNCH_SPLASH, NULL);
|
| -
|
| + app_launch_splash_screen_actor_->ShowNetworkConfigureUI();
|
| signin_screen_.reset();
|
| }
|
|
|
| @@ -183,13 +192,22 @@ void AppLaunchController::OnCancelAppLaunch() {
|
| OnLaunchFailed(KioskAppLaunchError::USER_CANCEL);
|
| }
|
|
|
| +void AppLaunchController::OnNetworkStateChanged(bool online) {
|
| + if (!waiting_for_network_)
|
| + return;
|
| +
|
| + if (online)
|
| + startup_app_launcher_->ContinueWithNetworkReady();
|
| + else if (network_wait_timedout_)
|
| + MaybeShowNetworkConfigureUI();
|
| +}
|
| +
|
| void AppLaunchController::OnProfileLoaded(Profile* profile) {
|
| DVLOG(1) << "Profile loaded... Starting app launch.";
|
| profile_ = profile;
|
|
|
| kiosk_profile_loader_.reset();
|
| - startup_app_launcher_.reset(new StartupAppLauncher(profile_, app_id_));
|
| - startup_app_launcher_->AddObserver(this);
|
| + startup_app_launcher_.reset(new StartupAppLauncher(profile_, app_id_, this));
|
| startup_app_launcher_->Initialize();
|
| }
|
|
|
| @@ -212,12 +230,7 @@ void AppLaunchController::OnNetworkWaitTimedout() {
|
| << net::NetworkChangeNotifier::GetConnectionType();
|
| network_wait_timedout_ = true;
|
|
|
| - if (CanConfigureNetwork()) {
|
| - app_launch_splash_screen_actor_->ToggleNetworkConfig(true);
|
| - } else {
|
| - app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| - AppLaunchSplashScreenActor::APP_LAUNCH_STATE_NETWORK_WAIT_TIMEOUT);
|
| - }
|
| + MaybeShowNetworkConfigureUI();
|
|
|
| if (network_timeout_callback_)
|
| network_timeout_callback_->Run();
|
| @@ -232,23 +245,43 @@ bool AppLaunchController::CanConfigureNetwork() {
|
| if (can_configure_network_callback_)
|
| return can_configure_network_callback_->Run();
|
|
|
| + if (g_browser_process->browser_policy_connector()->IsEnterpriseManaged()) {
|
| + bool should_prompt;
|
| + if (CrosSettings::Get()->GetBoolean(
|
| + kAccountsPrefDeviceLocalAccountPromptForNetworkWhenOffline,
|
| + &should_prompt)) {
|
| + return should_prompt;
|
| + }
|
| +
|
| + // Default to true to allow network configuration if the policy is missing.
|
| + return true;
|
| + }
|
| +
|
| return !UserManager::Get()->GetOwnerEmail().empty();
|
| }
|
|
|
| -void AppLaunchController::OnLoadingOAuthFile() {
|
| - app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| - AppLaunchSplashScreenActor::APP_LAUNCH_STATE_LOADING_AUTH_FILE);
|
| -}
|
| +bool AppLaunchController::NeedOwnerAuthToConfigureNetwork() {
|
| + if (need_owner_auth_to_configure_network_callback_)
|
| + return need_owner_auth_to_configure_network_callback_->Run();
|
|
|
| -void AppLaunchController::OnInitializingTokenService() {
|
| - app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| - AppLaunchSplashScreenActor::APP_LAUNCH_STATE_LOADING_TOKEN_SERVICE);
|
| + return !g_browser_process->browser_policy_connector()->IsEnterpriseManaged();
|
| }
|
|
|
| -void AppLaunchController::OnInitializingNetwork() {
|
| - app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| - AppLaunchSplashScreenActor::APP_LAUNCH_STATE_PREPARING_NETWORK);
|
| +void AppLaunchController::MaybeShowNetworkConfigureUI() {
|
| + if (CanConfigureNetwork()) {
|
| + if (NeedOwnerAuthToConfigureNetwork()) {
|
| + app_launch_splash_screen_actor_->ToggleNetworkConfig(true);
|
| + } else {
|
| + showing_network_dialog_ = true;
|
| + app_launch_splash_screen_actor_->ShowNetworkConfigureUI();
|
| + }
|
| + } else {
|
| + app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| + AppLaunchSplashScreenActor::APP_LAUNCH_STATE_NETWORK_WAIT_TIMEOUT);
|
| + }
|
| +}
|
|
|
| +void AppLaunchController::InitializeNetwork() {
|
| // Show the network configration dialog if network is not initialized
|
| // after a brief wait time.
|
| waiting_for_network_ = true;
|
| @@ -256,12 +289,26 @@ void AppLaunchController::OnInitializingNetwork() {
|
| FROM_HERE,
|
| base::TimeDelta::FromSeconds(network_wait_time_),
|
| this, &AppLaunchController::OnNetworkWaitTimedout);
|
| +
|
| + app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| + AppLaunchSplashScreenActor::APP_LAUNCH_STATE_PREPARING_NETWORK);
|
| +}
|
| +
|
| +void AppLaunchController::OnLoadingOAuthFile() {
|
| + app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| + AppLaunchSplashScreenActor::APP_LAUNCH_STATE_LOADING_AUTH_FILE);
|
| +}
|
| +
|
| +void AppLaunchController::OnInitializingTokenService() {
|
| + app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| + AppLaunchSplashScreenActor::APP_LAUNCH_STATE_LOADING_TOKEN_SERVICE);
|
| }
|
|
|
| void AppLaunchController::OnInstallingApp() {
|
| app_launch_splash_screen_actor_->UpdateAppLaunchState(
|
| AppLaunchSplashScreenActor::APP_LAUNCH_STATE_INSTALLING_APPLICATION);
|
|
|
| + waiting_for_network_ = false;
|
| network_wait_timer_.Stop();
|
| app_launch_splash_screen_actor_->ToggleNetworkConfig(false);
|
|
|
|
|