blob: e28eb9d4c44de17e12e36c178b833902621e40ad [file] [log] [blame]
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_
#include <memory>
#include <set>
#include <utility>
#include "base/single_thread_task_runner.h"
#include "base/types/pass_key.h"
#include "build/build_config.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
#include "third_party/blink/public/common/context_menu_data/context_menu_data.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/mojom/ad_tagging/ad_frame.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/devtools/devtools_agent.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/find_in_page.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/tree_scope_type.mojom-blink.h"
#include "third_party/blink/public/mojom/page/widget.mojom-blink.h"
#include "third_party/blink/public/mojom/portal/portal.mojom-blink-forward.h"
#include "third_party/blink/public/platform/web_file_system_type.h"
#include "third_party/blink/public/web/web_history_commit_type.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_navigation_control.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/editing/forward.h"
#include "third_party/blink/renderer/core/exported/web_input_method_controller_impl.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/web_remote_frame_impl.h"
#include "third_party/blink/renderer/platform/geometry/float_rect.h"
#include "third_party/blink/renderer/platform/heap/self_keep_alive.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
class ChromePrintContext;
struct ContextMenuData;
class FindInPage;
class HTMLPortalElement;
class IntSize;
class LocalFrameClientImpl;
class ResourceError;
class ScrollableArea;
class TextFinder;
class WebAssociatedURLLoader;
struct WebAssociatedURLLoaderOptions;
class WebAutofillClient;
class WebContentSettingsClient;
class WebDevToolsAgentImpl;
class WebLocalFrameClient;
class WebFrameWidgetImpl;
class WebNode;
class WebPerformance;
class WebRemoteFrameImpl;
class WebScriptExecutionCallback;
class WebSpellCheckPanelHostClient;
class WebView;
class WebViewImpl;
enum class WebFrameLoadType;
struct WebPrintParams;
class WindowAgentFactory;
template <typename T>
class WebVector;
// Implementation of WebFrame, note that this is a reference counted object.
class CORE_EXPORT WebLocalFrameImpl final
: public GarbageCollected<WebLocalFrameImpl>,
public WebNavigationControl {
public:
// WebFrame overrides:
void Close() override;
WebView* View() const override;
v8::Local<v8::Object> GlobalProxy() const override;
bool IsLoading() const override;
// WebLocalFrame overrides:
WebLocalFrameImpl* CreateLocalChild(
mojom::blink::TreeScopeType,
WebLocalFrameClient*,
blink::InterfaceRegistry*,
const LocalFrameToken& frame_token) override;
WebLocalFrameClient* Client() const override { return client_; }
void SetAutofillClient(WebAutofillClient*) override;
WebAutofillClient* AutofillClient() override;
void SetContentCaptureClient(WebContentCaptureClient*) override;
WebContentCaptureClient* ContentCaptureClient() const override;
WebDocument GetDocument() const override;
WebString AssignedName() const override;
ui::AXTreeID GetAXTreeID() const override;
void SetName(const WebString&) override;
bool IsProvisional() const override;
WebLocalFrameImpl* LocalRoot() override;
WebFrameWidget* FrameWidget() const override;
WebFrame* FindFrameByName(const WebString& name) override;
void SetEmbeddingToken(
const base::UnguessableToken& embedding_token) override;
const base::Optional<base::UnguessableToken>& GetEmbeddingToken()
const override;
void SendPings(const WebURL& destination_url) override;
void StartReload(WebFrameLoadType) override;
void ResetForTesting() override;
void EnableViewSourceMode(bool enable) override;
bool IsViewSourceModeEnabled() const override;
WebDocumentLoader* GetDocumentLoader() const override;
void SetReferrerForRequest(WebURLRequest&, const WebURL& referrer) override;
bool IsNavigationScheduledWithin(base::TimeDelta interval) const override;
void BlinkFeatureUsageReport(blink::mojom::WebFeature feature) override;
PageSizeType GetPageSizeType(uint32_t page_index) override;
void GetPageDescription(uint32_t page_index,
WebPrintPageDescription*) override;
void ExecuteScript(const WebScriptSource&) override;
void ExecuteScriptInIsolatedWorld(int32_t world_id,
const WebScriptSource&) override;
WARN_UNUSED_RESULT v8::Local<v8::Value>
ExecuteScriptInIsolatedWorldAndReturnValue(int32_t world_id,
const WebScriptSource&) override;
void ClearIsolatedWorldCSPForTesting(int32_t world_id) override;
v8::Local<v8::Value> ExecuteScriptAndReturnValue(
const WebScriptSource&) override;
// Call the function with the given receiver and arguments
v8::MaybeLocal<v8::Value> ExecuteMethodAndReturnValue(
v8::Local<v8::Function>,
v8::Local<v8::Value>,
int argc,
v8::Local<v8::Value> argv[]) override;
v8::MaybeLocal<v8::Value> CallFunctionEvenIfScriptDisabled(
v8::Local<v8::Function>,
v8::Local<v8::Value>,
int argc,
v8::Local<v8::Value> argv[]) override;
v8::Local<v8::Context> MainWorldScriptContext() const override;
int32_t GetScriptContextWorldId(
v8::Local<v8::Context> script_context) const override;
void RequestExecuteScriptAndReturnValue(const WebScriptSource&,
bool user_gesture,
WebScriptExecutionCallback*) override;
void RequestExecuteV8Function(v8::Local<v8::Context>,
v8::Local<v8::Function>,
v8::Local<v8::Value> receiver,
int argc,
v8::Local<v8::Value> argv[],
WebScriptExecutionCallback*) override;
void RequestExecuteScriptInIsolatedWorld(
int32_t world_id,
const WebScriptSource* source_in,
unsigned num_sources,
bool user_gesture,
ScriptExecutionType,
WebScriptExecutionCallback*) override;
void Alert(const WebString& message) override;
bool Confirm(const WebString& message) override;
WebString Prompt(const WebString& message,
const WebString& default_value) override;
void BindDevToolsAgent(CrossVariantMojoAssociatedRemote<
mojom::blink::DevToolsAgentHostInterfaceBase>
devtools_agent_host_remote,
CrossVariantMojoAssociatedReceiver<
mojom::blink::DevToolsAgentInterfaceBase>
devtools_agent_receiver) override;
void UnmarkText() override;
bool HasMarkedText() const override;
WebRange MarkedRange() const override;
bool FirstRectForCharacterRange(unsigned location,
unsigned length,
gfx::Rect&) const override;
bool ExecuteCommand(const WebString&) override;
bool ExecuteCommand(const WebString&, const WebString& value) override;
bool IsCommandEnabled(const WebString&) const override;
bool SelectionTextDirection(base::i18n::TextDirection& start,
base::i18n::TextDirection& end) const override;
bool IsSelectionAnchorFirst() const override;
void SetTextDirectionForTesting(base::i18n::TextDirection direction) override;
bool HasSelection() const override;
WebRange SelectionRange() const override;
WebString SelectionAsText() const override;
WebString SelectionAsMarkup() const override;
void TextSelectionChanged(const WebString& selection_text,
uint32_t offset,
const gfx::Range& range) override;
bool SelectWordAroundCaret() override;
void SelectRange(const gfx::Point& base, const gfx::Point& extent) override;
void SelectRange(const WebRange&,
HandleVisibilityBehavior,
blink::mojom::SelectionMenuBehavior) override;
WebString RangeAsText(const WebRange&) override;
void MoveRangeSelection(
const gfx::Point& base,
const gfx::Point& extent,
WebFrame::TextGranularity = kCharacterGranularity) override;
void MoveCaretSelection(const gfx::Point&) override;
bool SetEditableSelectionOffsets(int start, int end) override;
bool AddImeTextSpansToExistingText(
const WebVector<ui::ImeTextSpan>& ime_text_spans,
unsigned text_start,
unsigned text_end) override;
bool ClearImeTextSpansByType(ui::ImeTextSpan::Type type,
unsigned text_start,
unsigned text_end) override;
bool SetCompositionFromExistingText(
int composition_start,
int composition_end,
const WebVector<ui::ImeTextSpan>& ime_text_spans) override;
void ExtendSelectionAndDelete(int before, int after) override;
void MoveRangeSelectionExtent(const gfx::Point&) override;
void ReplaceSelection(const WebString&) override;
void DeleteSurroundingText(int before, int after) override;
void DeleteSurroundingTextInCodePoints(int before, int after) override;
void ExtractSmartClipData(const gfx::Rect& rect_in_viewport,
WebString& clip_text,
WebString& clip_html,
gfx::Rect& clip_rect) override;
void SetTextCheckClient(WebTextCheckClient*) override;
void SetSpellCheckPanelHostClient(WebSpellCheckPanelHostClient*) override;
WebSpellCheckPanelHostClient* SpellCheckPanelHostClient() const override {
return spell_check_panel_host_client_;
}
void ReplaceMisspelledRange(const WebString&) override;
void RemoveSpellingMarkers() override;
void RemoveSpellingMarkersUnderWords(
const WebVector<WebString>& words) override;
WebContentSettingsClient* GetContentSettingsClient() const override;
void SetContentSettingsClient(WebContentSettingsClient*) override;
void ReloadImage(const WebNode&) override;
bool IsAllowedToDownload() const override;
bool FindForTesting(int identifier,
const WebString& search_text,
bool match_case,
bool forward,
bool force,
bool new_session,
bool wrap_within_frame,
bool async) override;
void SetTickmarks(const WebElement& target,
const WebVector<gfx::Rect>& tickmarks) override;
WebNode ContextMenuImageNode() const override;
WebNode ContextMenuNode() const override;
void CopyImageAtForTesting(const gfx::Point&) override;
void ShowContextMenuFromExternal(
const UntrustworthyContextMenuParams& params,
CrossVariantMojoAssociatedRemote<
mojom::blink::ContextMenuClientInterfaceBase> context_menu_client)
override;
void UsageCountChromeLoadTimes(const WebString& metric) override;
bool DispatchedPagehideAndStillHidden() const override;
FrameScheduler* Scheduler() const override;
scheduler::WebAgentGroupScheduler* GetAgentGroupScheduler() const override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(TaskType) override;
WebInputMethodController* GetInputMethodController() override;
std::unique_ptr<WebAssociatedURLLoader> CreateAssociatedURLLoader(
const WebAssociatedURLLoaderOptions&) override;
void DeprecatedStopLoading() override;
WebSize GetScrollOffset() const override;
void SetScrollOffset(const WebSize&) override;
WebSize DocumentSize() const override;
bool HasVisibleContent() const override;
gfx::Rect VisibleContentRect() const override;
void DispatchBeforePrintEvent(
base::WeakPtr<WebPrintClient> print_client) override;
WebPlugin* GetPluginToPrint(const WebNode& constrain_to_node) override;
uint32_t PrintBegin(const WebPrintParams&,
const WebNode& constrain_to_node) override;
float GetPrintPageShrink(uint32_t page) override;
float PrintPage(uint32_t page_to_print, cc::PaintCanvas*) override;
void PrintEnd() override;
void DispatchAfterPrintEvent() override;
bool GetPrintPresetOptionsForPlugin(const WebNode&,
WebPrintPresetOptions*) override;
bool CapturePaintPreview(const gfx::Rect& bounds,
cc::PaintCanvas* canvas,
bool include_linked_destinations) override;
bool ShouldSuppressKeyboardForFocusedElement() override;
WebPerformance Performance() const override;
bool IsAdSubframe() const override;
void SetIsAdSubframe(blink::mojom::AdFrameType ad_frame_type) override;
bool IsSubframeCreatedByAdScript() override;
gfx::Size SpoolSizeInPixelsForTesting(const gfx::Size& page_size_in_pixels,
uint32_t page_count) override;
void PrintPagesForTesting(cc::PaintCanvas*,
const gfx::Size& page_size_in_pixels,
const gfx::Size& spool_size_in_pixels) override;
gfx::Rect GetSelectionBoundsRectForTesting() const override;
gfx::Point GetPositionInViewportForTesting() const override;
void WasHidden() override;
void WasShown() override;
void SetAllowsCrossBrowsingInstanceFrameLookup() override;
void NotifyUserActivation(
mojom::blink::UserActivationNotificationType notification_type) override;
bool HasStickyUserActivation() override;
bool HasTransientUserActivation() override;
bool ConsumeTransientUserActivation(UserActivationUpdateSource) override;
void SetOptimizationGuideHints(const WebOptimizationGuideHints&) override;
void SetTargetToCurrentHistoryItem(const WebString& target) override;
void UpdateCurrentHistoryItem() override;
PageState CurrentHistoryItemToPageState() override;
const WebHistoryItem& GetCurrentHistoryItem() const override;
// WebNavigationControl overrides:
bool DispatchBeforeUnloadEvent(bool) override;
void CommitNavigation(
std::unique_ptr<WebNavigationParams> navigation_params,
std::unique_ptr<WebDocumentLoader::ExtraData> extra_data) override;
blink::mojom::CommitResult CommitSameDocumentNavigation(
const WebURL&,
WebFrameLoadType,
const WebHistoryItem&,
bool is_client_redirect,
bool has_transient_user_activation,
std::unique_ptr<WebDocumentLoader::ExtraData> extra_data) override;
void LoadJavaScriptURL(const WebURL&) override;
FallbackContentResult MaybeRenderFallbackContent(
const WebURLError&) const override;
void SetCommittedFirstRealLoad() override;
bool HasCommittedFirstRealLoad() override;
bool WillStartNavigation(const WebNavigationInfo&) override;
void DidDropNavigation() override;
void DownloadURL(
const WebURLRequest& request,
network::mojom::blink::RedirectMode cross_origin_redirect_behavior,
CrossVariantMojoRemote<mojom::blink::BlobURLTokenInterfaceBase>
blob_url_token) override;
void InitializeCoreFrame(
Page&,
FrameOwner*,
WebFrame* parent,
WebFrame* previous_sibling,
FrameInsertType,
const AtomicString& name,
WindowAgentFactory*,
WebFrame* opener,
std::unique_ptr<blink::WebPolicyContainer> policy_container,
network::mojom::blink::WebSandboxFlags sandbox_flags =
network::mojom::blink::WebSandboxFlags::kNone);
LocalFrame* GetFrame() const { return frame_.Get(); }
void WillBeDetached();
void WillDetachParent();
void CollectGarbageForTesting();
static WebLocalFrameImpl* CreateMainFrame(
WebView*,
WebLocalFrameClient*,
InterfaceRegistry*,
const LocalFrameToken& frame_token,
WebFrame* opener,
const WebString& name,
network::mojom::blink::WebSandboxFlags,
std::unique_ptr<WebPolicyContainer>);
static WebLocalFrameImpl* CreateProvisional(
WebLocalFrameClient*,
InterfaceRegistry*,
const LocalFrameToken& frame_token,
WebFrame*,
const FramePolicy&,
const WebString& name);
WebLocalFrameImpl(base::PassKey<WebLocalFrameImpl>,
mojom::blink::TreeScopeType,
WebLocalFrameClient*,
InterfaceRegistry*,
const LocalFrameToken& frame_token);
WebLocalFrameImpl(base::PassKey<WebRemoteFrameImpl>,
mojom::blink::TreeScopeType,
WebLocalFrameClient*,
InterfaceRegistry*,
const LocalFrameToken& frame_token);
~WebLocalFrameImpl() override;
LocalFrame* CreateChildFrame(const AtomicString& name,
HTMLFrameOwnerElement*);
std::pair<RemoteFrame*, PortalToken> CreatePortal(
HTMLPortalElement*,
mojo::PendingAssociatedReceiver<mojom::blink::Portal>,
mojo::PendingAssociatedRemote<mojom::blink::PortalClient>);
RemoteFrame* AdoptPortal(HTMLPortalElement*);
void DidChangeContentsSize(const IntSize&);
bool HasDevToolsOverlays() const;
void UpdateDevToolsOverlaysPrePaint();
void PaintDevToolsOverlays(GraphicsContext&); // For CompositeAfterPaint.
void CreateFrameView();
// Sometimes Blink makes Page/Frame for internal purposes like for SVGImage
// (see comments in third_party/blink/renderer/core/page/page.h). In that
// case, such frames are not associated with a WebLocalFrame(Impl).
// So note that FromFrame may return nullptr even for non-null frames.
static WebLocalFrameImpl* FromFrame(LocalFrame*);
static WebLocalFrameImpl* FromFrame(LocalFrame&);
// TODO(https://crbug.com/1139104): Remove this.
static std::string GetNullFrameReasonForBug1139104(LocalFrame* frame);
WebViewImpl* ViewImpl() const;
LocalFrameView* GetFrameView() const {
return GetFrame() ? GetFrame()->View() : nullptr;
}
void SendOrientationChangeEvent();
void SetDevToolsAgentImpl(WebDevToolsAgentImpl*);
WebDevToolsAgentImpl* DevToolsAgentImpl();
// Instructs devtools to pause loading of the frame as soon as it's shown
// until explicit command from the devtools client. May only be called on a
// local root.
void WaitForDebuggerWhenShown();
// When a Find operation ends, we want to set the selection to what was active
// and set focus to the first focusable node we find (starting with the first
// node in the matched range and going up the inheritance chain). If we find
// nothing to focus we focus the first focusable node in the range. This
// allows us to set focus to a link (when we find text inside a link), which
// allows us to navigate by pressing Enter after closing the Find box.
void SetFindEndstateFocusAndSelection();
void DidFailLoad(const ResourceError&, WebHistoryCommitType);
void DidFinish();
void SetClient(WebLocalFrameClient* client) { client_ = client; }
WebFrameWidgetImpl* FrameWidgetImpl() { return frame_widget_; }
WebTextCheckClient* GetTextCheckerClient() const {
return text_check_client_;
}
FindInPage* GetFindInPage() const { return find_in_page_; }
TextFinder* GetTextFinder() const;
// Returns the text finder object if it already exists.
// Otherwise creates it and then returns.
TextFinder& EnsureTextFinder();
// TODO(dcheng): Remove this and make |FrameWidget()| always return something
// useful.
WebFrameWidgetImpl* LocalRootFrameWidget();
// Scroll the focused editable element into the rect.
void ScrollFocusedEditableElementIntoRect(const gfx::Rect& rect);
void ResetHasScrolledFocusedEditableIntoView();
// Returns true if the frame is focused.
bool IsFocused() const;
// Returns true if our print context suggests using printing layout.
bool UsePrintingLayout() const;
// Copy the current selection to the pboard.
void CopyToFindPboard();
// Shows a context menu with commands relevant to a specific element on
// the given frame. Additional context data and location are supplied.
void ShowContextMenu(
mojo::PendingAssociatedRemote<mojom::blink::ContextMenuClient> client,
const blink::ContextMenuData& data,
const base::Optional<gfx::Point>& host_context_menu_location);
virtual void Trace(Visitor*) const;
protected:
// WebLocalFrame protected overrides:
void AddMessageToConsoleImpl(const WebConsoleMessage&,
bool discard_duplicates) override;
void AddInspectorIssueImpl(mojom::blink::InspectorIssueCode code) override;
private:
friend LocalFrameClientImpl;
// Sets the local core frame and registers destruction observers.
void SetCoreFrame(LocalFrame*);
// Inherited from WebFrame, but intentionally hidden: it never makes sense
// to call these on a WebLocalFrameImpl.
bool IsWebLocalFrame() const override;
WebLocalFrame* ToWebLocalFrame() override;
bool IsWebRemoteFrame() const override;
WebRemoteFrame* ToWebRemoteFrame() override;
void CreateFrameWidgetInternal(
base::PassKey<WebLocalFrame> pass_key,
CrossVariantMojoAssociatedRemote<
mojom::blink::FrameWidgetHostInterfaceBase> mojo_frame_widget_host,
CrossVariantMojoAssociatedReceiver<mojom::blink::FrameWidgetInterfaceBase>
mojo_frame_widget,
CrossVariantMojoAssociatedRemote<mojom::blink::WidgetHostInterfaceBase>
mojo_widget_host,
CrossVariantMojoAssociatedReceiver<mojom::blink::WidgetInterfaceBase>
mojo_widget,
const viz::FrameSinkId& frame_sink_id,
bool is_for_nested_main_frame,
bool hidden,
bool never_composited) override;
HitTestResult HitTestResultForVisualViewportPos(const IntPoint&);
WebPlugin* FocusedPluginIfInputMethodSupported();
ScrollableArea* LayoutViewport() const;
// A helper for DispatchBeforePrintEvent() and DispatchAfterPrintEvent().
void DispatchPrintEventRecursively(const AtomicString& event_type);
WebPluginContainerImpl* GetPluginToPrintHelper(
const WebNode& constrain_to_node);
Node* ContextMenuImageNodeInner() const;
Node* ContextMenuNodeInner() const;
void InitializeCoreFrameInternal(
Page&,
FrameOwner*,
WebFrame* parent,
WebFrame* previous_sibling,
FrameInsertType,
const AtomicString& name,
WindowAgentFactory*,
WebFrame* opener,
std::unique_ptr<PolicyContainer> policy_container,
network::mojom::blink::WebSandboxFlags sandbox_flags =
network::mojom::blink::WebSandboxFlags::kNone);
void ShowDeferredContextMenu(
mojo::PendingAssociatedRemote<mojom::blink::ContextMenuClient> client,
const UntrustworthyContextMenuParams& params);
WebLocalFrameClient* client_;
// TODO(dcheng): Inline this field directly rather than going through Member.
const Member<LocalFrameClientImpl> local_frame_client_;
// The embedder retains a reference to the WebCore LocalFrame while it is
// active in the DOM. This reference is released when the frame is removed
// from the DOM or the entire page is closed.
Member<LocalFrame> frame_;
// This is set if the frame is the root of a local frame tree, and requires a
// widget for layout.
Member<WebFrameWidgetImpl> frame_widget_;
Member<WebDevToolsAgentImpl> dev_tools_agent_;
WebAutofillClient* autofill_client_;
WebContentCaptureClient* content_capture_client_ = nullptr;
WebContentSettingsClient* content_settings_client_ = nullptr;
Member<FindInPage> find_in_page_;
// Optional weak pointer to the WebPrintClient that initiated printing. Only
// valid when |is_in_printing_| is true.
base::WeakPtr<WebPrintClient> print_client_;
// Valid between calls to BeginPrint() and EndPrint(). Containts the print
// information. Is used by PrintPage().
Member<ChromePrintContext> print_context_;
// Borrowed pointers to Mojo objects.
blink::InterfaceRegistry* interface_registry_;
WebInputMethodControllerImpl input_method_controller_;
WebTextCheckClient* text_check_client_;
WebSpellCheckPanelHostClient* spell_check_panel_host_client_;
// Oilpan: WebLocalFrameImpl must remain alive until close() is called.
// Accomplish that by keeping a self-referential Persistent<>. It is
// cleared upon close().
SelfKeepAlive<WebLocalFrameImpl> self_keep_alive_;
#if DCHECK_IS_ON()
// True if DispatchBeforePrintEvent() was called, and
// DispatchAfterPrintEvent() is not called yet.
bool is_in_printing_ = false;
#endif
// Bookkeeping to suppress redundant scroll and focus requests for an already
// scrolled and focused editable node.
bool has_scrolled_focused_editable_node_into_rect_ = false;
gfx::Rect rect_for_scrolled_focused_editable_node_;
WebHistoryItem current_history_item_;
};
template <>
struct DowncastTraits<WebLocalFrameImpl> {
static bool AllowFrom(const WebFrame& frame) {
return frame.IsWebLocalFrame();
}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WEB_LOCAL_FRAME_IMPL_H_