blob: d9ab22134a35ba0bc54a1002b56a7e07539db9a6 [file] [log] [blame]
// 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 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/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/public/web/web_remote_frame_client.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 cc {
class Layer;
}
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*,
WebRemoteFrameClient*,
InterfaceRegistry*,
AssociatedInterfaceProvider*,
const RemoteFrameToken& frame_token,
WebFrame* opener);
static WebRemoteFrameImpl* CreateForPortal(
mojom::blink::TreeScopeType,
WebRemoteFrameClient*,
InterfaceRegistry*,
AssociatedInterfaceProvider*,
const RemoteFrameToken& frame_token,
const WebElement& portal_element);
WebRemoteFrameImpl(mojom::blink::TreeScopeType,
WebRemoteFrameClient*,
InterfaceRegistry*,
AssociatedInterfaceProvider*,
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&,
mojom::FrameOwnerElementType,
const LocalFrameToken& frame_token,
WebFrame* opener,
std::unique_ptr<blink::WebPolicyContainer> policy_container) override;
WebRemoteFrame* CreateRemoteChild(mojom::blink::TreeScopeType,
const WebString& name,
const FramePolicy&,
mojom::FrameOwnerElementType,
WebRemoteFrameClient*,
InterfaceRegistry*,
AssociatedInterfaceProvider*,
const RemoteFrameToken& frame_token,
WebFrame* opener) override;
void SetCcLayer(cc::Layer*, bool is_surface_layer) override;
void SetReplicatedOrigin(
const WebSecurityOrigin&,
bool is_potentially_trustworthy_opaque_origin) override;
void SetReplicatedSandboxFlags(
network::mojom::blink::WebSandboxFlags) override;
void SetReplicatedName(const WebString& name,
const WebString& unique_name) override;
void SetReplicatedFeaturePolicyHeader(
const ParsedFeaturePolicy& parsed_header) override;
void AddReplicatedContentSecurityPolicies(
const WebVector<WebContentSecurityPolicy>& csps) override;
void ResetReplicatedContentSecurityPolicy() override;
void SetReplicatedInsecureRequestPolicy(
mojom::blink::InsecureRequestPolicy) override;
void SetReplicatedInsecureNavigationsSet(const WebVector<unsigned>&) override;
void SetReplicatedAdFrameType(
mojom::blink::AdFrameType ad_frame_type) override;
void DidStartLoading() override;
bool IsIgnoredForHitTest() const override;
void UpdateUserActivationState(
mojom::blink::UserActivationUpdateType update_type,
mojom::blink::UserActivationNotificationType notification_type) override;
void SetHadStickyUserActivationBeforeNavigation(bool value) override;
v8::Local<v8::Object> GlobalProxy() const override;
void SynchronizeVisualProperties() override;
void ResendVisualProperties() override;
float GetCompositingScaleFactor() override;
WebString UniqueName() const override;
const FrameVisualProperties& GetPendingVisualPropertiesForTesting()
const override;
bool IsAdSubframe() const override;
void InitializeCoreFrame(Page&,
FrameOwner*,
WebFrame* parent,
WebFrame* previous_sibling,
FrameInsertType,
const AtomicString& name,
WindowAgentFactory*);
RemoteFrame* GetFrame() const { return frame_.Get(); }
WebRemoteFrameClient* Client() const { return client_; }
static WebRemoteFrameImpl* FromFrame(RemoteFrame&);
void Trace(Visitor*) const;
gfx::Rect GetCompositingRect();
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;
bool IsWebRemoteFrame() const override;
WebRemoteFrame* ToWebRemoteFrame() override;
WebRemoteFrameClient* client_;
// TODO(dcheng): Inline this field directly rather than going through Member.
Member<RemoteFrameClientImpl> frame_client_;
Member<RemoteFrame> frame_;
InterfaceRegistry* const interface_registry_;
AssociatedInterfaceProvider* const associated_interface_provider_;
// 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_;
};
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_