| // 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. |
| |
| #ifndef SERVICES_NATIVE_VIEWPORT_NATIVE_VIEWPORT_IMPL_H_ |
| #define SERVICES_NATIVE_VIEWPORT_NATIVE_VIEWPORT_IMPL_H_ |
| |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "cc/surfaces/surface_id.h" |
| #include "mojo/public/cpp/bindings/strong_binding.h" |
| #include "mojo/services/gpu/public/interfaces/gpu.mojom.h" |
| #include "mojo/services/native_viewport/public/interfaces/native_viewport.mojom.h" |
| #include "mojo/services/surfaces/public/interfaces/surfaces.mojom.h" |
| #include "services/native_viewport/platform_viewport.h" |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace ui { |
| class Event; |
| } |
| |
| namespace mojo { |
| class ApplicationImpl; |
| } |
| |
| namespace native_viewport { |
| class ViewportSurface; |
| |
| // A NativeViewportImpl is bound to a message pipe and to a PlatformViewport. |
| // The NativeViewportImpl's lifetime ends when either the message pipe is closed |
| // or the PlatformViewport informs the NativeViewportImpl that it has been |
| // destroyed. |
| class NativeViewportImpl : public mojo::NativeViewport, |
| public PlatformViewport::Delegate, |
| public mojo::ErrorHandler { |
| using CreateCallback = mojo::Callback<void(uint64_t native_viewport_id, |
| mojo::ViewportMetricsPtr metrics)>; |
| using MetricsCallback = |
| mojo::Callback<void(mojo::ViewportMetricsPtr metrics)>; |
| |
| public: |
| NativeViewportImpl(mojo::ApplicationImpl* app, |
| bool is_headless, |
| mojo::InterfaceRequest<mojo::NativeViewport> request); |
| ~NativeViewportImpl() override; |
| |
| // NativeViewport implementation. |
| void Create(mojo::SizePtr size, const CreateCallback& callback) override; |
| void RequestMetrics(const MetricsCallback& callback) override; |
| void Show() override; |
| void Hide() override; |
| void Close() override; |
| void SetSize(mojo::SizePtr size) override; |
| void SubmittedFrame(mojo::SurfaceIdPtr surface_id) override; |
| void SetEventDispatcher( |
| mojo::NativeViewportEventDispatcherPtr dispatcher) override; |
| |
| // PlatformViewport::Delegate implementation. |
| void OnMetricsChanged(mojo::ViewportMetricsPtr metrics) override; |
| void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override; |
| bool OnEvent(ui::Event* ui_event) override; |
| void OnDestroyed() override; |
| |
| // mojo::ErrorHandler implementation. |
| void OnConnectionError() override; |
| |
| void AckEvent(); |
| |
| private: |
| bool is_headless_; |
| scoped_ptr<PlatformViewport> platform_viewport_; |
| scoped_ptr<ViewportSurface> viewport_surface_; |
| uint64_t widget_id_; |
| bool sent_metrics_; |
| mojo::ViewportMetricsPtr metrics_; |
| mojo::GpuPtr gpu_service_; |
| mojo::SurfacePtr surface_; |
| cc::SurfaceId child_surface_id_; |
| bool waiting_for_event_ack_; |
| CreateCallback create_callback_; |
| MetricsCallback metrics_callback_; |
| mojo::NativeViewportEventDispatcherPtr event_dispatcher_; |
| mojo::Binding<mojo::NativeViewport> binding_; |
| base::WeakPtrFactory<NativeViewportImpl> weak_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(NativeViewportImpl); |
| }; |
| |
| } // namespace native_viewport |
| |
| #endif // SERVICES_NATIVE_VIEWPORT_NATIVE_VIEWPORT_IMPL_H_ |