blob: b449b732d0cf82efde44aeabecbd1904eb1ec003 [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.
#include <memory>
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/application/application_runner.h"
#include "mojo/services/http_server/interfaces/http_server_factory.mojom.h"
#include "services/http_server/http_server_factory_impl.h"
#include "services/http_server/http_server_impl.h"
namespace http_server {
class HttpServerApp : public mojo::ApplicationDelegate {
public:
HttpServerApp() {}
~HttpServerApp() override {}
void Initialize(mojo::ApplicationImpl* app) override { app_ = app; }
private:
// ApplicationDelegate:
bool ConfigureIncomingConnection(
mojo::ApplicationConnection* connection) override {
connection->GetServiceProviderImpl().AddService<HttpServerFactory>([this](
const mojo::ConnectionContext& connection_context,
mojo::InterfaceRequest<HttpServerFactory> http_server_factory_request) {
if (!http_server_factory_)
http_server_factory_.reset(new HttpServerFactoryImpl(app_));
http_server_factory_->AddBinding(http_server_factory_request.Pass());
});
return true;
}
mojo::ApplicationImpl* app_;
std::unique_ptr<HttpServerFactoryImpl> http_server_factory_;
};
} // namespace http_server
MojoResult MojoMain(MojoHandle application_request) {
mojo::ApplicationRunner runner(std::unique_ptr<http_server::HttpServerApp>(
new http_server::HttpServerApp()));
return runner.Run(application_request);
}