|  | // 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 SKY_COMPOSITOR_SURFACE_HOLDER_H_ | 
|  | #define SKY_COMPOSITOR_SURFACE_HOLDER_H_ | 
|  |  | 
|  | #include "base/callback_forward.h" | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  | #include "mojo/services/surfaces/public/interfaces/surface_id.mojom.h" | 
|  | #include "mojo/services/surfaces/public/interfaces/surfaces.mojom.h" | 
|  | #include "mojo/services/surfaces/public/interfaces/surfaces_service.mojom.h" | 
|  | #include "ui/gfx/geometry/rect.h" | 
|  |  | 
|  | namespace mojo { | 
|  | class Shell; | 
|  | } | 
|  |  | 
|  | namespace sky { | 
|  | class SurfaceAllocator; | 
|  |  | 
|  | class SurfaceHolder : public mojo::SurfaceClient { | 
|  | public: | 
|  | class Client { | 
|  | public: | 
|  | virtual void OnSurfaceIdAvailable(mojo::SurfaceIdPtr surface_id) = 0; | 
|  | virtual void ReturnResources( | 
|  | mojo::Array<mojo::ReturnedResourcePtr> resources) = 0; | 
|  |  | 
|  | protected: | 
|  | virtual ~Client(); | 
|  | }; | 
|  |  | 
|  | explicit SurfaceHolder(Client* client, mojo::Shell* shell); | 
|  | ~SurfaceHolder() override; | 
|  |  | 
|  | void SetSize(const gfx::Size& size); | 
|  | void SubmitFrame(mojo::FramePtr frame, const base::Closure& callback); | 
|  |  | 
|  | private: | 
|  | // mojo::SurfaceClient | 
|  | void SetIdNamespace(uint32_t id_namespace) override; | 
|  | void ReturnResources( | 
|  | mojo::Array<mojo::ReturnedResourcePtr> resources) override; | 
|  |  | 
|  | void SetQualifiedId(); | 
|  |  | 
|  | Client* client_; | 
|  | gfx::Size size_; | 
|  | uint32_t id_namespace_; | 
|  | uint32_t local_id_; | 
|  | mojo::SurfacePtr surface_; | 
|  |  | 
|  | base::WeakPtrFactory<SurfaceHolder> weak_factory_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(SurfaceHolder); | 
|  | }; | 
|  |  | 
|  | }  // namespace sky | 
|  |  | 
|  | #endif  // SKY_COMPOSITOR_SURFACE_HOLDER_H_ |