blob: 4b3ecaba151c5a9e8d241aae2245c99b89d94dc3 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_REMOTE_FRAME_IMPL_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_REMOTE_FRAME_IMPL_H_
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/mojom/frame/frame_owner_properties.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/tree_scope_type.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/user_activation_update_types.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink-forward.h"
#include "third_party/blink/public/web/web_remote_frame.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/frame/remote_frame.h"
#include "third_party/blink/renderer/platform/heap/self_keep_alive.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
class FrameOwner;
struct FrameVisualProperties;
class RemoteFrame;
class RemoteFrameClientImpl;
enum class WebFrameLoadType;
class WebFrameWidget;
class WebView;
class WindowAgentFactory;
class CORE_EXPORT WebRemoteFrameImpl final
: public GarbageCollected<WebRemoteFrameImpl>,
public WebRemoteFrame {
public:
static WebRemoteFrameImpl* CreateMainFrame(
WebView*,
const RemoteFrameToken& frame_token,
bool is_loading,
const base::UnguessableToken& devtools_frame_token,
WebFrame* opener,
mojo::PendingAssociatedRemote<mojom::blink::RemoteFrameHost>
remote_frame_host,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver,
mojom::blink::FrameReplicationStatePtr replicated_state);
// TODO(crbug.com/1498140): Rename this now that the portal case no longer
// applies.
static WebRemoteFrameImpl* CreateForPortalOrFencedFrame(
mojom::blink::TreeScopeType,
const RemoteFrameToken& frame_token,
const base::UnguessableToken& devtools_frame_token,
HTMLFrameOwnerElement* frame_owner,
mojo::PendingAssociatedRemote<mojom::blink::RemoteFrameHost>
remote_frame_host,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver,
mojom::blink::FrameReplicationStatePtr replicated_state);
WebRemoteFrameImpl(mojom::blink::TreeScopeType,
const RemoteFrameToken& frame_token);
~WebRemoteFrameImpl() override;
// WebFrame methods:
void Close() override;
WebView* View() const override;
// WebRemoteFrame methods:
WebLocalFrame* CreateLocalChild(
mojom::blink::TreeScopeType,
const WebString& name,
const FramePolicy&,
WebLocalFrameClient*,
InterfaceRegistry*,
WebFrame* previous_sibling,
const WebFrameOwnerProperties&,
const LocalFrameToken& frame_token,
WebFrame* opener,
const DocumentToken& document_token,
std::unique_ptr<blink::WebPolicyContainer> policy_container) override;
void SetReplicatedOrigin(
const WebSecurityOrigin&,
bool is_potentially_trustworthy_opaque_origin) override;
void DidStartLoading() override;
v8::Local<v8::Object> GlobalProxy(v8::Isolate*) const override;
WebString UniqueName() const override;
const FrameVisualProperties& GetPendingVisualPropertiesForTesting()
const override;
bool IsAdFrame() const override;
void InitializeCoreFrame(
Page&,
FrameOwner*,
WebFrame* parent,
WebFrame* previous_sibling,
FrameInsertType,
const AtomicString& name,
WindowAgentFactory*,
const base::UnguessableToken& devtools_frame_token,
mojo::PendingAssociatedRemote<mojom::blink::RemoteFrameHost>
remote_frame_host,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver);
RemoteFrame* GetFrame() const { return frame_.Get(); }
WebRemoteFrameImpl* CreateRemoteChild(
mojom::blink::TreeScopeType,
const RemoteFrameToken& frame_token,
bool is_loading,
const base::UnguessableToken& devtools_frame_token,
WebFrame* opener,
mojo::PendingAssociatedRemote<mojom::blink::RemoteFrameHost>
remote_frame_host,
mojo::PendingAssociatedReceiver<mojom::blink::RemoteFrame> receiver,
mojom::blink::FrameReplicationStatePtr replicated_state,
mojom::blink::FrameOwnerPropertiesPtr owner_properties);
static WebRemoteFrameImpl* FromFrame(RemoteFrame&);
void Trace(Visitor*) const;
gfx::Rect GetCompositingRect();
void SetReplicatedState(mojom::FrameReplicationStatePtr replicated_state);
void SetReplicatedState(
mojom::blink::FrameReplicationStatePtr replicated_state);
void SetFrameOwnerProperties(
mojom::blink::FrameOwnerPropertiesPtr owner_properties);
private:
friend class RemoteFrameClientImpl;
void SetCoreFrame(RemoteFrame*);
void InitializeFrameVisualProperties(WebFrameWidget* ancestor_widget,
WebView* web_view);
// Inherited from WebFrame, but intentionally hidden: it never makes sense
// to call these on a WebRemoteFrameImpl.
bool IsWebLocalFrame() const override;
WebLocalFrame* ToWebLocalFrame() override;
const WebLocalFrame* ToWebLocalFrame() const override;
bool IsWebRemoteFrame() const override;
WebRemoteFrame* ToWebRemoteFrame() override;
const WebRemoteFrame* ToWebRemoteFrame() const override;
// TODO(dcheng): Inline this field directly rather than going through Member.
Member<RemoteFrameClientImpl> frame_client_;
Member<RemoteFrame> frame_;
// Oilpan: WebRemoteFrameImpl must remain alive until close() is called.
// Accomplish that by keeping a self-referential Persistent<>. It is
// cleared upon close().
SelfKeepAlive<WebRemoteFrameImpl> self_keep_alive_{this};
};
template <>
struct DowncastTraits<WebRemoteFrameImpl> {
static bool AllowFrom(const WebFrame& frame) {
return frame.IsWebRemoteFrame();
}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_REMOTE_FRAME_IMPL_H_