1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/threading/platform_thread.h"
6#include "mojo/application/application_runner_chromium.h"
7#include "mojo/examples/surfaces_app/child_gl_impl.h"
8#include "mojo/public/c/system/main.h"
9#include "mojo/public/cpp/application/application_connection.h"
10#include "mojo/public/cpp/application/application_delegate.h"
11#include "mojo/public/cpp/application/application_impl.h"
12#include "mojo/public/cpp/bindings/string.h"
13#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
14
15namespace mojo {
16namespace examples {
17
18class ChildGLApp : public ApplicationDelegate, public InterfaceFactory<Child> {
19 public:
20  ChildGLApp() {}
21  virtual ~ChildGLApp() {}
22
23  virtual void Initialize(ApplicationImpl* app) OVERRIDE {
24    surfaces_service_connection_ =
25        app->ConnectToApplication("mojo:mojo_surfaces_service");
26    // TODO(jamesr): Should be mojo:mojo_gpu_service
27    app->ConnectToService("mojo:mojo_native_viewport_service", &gpu_service_);
28  }
29
30  // ApplicationDelegate implementation.
31  virtual bool ConfigureIncomingConnection(
32      ApplicationConnection* connection) OVERRIDE {
33    connection->AddService(this);
34    return true;
35  }
36
37  // InterfaceFactory<Child> implementation.
38  virtual void Create(ApplicationConnection* connection,
39                      InterfaceRequest<Child> request) OVERRIDE {
40    CommandBufferPtr command_buffer;
41    gpu_service_->CreateOffscreenGLES2Context(Get(&command_buffer));
42    BindToRequest(
43        new ChildGLImpl(surfaces_service_connection_, command_buffer.Pass()),
44        &request);
45  }
46
47 private:
48  ApplicationConnection* surfaces_service_connection_;
49  GpuPtr gpu_service_;
50
51  DISALLOW_COPY_AND_ASSIGN(ChildGLApp);
52};
53
54}  // namespace examples
55}  // namespace mojo
56
57MojoResult MojoMain(MojoHandle shell_handle) {
58  mojo::ApplicationRunnerChromium runner(new mojo::examples::ChildGLApp);
59  return runner.Run(shell_handle);
60}
61