blob: 553d916965df0d038f37410c4fe84fb34e9a112a [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 WebLocalFrame_h
#define WebLocalFrame_h
#include "WebCompositionUnderline.h"
#include "WebFrame.h"
#include "WebFrameLoadType.h"
#include "WebHistoryItem.h"
#include "public/platform/WebCachePolicy.h"
namespace blink {
class WebAutofillClient;
class WebContentSettingsClient;
class WebDevToolsAgent;
class WebDevToolsAgentClient;
class WebDoubleSize;
class WebFrameClient;
class WebFrameWidget;
class WebRange;
class WebScriptExecutionCallback;
class WebSuspendableTask;
enum class WebAppBannerPromptReply;
enum class WebCachePolicy;
enum class WebSandboxFlags;
enum class WebTreeScopeType;
struct WebFindOptions;
struct WebFloatRect;
struct WebPrintPresetOptions;
// Interface for interacting with in process frames. This contains methods that
// require interacting with a frame's document.
// FIXME: Move lots of methods from WebFrame in here.
class WebLocalFrame : public WebFrame {
public:
// Creates a WebFrame. Delete this WebFrame by calling WebFrame::close().
// WebFrameClient may not be null.
BLINK_EXPORT static WebLocalFrame* create(WebTreeScopeType,
WebFrameClient*,
WebFrame* opener = nullptr);
// Used to create a provisional local frame in prepration for replacing a
// remote frame if the load commits. The returned frame is only partially
// attached to the frame tree: it has the same parent as its potential
// replacee but is invisible to the rest of the frames in the frame tree.
// If the load commits, call swap() to fully attach this frame.
BLINK_EXPORT static WebLocalFrame* createProvisional(WebFrameClient*,
WebRemoteFrame*,
WebSandboxFlags);
// Returns the WebFrame associated with the current V8 context. This
// function can return 0 if the context is associated with a Document that
// is not currently being displayed in a Frame.
BLINK_EXPORT static WebLocalFrame* frameForCurrentContext();
// Returns the frame corresponding to the given context. This can return 0
// if the context is detached from the frame, or if the context doesn't
// correspond to a frame (e.g., workers).
BLINK_EXPORT static WebLocalFrame* frameForContext(v8::Local<v8::Context>);
// Returns the frame inside a given frame or iframe element. Returns 0 if
// the given element is not a frame, iframe or if the frame is empty.
BLINK_EXPORT static WebLocalFrame* fromFrameOwnerElement(const WebElement&);
// Initialization ---------------------------------------------------------
virtual void setAutofillClient(WebAutofillClient*) = 0;
virtual WebAutofillClient* autofillClient() = 0;
virtual void setDevToolsAgentClient(WebDevToolsAgentClient*) = 0;
virtual WebDevToolsAgent* devToolsAgent() = 0;
// Hierarchy ----------------------------------------------------------
// Get the highest-level LocalFrame in this frame's in-process subtree.
virtual WebLocalFrame* localRoot() = 0;
// Navigation Ping --------------------------------------------------------
virtual void sendPings(const WebURL& destinationURL) = 0;
// Navigation ----------------------------------------------------------
// Runs beforeunload handlers for this frame and returns the value returned
// by handlers.
// Note: this may lead to the destruction of the frame.
virtual bool dispatchBeforeUnloadEvent(bool isReload) = 0;
// Returns a WebURLRequest corresponding to the load of the WebHistoryItem.
virtual WebURLRequest requestFromHistoryItem(const WebHistoryItem&,
WebCachePolicy) const = 0;
// Returns a WebURLRequest corresponding to the reload of the current
// HistoryItem.
virtual WebURLRequest requestForReload(
WebFrameLoadType,
const WebURL& overrideURL = WebURL()) const = 0;
// Load the given URL. For history navigations, a valid WebHistoryItem
// should be given, as well as a WebHistoryLoadType.
virtual void load(const WebURLRequest&,
WebFrameLoadType = WebFrameLoadType::Standard,
const WebHistoryItem& = WebHistoryItem(),
WebHistoryLoadType = WebHistoryDifferentDocumentLoad,
bool isClientRedirect = false) = 0;
// Loads the given data with specific mime type and optional text
// encoding. For HTML data, baseURL indicates the security origin of
// the document and is used to resolve links. If specified,
// unreachableURL is reported via WebDataSource::unreachableURL. If
// replace is false, then this data will be loaded as a normal
// navigation. Otherwise, the current history item will be replaced.
virtual void loadData(const WebData&,
const WebString& mimeType,
const WebString& textEncoding,
const WebURL& baseURL,
const WebURL& unreachableURL = WebURL(),
bool replace = false,
WebFrameLoadType = WebFrameLoadType::Standard,
const WebHistoryItem& = WebHistoryItem(),
WebHistoryLoadType = WebHistoryDifferentDocumentLoad,
bool isClientRedirect = false) = 0;
// Navigation State -------------------------------------------------------
// Returns true if the current frame's load event has not completed.
virtual bool isLoading() const = 0;
// Returns true if there is a pending redirect or location change
// within specified interval (in seconds). This could be caused by:
// * an HTTP Refresh header
// * an X-Frame-Options header
// * the respective http-equiv meta tags
// * window.location value being mutated
// * CSP policy block
// * reload
// * form submission
virtual bool isNavigationScheduledWithin(double intervalInSeconds) const = 0;
// Override the normal rules for whether a load has successfully committed
// in this frame. Used to propagate state when this frame has navigated
// cross process.
virtual void setCommittedFirstRealLoad() = 0;
// Orientation Changes ----------------------------------------------------
// Notify the frame that the screen orientation has changed.
virtual void sendOrientationChangeEvent() = 0;
// Printing ------------------------------------------------------------
// Returns true on success and sets the out parameter to the print preset
// options for the document.
virtual bool getPrintPresetOptionsForPlugin(const WebNode&,
WebPrintPresetOptions*) = 0;
// CSS3 Paged Media ----------------------------------------------------
// Returns true if page box (margin boxes and page borders) is visible.
virtual bool isPageBoxVisible(int pageIndex) = 0;
// Returns true if the page style has custom size information.
virtual bool hasCustomPageSizeStyle(int pageIndex) = 0;
// Returns the preferred page size and margins in pixels, assuming 96
// pixels per inch. pageSize, marginTop, marginRight, marginBottom,
// marginLeft must be initialized to the default values that are used if
// auto is specified.
virtual void pageSizeAndMarginsInPixels(int pageIndex,
WebDoubleSize& pageSize,
int& marginTop,
int& marginRight,
int& marginBottom,
int& marginLeft) = 0;
// Returns the value for a page property that is only defined when printing.
// printBegin must have been called before this method.
virtual WebString pageProperty(const WebString& propertyName,
int pageIndex) = 0;
// Scripting --------------------------------------------------------------
// Executes script in the context of the current page and returns the value
// that the script evaluated to with callback. Script execution can be
// suspend.
virtual void requestExecuteScriptAndReturnValue(
const WebScriptSource&,
bool userGesture,
WebScriptExecutionCallback*) = 0;
// worldID must be > 0 (as 0 represents the main world).
// worldID must be < EmbedderWorldIdLimit, high number used internally.
virtual void requestExecuteScriptInIsolatedWorld(
int worldID,
const WebScriptSource* sourceIn,
unsigned numSources,
int extensionGroup,
bool userGesture,
WebScriptExecutionCallback*) = 0;
// Run the task when the context of the current page is not suspended
// otherwise run it on context resumed.
// Method takes ownership of the passed task.
virtual void requestRunTask(WebSuspendableTask*) const = 0;
// Associates an isolated world with human-readable name which is useful for
// extension debugging.
virtual void setIsolatedWorldHumanReadableName(int worldID,
const WebString&) = 0;
// Editing -------------------------------------------------------------
virtual void setMarkedText(const WebString& text,
unsigned location,
unsigned length) = 0;
virtual void unmarkText() = 0;
virtual bool hasMarkedText() const = 0;
virtual WebRange markedRange() const = 0;
// Returns the text range rectangle in the viepwort coordinate space.
virtual bool firstRectForCharacterRange(unsigned location,
unsigned length,
WebRect&) const = 0;
// Returns the index of a character in the Frame's text stream at the given
// point. The point is in the viewport coordinate space. Will return
// WTF::notFound if the point is invalid.
virtual size_t characterIndexForPoint(const WebPoint&) const = 0;
// Supports commands like Undo, Redo, Cut, Copy, Paste, SelectAll,
// Unselect, etc. See EditorCommand.cpp for the full list of supported
// commands.
virtual bool executeCommand(const WebString&) = 0;
virtual bool executeCommand(const WebString&, const WebString& value) = 0;
virtual bool isCommandEnabled(const WebString&) const = 0;
// Selection -----------------------------------------------------------
virtual bool hasSelection() const = 0;
virtual WebRange selectionRange() const = 0;
virtual WebString selectionAsText() const = 0;
virtual WebString selectionAsMarkup() const = 0;
// Expands the selection to a word around the caret and returns
// true. Does nothing and returns false if there is no caret or
// there is ranged selection.
virtual bool selectWordAroundCaret() = 0;
// DEPRECATED: Use moveRangeSelection.
virtual void selectRange(const WebPoint& base, const WebPoint& extent) = 0;
virtual void selectRange(const WebRange&) = 0;
virtual WebString rangeAsText(const WebRange&) = 0;
// Move the current selection to the provided viewport point/points. If the
// current selection is editable, the new selection will be restricted to
// the root editable element.
// |TextGranularity| represents character wrapping granularity. If
// WordGranularity is set, WebFrame extends selection to wrap word.
virtual void moveRangeSelection(
const WebPoint& base,
const WebPoint& extent,
WebFrame::TextGranularity = CharacterGranularity) = 0;
virtual void moveCaretSelection(const WebPoint&) = 0;
virtual bool setEditableSelectionOffsets(int start, int end) = 0;
virtual bool setCompositionFromExistingText(
int compositionStart,
int compositionEnd,
const WebVector<WebCompositionUnderline>& underlines) = 0;
virtual void extendSelectionAndDelete(int before, int after) = 0;
virtual void setCaretVisible(bool) = 0;
// Moves the selection extent point. This function does not allow the
// selection to collapse. If the new extent is set to the same position as
// the current base, this function will do nothing.
virtual void moveRangeSelectionExtent(const WebPoint&) = 0;
// Replaces the selection with the input string.
virtual void replaceSelection(const WebString&) = 0;
// Spell-checking support -------------------------------------------------
virtual void replaceMisspelledRange(const WebString&) = 0;
virtual void enableSpellChecking(bool) = 0;
virtual bool isSpellCheckingEnabled() const = 0;
virtual void requestTextChecking(const WebElement&) = 0;
virtual void removeSpellingMarkers() = 0;
// Content Settings -------------------------------------------------------
virtual void setContentSettingsClient(WebContentSettingsClient*) = 0;
// App banner -------------------------------------------------------------
// Request to show an application install banner for the given |platforms|.
// The implementation can request the embedder to cancel the call by setting
// |cancel| to true.
virtual void willShowInstallBannerPrompt(
int requestId,
const WebVector<WebString>& platforms,
WebAppBannerPromptReply*) = 0;
// Image reload -----------------------------------------------------------
// If the provided node is an image, reload the image disabling Lo-Fi.
virtual void reloadImage(const WebNode&) = 0;
// Reloads all the Lo-Fi images in this WebLocalFrame. Ignores the cache and
// reloads from the network.
virtual void reloadLoFiImages() = 0;
// Feature usage logging --------------------------------------------------
virtual void didCallAddSearchProvider() = 0;
virtual void didCallIsSearchProviderInstalled() = 0;
// Iframe sandbox ---------------------------------------------------------
// Returns the effective sandbox flags which are inherited from their parent
// frame.
virtual WebSandboxFlags effectiveSandboxFlags() const = 0;
// Set sandbox flags that will always be forced on this frame. This is
// used to inherit sandbox flags from cross-process opener frames in popups.
//
// TODO(dcheng): Remove this once we have WebLocalFrame::createMainFrame.
virtual void forceSandboxFlags(WebSandboxFlags) = 0;
// Find-in-page -----------------------------------------------------------
// Specifies the action to be taken at the end of a find-in-page session.
enum StopFindAction {
// No selection will be left.
StopFindActionClearSelection,
// The active match will remain selected.
StopFindActionKeepSelection,
// The active match selection will be activated.
StopFindActionActivateSelection
};
// Begins a find request, which includes finding the next find match (using
// find()) and scoping the frame for find matches if needed.
virtual void requestFind(int identifier,
const WebString& searchText,
const WebFindOptions&) = 0;
// Searches a frame for a given string.
//
// If a match is found, this function will select it (scrolling down to
// make it visible if needed) and fill in selectionRect with the
// location of where the match was found (in window coordinates).
//
// If no match is found, this function clears all tickmarks and
// highlighting.
//
// Returns true if the search string was found, false otherwise.
virtual bool find(int identifier,
const WebString& searchText,
const WebFindOptions&,
bool wrapWithinFrame,
bool* activeNow = nullptr) = 0;
// Notifies the frame that we are no longer interested in searching. This
// will abort any asynchronous scoping effort already under way (see the
// function TextFinder::scopeStringMatches for details) and erase all
// tick-marks and highlighting from the previous search. It will also
// follow the specified StopFindAction.
virtual void stopFinding(StopFindAction) = 0;
// This function is called during the scoping effort to keep a running tally
// of the accumulated total match-count in the frame. After updating the
// count it will notify the WebViewClient about the new count.
virtual void increaseMatchCount(int count, int identifier) = 0;
// Returns a counter that is incremented when the find-in-page markers are
// changed on the frame. Switching the active marker doesn't change the
// current version.
virtual int findMatchMarkersVersion() const = 0;
// Returns the bounding box of the active find-in-page match marker or an
// empty rect if no such marker exists. The rect is returned in find-in-page
// coordinates.
virtual WebFloatRect activeFindMatchRect() = 0;
// Swaps the contents of the provided vector with the bounding boxes of the
// find-in-page match markers from the frame. The bounding boxes are
// returned in find-in-page coordinates.
virtual void findMatchRects(WebVector<WebFloatRect>&) = 0;
// Selects the find-in-page match closest to the provided point in
// find-in-page coordinates. Returns the ordinal of such match or -1 if none
// could be found. If not null, selectionRect is set to the bounding box of
// the selected match in window coordinates.
virtual int selectNearestFindMatch(const WebFloatPoint&,
WebRect* selectionRect) = 0;
// Returns the distance (squared) to the closest find-in-page match from the
// provided point, in find-in-page coordinates.
virtual float distanceToNearestFindMatch(const WebFloatPoint&) = 0;
// Set the tickmarks for the frame. This will override the default tickmarks
// generated by find results. If this is called with an empty array, the
// default behavior will be restored.
virtual void setTickmarks(const WebVector<WebRect>&) = 0;
// Clears the active find match in the frame, if one exists.
virtual void clearActiveFindMatch() = 0;
// Context menu -----------------------------------------------------------
// Returns the node that the context menu opened over.
virtual WebNode contextMenuNode() const = 0;
// Returns the WebFrameWidget associated with this frame if there is one or
// nullptr otherwise.
virtual WebFrameWidget* frameWidget() const = 0;
// Copy to the clipboard the image located at a particular point in visual
// viewport coordinates.
virtual void copyImageAt(const WebPoint&) = 0;
// Save as the image located at a particular point in visual viewport
// coordinates.
virtual void saveImageAt(const WebPoint&) = 0;
// TEMP: Usage count for chrome.loadtimes deprecation.
// This will be removed following the deprecation.
virtual void usageCountChromeLoadTimes(const WebString& metric) = 0;
protected:
explicit WebLocalFrame(WebTreeScopeType scope) : WebFrame(scope) {}
// Inherited from WebFrame, but intentionally hidden: it never makes sense
// to call these on a WebLocalFrame.
bool isWebLocalFrame() const override = 0;
WebLocalFrame* toWebLocalFrame() override = 0;
bool isWebRemoteFrame() const override = 0;
WebRemoteFrame* toWebRemoteFrame() override = 0;
};
} // namespace blink
#endif // WebLocalFrame_h