blob: 61b51182d79c82a94782926a2c44660377022dd1 [file] [log] [blame]
[email protected]5a7100d2014-05-19 01:29:041// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_RENDERER_RENDER_FRAME_PROXY_H_
6#define CONTENT_RENDERER_RENDER_FRAME_PROXY_H_
7
avi1023d012015-12-25 02:39:148#include "base/macros.h"
[email protected]e3244ed2014-06-20 20:04:279#include "base/memory/ref_counted.h"
danakjff6a0262018-06-26 19:50:3110#include "cc/paint/paint_canvas.h"
Chris Blumeefd8f242017-12-08 00:24:2711#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
[email protected]5a7100d2014-05-19 01:29:0412#include "content/common/content_export.h"
Scott Violet0f6bb0902018-01-27 19:43:1713#include "content/common/frame_messages.h"
Fady Samuel799e72192018-04-25 21:16:5714#include "content/common/frame_visual_properties.h"
Fady Samuel85a1bf72017-10-27 14:30:2015#include "content/public/common/screen_info.h"
Fady Samuel4e717f52018-02-07 05:51:5016#include "content/renderer/child_frame_compositor.h"
[email protected]5a7100d2014-05-19 01:29:0417#include "ipc/ipc_listener.h"
18#include "ipc/ipc_sender.h"
Blink Reformata30d4232018-04-07 15:31:0619#include "third_party/blink/public/common/feature_policy/feature_policy.h"
Mustaq Ahmedc4cb7162018-06-05 16:28:3620#include "third_party/blink/public/common/frame/user_activation_update_type.h"
Blink Reformata30d4232018-04-07 15:31:0621#include "third_party/blink/public/platform/web_focus_type.h"
22#include "third_party/blink/public/platform/web_insecure_request_policy.h"
23#include "third_party/blink/public/web/web_remote_frame.h"
24#include "third_party/blink/public/web/web_remote_frame_client.h"
mkwst13213f32015-07-27 07:06:2725#include "url/origin.h"
[email protected]5a7100d2014-05-19 01:29:0426
Scott Violetf1291942017-10-20 22:38:2727#if defined(USE_AURA)
28#include "content/renderer/mus/mus_embedded_frame_delegate.h"
29#endif
30
creis5834fe5e2014-10-10 21:50:4931namespace blink {
Luna Luc3fdacdf2017-11-08 04:48:5332struct FramePolicy;
lazyboy0882dfce2015-08-16 05:47:3833struct WebRect;
Ehsan Karamad0e5d4692018-01-16 21:32:4834struct WebScrollIntoViewParams;
creis5834fe5e2014-10-10 21:50:4935}
36
Fady Samuel1a21156e2017-07-13 04:57:2937namespace viz {
38class SurfaceInfo;
39}
40
[email protected]5a7100d2014-05-19 01:29:0441namespace content {
42
[email protected]e3244ed2014-06-20 20:04:2743class ChildFrameCompositingHelper;
[email protected]5a7100d2014-05-19 01:29:0444class RenderFrameImpl;
45class RenderViewImpl;
lfgd64bb292016-01-18 23:57:3146class RenderWidget;
lukasza8e1c02e42016-05-17 20:05:1047struct ContentSecurityPolicyHeader;
raymesbba82b32016-07-19 00:41:3848struct FrameOwnerProperties;
alexmosbc7eafa2014-12-06 01:38:0949struct FrameReplicationState;
Daniel Chenge0555e192018-01-18 20:00:0550struct ResourceTimingInfo;
[email protected]5a7100d2014-05-19 01:29:0451
Scott Violet1098538e2017-10-05 19:23:3352#if defined(USE_AURA)
53class MusEmbeddedFrame;
54#endif
55
[email protected]5a7100d2014-05-19 01:29:0456// When a page's frames are rendered by multiple processes, each renderer has a
57// full copy of the frame tree. It has full RenderFrames for the frames it is
58// responsible for rendering and placeholder objects for frames rendered by
59// other processes. This class is the renderer-side object for the placeholder.
60// RenderFrameProxy allows us to keep existing window references valid over
61// cross-process navigations and route cross-site asynchronous JavaScript calls,
62// such as postMessage.
63//
64// For now, RenderFrameProxy is created when RenderFrame is swapped out. It
65// acts as a wrapper and is used for sending and receiving IPC messages. It is
66// deleted when the RenderFrame is swapped back in or the node of the frame
67// tree is deleted.
68//
69// Long term, RenderFrameProxy will be created to replace the RenderFrame in the
70// frame tree and the RenderFrame will be deleted after its unload handler has
71// finished executing. It will still be responsible for routing IPC messages
72// which are valid for cross-site interactions between frames.
73// RenderFrameProxy will be deleted when the node in the frame tree is deleted
74// or when navigating the frame causes it to return to this process and a new
75// RenderFrame is created for it.
Nico Weber43ddd7a32017-08-15 19:19:2776class CONTENT_EXPORT RenderFrameProxy : public IPC::Listener,
77 public IPC::Sender,
Scott Violetf1291942017-10-20 22:38:2778#if defined(USE_AURA)
79 public MusEmbeddedFrameDelegate,
80#endif
Fady Samuel4e717f52018-02-07 05:51:5081 public ChildFrameCompositor,
Nico Weber43ddd7a32017-08-15 19:19:2782 public blink::WebRemoteFrameClient {
[email protected]5a7100d2014-05-19 01:29:0483 public:
[email protected]c092f5c2014-07-18 01:34:3384 // This method should be used to create a RenderFrameProxy, which will replace
85 // an existing RenderFrame during its cross-process navigation from the
86 // current process to a different one. |routing_id| will be ID of the newly
87 // created RenderFrameProxy. |frame_to_replace| is the frame that the new
88 // proxy will eventually swap places with.
89 static RenderFrameProxy* CreateProxyToReplaceFrame(
90 RenderFrameImpl* frame_to_replace,
dcheng860817a2015-05-22 03:16:5691 int routing_id,
92 blink::WebTreeScopeType scope);
[email protected]c092f5c2014-07-18 01:34:3393
94 // This method should be used to create a RenderFrameProxy, when there isn't
95 // an existing RenderFrame. It should be called to construct a local
96 // representation of a RenderFrame that has been created in another process --
97 // for example, after a cross-process navigation or after the addition of a
98 // new frame local to some other process. |routing_id| will be the ID of the
alexmosa181efc2015-09-03 00:39:0499 // newly created RenderFrameProxy. |render_view_routing_id| identifies the
nick3b5a21f2016-11-22 23:07:11100 // RenderView to be associated with this frame. |opener|, if supplied, is the
101 // new frame's opener. |parent_routing_id| is the routing ID of the
102 // RenderFrameProxy to which the new frame is parented.
[email protected]c092f5c2014-07-18 01:34:33103 //
104 // |parent_routing_id| always identifies a RenderFrameProxy (never a
105 // RenderFrame) because a new child of a local frame should always start out
106 // as a frame, not a proxy.
alexmosbc7eafa2014-12-06 01:38:09107 static RenderFrameProxy* CreateFrameProxy(
108 int routing_id,
alexmosbc7eafa2014-12-06 01:38:09109 int render_view_routing_id,
nick3b5a21f2016-11-22 23:07:11110 blink::WebFrame* opener,
alexmosa181efc2015-09-03 00:39:04111 int parent_routing_id,
Dmitry Gozman89361212018-02-13 16:10:44112 const FrameReplicationState& replicated_state,
113 const base::UnguessableToken& devtools_frame_token);
[email protected]5a7100d2014-05-19 01:29:04114
Lucas Furukawa Gadani99125822019-01-03 15:41:49115 // Creates a RenderFrameProxy to be used with a portal owned by |parent|.
116 // |routing_id| is the routing id of this new RenderFrameProxy.
117 static RenderFrameProxy* CreateProxyForPortal(RenderFrameImpl* parent,
118 int proxy_routing_id);
119
[email protected]5a7100d2014-05-19 01:29:04120 // Returns the RenderFrameProxy for the given routing ID.
121 static RenderFrameProxy* FromRoutingID(int routing_id);
122
Daniel Cheng0edfa562017-06-05 19:13:18123 // Returns the RenderFrameProxy given a WebRemoteFrame. |web_frame| must not
124 // be null, nor will this method return null.
125 static RenderFrameProxy* FromWebFrame(blink::WebRemoteFrame* web_frame);
[email protected]c092f5c2014-07-18 01:34:33126
dcheng6d18e402014-10-21 12:32:52127 ~RenderFrameProxy() override;
[email protected]5a7100d2014-05-19 01:29:04128
129 // IPC::Sender
dcheng6d18e402014-10-21 12:32:52130 bool Send(IPC::Message* msg) override;
[email protected]5a7100d2014-05-19 01:29:04131
Eric Karlf18f81242018-04-16 21:13:31132 // IPC::Listener
133 bool OnMessageReceived(const IPC::Message& msg) override;
134
danakja6c10012018-07-06 14:25:36135 // Out-of-process child frames receive a signal from blink::LayerTreeView
lfge6119aac2016-01-27 02:14:31136 // when a compositor frame will begin.
137 void WillBeginCompositorFrame();
138
Fady Samuel85a1bf72017-10-27 14:30:20139 // Out-of-process child frames receive a signal from RenderWidget when the
140 // ScreenInfo has changed.
141 void OnScreenInfoChanged(const ScreenInfo& screen_info);
142
akabac6bd1212018-06-25 20:10:48143 // Out-of-process child frames receive a signal from RenderWidget when the
144 // zoom level has changed.
akaba3483d8f2018-07-10 21:43:09145 void OnZoomLevelChanged(double zoom_level);
akabac6bd1212018-06-25 20:10:48146
W. James MacLean2a90bff2018-11-05 20:52:47147 // Out-of-process child frames receive a signal from RenderWidget when the
148 // page scale factor has changed.
149 void OnPageScaleFactorChanged(float page_scale_factor);
150
Vladimir Levin98d76dad2018-04-21 00:21:29151 // Invoked by RenderWidget when a new capture sequence number was set,
152 // indicating that surfaces should be synchronized.
153 void UpdateCaptureSequenceNumber(uint32_t capture_sequence_number);
154
alexmosbc7eafa2014-12-06 01:38:09155 // Pass replicated information, such as security origin, to this
156 // RenderFrameProxy's WebRemoteFrame.
157 void SetReplicatedState(const FrameReplicationState& state);
158
[email protected]82307f6b2014-08-07 03:30:12159 int routing_id() { return routing_id_; }
160 RenderViewImpl* render_view() { return render_view_; }
161 blink::WebRemoteFrame* web_frame() { return web_frame_; }
Daniel Cheng999698bd2017-03-22 04:56:37162 const std::string& unique_name() const { return unique_name_; }
[email protected]c092f5c2014-07-18 01:34:33163
alexmosf076d912017-01-23 22:27:57164 void set_provisional_frame_routing_id(int routing_id) {
165 provisional_frame_routing_id_ = routing_id;
166 }
167
168 int provisional_frame_routing_id() { return provisional_frame_routing_id_; }
169
lfgd64bb292016-01-18 23:57:31170 // Returns the widget used for the local frame root.
171 RenderWidget* render_widget() { return render_widget_; }
172
Scott Violet1098538e2017-10-05 19:23:33173#if defined(USE_AURA)
Scott Violet1098538e2017-10-05 19:23:33174 void SetMusEmbeddedFrame(
175 std::unique_ptr<MusEmbeddedFrame> mus_embedded_frame);
176#endif
177
Fady Samuel0b911822018-04-25 13:22:16178 void SynchronizeVisualProperties();
Fady Samuel85a1bf72017-10-27 14:30:20179
Fady Samuel82fd52a2018-01-31 21:00:06180 const gfx::Rect& screen_space_rect() const {
Fady Samuel0b911822018-04-25 13:22:16181 return pending_visual_properties_.screen_space_rect;
Fady Samuel82fd52a2018-01-31 21:00:06182 }
183
184 const gfx::Size& local_frame_size() const {
Fady Samuel0b911822018-04-25 13:22:16185 return pending_visual_properties_.local_frame_size;
Fady Samuel85a1bf72017-10-27 14:30:20186 }
187
188 const ScreenInfo& screen_info() const {
Fady Samuel0b911822018-04-25 13:22:16189 return pending_visual_properties_.screen_info;
Fady Samuel85a1bf72017-10-27 14:30:20190 }
191
Sadrul Habib Chowdhury6539b732018-01-05 21:53:27192 const viz::FrameSinkId& frame_sink_id() const { return frame_sink_id_; }
193
japhet4dad341e2014-09-09 21:11:11194 // blink::WebRemoteFrameClient implementation:
Blink Reformat1c4d759e2017-04-09 16:34:54195 void FrameDetached(DetachType type) override;
Charlie Reis10bc915a2018-03-30 16:36:19196 void CheckCompleted() override;
Blink Reformat1c4d759e2017-04-09 16:34:54197 void ForwardPostMessage(blink::WebLocalFrame* sourceFrame,
dchengb4a1a32e2016-05-17 01:57:00198 blink::WebRemoteFrame* targetFrame,
199 blink::WebSecurityOrigin target,
Alex Moshchuk99a441e72018-03-01 19:06:37200 blink::WebDOMMessageEvent event,
201 bool has_user_gesture) override;
Yao Xiaoaf79ca9b2019-03-12 19:54:18202 void Navigate(
203 const blink::WebURLRequest& request,
204 bool should_replace_current_entry,
205 bool is_opener_navigation,
206 bool has_download_sandbox_flag,
207 bool blocking_downloads_in_sandbox_without_user_activation_enabled,
208 mojo::ScopedMessagePipeHandle blob_url_token) override;
Fady Samuel82fd52a2018-01-31 21:00:06209 void FrameRectsChanged(const blink::WebRect& local_frame_rect,
210 const blink::WebRect& screen_space_rect) override;
Blink Reformat1c4d759e2017-04-09 16:34:54211 void UpdateRemoteViewportIntersection(
Stefan Zager54e25832018-08-14 22:15:31212 const blink::WebRect& viewport_intersection,
Stefan Zager0926c9c2019-03-12 02:46:09213 blink::FrameOcclusionState occlusion_state) override;
Dave Tapuskad6703f912019-01-31 23:13:11214 void VisibilityChanged(blink::mojom::FrameVisibility visibility) override;
kenrb04323782017-06-23 01:23:32215 void SetIsInert(bool) override;
sunxd540a9962018-05-24 22:51:06216 void SetInheritedEffectiveTouchAction(cc::TouchAction) override;
Ken Buchanan8a319fb2017-11-15 18:37:12217 void UpdateRenderThrottlingStatus(bool is_throttled,
218 bool subtree_throttled) override;
Blink Reformat1c4d759e2017-04-09 16:34:54219 void DidChangeOpener(blink::WebFrame* opener) override;
220 void AdvanceFocus(blink::WebFocusType type,
alexmos401f0aba2015-12-06 10:07:39221 blink::WebLocalFrame* source) override;
Blink Reformat1c4d759e2017-04-09 16:34:54222 void FrameFocused() override;
Dmitry Gozmanf12caab2018-02-07 03:45:58223 base::UnguessableToken GetDevToolsFrameToken() override;
danakjff6a0262018-06-26 19:50:31224 uint32_t Print(const blink::WebRect& rect, cc::PaintCanvas* canvas) override;
japhet4dad341e2014-09-09 21:11:11225
nasko3e8c20e2014-12-18 06:54:56226 // IPC handlers
227 void OnDidStartLoading();
228
Saman Samie61e5c032018-11-05 22:11:44229 void WasEvicted();
230
[email protected]5a7100d2014-05-19 01:29:04231 private:
alexmosf076d912017-01-23 22:27:57232 RenderFrameProxy(int routing_id);
[email protected]5a7100d2014-05-19 01:29:04233
lfgd64bb292016-01-18 23:57:31234 void Init(blink::WebRemoteFrame* frame,
235 RenderViewImpl* render_view,
Ken Buchanan6bbf9df2018-08-06 20:37:40236 RenderWidget* render_widget,
237 bool parent_is_local);
[email protected]c092f5c2014-07-18 01:34:33238
Fady Samueld320d432018-07-09 18:00:23239 void ResendVisualProperties();
Scott Violetf1291942017-10-20 22:38:27240
[email protected]5a7100d2014-05-19 01:29:04241 // IPC handlers
242 void OnDeleteProxy();
[email protected]e3244ed2014-06-20 20:04:27243 void OnChildFrameProcessGone();
[email protected]e3244ed2014-06-20 20:04:27244 void OnCompositorFrameSwapped(const IPC::Message& message);
Fady Samueld320d432018-07-09 18:00:23245 void OnFirstSurfaceActivation(const viz::SurfaceInfo& surface_info);
Chris Harrelsond7ab99b2018-01-24 17:51:36246 void OnIntrinsicSizingInfoOfChildChanged(
247 blink::WebIntrinsicSizingInfo sizing_info);
alexmos95733002015-08-24 16:38:09248 void OnUpdateOpener(int opener_routing_id);
Scott Violet0f6bb0902018-01-27 19:43:17249 void OnViewChanged(const FrameMsg_ViewChanged_Params& params);
nasko3e8c20e2014-12-18 06:54:56250 void OnDidStopLoading();
Luna Luc3fdacdf2017-11-08 04:48:53251 void OnDidUpdateFramePolicy(const blink::FramePolicy& frame_policy);
Ian Clellandedb8c5dd2018-03-01 17:01:37252 void OnDidSetFramePolicyHeaders(
253 blink::WebSandboxFlags active_sandbox_flags,
254 blink::ParsedFeaturePolicy parsed_feature_policy);
Daniel Chenge0555e192018-01-18 20:00:05255 void OnForwardResourceTimingToParent(
256 const ResourceTimingInfo& resource_timing);
alexmosf40ce5b02015-02-25 20:19:56257 void OnDispatchLoad();
Stefan Zager0926c9c2019-03-12 02:46:09258 void OnSetNeedsOcclusionTracking(bool);
engedy6e2e0992017-05-25 18:58:42259 void OnCollapse(bool collapsed);
lukasza464d8692016-02-22 19:26:32260 void OnDidUpdateName(const std::string& name, const std::string& unique_name);
arthursonzogni662aa652017-03-28 11:09:50261 void OnAddContentSecurityPolicies(
262 const std::vector<ContentSecurityPolicyHeader>& header);
lukasza8e1c02e42016-05-17 20:05:10263 void OnResetContentSecurityPolicy();
mkwstf672e7ef2016-06-09 20:51:07264 void OnEnforceInsecureRequestPolicy(blink::WebInsecureRequestPolicy policy);
arthursonzogni4b62a5cb2018-01-17 14:14:26265 void OnEnforceInsecureNavigationsSet(const std::vector<uint32_t>& set);
raymesbba82b32016-07-19 00:41:38266 void OnSetFrameOwnerProperties(const FrameOwnerProperties& properties);
estarkbd8e26f2016-03-16 23:30:37267 void OnDidUpdateOrigin(const url::Origin& origin,
268 bool is_potentially_trustworthy_unique_origin);
alexmos3fcd0ca2015-10-23 18:18:33269 void OnSetPageFocus(bool is_focused);
alexmosb1dc2162015-11-05 00:59:20270 void OnSetFocusedFrame();
alexmos1f7eac4a2016-05-25 23:04:55271 void OnWillEnterFullscreen();
Mustaq Ahmedc4cb7162018-06-05 16:28:36272 void OnUpdateUserActivationState(blink::UserActivationUpdateType update_type);
Ehsan Karamad0e5d4692018-01-16 21:32:48273 void OnScrollRectToVisible(const gfx::Rect& rect_to_scroll,
274 const blink::WebScrollIntoViewParams& params);
Kevin McNeee21d23b2018-06-29 15:25:04275 void OnBubbleLogicalScroll(blink::WebScrollDirection direction,
276 blink::WebScrollGranularity granularity);
Fady Samuele392fd52018-05-11 17:16:43277 void OnDidUpdateVisualProperties(const cc::RenderFrameMetadata& metadata);
Fady Samueld4e14c82018-04-04 00:56:29278 void OnEnableAutoResize(const gfx::Size& min_size, const gfx::Size& max_size);
279 void OnDisableAutoResize();
Becca Hughes60af7d42017-12-12 10:53:15280 void OnSetHasReceivedUserGestureBeforeNavigation(bool value);
Ehsan Karamad192a8da2018-10-21 03:48:08281 void OnRenderFallbackContent() const;
[email protected]e3244ed2014-06-20 20:04:27282
Scott Violetf1291942017-10-20 22:38:27283#if defined(USE_AURA)
284 // MusEmbeddedFrameDelegate
Scott Violetf1291942017-10-20 22:38:27285 void OnMusEmbeddedFrameSinkIdAllocated(
286 const viz::FrameSinkId& frame_sink_id) override;
287#endif
288
Fady Samuel4e717f52018-02-07 05:51:50289 // ChildFrameCompositor:
danakj6a062b112018-05-17 16:25:45290 cc::Layer* GetLayer() override;
danakj25f030112018-05-11 18:26:54291 void SetLayer(scoped_refptr<cc::Layer> layer,
Daniel Cheng02a0bc12018-09-19 00:42:09292 bool prevent_contents_opaque_changes,
293 bool is_surface_layer) override;
Fady Samuel4e717f52018-02-07 05:51:50294 SkBitmap* GetSadPageBitmap() override;
295
Chris Blume313694232018-04-25 20:32:39296 const viz::LocalSurfaceId& GetLocalSurfaceId() const;
297
[email protected]c092f5c2014-07-18 01:34:33298 // The routing ID by which this RenderFrameProxy is known.
299 const int routing_id_;
[email protected]5a7100d2014-05-19 01:29:04300
alexmosf076d912017-01-23 22:27:57301 // The routing ID of the provisional RenderFrame (if any) that is meant to
302 // replace this RenderFrameProxy in the frame tree.
303 int provisional_frame_routing_id_;
[email protected]5a7100d2014-05-19 01:29:04304
[email protected]82307f6b2014-08-07 03:30:12305 // Stores the WebRemoteFrame we are associated with.
306 blink::WebRemoteFrame* web_frame_;
Daniel Cheng999698bd2017-03-22 04:56:37307 std::string unique_name_;
Ken Buchanan6bbf9df2018-08-06 20:37:40308
309 // Can be nullptr when this RenderFrameProxy's parent is not a RenderFrame.
Ken Buchanane0b3819e2017-09-01 21:32:29310 std::unique_ptr<ChildFrameCompositingHelper> compositing_helper_;
[email protected]e3244ed2014-06-20 20:04:27311
[email protected]c092f5c2014-07-18 01:34:33312 RenderViewImpl* render_view_;
lfgd64bb292016-01-18 23:57:31313 RenderWidget* render_widget_;
[email protected]c092f5c2014-07-18 01:34:33314
Dmitry Gozmanf12caab2018-02-07 03:45:58315 // Contains token to be used as a frame id in the devtools protocol.
Pavel Feldman5f4f48a2018-01-17 05:15:34316 // It is derived from the content's devtools_frame_token, is
317 // defined by the browser and passed into Blink upon frame creation.
Dmitry Gozmanf12caab2018-02-07 03:45:58318 base::UnguessableToken devtools_frame_token_;
Pavel Feldman5f4f48a2018-01-17 05:15:34319
Fady Samueld10aadd82017-11-03 18:23:57320 // TODO(fsamuel): Most RenderFrameProxys don't host viz::Surfaces and
321 // therefore don't care to synchronize ResizeParams with viz::LocalSurfaceIds.
322 // Perhaps this can be moved to ChildFrameCompositingHelper?
Fady Samuel85a1bf72017-10-27 14:30:20323 // The last ResizeParams sent to the browser process, if any.
Fady Samuel799e72192018-04-25 21:16:57324 base::Optional<FrameVisualProperties> sent_visual_properties_;
Fady Samuel85a1bf72017-10-27 14:30:20325
326 // The current set of ResizeParams. This may or may not match
Fady Samuel0b911822018-04-25 13:22:16327 // |sent_visual_properties_|.
Fady Samuel799e72192018-04-25 21:16:57328 FrameVisualProperties pending_visual_properties_;
Fady Samuel85a1bf72017-10-27 14:30:20329
Fady Samuel4e717f52018-02-07 05:51:50330 bool crashed_ = false;
331
Fady Samuel3ff277d2017-08-29 17:55:52332 viz::FrameSinkId frame_sink_id_;
Saman Sami5578f2d2019-03-05 02:37:41333 std::unique_ptr<viz::ParentLocalSurfaceIdAllocator>
334 parent_local_surface_id_allocator_;
Fady Samuel0c7ffb12017-08-28 19:08:39335
Fady Samuel3ff277d2017-08-29 17:55:52336 bool enable_surface_synchronization_ = false;
337
Ken Buchananb2c9e262018-03-10 16:53:31338 gfx::Rect last_intersection_rect_;
339 gfx::Rect last_compositor_visible_rect_;
Daniel Chengaa37a482019-03-21 00:24:20340 blink::FrameOcclusionState last_occlusion_state_ =
341 blink::FrameOcclusionState::kUnknown;
Ken Buchananb2c9e262018-03-10 16:53:31342
Scott Violet1098538e2017-10-05 19:23:33343#if defined(USE_AURA)
344 std::unique_ptr<MusEmbeddedFrame> mus_embedded_frame_;
345#endif
346
Fady Samuel4e717f52018-02-07 05:51:50347 // The layer used to embed the out-of-process content.
danakj25f030112018-05-11 18:26:54348 scoped_refptr<cc::Layer> embedded_layer_;
Fady Samuel4e717f52018-02-07 05:51:50349
[email protected]5a7100d2014-05-19 01:29:04350 DISALLOW_COPY_AND_ASSIGN(RenderFrameProxy);
351};
352
kylecharee539faa02018-01-22 17:00:55353} // namespace content
[email protected]5a7100d2014-05-19 01:29:04354
355#endif // CONTENT_RENDERER_RENDER_FRAME_PROXY_H_