| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ |
| 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ | 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/callback_forward.h" | 11 #include "base/callback_forward.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/timer/timer.h" | 14 #include "base/timer/timer.h" |
| 15 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" | 15 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" |
| 16 #include "chrome/browser/chromeos/app_mode/kiosk_profile_loader.h" | 16 #include "chrome/browser/chromeos/app_mode/kiosk_profile_loader.h" |
| 17 #include "chrome/browser/chromeos/app_mode/startup_app_launcher.h" | 17 #include "chrome/browser/chromeos/app_mode/startup_app_launcher.h" |
| 18 #include "chrome/browser/chromeos/login/app_launch_signin_screen.h" | 18 #include "chrome/browser/chromeos/login/app_launch_signin_screen.h" |
| 19 #include "chrome/browser/chromeos/login/screens/app_launch_splash_screen_actor.h
" | 19 #include "chrome/browser/chromeos/login/screens/app_launch_splash_screen_actor.h
" |
| 20 #include "chrome/browser/chromeos/login/screens/error_screen_actor.h" | |
| 21 #include "content/public/browser/notification_observer.h" | 20 #include "content/public/browser/notification_observer.h" |
| 22 #include "content/public/browser/notification_registrar.h" | 21 #include "content/public/browser/notification_registrar.h" |
| 23 | 22 |
| 24 class Profile; | 23 class Profile; |
| 25 | 24 |
| 26 namespace chromeos { | 25 namespace chromeos { |
| 27 | 26 |
| 28 class LoginDisplayHost; | 27 class LoginDisplayHost; |
| 29 class OobeDisplay; | 28 class OobeDisplay; |
| 30 class UserManager; | 29 class UserManager; |
| 31 | 30 |
| 32 // Controller for the kiosk app launch process, responsible for | 31 // Controller for the kiosk app launch process, responsible for |
| 33 // coordinating loading the kiosk profile, launching the app, and | 32 // coordinating loading the kiosk profile, launching the app, and |
| 34 // updating the splash screen UI. | 33 // updating the splash screen UI. |
| 35 class AppLaunchController | 34 class AppLaunchController |
| 36 : public base::SupportsWeakPtr<AppLaunchController>, | 35 : public base::SupportsWeakPtr<AppLaunchController>, |
| 37 public AppLaunchSplashScreenActor::Delegate, | 36 public AppLaunchSplashScreenActor::Delegate, |
| 38 public KioskProfileLoader::Delegate, | 37 public KioskProfileLoader::Delegate, |
| 39 public StartupAppLauncher::Observer, | 38 public StartupAppLauncher::Observer, |
| 40 public AppLaunchSigninScreen::Delegate, | 39 public AppLaunchSigninScreen::Delegate, |
| 41 public content::NotificationObserver { | 40 public content::NotificationObserver { |
| 42 public: | 41 public: |
| 43 typedef base::Callback<bool()> CanConfigureNetworkCallback; | 42 typedef base::Callback<bool()> ReturnBoolCallback; |
| 44 | 43 |
| 45 AppLaunchController(const std::string& app_id, | 44 AppLaunchController(const std::string& app_id, |
| 46 LoginDisplayHost* host, | 45 LoginDisplayHost* host, |
| 47 OobeDisplay* oobe_display); | 46 OobeDisplay* oobe_display); |
| 48 | 47 |
| 49 virtual ~AppLaunchController(); | 48 virtual ~AppLaunchController(); |
| 50 | 49 |
| 51 void StartAppLaunch(); | 50 void StartAppLaunch(); |
| 52 | 51 |
| 53 bool waiting_for_network() { return waiting_for_network_; } | 52 bool waiting_for_network() { return waiting_for_network_; } |
| 54 bool network_wait_timedout() { return network_wait_timedout_; } | 53 bool network_wait_timedout() { return network_wait_timedout_; } |
| 55 bool showing_network_dialog() { return showing_network_dialog_; } | 54 bool showing_network_dialog() { return showing_network_dialog_; } |
| 56 | 55 |
| 57 // Customize controller for testing purposes. | 56 // Customize controller for testing purposes. |
| 58 static void SkipSplashWaitForTesting(); | 57 static void SkipSplashWaitForTesting(); |
| 59 static void SetNetworkTimeoutCallbackForTesting(base::Closure* callback); | 58 static void SetNetworkTimeoutCallbackForTesting(base::Closure* callback); |
| 60 static void SetNetworkWaitForTesting(int wait_time_secs); | 59 static void SetNetworkWaitForTesting(int wait_time_secs); |
| 61 static void SetCanConfigureNetworkCallbackForTesting( | 60 static void SetCanConfigureNetworkCallbackForTesting( |
| 62 CanConfigureNetworkCallback* can_configure_network_callback); | 61 ReturnBoolCallback* can_configure_network_callback); |
| 62 static void SetNeedOwnerAuthToConfigureNetworkCallbackForTesting( |
| 63 ReturnBoolCallback* need_owner_auth_callback); |
| 63 | 64 |
| 64 private: | 65 private: |
| 65 // A class to watch app window creation. | 66 // A class to watch app window creation. |
| 66 class AppWindowWatcher; | 67 class AppWindowWatcher; |
| 67 | 68 |
| 68 void CleanUp(); | 69 void CleanUp(); |
| 69 void OnNetworkWaitTimedout(); | 70 void OnNetworkWaitTimedout(); |
| 70 | 71 |
| 71 // Callback of AppWindowWatcher to notify an app window is created. | 72 // Callback of AppWindowWatcher to notify an app window is created. |
| 72 void OnAppWindowCreated(); | 73 void OnAppWindowCreated(); |
| 73 | 74 |
| 74 // Whether the network could be configured during launching. | 75 // Whether the network could be configured during launching. |
| 75 bool CanConfigureNetwork(); | 76 bool CanConfigureNetwork(); |
| 76 | 77 |
| 78 // Whether the owner password is needed to configure network. |
| 79 bool NeedOwnerAuthToConfigureNetwork(); |
| 80 |
| 81 // Show network configuration UI if it is allowed. For consumer mode, |
| 82 // owner password might be checked before showing the network configure UI. |
| 83 void MaybeShowNetworkConfigureUI(); |
| 84 |
| 77 // KioskProfileLoader::Delegate overrides: | 85 // KioskProfileLoader::Delegate overrides: |
| 78 virtual void OnProfileLoaded(Profile* profile) OVERRIDE; | 86 virtual void OnProfileLoaded(Profile* profile) OVERRIDE; |
| 79 virtual void OnProfileLoadFailed(KioskAppLaunchError::Error error) OVERRIDE; | 87 virtual void OnProfileLoadFailed(KioskAppLaunchError::Error error) OVERRIDE; |
| 80 | 88 |
| 81 // AppLaunchSplashScreenActor::Delegate overrides: | 89 // AppLaunchSplashScreenActor::Delegate overrides: |
| 82 virtual void OnConfigureNetwork() OVERRIDE; | 90 virtual void OnConfigureNetwork() OVERRIDE; |
| 83 virtual void OnCancelAppLaunch() OVERRIDE; | 91 virtual void OnCancelAppLaunch() OVERRIDE; |
| 92 virtual void OnNetworkStateChanged(bool online) OVERRIDE; |
| 84 | 93 |
| 85 // StartupAppLauncher::Observer overrides: | 94 // StartupAppLauncher::Observer overrides: |
| 86 virtual void OnLoadingOAuthFile() OVERRIDE; | 95 virtual void OnLoadingOAuthFile() OVERRIDE; |
| 87 virtual void OnInitializingTokenService() OVERRIDE; | 96 virtual void OnInitializingTokenService() OVERRIDE; |
| 88 virtual void OnInitializingNetwork() OVERRIDE; | 97 virtual void OnInitializingNetwork() OVERRIDE; |
| 89 virtual void OnInstallingApp() OVERRIDE; | 98 virtual void OnInstallingApp() OVERRIDE; |
| 90 virtual void OnReadyToLaunch() OVERRIDE; | 99 virtual void OnReadyToLaunch() OVERRIDE; |
| 91 virtual void OnLaunchSucceeded() OVERRIDE; | 100 virtual void OnLaunchSucceeded() OVERRIDE; |
| 92 virtual void OnLaunchFailed(KioskAppLaunchError::Error error) OVERRIDE; | 101 virtual void OnLaunchFailed(KioskAppLaunchError::Error error) OVERRIDE; |
| 93 | 102 |
| 94 // AppLaunchSigninScreen::Delegate overrides: | 103 // AppLaunchSigninScreen::Delegate overrides: |
| 95 virtual void OnOwnerSigninSuccess() OVERRIDE; | 104 virtual void OnOwnerSigninSuccess() OVERRIDE; |
| 96 | 105 |
| 97 // content::NotificationObserver overrides: | 106 // content::NotificationObserver overrides: |
| 98 virtual void Observe(int type, | 107 virtual void Observe(int type, |
| 99 const content::NotificationSource& source, | 108 const content::NotificationSource& source, |
| 100 const content::NotificationDetails& details) OVERRIDE; | 109 const content::NotificationDetails& details) OVERRIDE; |
| 101 | 110 |
| 102 Profile* profile_; | 111 Profile* profile_; |
| 103 const std::string app_id_; | 112 const std::string app_id_; |
| 104 LoginDisplayHost* host_; | 113 LoginDisplayHost* host_; |
| 105 OobeDisplay* oobe_display_; | 114 OobeDisplay* oobe_display_; |
| 106 AppLaunchSplashScreenActor* app_launch_splash_screen_actor_; | 115 AppLaunchSplashScreenActor* app_launch_splash_screen_actor_; |
| 107 ErrorScreenActor* error_screen_actor_; | |
| 108 scoped_ptr<KioskProfileLoader> kiosk_profile_loader_; | 116 scoped_ptr<KioskProfileLoader> kiosk_profile_loader_; |
| 109 scoped_ptr<StartupAppLauncher> startup_app_launcher_; | 117 scoped_ptr<StartupAppLauncher> startup_app_launcher_; |
| 110 scoped_ptr<AppLaunchSigninScreen> signin_screen_; | 118 scoped_ptr<AppLaunchSigninScreen> signin_screen_; |
| 111 scoped_ptr<AppWindowWatcher> app_window_watcher_; | 119 scoped_ptr<AppWindowWatcher> app_window_watcher_; |
| 112 | 120 |
| 113 content::NotificationRegistrar registrar_; | 121 content::NotificationRegistrar registrar_; |
| 114 bool webui_visible_; | 122 bool webui_visible_; |
| 115 bool launcher_ready_; | 123 bool launcher_ready_; |
| 116 | 124 |
| 117 base::OneShotTimer<AppLaunchController> network_wait_timer_; | 125 base::OneShotTimer<AppLaunchController> network_wait_timer_; |
| 118 bool waiting_for_network_; | 126 bool waiting_for_network_; |
| 119 bool network_wait_timedout_; | 127 bool network_wait_timedout_; |
| 120 bool showing_network_dialog_; | 128 bool showing_network_dialog_; |
| 121 int64 launch_splash_start_time_; | 129 int64 launch_splash_start_time_; |
| 122 | 130 |
| 123 static bool skip_splash_wait_; | 131 static bool skip_splash_wait_; |
| 124 static int network_wait_time_; | 132 static int network_wait_time_; |
| 125 static base::Closure* network_timeout_callback_; | 133 static base::Closure* network_timeout_callback_; |
| 126 static CanConfigureNetworkCallback* can_configure_network_callback_; | 134 static ReturnBoolCallback* can_configure_network_callback_; |
| 135 static ReturnBoolCallback* need_owner_auth_to_configure_network_callback_; |
| 127 | 136 |
| 128 DISALLOW_COPY_AND_ASSIGN(AppLaunchController); | 137 DISALLOW_COPY_AND_ASSIGN(AppLaunchController); |
| 129 }; | 138 }; |
| 130 | 139 |
| 131 } // namespace chromeos | 140 } // namespace chromeos |
| 132 | 141 |
| 133 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ | 142 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_APP_LAUNCH_CONTROLLER_H_ |
| OLD | NEW |