Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / app_mode / startup_app_launcher.h
index 72a4597..3dcafb4 100644 (file)
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h"
+#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
+#include "chrome/browser/extensions/install_observer.h"
 #include "google_apis/gaia/oauth2_token_service.h"
 
 class Profile;
 
-namespace extensions {
-class WebstoreStandaloneInstaller;
-}
-
 namespace chromeos {
 
 // Launches the app at startup. The flow roughly looks like this:
 // First call Initialize():
-// - Checks if the app is installed in user profile (aka app profile);
-// - If the app is installed, launch it and finish the flow;
-// - If not installed, prepare to start install by checking network online
-//   state;
-// - If network gets online, start to install the app from web store;
+// - Attempts to load oauth token file. Stores the loaded tokens in
+//   |auth_params_|.
+// - Initialize token service and inject |auth_params_| if needed.
+// - Initialize network if app is not installed or not offline_enabled.
+// - If network is online, install or update the app as needed.
+// - After the app is installed/updated, launch it and finish the flow;
 // Report OnLauncherInitialized() or OnLaunchFailed() to observers:
 // - If all goes good, launches the app and finish the flow;
-class StartupAppLauncher
-    : public base::SupportsWeakPtr<StartupAppLauncher>,
-      public OAuth2TokenService::Observer {
+class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>,
+                           public OAuth2TokenService::Observer,
+                           public extensions::InstallObserver,
+                           public KioskAppManagerObserver {
  public:
   class Delegate {
    public:
@@ -40,12 +40,16 @@ class StartupAppLauncher
     // launch flow is paused until ContinueWithNetworkReady is called.
     virtual void InitializeNetwork() = 0;
 
+    // Returns true if Internet is online.
+    virtual bool IsNetworkReady() = 0;
+
     virtual void OnLoadingOAuthFile() = 0;
     virtual void OnInitializingTokenService() = 0;
     virtual void OnInstallingApp() = 0;
     virtual void OnReadyToLaunch() = 0;
     virtual void OnLaunchSucceeded() = 0;
     virtual void OnLaunchFailed(KioskAppLaunchError::Error error) = 0;
+    virtual bool IsShowingNetworkConfigScreen() = 0;
 
    protected:
     virtual ~Delegate() {}
@@ -53,6 +57,7 @@ class StartupAppLauncher
 
   StartupAppLauncher(Profile* profile,
                      const std::string& app_id,
+                     bool diagnostic_mode,
                      Delegate* delegate);
 
   virtual ~StartupAppLauncher();
@@ -66,6 +71,9 @@ class StartupAppLauncher
   // Launches the app after the initialization is successful.
   void LaunchApp();
 
+  // Restarts launcher;
+  void RestartLauncher();
+
  private:
   // OAuth parameters from /home/chronos/kiosk_auth file.
   struct KioskOAuthParams {
@@ -74,48 +82,51 @@ class StartupAppLauncher
     std::string client_secret;
   };
 
-  // A class to check if the app has an update. It invokes BeginInstall
-  // if the app is not installed or not up-to-date. Otherwise, it invokes
-  // OnReadyToLaunch.
-  class AppUpdateChecker;
-
   void OnLaunchSuccess();
   void OnLaunchFailure(KioskAppLaunchError::Error error);
 
-  void MaybeInstall();
-
-  // Callbacks from AppUpdateChecker
-  void OnUpdateCheckNotInstalled();
-  void OnUpdateCheckUpdateAvailable();
-  void OnUpdateCheckNoUpdate();
+  // Callbacks from ExtensionUpdater.
+  void OnUpdateCheckFinished();
 
   void BeginInstall();
-  void InstallCallback(bool success, const std::string& error);
   void OnReadyToLaunch();
   void UpdateAppData();
 
   void InitializeTokenService();
-  void InitializeNetwork();
+  void MaybeInitializeNetwork();
+  void MaybeLaunchApp();
 
   void StartLoadingOAuthFile();
   static void LoadOAuthFileOnBlockingPool(KioskOAuthParams* auth_params);
   void OnOAuthFileLoaded(KioskOAuthParams* auth_params);
 
+  void OnKioskAppDataLoadStatusChanged(const std::string& app_id);
+
   // OAuth2TokenService::Observer overrides.
   virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
   virtual void OnRefreshTokensLoaded() OVERRIDE;
 
+  // extensions::InstallObserver overrides.
+  virtual void OnFinishCrxInstall(const std::string& extension_id,
+                                  bool success) OVERRIDE;
+
+  // KioskAppManagerObserver overrides.
+  virtual void OnKioskExtensionLoadedInCache(
+      const std::string& app_id) OVERRIDE;
+  virtual void OnKioskExtensionDownloadFailed(
+      const std::string& app_id) OVERRIDE;
+
   Profile* profile_;
   const std::string app_id_;
+  const bool diagnostic_mode_;
   Delegate* delegate_;
-  bool install_attempted_;
+  bool network_ready_handled_;
+  int launch_attempt_;
   bool ready_to_launch_;
+  bool wait_for_crx_update_;
 
-  scoped_refptr<extensions::WebstoreStandaloneInstaller> installer_;
   KioskOAuthParams auth_params_;
 
-  scoped_ptr<AppUpdateChecker> update_checker_;
-
   DISALLOW_COPY_AND_ASSIGN(StartupAppLauncher);
 };