// Copyright 2015 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 "chrome/browser/mojo_runner_state.h"

#include "components/mus/public/interfaces/window_manager.mojom.h"
#include "mojo/application/public/cpp/application_delegate.h"
#include "mojo/application/public/cpp/application_impl.h"
#include "mojo/converters/network/network_type_converters.h"
#include "mojo/runner/child/runner_connection.h"
#include "ui/views/mus/window_manager_connection.h"

class ChromeApplicationDelegate : public mojo::ApplicationDelegate {
 public:
  ChromeApplicationDelegate() {}
  ~ChromeApplicationDelegate() override {}

 private:
  void Initialize(mojo::ApplicationImpl* application) override {
    mus::mojom::WindowManagerPtr window_manager;
    application->ConnectToService(
        mojo::URLRequest::From(std::string("mojo:example_wm")),
        &window_manager);
    views::WindowManagerConnection::Create(window_manager.Pass(), application);
  }
  bool ConfigureIncomingConnection(
      mojo::ApplicationConnection* connection) override {
    return false;
  }

  DISALLOW_COPY_AND_ASSIGN(ChromeApplicationDelegate);
};

MojoRunnerState::MojoRunnerState() {}
MojoRunnerState::~MojoRunnerState() {}

void MojoRunnerState::WaitForConnection() {
  mojo::InterfaceRequest<mojo::Application> application_request;
  runner_connection_.reset(
      mojo::runner::RunnerConnection::ConnectToRunner(&application_request));
  application_delegate_.reset(new ChromeApplicationDelegate);
  application_impl_.reset(new mojo::ApplicationImpl(
      application_delegate_.get(), application_request.Pass()));
  application_impl_->WaitForInitialize();
}