blob: 299a3b4d1dcf5051efb4a599991e6f4b79050cf6 [file] [log] [blame]
// 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.
// This is the "main" for the embeddable Moterm terminal view, which provides
// services to the thing embedding it. (This is not very useful as a "top-level"
// application.)
#include "apps/moterm/moterm_view.h"
#include "base/logging.h"
#include "base/macros.h"
#include "mojo/application/application_runner_chromium.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_connection.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/services/view_manager/cpp/view_manager.h"
#include "mojo/services/view_manager/cpp/view_manager_client_factory.h"
#include "mojo/services/view_manager/cpp/view_manager_delegate.h"
namespace {
class Moterm : public mojo::ApplicationDelegate,
public mojo::ViewManagerDelegate {
public:
Moterm() : application_impl_() {}
~Moterm() override {}
private:
// |mojo::ApplicationDelegate|:
void Initialize(mojo::ApplicationImpl* application_impl) override {
DCHECK(!application_impl_);
application_impl_ = application_impl;
view_manager_client_factory_.reset(
new mojo::ViewManagerClientFactory(application_impl_->shell(), this));
}
bool ConfigureIncomingConnection(
mojo::ApplicationConnection* connection) override {
connection->AddService(view_manager_client_factory_.get());
return true;
}
// |mojo::ViewManagerDelegate|:
void OnEmbed(mojo::View* root,
mojo::InterfaceRequest<mojo::ServiceProvider> services,
mojo::ServiceProviderPtr exposed_services) override {
new MotermView(application_impl_->shell(), root, services.Pass());
}
void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override {
}
mojo::ApplicationImpl* application_impl_;
scoped_ptr<mojo::ViewManagerClientFactory> view_manager_client_factory_;
DISALLOW_COPY_AND_ASSIGN(Moterm);
};
} // namespace
MojoResult MojoMain(MojoHandle application_request) {
mojo::ApplicationRunnerChromium runner(new Moterm());
return runner.Run(application_request);
}