// 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 CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_ #define CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_ #include #include #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/memory/shared_memory.h" #include "cc/layers/delegated_frame_resource_collection.h" #include "content/common/content_export.h" #include "ui/gfx/geometry/size.h" namespace base { class SharedMemory; } namespace cc { class CompositorFrame; class Layer; class SolidColorLayer; class DelegatedFrameProvider; class DelegatedFrameResourceCollection; class DelegatedRendererLayer; } namespace blink { class WebFrame; class WebPluginContainer; class WebLayer; } namespace gfx { class Rect; class Size; } struct FrameHostMsg_CompositorFrameSwappedACK_Params; struct FrameHostMsg_BuffersSwappedACK_Params; struct FrameHostMsg_ReclaimCompositorResources_Params; namespace content { class BrowserPlugin; class BrowserPluginManager; class RenderFrameProxy; class CONTENT_EXPORT ChildFrameCompositingHelper : public base::RefCounted, public cc::DelegatedFrameResourceCollectionClient { public: static ChildFrameCompositingHelper* CreateForBrowserPlugin( const base::WeakPtr& browser_plugin); static ChildFrameCompositingHelper* CreateForRenderFrameProxy( RenderFrameProxy* render_frame_proxy); void DidCommitCompositorFrame(); void EnableCompositing(bool); void OnContainerDestroy(); void OnCompositorFrameSwapped(scoped_ptr frame, int route_id, uint32 output_surface_id, int host_id, base::SharedMemoryHandle handle); void UpdateVisibility(bool); void ChildFrameGone(); // cc::DelegatedFrameProviderClient implementation. void UnusedResourcesAreAvailable() override; void SetContentsOpaque(bool); protected: // Friend RefCounted so that the dtor can be non-public. friend class base::RefCounted; private: ChildFrameCompositingHelper( const base::WeakPtr& browser_plugin, blink::WebFrame* frame, RenderFrameProxy* render_frame_proxy, int host_routing_id); virtual ~ChildFrameCompositingHelper(); BrowserPluginManager* GetBrowserPluginManager(); blink::WebPluginContainer* GetContainer(); int GetInstanceID(); void SendCompositorFrameSwappedACKToBrowser( FrameHostMsg_CompositorFrameSwappedACK_Params& params); void SendReclaimCompositorResourcesToBrowser( FrameHostMsg_ReclaimCompositorResources_Params& params); void CheckSizeAndAdjustLayerProperties(const gfx::Size& new_size, float device_scale_factor, cc::Layer* layer); void SendReturnedDelegatedResources(); int host_routing_id_; int last_route_id_; uint32 last_output_surface_id_; int last_host_id_; bool ack_pending_; bool opaque_; gfx::Size buffer_size_; // The lifetime of this weak pointer should be greater than the lifetime of // other member objects, as they may access this pointer during their // destruction. base::WeakPtr browser_plugin_; RenderFrameProxy* render_frame_proxy_; scoped_refptr resource_collection_; scoped_refptr frame_provider_; scoped_refptr background_layer_; scoped_refptr delegated_layer_; scoped_ptr web_layer_; blink::WebFrame* frame_; DISALLOW_COPY_AND_ASSIGN(ChildFrameCompositingHelper); }; } // namespace content #endif // CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_