1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
// 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 <stdint.h>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/shared_memory.h"
#include "base/memory/weak_ptr.h"
#include "cc/surfaces/surface_id.h"
#include "content/common/content_export.h"
#include "ui/gfx/geometry/size.h"
namespace base {
class SharedMemory;
}
namespace cc {
struct SurfaceSequence;
class CompositorFrame;
class Layer;
class SolidColorLayer;
class SurfaceLayer;
}
namespace blink {
class WebFrame;
class WebPluginContainer;
class WebLayer;
}
namespace gfx {
class Rect;
class Size;
}
struct FrameHostMsg_CompositorFrameSwappedACK_Params;
struct FrameHostMsg_ReclaimCompositorResources_Params;
namespace content {
class BrowserPlugin;
class BrowserPluginManager;
class RenderFrameProxy;
class ThreadSafeSender;
class CONTENT_EXPORT ChildFrameCompositingHelper
: public base::RefCounted<ChildFrameCompositingHelper> {
public:
static ChildFrameCompositingHelper* CreateForBrowserPlugin(
const base::WeakPtr<BrowserPlugin>& browser_plugin);
static ChildFrameCompositingHelper* CreateForRenderFrameProxy(
RenderFrameProxy* render_frame_proxy);
void OnContainerDestroy();
void OnSetSurface(const cc::SurfaceId& surface_id,
const gfx::Size& frame_size,
float scale_factor,
const cc::SurfaceSequence& sequence);
void UpdateVisibility(bool);
void ChildFrameGone();
cc::SurfaceId surface_id() const { return surface_id_; }
protected:
// Friend RefCounted so that the dtor can be non-public.
friend class base::RefCounted<ChildFrameCompositingHelper>;
private:
ChildFrameCompositingHelper(
const base::WeakPtr<BrowserPlugin>& browser_plugin,
blink::WebFrame* frame,
RenderFrameProxy* render_frame_proxy,
int host_routing_id);
virtual ~ChildFrameCompositingHelper();
BrowserPluginManager* GetBrowserPluginManager();
blink::WebPluginContainer* GetContainer();
int GetInstanceID();
void CheckSizeAndAdjustLayerProperties(const gfx::Size& new_size,
float device_scale_factor,
cc::Layer* layer);
static void SatisfyCallback(scoped_refptr<ThreadSafeSender> sender,
int host_routing_id,
cc::SurfaceSequence sequence);
static void SatisfyCallbackBrowserPlugin(
scoped_refptr<ThreadSafeSender> sender,
int host_routing_id,
int browser_plugin_instance_id,
cc::SurfaceSequence sequence);
static void RequireCallback(scoped_refptr<ThreadSafeSender> sender,
int host_routing_id,
cc::SurfaceId id,
cc::SurfaceSequence sequence);
static void RequireCallbackBrowserPlugin(
scoped_refptr<ThreadSafeSender> sender,
int host_routing_id,
int browser_plugin_instance_id,
cc::SurfaceId id,
cc::SurfaceSequence sequence);
void UpdateWebLayer(blink::WebLayer* layer);
int host_routing_id_;
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<BrowserPlugin> browser_plugin_;
RenderFrameProxy* render_frame_proxy_;
scoped_ptr<blink::WebLayer> web_layer_;
cc::SurfaceId surface_id_;
blink::WebFrame* frame_;
DISALLOW_COPY_AND_ASSIGN(ChildFrameCompositingHelper);
};
} // namespace content
#endif // CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_
|