blob: e9dbe9926f5cc2ac9ad063c5728c1d13a436e5d1 [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 "WebFrame.h"
#include "WebFrameLoadType.h"
namespace blink {
enum class WebAppBannerPromptReply;
enum class WebSandboxFlags;
enum class WebTreeScopeType;
class WebAutofillClient;
class WebContentSettingsClient;
class WebDevToolsAgent;
class WebDevToolsAgentClient;
class WebFrameClient;
class WebNode;
class WebScriptExecutionCallback;
class WebSuspendableTask;
class WebTestInterfaceFactory;
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().
// It is valid to pass a null client pointer.
BLINK_EXPORT static WebLocalFrame* create(WebTreeScopeType, WebFrameClient*);
// 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 ---------------------------------------------------------
// Used when we might swap from a remote frame to a local frame.
// Creates a provisional, semi-attached frame that will be fully
// swapped into the frame tree if it commits.
virtual void initializeToReplaceRemoteFrame(WebRemoteFrame*, const WebString& name, WebSandboxFlags) = 0;
virtual void setAutofillClient(WebAutofillClient*) = 0;
virtual WebAutofillClient* autofillClient() = 0;
virtual void setDevToolsAgentClient(WebDevToolsAgentClient*) = 0;
virtual WebDevToolsAgent* devToolsAgent() = 0;
// Navigation Ping --------------------------------------------------------
virtual void sendPings(const WebNode& contextNode, const WebURL& destinationURL) = 0;
// Navigation ----------------------------------------------------------
// Returns a WebURLRequest corresponding to the load of the WebHistoryItem.
virtual WebURLRequest requestFromHistoryItem(const WebHistoryItem&, WebURLRequest::CachePolicy)
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.
// TODO(clamy): Remove the reload, reloadWithOverrideURL, loadHistoryItem
// loadRequest functions in WebFrame once RenderFrame only calls loadRequest.
virtual void load(const WebURLRequest&, WebFrameLoadType = WebFrameLoadType::Standard,
const WebHistoryItem& = WebHistoryItem(),
WebHistoryLoadType = WebHistoryDifferentDocumentLoad) = 0;
// Navigation State -------------------------------------------------------
// Returns true if the current frame's load event has not completed.
virtual bool isLoading() const = 0;
// Returns true if any resource load is currently in progress. Exposed
// primarily for use in layout tests. You probably want isLoading()
// instead.
virtual bool isResourceLoadInProgress() const = 0;
// Returns true if there is a pending redirect or location change.
// 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 isNavigationScheduled() 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;
// 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;
// Selection --------------------------------------------------------------
// 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;
// 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 bypassing the cache.
virtual void reloadImage(const WebNode&) = 0;
// Testing ----------------------------------------------------------------
// Registers a test interface factory. Takes ownership of the factory.
virtual void registerTestInterface(const WebString& name, WebTestInterfaceFactory*) = 0;
// Iframe sandbox ---------------------------------------------------------
// Returns the effective sandbox flags which are inherited from their parent frame.
virtual WebSandboxFlags effectiveSandboxFlags() const = 0;
protected:
explicit WebLocalFrame(WebTreeScopeType scope) : WebFrame(scope) { }
};
} // namespace blink
#endif // WebLocalFrame_h