// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "services/kiosk_wm/kiosk_wm.h"

#include "mojo/services/window_manager/interfaces/window_manager.mojom.h"
#include "services/kiosk_wm/kiosk_wm_controller.h"
#include "services/window_manager/window_manager_delegate.h"

namespace kiosk_wm {

KioskWM::KioskWM()
    : window_manager_app_(new window_manager::WindowManagerApp(this)) {}

KioskWM::~KioskWM() {}

void KioskWM::Initialize(mojo::ApplicationImpl* app) {
  window_manager_app_->Initialize(app);

  // Format: --args-for="app_url default_url"
  if (app->args().size() > 1) {
    std::string default_url = app->args()[1];
    mojo::WindowManagerPtr window_manager;
    app->ConnectToService("mojo:kiosk_wm", &window_manager);
    window_manager->Embed(default_url, nullptr, nullptr);
  }
}

scoped_ptr<window_manager::WindowManagerController>
KioskWM::CreateWindowManagerController(
    mojo::ApplicationConnection* connection,
    window_manager::WindowManagerRoot* wm_root) {
  return scoped_ptr<window_manager::WindowManagerController>(
      new KioskWMController(wm_root));
}

bool KioskWM::ConfigureIncomingConnection(
    mojo::ApplicationConnection* connection) {
  window_manager_app_->ConfigureIncomingConnection(connection);
  return true;
}

}  // namespace kiosk_wm
