child_impl.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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#ifndef MOJO_EXAMPLES_SURFACES_APP_CHILD_IMPL_H_
6#define MOJO_EXAMPLES_SURFACES_APP_CHILD_IMPL_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "cc/surfaces/surface_id.h"
10#include "cc/surfaces/surface_id_allocator.h"
11#include "mojo/examples/surfaces_app/child.mojom.h"
12#include "mojo/public/cpp/bindings/string.h"
13#include "mojo/services/public/interfaces/surfaces/surface_id.mojom.h"
14#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h"
15#include "third_party/skia/include/core/SkColor.h"
16#include "ui/gfx/size.h"
17
18namespace cc {
19class CompositorFrame;
20}
21
22namespace mojo {
23
24class ApplicationConnection;
25
26namespace surfaces {
27class Surface;
28}
29
30namespace examples {
31
32// Simple example of a child app using surfaces.
33class ChildImpl : public InterfaceImpl<Child>, public SurfaceClient {
34 public:
35  class Context {
36   public:
37    virtual ApplicationConnection* ShellConnection(
38        const mojo::String& application_url) = 0;
39  };
40  explicit ChildImpl(ApplicationConnection* surfaces_service_connection);
41  virtual ~ChildImpl();
42
43  // SurfaceClient implementation
44  virtual void SetIdNamespace(uint32_t id_namespace) OVERRIDE;
45  virtual void ReturnResources(
46      Array<ReturnedResourcePtr> resources) OVERRIDE;
47
48 private:
49  // Child implementation.
50  virtual void ProduceFrame(
51      ColorPtr color,
52      SizePtr size,
53      const mojo::Callback<void(SurfaceIdPtr id)>& callback) OVERRIDE;
54
55  void Draw();
56
57  SkColor color_;
58  gfx::Size size_;
59  scoped_ptr<cc::SurfaceIdAllocator> allocator_;
60  SurfacePtr surface_;
61  cc::SurfaceId id_;
62  mojo::Callback<void(SurfaceIdPtr id)> produce_callback_;
63
64  DISALLOW_COPY_AND_ASSIGN(ChildImpl);
65};
66
67}  // namespace examples
68}  // namespace mojo
69
70#endif  // MOJO_EXAMPLES_SURFACES_APP_CHILD_IMPL_H_
71