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_SERVICES_NATIVE_VIEWPORT_IMPL_H_
6#define MOJO_SERVICES_NATIVE_VIEWPORT_IMPL_H_
7
8#include "base/memory/weak_ptr.h"
9#include "cc/surfaces/surface_id.h"
10#include "mojo/services/native_viewport/platform_viewport.h"
11#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
12#include "mojo/services/public/interfaces/native_viewport/native_viewport.mojom.h"
13#include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
14#include "ui/gfx/geometry/rect.h"
15
16namespace ui {
17class Event;
18}
19
20namespace mojo {
21class ApplicationImpl;
22class ViewportSurface;
23
24class NativeViewportImpl : public InterfaceImpl<NativeViewport>,
25                           public PlatformViewport::Delegate {
26 public:
27  NativeViewportImpl(ApplicationImpl* app, bool is_headless);
28  virtual ~NativeViewportImpl();
29
30  // InterfaceImpl<NativeViewport> implementation.
31  virtual void Create(SizePtr bounds) OVERRIDE;
32  virtual void Show() OVERRIDE;
33  virtual void Hide() OVERRIDE;
34  virtual void Close() OVERRIDE;
35  virtual void SetBounds(SizePtr bounds) OVERRIDE;
36  virtual void SubmittedFrame(SurfaceIdPtr surface_id) OVERRIDE;
37
38  // PlatformViewport::Delegate implementation.
39  virtual void OnBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
40  virtual void OnAcceleratedWidgetAvailable(
41      gfx::AcceleratedWidget widget) OVERRIDE;
42  virtual bool OnEvent(ui::Event* ui_event) OVERRIDE;
43  virtual void OnDestroyed() OVERRIDE;
44
45  void AckEvent();
46
47 private:
48  bool is_headless_;
49  scoped_ptr<PlatformViewport> platform_viewport_;
50  scoped_ptr<ViewportSurface> viewport_surface_;
51  uint64_t widget_id_;
52  gfx::Rect bounds_;
53  GpuPtr gpu_service_;
54  SurfacesServicePtr surfaces_service_;
55  cc::SurfaceId child_surface_id_;
56  bool waiting_for_event_ack_;
57  base::WeakPtrFactory<NativeViewportImpl> weak_factory_;
58
59  DISALLOW_COPY_AND_ASSIGN(NativeViewportImpl);
60};
61
62}  // namespace mojo
63
64#endif  // MOJO_SERVICES_NATIVE_VIEWPORT_IMPL_H_
65