blob: 586530442412abaaa7f29a50d6aa4085ecd183d9 [file] [log] [blame]
// 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 "base/bind.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/public/cpp/application/interface_factory_impl.h"
#include "mojo/public/cpp/application/service_provider_impl.h"
#include "services/http_server/public/http_server.mojom.h"
#include "services/http_server/public/http_server_util.h"
namespace mojo {
namespace examples {
// This is an example of a self-contained HTTP handler. It uses the HTTP Server
// service to handle the HTTP protocol details, and just contains the logic for
// handling its registered urls.
class HttpHandler : public ApplicationDelegate,
public http_server::HttpServerClient {
public:
HttpHandler() {}
~HttpHandler() override {}
private:
// ApplicationDelegate:
void Initialize(ApplicationImpl* app) override {
app->ConnectToService("mojo:http_server", &http_server_service_);
http_server_service_.set_client(this);
http_server_service_->AddHandler(
"/test",
base::Bind(&HttpHandler::AddHandlerCallback, base::Unretained(this)));
}
// HttpServerClient:
void OnHandleRequest(
http_server::HttpRequestPtr request,
const Callback<void(http_server::HttpResponsePtr)>& callback) override {
callback.Run(http_server::CreateHttpResponse(200, "Hello World\n"));
}
void AddHandlerCallback(bool result) {
CHECK(result);
}
http_server::HttpServerServicePtr http_server_service_;
DISALLOW_COPY_AND_ASSIGN(HttpHandler);
};
} // namespace examples
} // namespace mojo
MojoResult MojoMain(MojoHandle shell_handle) {
mojo::ApplicationRunnerChromium runner(new mojo::examples::HttpHandler());
return runner.Run(shell_handle);
}