// 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 MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_
#define MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_

#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "cc/surfaces/surface_id.h"
#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h"
#include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/size.h"

namespace cc {
class SurfaceIdAllocator;
}

namespace mojo {

// This manages the surface that draws to a particular NativeViewport instance.
class ViewportSurface : public SurfaceClient {
 public:
  ViewportSurface(SurfacesService* surfaces_service,
                  Gpu* gpu_service,
                  const gfx::Size& size,
                  cc::SurfaceId child_id);
  ~ViewportSurface() override;

  void SetWidgetId(uint64_t widget_id);
  void SetSize(const gfx::Size& size);
  void SetChildId(cc::SurfaceId child_id);

 private:
  void OnSurfaceConnectionCreated(SurfacePtr surface, uint32_t id_namespace);
  void BindSurfaceToNativeViewport();
  void SubmitFrame();

  // SurfaceClient implementation.
  void ReturnResources(Array<ReturnedResourcePtr> resources) override;

  SurfacePtr surface_;
  Gpu* gpu_service_;
  uint64_t widget_id_;
  gfx::Size size_;
  scoped_ptr<cc::SurfaceIdAllocator> id_allocator_;
  cc::SurfaceId id_;
  cc::SurfaceId child_id_;
  base::WeakPtrFactory<ViewportSurface> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(ViewportSurface);
};

}  // namespace mojo

#endif  // MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_
