#include "chrome/browser/chromeos/login/app_launch_controller.h"
-#include "apps/shell_window_registry.h"
+#include "apps/app_window.h"
+#include "apps/app_window_registry.h"
+#include "base/bind.h"
#include "base/callback.h"
#include "base/files/file_path.h"
#include "base/json/json_file_value_serializer.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/time/time.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
// AppLaunchController::AppWindowWatcher
class AppLaunchController::AppWindowWatcher
- : public apps::ShellWindowRegistry::Observer {
+ : public apps::AppWindowRegistry::Observer {
public:
- explicit AppWindowWatcher(AppLaunchController* controller)
- : controller_(controller),
- window_registry_(apps::ShellWindowRegistry::Get(controller->profile_)) {
- window_registry_->AddObserver(this);
+ explicit AppWindowWatcher(AppLaunchController* controller,
+ const std::string& app_id)
+ : controller_(controller),
+ app_id_(app_id),
+ window_registry_(apps::AppWindowRegistry::Get(controller->profile_)),
+ weak_factory_(this) {
+ if (!window_registry_->GetAppWindowsForApp(app_id).empty()) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&AppWindowWatcher::NotifyAppWindowCreated,
+ weak_factory_.GetWeakPtr()));
+ return;
+ } else {
+ window_registry_->AddObserver(this);
+ }
}
virtual ~AppWindowWatcher() {
window_registry_->RemoveObserver(this);
}
private:
- // apps::ShellWindowRegistry::Observer overrides:
- virtual void OnShellWindowAdded(apps::ShellWindow* shell_window) OVERRIDE {
- if (controller_) {
- controller_->OnAppWindowCreated();
- controller_= NULL;
+ // apps::AppWindowRegistry::Observer overrides:
+ virtual void OnAppWindowAdded(apps::AppWindow* app_window) OVERRIDE {
+ if (app_window->extension_id() == app_id_) {
+ window_registry_->RemoveObserver(this);
+ NotifyAppWindowCreated();
}
}
- virtual void OnShellWindowIconChanged(
- apps::ShellWindow* shell_window) OVERRIDE {}
- virtual void OnShellWindowRemoved(apps::ShellWindow* shell_window) OVERRIDE {}
+ virtual void OnAppWindowIconChanged(apps::AppWindow* app_window) OVERRIDE {}
+ virtual void OnAppWindowRemoved(apps::AppWindow* app_window) OVERRIDE {}
+
+ void NotifyAppWindowCreated() {
+ controller_->OnAppWindowCreated();
+ }
AppLaunchController* controller_;
- apps::ShellWindowRegistry* window_registry_;
+ std::string app_id_;
+ apps::AppWindowRegistry* window_registry_;
+ base::WeakPtrFactory<AppWindowWatcher> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(AppWindowWatcher);
};
// AppLaunchController
AppLaunchController::AppLaunchController(const std::string& app_id,
+ bool diagnostic_mode,
LoginDisplayHost* host,
OobeDisplay* oobe_display)
: profile_(NULL),
app_id_(app_id),
+ diagnostic_mode_(diagnostic_mode),
host_(host),
oobe_display_(oobe_display),
app_launch_splash_screen_actor_(
app_launch_splash_screen_actor_->SetDelegate(this);
app_launch_splash_screen_actor_->Show(app_id_);
+ KioskAppManager::App app;
+ CHECK(KioskAppManager::Get() &&
+ KioskAppManager::Get()->GetApp(app_id_, &app));
kiosk_profile_loader_.reset(
- new KioskProfileLoader(KioskAppManager::Get(), app_id_, this));
+ new KioskProfileLoader(app.user_id, false, this));
kiosk_profile_loader_->Start();
}
profile_ = profile;
kiosk_profile_loader_.reset();
- startup_app_launcher_.reset(new StartupAppLauncher(profile_, app_id_, this));
+ startup_app_launcher_.reset(
+ new StartupAppLauncher(profile_, app_id_, diagnostic_mode_, this));
startup_app_launcher_->Initialize();
}
AppLaunchSplashScreenActor::APP_LAUNCH_STATE_PREPARING_NETWORK);
}
+bool AppLaunchController::IsNetworkReady() {
+ return app_launch_splash_screen_actor_->IsNetworkReady();
+}
+
void AppLaunchController::OnLoadingOAuthFile() {
app_launch_splash_screen_actor_->UpdateAppLaunchState(
AppLaunchSplashScreenActor::APP_LAUNCH_STATE_LOADING_AUTH_FILE);
AppLaunchSplashScreenActor::APP_LAUNCH_STATE_WAITING_APP_WINDOW);
DCHECK(!app_window_watcher_);
- app_window_watcher_.reset(new AppWindowWatcher(this));
+ app_window_watcher_.reset(new AppWindowWatcher(this, app_id_));
}
void AppLaunchController::OnLaunchFailed(KioskAppLaunchError::Error error) {