app_launch_utils.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/app_mode/app_launch_utils.h"
6
7#include "base/timer/timer.h"
8#include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h"
9#include "chrome/browser/chromeos/app_mode/startup_app_launcher.h"
10#include "chrome/browser/lifetime/application_lifetime.h"
11
12namespace chromeos {
13
14// A simple manager for the app launch that starts the launch
15// and deletes itself when the launch finishes. On launch failure,
16// it exits the browser process.
17class AppLaunchManager : public StartupAppLauncher::Delegate {
18 public:
19  AppLaunchManager(Profile* profile, const std::string& app_id)
20      : startup_app_launcher_(
21            new StartupAppLauncher(profile,
22                                   app_id,
23                                   false /* diagnostic_mode */,
24                                   this)) {}
25
26  void Start() {
27    startup_app_launcher_->Initialize();
28  }
29
30 private:
31  virtual ~AppLaunchManager() {}
32
33  void Cleanup() { delete this; }
34
35  // StartupAppLauncher::Delegate overrides:
36  virtual void InitializeNetwork() OVERRIDE {
37    // This is on crash-restart path and assumes network is online.
38    // TODO(xiyuan): Remove the crash-restart path for kiosk or add proper
39    // network configure handling.
40    startup_app_launcher_->ContinueWithNetworkReady();
41  }
42  virtual bool IsNetworkReady() OVERRIDE {
43    // See comments above. Network is assumed to be online here.
44    return true;
45  }
46  virtual void OnLoadingOAuthFile() OVERRIDE {}
47  virtual void OnInitializingTokenService() OVERRIDE {}
48  virtual void OnInstallingApp() OVERRIDE {}
49  virtual void OnReadyToLaunch() OVERRIDE {
50    startup_app_launcher_->LaunchApp();
51  }
52  virtual void OnLaunchSucceeded() OVERRIDE { Cleanup(); }
53  virtual void OnLaunchFailed(KioskAppLaunchError::Error error) OVERRIDE {
54    KioskAppLaunchError::Save(error);
55    chrome::AttemptUserExit();
56    Cleanup();
57  }
58  virtual bool IsShowingNetworkConfigScreen() OVERRIDE { return false; }
59
60  scoped_ptr<StartupAppLauncher> startup_app_launcher_;
61
62  DISALLOW_COPY_AND_ASSIGN(AppLaunchManager);
63};
64
65void LaunchAppOrDie(Profile* profile, const std::string& app_id) {
66  // AppLaunchManager manages its own lifetime.
67  (new AppLaunchManager(profile, app_id))->Start();
68}
69
70}  // namespace chromeos
71