// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module blink.mojom;
import "cc/mojom/browser_controls_state.mojom";
import "cc/mojom/browser_controls_offset_tags_info.mojom";
import "mojo/public/mojom/base/byte_string.mojom";
import "mojo/public/mojom/base/shared_memory.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "mojo/public/mojom/base/text_direction.mojom";
import "mojo/public/mojom/base/time.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
import "mojo/public/mojom/base/values.mojom";
import "services/network/public/mojom/content_security_policy.mojom";
import "services/network/public/mojom/cross_origin_opener_policy.mojom";
import "services/network/public/mojom/fetch_api.mojom";
import "services/network/public/mojom/load_timing_info.mojom";
import "services/network/public/mojom/network_types.mojom";
import "services/network/public/mojom/source_location.mojom";
import "services/network/public/mojom/url_loader_completion_status.mojom";
import "services/network/public/mojom/attribution.mojom";
import "services/viz/public/mojom/compositing/offset_tag.mojom";
import "skia/public/mojom/bitmap.mojom";
import "skia/public/mojom/skcolor.mojom";
import "skia/public/mojom/skcolor4f.mojom";
import "third_party/blink/public/mojom/blob/blob.mojom";
import "third_party/blink/public/mojom/blob/blob_url_store.mojom";
import "third_party/blink/public/mojom/choosers/popup_menu.mojom";
import "third_party/blink/public/mojom/close_watcher/close_listener.mojom";
import "third_party/blink/public/mojom/context_menu/context_menu.mojom";
import "third_party/blink/public/mojom/navigation/navigation_params.mojom";
import "third_party/blink/public/mojom/css/preferred_color_scheme.mojom";
import "third_party/blink/public/mojom/devtools/console_message.mojom";
import "third_party/blink/public/mojom/devtools/devtools_agent.mojom";
import "third_party/blink/public/mojom/devtools/inspector_issue.mojom";
import "third_party/blink/public/mojom/drag/drag.mojom";
import "third_party/blink/public/mojom/favicon/favicon_url.mojom";
import "third_party/blink/public/mojom/fenced_frame/fenced_frame.mojom";
import "third_party/blink/public/mojom/fenced_frame/fenced_frame_config.mojom";
import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
import "third_party/blink/public/mojom/frame/blocked_navigation_types.mojom";
import "third_party/blink/public/mojom/frame/frame_owner_properties.mojom";
import "third_party/blink/public/mojom/frame/frame_policy.mojom";
import "third_party/blink/public/mojom/frame/frame_replication_state.mojom";
import "third_party/blink/public/mojom/frame/fullscreen.mojom";
import "third_party/blink/public/mojom/frame/lifecycle.mojom";
import "third_party/blink/public/mojom/frame/media_player_action.mojom";
import "third_party/blink/public/mojom/frame/remote_frame.mojom";
import "third_party/blink/public/mojom/frame/reporting_observer.mojom";
import "third_party/blink/public/mojom/frame/sudden_termination_disabler_type.mojom";
import "third_party/blink/public/mojom/frame/text_autosizer_page_info.mojom";
import "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom";
import "third_party/blink/public/mojom/frame/user_activation_update_types.mojom";
import "third_party/blink/public/mojom/frame/view_transition_state.mojom";
import "third_party/blink/public/mojom/input/focus_type.mojom";
import "third_party/blink/public/mojom/input/scroll_direction.mojom";
import "third_party/blink/public/mojom/loader/referrer.mojom";
import "third_party/blink/public/mojom/loader/keep_alive_handle_factory.mojom";
import "third_party/blink/public/mojom/messaging/delegated_capability.mojom";
import "third_party/blink/public/mojom/messaging/task_attribution_id.mojom";
import "third_party/blink/public/mojom/messaging/transferable_message.mojom";
import "third_party/blink/public/mojom/navigation/navigation_api_history_entry_arrays.mojom";
import "third_party/blink/public/mojom/opengraph/metadata.mojom";
import "third_party/blink/public/mojom/page/draggable_region.mojom";
import "third_party/blink/public/mojom/page/widget.mojom";
import "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom";
import "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom";
import "third_party/blink/public/mojom/timing/resource_timing.mojom";
import "third_party/blink/public/mojom/tokens/tokens.mojom";
import "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom";
import "third_party/blink/public/mojom/widget/platform_widget.mojom";
import "third_party/blink/public/mojom/window_features/window_features.mojom";
import "ui/base/ime/mojom/virtual_keyboard_types.mojom";
import "ui/base/mojom/window_open_disposition.mojom";
import "ui/events/mojom/scroll_granularity.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
import "ui/gfx/image/mojom/image.mojom";
import "ui/gfx/range/mojom/range.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";
[EnableIf=is_mac]
import "ui/base/mojom/attributed_string.mojom";
// Information about a subframe being saved as "complete html".
struct SavableSubframe {
// Original url of the subframe (i.e. based the parent's html sources).
url.mojom.Url original_url;
// The unique identifier of the RenderFrameHost or RenderFrameProxy for the
// subframe.
blink.mojom.FrameToken subframe_token;
};
struct GetSavableResourceLinksReply {
array<url.mojom.Url> resources_list;
blink.mojom.Referrer referrer;
array<SavableSubframe> subframes;
};
struct FindInPageResultAXParams {
// The find in page request id.
int32 request_id;
// The index of the result match.
int32 match_index;
// The id of the accessibility object for the start of the match range.
int32 start_id;
// The character offset into the text of the start object.
int32 start_offset;
// The id of the accessibility object for the end of the match range.
int32 end_id;
// The character offset into the text of the end object.
int32 end_offset;
};
// This struct holds parameters sent by the renderer to the browser, that are
// needed to download an URL.
struct DownloadURLParams {
url.mojom.Url url;
blink.mojom.Referrer? referrer;
url.mojom.Origin? initiator_origin;
mojo_base.mojom.String16? suggested_name;
network.mojom.RedirectMode cross_origin_redirects;
// Non-null when |url| is for "blob:".
pending_remote<BlobURLToken>? blob_url_token;
// Non-null when |url| is for "data:", eg. when saving an image.
pending_remote<Blob>? data_url_blob;
// Whether the download is from context menu.
bool is_context_menu_save = false;
// True when the download was preceded by a recent gesture from the user.
bool has_user_gesture = false;
};
// Actions browser can ask renderer to perform on a Plugin.
enum PluginActionType {
kRotate90Clockwise,
kRotate90Counterclockwise,
};
// The result of executing JavaScript within a frame.
enum JavaScriptExecutionResultType {
kSuccess,
kException,
};
// The reason why a navigation API traversal was cancelled in the browser
// process, so the navigation API can report the appropriate error.
// https://wicg.github.io/navigation-api/#perform-a-navigation-api-traversal
enum TraverseCancelledReason {
kNotFound,
kSandboxViolation,
kAbortedBeforeCommit,
};
// The ViewTransitionOnNavigation opt-in state for a Document. This indicates
// whether this Document wants to enable a ViewTransition for same-origin
// cross-document navigations initiated from it.
enum ViewTransitionSameOriginOptIn {
kDisabled,
kEnabled,
};
enum FrameOwnerElementType {
kNone,
kIframe,
kObject,
kEmbed,
kFrame,
kFencedframe
};
enum NavigationApiEntryRestoreReason {
kBFCache,
kPrerenderActivationPush,
kPrerenderActivationReplace
};
enum StorageTypeAccessed {
kDatabase,
kCacheStorage,
kIndexedDB,
kFileSystem,
kWebLocks,
kLocalStorage,
kSessionStorage
};
// This is directly cast to a UKM enum of the same name and logged,
// be sure not to change ordering or delete lines.
enum WindowProxyAccessType {
kLocation,
kClosed,
kLength,
kSelf,
kWindow,
kFrames,
kOpener,
kParent,
kTop,
kPostMessage,
kAnonymousIndexedGetter,
kClose,
kFocus,
kBlur,
kAnonymousNamedGetter
};
// The maximum number of characters of the document's title that we're willing
// to accept in the browser process.
const uint16 kMaxTitleChars = 4096; // 4 * 1024;
// This struct holds iframe's HTML attributes that are needed in the browser.
// id, name and src are used to report back/forward cache NotRestoredReasons.
// If 'id', 'name' or 'src' are too long, it is cut down to a certain character
// limit.
// TODO(crbug.com/1345849): The char limit can be different on renderer and
// browser. Enforce the same char limit on both sides.
struct IframeAttributes {
// Parsed value of the 'csp' attribute of the iframe.
network.mojom.ContentSecurityPolicy? parsed_csp_attribute;
// 'credentialless' attribute of the iframe.
bool credentialless;
// 'browsingtopics' attribute of the iframe.
bool browsing_topics;
// 'adauctionheaders' attribute of the iframe.
bool ad_auction_headers;
// 'sharedstoragewritable' attribute of the iframe.
bool shared_storage_writable_opted_in;
// 'id' attribute of the iframe. This can be optional because id might not be set.
string? id;
// 'name' attribute of the iframe. This is different from window.name, which is
// tracked in FrameReplicationState. Optional because it might not be set.
string? name;
// 'src' attribute of the iframe. Optional because it might not be set.
string? src;
};
// Code location for an enterprise legacy technology event. The data will be
// uploaded to the enterprise management server without being parsed by the
// browser process.
struct LegacyTechEventCodeLocation {
string filename;
uint64 line;
uint64 column;
};
// Implemented in Browser, this interface defines frame-specific methods that
// will be invoked from the render process (e.g. content::RenderFrameHostImpl).
//
// Note that this is different than content/common/frame.mojom in that the
// methods defined here are called directly in Blink without passing through
// content. In the future this interface will likely host more methods as the
// Onion Soup project advances, which can potentially lead to the removal of
// content/common/frame.mojom if enough code is moved to Blink.
interface LocalFrameHost {
// Request to the browser that the frame wishes to enter fullscreen mode.
// Returns either true if fullscreen is allowed to be entered, or false if the
// request to enter fullscreen was denied. Note that the actual transition to
// fullscreen will occur on the next visual update, when the next
// Widget::UpdateVisualProperties is sent.
EnterFullscreen(FullscreenOptions options) => (bool granted);
// Request to the browser to exit fullscreen mode.
ExitFullscreen();
// Notifies the browser that the current frame has either become or is no
// longer fullscreen. |options| is only provided if |is_fullscreen == true|.
FullscreenStateChanged(bool is_fullscreen, FullscreenOptions? options);
// Register a new handler for URL requests with the given scheme. |scheme|
// and |url| are provided directly from javascript. See
// https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers
// |user_gesture| indicates if the javascript API was called in context of
// having an active transient user gesture.
RegisterProtocolHandler(string scheme, url.mojom.Url url, bool user_gesture);
// Unregister the registered handler for URL requests with the given scheme.
// |scheme|, and |url| are provided directly from javascript. See
// https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers
// |user_gesture| indicates if the javascript API was called in context of
// having an active transient user gesture.
UnregisterProtocolHandler(string scheme, url.mojom.Url url, bool user_gesture);
// Indication that the associated frame has displayed inactive content
// (such as an image) from an insecure source. Inactive content cannot spread
// to other frames.
DidDisplayInsecureContent();
// Indication that the associated frame contains a form that submits to an
// insecure target url.
DidContainInsecureFormAction();
// Indicates that the document element is available for the top-level frame.
// This happens after the page starts loading, but before all resources are
// finished.
MainDocumentElementAvailable(bool uses_temporary_zoom_level);
// Indicates that a child frame requires its parent frame to send it
// information about whether it is occluded or has visual effects applied,
// in order to service IntersectionObserver's that track visibility.
SetNeedsOcclusionTracking(bool needs_tracking);
// Indicates that the associated frame would like to change the policy of how
// the virtual keyboard interacts with Blink's viewports.
SetVirtualKeyboardMode(ui.mojom.VirtualKeyboardMode type);
// Notifies the browser that the associated frame has changed its visibility
// status. Visibility status changes occur when the frame moves in/out
// of the viewport, or the need for a layout object changes, e.g. if the
// frame owner assigns a display: none style.
VisibilityChanged(blink.mojom.FrameVisibility visibility);
// Notifies the browser that the associated frame has changed theme color.
// This will only be called on main-frames only. |theme_color| is optional
// and indicates if a theme color has been specified or not, e.g. removal
// of a theme color meta tag will generate a null value.
DidChangeThemeColor(skia.mojom.SkColor? theme_color);
// Notifies the browser that the associated frame has changed its computed CSS
// background color. This will be called on main-frames only.
// |color_adjust| is true if the background is forced by color adjustments.
DidChangeBackgroundColor(skia.mojom.SkColor4f background_color, bool color_adjust);
// Sent when the renderer fails to load with |error_code| which means a net
// error code.
DidFailLoadWithError(url.mojom.Url url, int32 error_code);
// Sent by the renderer when the associated frame becomes focused.
DidFocusFrame();
// Called to notify the browser process counterpart of this local frame that
// |window.focus()| on a page has been invoked in the renderer process.
DidCallFocus();
// Sent when the frame starts enforcing an insecure request policy. Sending
// this information in DidCommitProvisionalLoad isn't sufficient; this
// message is needed because, for example, a document can dynamically insert
// a <meta> tag that causes strict mixed content checking to be enforced.
// |policy_bitmap| is a bitfield for InsecureRequestPolicy.
EnforceInsecureRequestPolicy(blink.mojom.InsecureRequestPolicy policy_bitmap);
// Elements of |set| are hashes of hosts to upgrade.
EnforceInsecureNavigationsSet(array<uint32> set);
// Sent when a new sudden termination disabler condition is either introduced
// or removed.
SuddenTerminationDisablerChanged(bool present,
SuddenTerminationDisablerType disabler_type);
// Notifies the browser that the associated frame received a user gesture on
// a previous navigation on the same eTLD+1. This ensures the state is
// propagated to any remote frames.
HadStickyUserActivationBeforeNavigationChanged(bool has_gesture);
// Sent by a local root to request scrolling in its parent process.
ScrollRectToVisibleInParentFrame(gfx.mojom.RectF rect_to_scroll,
ScrollIntoViewParams params);
// Sent by a local root to continue bubbling a logical scroll in its parent
// process.
BubbleLogicalScrollInParentFrame(ScrollDirection direction,
ui.mojom.ScrollGranularity granularity);
// Sent by the renderer to indicate that a same document navigation
// commit was requested, but was deferred by script via the NavigationApi. The
// browser should show loading UI while waiting for the script to undefer and
// allow the commit to proceed.
StartLoadingForAsyncNavigationApiCommit();
// Indicates an attempt by the associated frame to navigate from the
// |initiator_url| to the |blocked_url|, but the navigation was
// blocked because of |reason|.
DidBlockNavigation(url.mojom.Url blocked_url, url.mojom.Url initiator_url,
blink.mojom.NavigationBlockedReason reason);
// Sent when the renderer changed the progress of a load.
DidChangeLoadProgress(double load_progress);
// Notifies the browser that a frame finished loading.
DidFinishLoad(url.mojom.Url validated_url);
// Dispatch a load event for this frame in the iframe element of an
// out-of-process parent frame. Once handled, the browser process should
// call RemoteFrame::DispatchLoadEventForFrameOwner() in the renderer.
DispatchLoad();
// Tells the browser to navigate back or forward in session history by
// the given offset (relative to the current position in session
// history). |has_user_gesture| tells whether or not this is the consequence
// of a user action. |soft_navigation_heuristics_task_id| is the task ID of
// the initiator of the navigation, if any. It is restricted to same-document
// main-frame navigation initiated by the top-level document.
GoToEntryAtOffset(int32 offset,
bool has_user_gesture,
TaskAttributionId? soft_navigation_heuristics_task_id);
// Tells the browser to navigate back or forward in session history to the
// history entry associated with |key|. |key| is a renderer-generated random
// UUID, per
// https://wicg.github.io/navigation-api/#session-history-entry-navigation-api-key
//
// The key is only used to trigger a back/forward navigation, so it is
// fundamentally similar to |offset| in GoToEntryAtOffset(). However, the
// navigation API also requires that |key| match a FrameNavigationEntry in
// this frame, and that the target FNE is contiguously same-origin and
// same-site-instance with the current FNE, so navigating via this
// function is more restrictive than GoToEntryAtOffset().
// |soft_navigation_heuristics_task_id| is the task ID of
// the initiator of the navigation, if any. It is sent back to the renderer
// when the navigation commits, and is limited to same-document
// main-frame navigations initiated by the top-level document.
NavigateToNavigationApiKey(string key, bool has_user_gesture,
TaskAttributionId? soft_navigation_heuristics_task_id);
// Called with |true| when the first navigate event handler is added, and with
// |false| when the last navigate event handler is removed.
NavigateEventHandlerPresenceChanged(bool present);
// Changes the title for the page in the UI when the page is navigated or the
// title changes. Sent for top-level frames. This can be null when loading an
// initial empty document (and in some tests).
UpdateTitle(mojo_base.mojom.String16? title,
mojo_base.mojom.TextDirection title_direction);
// Updates the app title for a document. If non-empty, a web app displayed in an app
// window may use this string instead of the regular title.
// See https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/DocumentSubtitle/explainer.md
UpdateAppTitle(mojo_base.mojom.String16 app_title);
// Indicates that the user activation state in the current frame has been
// updated, so the replicated states need to be synced (in the browser process
// as well as in all other renderer processes).
//
// The |notification_type| parameter is used for histograms, only for the case
// |update_state == kNotifyActivation|.
UpdateUserActivationState(UserActivationUpdateType update_type,
UserActivationNotificationType notification_type);
// Called when a history navigation action that could potentially be used to
// back-trap a user is invoked. Keeps HistoryUserActivationState in sync
// between renderer and browser.
DidConsumeHistoryUserActivation();
// Provides accessibility information about a find in page result.
HandleAccessibilityFindInPageResult(FindInPageResultAXParams params);
// Provides accessibility information about the termination of a find
// in page operation.
HandleAccessibilityFindInPageTermination();
// Sent after the onload handler has been invoked for the document
// in this frame. Sent for top-level frames.
DocumentOnLoadCompleted();
// Notifies the browser that resource timing information is available and
// should be added to the performance entries of the parent frame.
ForwardResourceTimingToParent(ResourceTimingInfo timing);
// Notifies the browser that the DOMContentLoaded event was dispatched
// for the document in this frame.
DidDispatchDOMContentLoadedEvent();
// A request to run a JavaScript dialog displaying |alert_message|.
[Sync]
RunModalAlertDialog(mojo_base.mojom.String16 alert_message,
bool disable_third_party_subframe_suppresion) => ();
// A request to run a JavaScript dialog displaying |alert_message|.
// |success| will be true if the user clicked 'OK', false if the
// dialog was canceled.
[Sync]
RunModalConfirmDialog(mojo_base.mojom.String16 alert_message,
bool disable_third_party_subframe_suppresion) =>
(bool success);
// A request to run a confirm JavaScript dialog displaying
// |alert_message| with an editable text area with |default_value|.
// |success| will be true if the user clicked 'OK', false if the
// dialog was canceled. |result| will contain the result of
// the editable text area.
[Sync]
RunModalPromptDialog(mojo_base.mojom.String16 alert_message,
mojo_base.mojom.String16 default_value,
bool disable_third_party_subframe_suppresion) =>
(bool success, mojo_base.mojom.String16 result);
// A request to run a confirmation JavaScript dialog. |is_reload|
// contains it the navigation causing the unload is a reload event.
// |success| contains whether the page should be unloaded or not.
[Sync]
RunBeforeUnloadConfirm(bool is_reload) => (bool success);
// Notifies that the urls for the favicon of a site has been determined.
UpdateFaviconURL(array<FaviconURL> favicon_urls);
// Initiates a download based on user actions like 'ALT+click'.
DownloadURL(DownloadURLParams params);
// Sent to the browser when focus changes inside the frame.
// - is_editable_element: Whether the newly focused element needs
// keyboard input (true for textfields, text areas and content
// editable divs).
// - is_richly_editable_element: Whether the newly focused element
// is richly editable (true for content editable divs).
// - bounds_in_frame_widget: The newly focused element's bounds
// relative to local root's view, and it will be an empty bounds
// if there is no focused element.
// - foucus_type: Focus type.
FocusedElementChanged(bool is_editable_element,
bool is_richly_editable_element,
gfx.mojom.Rect bounds_in_frame_widget,
blink.mojom.FocusType focus_type);
// Notification that the text selection has changed.
// Note: The second parameter is the character based offset of the
// std::u16string text in the document.
TextSelectionChanged(mojo_base.mojom.BigString16 text,
uint32 offset,
gfx.mojom.Range range);
// Show a popup menu using native controls on Mac or Android.
// The popup menu is hidden when the mojo channel is closed.
ShowPopupMenu(pending_remote<PopupMenuClient> popup_client,
gfx.mojom.Rect bounds,
int32 item_height,
double font_size,
int32 selected_item,
array<MenuItem> menu_items,
bool right_aligned,
bool allow_multiple_selection);
// Similar to content.mojom.FrameHost::CreateNewWindow, except used for
// sub-widgets, like <select> dropdowns. Upon return, the renderer side popup
// will be live until the PopupWidgetHost is disconnected by the browser.
// This is used on platforms that do not use the native controls via
// ShowPopupMenu, OpenDateTimeDialog, or OpenColorChooser.
CreateNewPopupWidget(
pending_associated_receiver<PopupWidgetHost> popup_host,
pending_associated_receiver<WidgetHost> blink_widget_host,
pending_associated_remote<Widget> blink_widget);
// Used to tell the parent that the user right clicked on an area of the
// content area, and a context menu should be shown for it. The params
// object contains information about the node(s) that were selected when the
// user right clicked.
ShowContextMenu(pending_associated_remote<ContextMenuClient> client,
UntrustworthyContextMenuParams params);
// Sent when the renderer loads a resource from its memory cache. This message
// lets the browser know we loaded a resource from the memory cache and is
// needed to display the correct SSL indicators.
// TODO(kinuko): Need to check if this comment is still relevant.
//
// The recipients of this message have no use for data: URLs: they don't
// affect the page's insecure content list and are not in the disk cache. To
// prevent large (1M+) data: URLs from crashing in the Mojo system, we simply
// filter them out before calling this message.
//
// Note: May only be sent once per URL per frame per committed load.
DidLoadResourceFromMemoryCache(
url.mojom.Url url, string http_method,
string mime_type, network.mojom.RequestDestination request_destination,
bool include_credentials);
// Notifies the browser that frame owner properties have changed.
//
// Frame owner properties currently include: name, scrollbar_mode,
// margin_width and margin_height, among others.
DidChangeFrameOwnerProperties(
blink.mojom.FrameToken child_frame_token,
blink.mojom.FrameOwnerProperties frame_owner_properties);
// Sent when a local renderer frame either updates its opener to another
// frame identified by |opener_frame|, or, if |opener_frame| is "empty",
// the frame disowns its opener for the lifetime of the window.
DidChangeOpener(blink.mojom.LocalFrameToken? opener_frame);
// Notifies the browser that sandbox flags or container policy have changed
// for a subframe of this frame.
DidChangeFramePolicy(
blink.mojom.FrameToken child_frame_token,
blink.mojom.FramePolicy frame_policy);
// Notifies the browser that one of the iframe attributes tracked by the
// browser process changed.
DidChangeIframeAttributes(
blink.mojom.FrameToken child_frame_token, IframeAttributes attributes);
// Sent by the renderer to request a paint preview of a subframe. |clip_rect|
// is the size of the frame in it's parent. |guid| is an an identifier for
// all the capture work (regardless of the process captures are happening in)
// that allows the results to be grouped together, even if there are multiple
// requests in-flight.
CapturePaintPreviewOfSubframe(
gfx.mojom.Rect clip_rect, mojo_base.mojom.UnguessableToken guid);
// Sent when a CloseListener becomes active so the browser can notify if
// a close signal occurs.
SetCloseListener(
pending_remote<blink.mojom.CloseListener> listener);
// Notifies the browser that a child frame is detached from the DOM.
Detach();
// Returns the associated KeepAliveHandleFactory.
GetKeepAliveHandleFactory(
pending_receiver<blink.mojom.KeepAliveHandleFactory> factory);
// Blink and JavaScript error messages to log to the console, debugger UI, or
// error reporting service. |source_id| is usually a URL.
// |untrusted_stack_trace| should only be printed or sent to other services;
// it's untrusted and should not be parsed to get a structured stack trace.
// The stack trace is only present if
// FrameNavigationControl.SetWantErrorMessageStackTrace has been called for
// this frame and the log_level is kError.
DidAddMessageToConsole(
ConsoleMessageLevel log_level,
mojo_base.mojom.BigString16 msg,
uint32 line_number,
mojo_base.mojom.String16? source_id,
mojo_base.mojom.BigString16? untrusted_stack_trace);
// The frame's size is replicated in the browser so that the browser can
// correctly set the initial size of the frame in case of a cross-process
// navigation.
FrameSizeChanged(gfx.mojom.Size size);
// Notifies the frame that the document's color scheme has been inferred.
DidInferColorScheme(PreferredColorScheme color_scheme);
// Notifies the browser that a subframe's srcdoc attribute has changed, and
// sends the new value to the browser. Also sent when a subframe's content
// frame is changed.
DidChangeSrcDoc(blink.mojom.FrameToken child_frame_token,
string srcdoc_value);
// Notifies the browser that this frame received a message from a local frame
// with a delegated capability (https://wicg.github.io/capability-delegation).
// `delegated_capability` is the capability delegated via postMessage().
// RemoteFrameHost messages already signal the browser via RouteMessageEvent.
ReceivedDelegatedCapability(DelegatedCapability delegated_capability);
// See:
// https://github.com/WICG/turtledove/blob/main/Fenced_Frames_Ads_Reporting.md
//
// This implements the API:
// window.fence.reportEvent({eventType, eventData, destination})
//
// A document in a fenced frame can invoke the reportEvent API to request the
// browser to send `eventData` in a beacon toward the URL registered against
// `eventType` by the worklet in registerAdBeacon. Depending on the declared
// `destination`, the beacon is sent to the reporting destination's
// registered URL.
// Note the `destination` above is a WebIDL sequence, which means it may
// contain multiple destinations. It is forwarded as a collection in a single
// IPC call, instead of making an IPC call for each destination.
// For the list of available reporting destinations, see enum
// ReportingDestination defined in:
// third_party/blink/public/mojom/fenced_frame/fenced_frame_config.mojom
// `cross_origin_exposed` determines if this event can be used with reporting
// metadata that lives in a cross-origin frame. See the comment in
// "fence_event.idl" for more details.
SendFencedFrameReportingBeacon(
string event_data,
string event_type,
array<ReportingDestination> destinations,
bool cross_origin_exposed);
// See:
// https://github.com/WICG/turtledove/blob/main/Fenced_Frames_Ads_Reporting.md
//
// This implements the API:
// window.fence.reportEvent({destinationURL})
//
// A document in a fenced frame can invoke the reportEvent API to request the
// browser to send a beacon to the https URL `destinationURL`, where macros
// in `destinationURL` will be substituted using the values specified by
// registerAdMacro in the Protected Audience auction's buyer worklet.
// `cross_origin_exposed` determines if this event can be used with reporting
// metadata that lives in a cross-origin frame. See the comment in
// "fence_event.idl" for more details.
//
SendFencedFrameReportingBeaconToCustomURL(
url.mojom.Url destination_url,
bool cross_origin_exposed);
// See:
// https://github.com/WICG/fenced-frame/blob/master/explainer/fenced_frames_with_local_unpartitioned_data_access.md
//
// This implements the API:
// window.fence.disableUntrustedNetwork()
//
// A document in a fenced frame can invoke the disableUntrustedNetwork API to
// disable the frame tree's access to the network (except trusted servers in
// the future) and gain access to unpartitioned storage.
DisableUntrustedNetworkInFencedFrame() => ();
// A test-only IPC to exempt `exempted_url` from fenced frames network
// revocation immediately above (`DisableUntrustedNetworkInFencedFrame`).
// Used primarily to exempt the fenced frames remote context executor pattern
// in WPT from network revocation.
ExemptUrlFromNetworkRevocationForTesting(url.mojom.Url exempted_url) => ();
// Notify the browser that there is a legacy technology used by the page.
// The event contains the technology `type` and code location from the
// ExecutionContext.
// The event will only be sent when legacy tech report feature is turned on by
// the browser.
// All data will be later uploaded to the enterprise management service as is.
// Note that we don't guarantee any data here is valid, data will be valided
// by the server.
SendLegacyTechEvent(
string type,
LegacyTechEventCodeLocation code_location);
// Fenced frames can send beacons automatically when an event happens.
//
// For now, only "reserved.top_navigation_start" and
// "reserved.top_navigation_commit" is supported ("reserved.top_navigation"
// will still work, but is deprecated). The `event_data` is installed in the
// RenderFrameHost and will be sent toward `destinations` on the next
// cross-document top-frame navigation.
// `cross_origin_exposed` determines if this data can be used for an automatic
// beacon that originates from a cross-origin subframe. See the comment in
// "fence_event.idl" for more details.
SetFencedFrameAutomaticBeaconReportEventData(
AutomaticBeaconType event_type,
string event_data,
array<ReportingDestination> destinations,
bool once,
bool cross_origin_exposed);
// See:
// https://github.com/WICG/turtledove/blob/main/FLEDGE_extended_PA_reporting.md
//
// This implements the API:
// window.fence.reportEvent(eventType)
//
// A document in a fenced frame can invoke the reportEvent API to request the
// browser to send private aggregation requests associated with `event_type`.
SendPrivateAggregationRequestsForFencedFrameEvent(string event_type);
// Sent by the frame in a renderer process that hosts/owns a <fencedframe>
// element, to the browser process requesting the creation of a new fenced
// frame tree that will host the contents of the <fencedframe> element.
// `fenced_frame` - the receiver that the browser will bind to receive
// messages from the renderer.
// `frame_token` - the unique identifier of the RenderFrameProxy
// `devtools_frame_token` - the unique identifier of the main FrameTreeNode in
// the "inner" fenced frame FrameTree
CreateFencedFrame(
pending_associated_receiver<blink.mojom.FencedFrameOwnerHost>
fenced_frame,
RemoteFrameInterfacesFromRenderer remote_frame_interfaces,
blink.mojom.RemoteFrameToken frame_token,
mojo_base.mojom.UnguessableToken devtools_frame_token);
// Can be called when a DOM event named `event_type` fires within a fenced
// frame's DOM tree. Propagates a censored version of the event to the
// embedder that omits privacy-sensitive information like mouse coordinates or
// timestamps.
ForwardFencedFrameEventToEmbedder(string event_type);
// Notifies when the ViewTransition opt-in state for the current Document
// changes.
// See https://drafts.csswg.org/css-view-transitions-2/#view-transition-rule
OnViewTransitionOptInChanged(
ViewTransitionSameOriginOptIn view_transition_opt_in);
// Used to tell the browser the user started dragging in the content area.
// |drag_data| contains contextual information about the pieces of the page
// the user dragged. The browser uses this notification to initiate a drag
// session at the OS level.
StartDragging(DragData drag_data,
AllowedDragOperations operations_allowed,
skia.mojom.BitmapN32? image,
gfx.mojom.Vector2d cursor_offset_in_dip,
gfx.mojom.Rect drag_obj_rect_in_dip,
DragEventSourceInfo event_info);
// Register the remote corresponding to |receiver| as a keep alive handle for
// browser-process navigation state associated with this LocalFrameHost.
IssueKeepAliveHandle(
pending_receiver<NavigationStateKeepAliveHandle> receiver);
// Used to tell the browser that storage access was requested and whether it was allowed.
NotifyStorageAccessed(StorageTypeAccessed storageType, bool blocked);
// Used to tell the browser to record metrics. This method should not be trusted except for metrics purposes.
RecordWindowProxyUsageMetrics(blink.mojom.FrameToken target_frame_token,
WindowProxyAccessType access_type);
};
// Implemented in Browser, this interface defines frame-specific methods
// that will be invoked from the renderer process
// (e.g. blink::LocalFrame).
//
// Note this interface is not a channel-associated interface and as such
// there are no ordering guarantees for messages sent on this interface
// against messages sent to LocalFrameHost. These messages are only
// meaningful if they arrive before navigation because these messages
// are intended to prepare for navigation. This is why this interface is
// not a channel-associated interface. This interface is for
// experimental purposes (https://crbug.com/1377753,
// https://crbug.com/1431792).
interface NonAssociatedLocalFrameHost {
// Notifies that a renderer-initiated navigation to `urls` will
// potentially start.
// This is fired in the following situations so that the browser can
// speculatively start or warm-up service workers, which might take a
// long time to start.
// - The anchor tag is in the viewport.
// - The mouse hovered the anchor tag.
// - The mousedown event gets dispatched on the anchor tag.
// - The beforeunload event gets dispatched.
// Note that the navigation might not actually start.
MaybeStartOutermostMainFrameNavigation(array<url.mojom.Url> urls);
};
// Implemented in Blink, this interface defines frame-specific methods that will
// be invoked from the browser process (e.g. content::RenderFrameHostImpl).
//
// Note that this is different than content/common/frame.mojom in that the
// methods defined here are handled directly in Blink without passing through
// content. In the future this interface will likely host more methods as the
// Onion Soup project advances, which can potentially lead to the removal of
// content/common/frame.mojom if enough code is moved to Blink.
interface LocalFrame {
// Retrieves the text surrounding the current selection for the frame up to
// the length specified by |max_length|, along with its start and end offsets.
GetTextSurroundingSelection(uint32 max_length)
=> (mojo_base.mojom.String16 content, uint32 start_offset,
uint32 end_offset);
// Creates an intervention report in the frame with contents |id| and
// |message|, returns once the report has been queued. |id| identifies the
// intervention that occurred. |message| is a human-readable string that
// can provide additional context to the cause of the intervention.
SendInterventionReport(string id, string message);
// Updates this frame's FrameOwner properties, such as scrolling, margin,
// or allowfullscreen. This is used when this frame's parent is in
// another process and it dynamically updates these properties.
// TODO(dcheng): Currently, the update only takes effect on next frame
// navigation. This matches the in-process frame behavior.
SetFrameOwnerProperties(FrameOwnerProperties properties);
// Notifies the RenderFrame about a user activation detected in the browser
// side (e.g. during Android voice search). The |notification_type| parameter
// is used for histograms only.
NotifyUserActivation(UserActivationNotificationType notification_type);
// Notifies the |LocalFrame| about the Virtual keyboard rectangle that is occluding the web
// content.
NotifyVirtualKeyboardOverlayRect(gfx.mojom.Rect keyboard_rect);
// Add message to the frame console.
AddMessageToConsole(ConsoleMessageLevel level, string message,
bool discard_duplicates);
// Requests that a provisional frame swap itself into the frame tree,
// immediately replacing the RemoteFrame that it is associated with. Normally,
// this swap happens when the navigation commits in the provisional frame.
// However, if the RemoteFrame corresponds to a crashed (and non-live) frame,
// the browser will immediately call this method to stop showing the sad
// iframe without having to wait for the navigation to commit.
SwapInImmediately();
// Sent to a frame when one of its remote children finishes loading, so that
// the frame can update its loading state.
CheckCompleted();
// Instructs the frame to stop the load in progress, if any.
StopLoading();
// Sent to the process that owns this frame's HTMLFrameOwnerElement to
// control whether the element is collapsed or not. If the element is
// collapsed, it will be removed from the layout tree of its parent
// frame's document.
Collapse(bool collapsed);
// Used to instruct the frame to go into "view source" mode. This should
// only be sent to the main frame.
EnableViewSourceMode();
// Notifies this frame that it is now focused. This is used to
// support cross-process focused frame changes.
Focus();
// Notifies this frame to clear the focused element (if any).
ClearFocusedElement();
// Copies the image at |window_point| to the clipboard (if there indeed is an
// image at that |window_point|).
CopyImageAt(gfx.mojom.Point window_point);
// Saves the image at |window_point| to the disk (if there indeed is an image
// at that |window_point|).
SaveImageAt(gfx.mojom.Point window_point);
// Updates the frame with a list of unique WebFeature values representing
// Blink features used, performed or encountered by the browser during the
// current page load happening on the frame.
ReportBlinkFeatureUsage(array<blink.mojom.WebFeature> features);
// Sent to this frame in parent frame's process to render fallback contents.
// This is only used for <object> elements that failed a navigation with a
// network error.
RenderFallbackContent();
// Instructs the frame to invoke the beforeunload event handler.
//
// The closure callback is invoked to acknowledge the browser that
// the beforeunload event is handled. |proceed| matches the return value
// of the frame's beforeunload handler: true if the user decided to proceed
// with leaving the page.
//
// The [SupportsUrgent] attribute enables marking this message as urgent by
// calling the method in an UrgentMessageScope. Urgent messages cause the
// renderer to prioritize the IPC task queue while there are urgent messages
// pending, which increases their priority while maintaining ordering
// guarantees. See also mojo/public/tools/bindings/README.md.
[SupportsUrgent]
BeforeUnload(bool is_reload)
=> (bool proceed, mojo_base.mojom.TimeTicks before_unload_start_time,
mojo_base.mojom.TimeTicks before_unload_end_time);
// Tells the renderer to perform the given action on the media player location
// at the given point in the view coordinate space.
MediaPlayerActionAt(gfx.mojom.Point location,
blink.mojom.MediaPlayerAction action);
// Requests the current video frame and bounds of the media player at
// `location`. The returned image is scaled if needed to be bounded by
// `max_size` with aspect ratio preserved, unless the original area is already
// less than `max_area`, where `max_size` and `max_area` are both in
// device-independent pixels. This is to avoid scaling images with very
// large/small aspect ratio to avoid losing information. If any of the
// dimensions is non-positive, no scaling will be performed. The bounds
// originate from the DOM layer, are in DIP and are relative to the local
// root's widget (see Element::BoundsInWidget()). No guarantee is made about
// their correlation with the bounds of the video frame as displayed in the
// presentation layer. The returned bounds are also not guaranteed to
// correspond to the result of returned video frame.
RequestVideoFrameAtWithBoundsHint(gfx.mojom.Point location,
gfx.mojom.Size max_size,
int32 max_area)
=> (skia.mojom.BitmapN32? bitmap, gfx.mojom.Rect bounds);
// Tells the renderer to perform the given action on the plugin location at
// the given point in the view coordinate space.
PluginActionAt(gfx.mojom.Point location, blink.mojom.PluginActionType action);
// Request to continue running the sequential focus navigation algorithm in
// this frame. |source_frame_token| identifies the frame that issued this
// request. This message is sent when finding the next focusable element would
// require moving onto a frame from a different process.
AdvanceFocusInFrame(blink.mojom.FocusType focus_type,
blink.mojom.RemoteFrameToken? source_frame_token);
// Notifies this Frame to advance the focus to next input node within its form
// by moving in specified direction if the currently focused node is a Text
// node (textfield, text area or content editable nodes). The next input node
// chosen (if available) will always have the same form owner as the currently
// focused node.
AdvanceFocusForIME(blink.mojom.FocusType focus_type);
// Notifies the document navigation was blocked because a content security
// policy was violated.
ReportContentSecurityPolicyViolation(network.mojom.CSPViolation violation);
// Notifies the frame that its parent has changed the frame's sandbox flags or
// container policy.
DidUpdateFramePolicy(blink.mojom.FramePolicy frame_policy);
// Notifies the renderer process that the associated frame has changed its
// visibility status. Visibility status changes occur when the frame moves
// in/out of the viewport, or when the render status of the object changes,
// e.g. if the frame gets set a "display: none" or "visibility: hidden" style.
OnFrameVisibilityChanged(blink.mojom.FrameVisibility visibility);
// Posts a message from a frame in another process to the current renderer.
// |source_frame_token| is the frame token of the RemoteFrame in the current
// renderer representing the frame (from a different renderer) where this
// message is coming from. |source_origin| is the origin of the source frame
// when the message was sent, and |target_origin| specifies what the origin of
// the target frame must be for the message to be dispatched. An empty string
// allows the message to be dispatched to any origin. |message| is the encoded
// data, and any extra properties such as transferred ports or blobs.
PostMessageEvent(blink.mojom.RemoteFrameToken? source_frame_token,
mojo_base.mojom.String16 source_origin,
mojo_base.mojom.String16 target_origin,
blink.mojom.TransferableMessage message);
// Request for the renderer to execute a given JavaScript method on a given
// object (both identified by name) in the frame's context.
//
// |object_name| is the global name of the object.
//
// |method_name| is the name of the method on the object.
//
// |arguments| is the list of arguments to pass to the method invocation.
//
// |wants_result| is true if the result of this execution is required by the
// caller. If it is false, a reply is still required by Mojo, but a null value
// should be returned to avoid issues serializing a large, unwanted reply.
JavaScriptMethodExecuteRequest(
mojo_base.mojom.String16 object_name,
mojo_base.mojom.String16 method_name,
mojo_base.mojom.ListValue arguments,
bool wants_result) => (mojo_base.mojom.Value result);
// Request for the renderer to execute JavaScript in the frame's context.
//
// |javascript| is the string containing the JavaScript to be executed in the
// target frame's context. Note that this uses BigString16 rather than
// String16 as this is used in contexts, like DevTools, where the contents of
// the JavaScript script is user-provided, and therefore we can't guarantee
// the size of the script.
//
// |wants_result| is true if the result of this execution is required by the
// caller. If it is false, a reply is still required by Mojo, but a null value
// should be returned to avoid issues serializing a large, unwanted reply.
//
JavaScriptExecuteRequest(
mojo_base.mojom.BigString16 javascript,
bool wants_result) => (mojo_base.mojom.Value result);
// ONLY FOR TESTS: Same as above but this can optionally:
// - Trigger a fake user activation notification to test functionalities that
// are gated by user activation.
// - Can block until a resulting promise is resolved.
// - Can choose to not honor JS content settings.
// Content settings are a mechanism that allows users to disable various
// functions of the browser. One content setting disables javascript. This bit
// controls whether this content setting is ignored or honored.
JavaScriptExecuteRequestForTests(
mojo_base.mojom.BigString16 javascript,
bool has_user_gesture,
bool resolve_promises,
bool honor_js_content_settings,
int32 world_id)
=> (JavaScriptExecutionResultType result_type,
mojo_base.mojom.Value result);
// Same as JavaScriptExecuteRequest above except the script is run in the
// isolated world specified by the fourth parameter.
JavaScriptExecuteRequestInIsolatedWorld(
mojo_base.mojom.BigString16 javascript,
bool wants_result,
int32 world_id) => (mojo_base.mojom.Value result);
// Requests the index of a character in the frame's text stream at the given
// point. The point is in the viewport coordinate space. Replies using
// TextInputHost.
[EnableIf=is_mac]
GetCharacterIndexAtPoint(gfx.mojom.Point location);
// Requests the rectangle for a given character range. Replies using
// TextInputHost.
[EnableIf=is_mac]
GetFirstRectForRange(gfx.mojom.Range range);
// Requests the text fragment in a given range.
[EnableIf=is_mac]
GetStringForRange(gfx.mojom.Range range)
=> (ui.mojom.AttributedString? string, gfx.mojom.Point baseline_point);
// Binds |receiver| to the document of this frame.
BindReportingObserver(
pending_receiver<blink.mojom.ReportingObserver> receiver);
// Requests that the blink::LocalFrame updates its opener to the specified
// frame. The frame token may be "empty" if the opener was disowned.
UpdateOpener(blink.mojom.FrameToken? opener_frame_token);
// Request to enumerate and return links to all savable resources in the frame
// Note: this covers only the immediate frame / doesn't cover subframes.
GetSavableResourceLinks() => (GetSavableResourceLinksReply? reply);
// Sent to a frame to notify about mixed content found externally.
MixedContentFound(url.mojom.Url main_resource_url,
url.mojom.Url mixed_content_url,
RequestContextType request_context,
bool was_allowed,
url.mojom.Url url_before_redirects,
bool had_redirect,
network.mojom.SourceLocation? source_location);
// Returns a DevToolsAgent interface for this frame, used for
// remote debugging. See DevToolsAgent for details.
// Returned DevToolsAgent must be associated with navigation control,
// due to various ordering dependencies between DevTools protocol and
// navigation.
BindDevToolsAgent(
pending_associated_remote<blink.mojom.DevToolsAgentHost> agent_host,
pending_associated_receiver<blink.mojom.DevToolsAgent> agent);
// Samsung Galaxy Note-specific "smart clip" stylus text getter.
// Extracts the data at the given rect.
[EnableIf=is_android]
ExtractSmartClipData(gfx.mojom.Rect rect)
=> (mojo_base.mojom.String16 text, mojo_base.mojom.String16 html,
gfx.mojom.Rect clip_rect);
// Asks the renderer to handle a renderer-debug URL.
HandleRendererDebugURL(url.mojom.Url url);
// Requests the link-rel calnonical URL. The canonical url could be null if
// the document of this frame doesn't have the HTMLLinkElement.
GetCanonicalUrlForSharing() => (url.mojom.Url? canonical_url);
// Requests the OpenGraph metadata for the page. See https://ogp.me/. If the
// page has no OpenGraph tags that are understood by this implementation, or
// if it has no OpenGraph tags at all, an empty OpenGraphMetadata is returned.
GetOpenGraphMetadata() => (blink.mojom.OpenGraphMetadata metadata);
// Updates navigation.entries() when restoring from bfcache.
// navigation.entries() represents a subset of the back/forward list visible
// to this frame, and that subset may have changed while the page was in
// bfcache.
SetNavigationApiHistoryEntriesForRestore(
NavigationApiHistoryEntryArrays entry_arrays,
NavigationApiEntryRestoreReason restore_reason);
// Updates the URL for a prerender ready to be activated via No-Vary-Search
// matching.
UpdatePrerenderURL(url.mojom.Url matched_url) => ();
// Updates navigation.entries() when entries are disposed from the session
// history.
NotifyNavigationApiOfDisposedEntries(array<string> keys);
// Called when a traversal requested by the NavigationApi is cancelled in the
// browser.
// When the NavigationApi requests a traversal, it provides
// |navigation_api_key| to the browser, which is an opaque reference to a
// session history entry for this frame. It is sent back to the renderer here
// to indicate which traversal failed.
TraverseCancelled(string navigation_api_key, TraverseCancelledReason reason);
// Dispatches a (uninterceptable, uncancelable) navigate event to the current
// document when the browser process determines that this frame will perform
// a same-origin cross-document traversal. `is_browser_initiated` will be
// false iff this traversal was triggered by a web API (i.e.,
// history.back()/forward()/go() or navigation.back()/forward()/traverseTo()).
DispatchNavigateEventForCrossDocumentTraversal(
url.mojom.Url url, mojo_base.mojom.ByteString page_state,
bool is_browser_initiated);
// Requests a one-time snapshot of the document state for a ViewTransition.
// See https://drafts.csswg.org/css-view-transitions-1/ for details.
//
// The transition_token is used to preserve the identity of the transition
// between old and new documents so they can share captured pixel state in
// viz.
SnapshotDocumentForViewTransition(
blink.mojom.ViewTransitionToken transition_token,
PageSwapEventParams page_swap_event_params) => (
blink.mojom.ViewTransitionState view_transition_state);
// Notifies the old Document that the ViewTransition associated with a
// navigation was aborted, for example if the navigation was cancelled before
// the renderer responds.
NotifyViewTransitionAbortedToOldDocument();
// Dispatches a `pageswap` event on the previous Document before the
// navigation is committed. This API is used for navigations which don't have
// a ViewTransition.
// For ViewTransition the event must be dispatched before snapshotting the old
// Document with a `ViewTransition` object passed to script. So the dispatch
// is done as a part of the `SnapshotDocumentForViewTransition` API above.
DispatchPageSwap(
PageSwapEventParams? page_swap_event_params);
// Allows the browser to add a resource timing entry for a subframe
// navigation that has failed before committing - a non-ok object navigation
// or a no-content response (204/205).
AddResourceTimingEntryForFailedSubframeNavigation(
blink.mojom.FrameToken subframe_token,
url.mojom.Url initial_url,
mojo_base.mojom.TimeTicks start_time,
mojo_base.mojom.TimeTicks redirect_time,
mojo_base.mojom.TimeTicks request_start,
mojo_base.mojom.TimeTicks response_start,
uint32 response_code,
string mime_type,
network.mojom.LoadTimingInfo load_timing_info,
network.mojom.ConnectionInfo connection_info,
string alpn_negotiated_protocol,
bool is_secure_transport,
bool is_validated,
string normalized_server_timing,
network.mojom.URLLoaderCompletionStatus completion_status
);
};
// Implemented in Blink, this interface defines main-frame-specific methods that
// will be invoked from the browser process (e.g. content::WebContentsImpl).
//
// There is only ever one local main frame for a given tab in all renderer
// processes.
//
// This interface will only be provided when the LocalFrame is a main frame.
interface LocalMainFrame {
// Requests performing a page scale animation based on the point/rect provided.
AnimateDoubleTapZoom(gfx.mojom.Point point, gfx.mojom.Rect rect);
// Scales the view without affecting layout by using the visual viewport.
SetScaleFactor(float scale);
// Instructs the renderer to close the current page, including running the
// onunload event handler.
ClosePage() => ();
// Get width and height of the whole page content from the main frame.
GetFullPageSize() => (gfx.mojom.Size full_page_size);
// Tells the renderer to focus the first (last if reverse is true) focusable
// node.
SetInitialFocus(bool reverse);
// Instructs the renderer to send back updates to the preferred size.
EnablePreferredSizeChangedMode();
// Sent to the main-frame to request performing a zoom-to-find-in-page
// based on the rect provided.
ZoomToFindInPageRect(gfx.mojom.Rect rect_in_root_frame);
// Cross-Origin-Opener-Policy(COOP):
// Check accesses made from this window to |accessed_window|. If this happens,
// 1) A network report will be sent to |reporter|.
// 2) A ReportingObserver event will be dispatched.
// 3) Devtool will be notified.
//
InstallCoopAccessMonitor(
blink.mojom.FrameToken accessed_window,
network.mojom.CrossOriginOpenerPolicyReporterParams coop_reporter_info,
bool is_in_same_virtual_coop_related_group);
// Notifies the renderer whether hiding/showing the browser controls is
// enabled, what the current state should be, and whether or not to
// animate to the proper state.
//
// offset_tags_info consists of OffsetTags, and metadata for creating
// OffsetTagConstraints. It is passed to the renderer and used to tag the
// browser controls scroll offsets in the compositor frame's metadata, with
// the goal of allowing viz to scroll the top controls by applying the
// offset. The slim::Layers for the top controls in the browser must be
// tagged with the same token.
// A zero token is passed when the browser is forcing the controls to be
// shown/hidden. When this happens, the browser process will have removed
// the renderer's OffsetTagDefinition from the associated SurfaceLayer, so
// viz will not look for scroll offsets or OffsetTags in the compositor frame
// metadata anymore. The renderer should also not tag any scroll offsets with
// OffsetTags, as they won't be seen by viz.
// A null token is passed when scrolling top controls is viz is not
// applicable (ex. chromeos, UI elements that overlay on top of chrome,
// tests, etc.)
UpdateBrowserControlsState(
cc.mojom.BrowserControlsState constraints,
cc.mojom.BrowserControlsState current,
bool animate,
cc.mojom.BrowserControlsOffsetTagsInfo? offset_tags_info);
// Transmits data to V8CrowdsourcedCompileHintsConsumer in the renderer. The
// data is a Bloom filter describing which JavaScript functions on the page
// should be eagerly parsed & compiled by the JS engine.
SetV8CompileHints(mojo_base.mojom.ReadOnlySharedMemoryRegion data);
// Replaces the active document with an empty document to free resources,
// e.g. for supporting tab discard.
Discard();
};
// Implemented in Browser, this interface defines local-main-frame-specific
// methods that will be invoked from the renderer process (e.g. WebViewImpl).
//
// TODO(https://crbug.com/334100817): Remove this attribute.
[DispatchDebugAlias]
interface LocalMainFrameHost {
// Indicates the scale of the view has changed.
ScaleFactorChanged(float scale);
// Notifies that the preferred size of the view has changed.
ContentsPreferredSizeChanged(gfx.mojom.Size pref_size);
// Informs the browser that page metrics relevant to Blink's TextAutosizer
// have changed, so that they can be shared with other renderers. The
// browser will share this information with other renderers that have frames
// in the page.
TextAutosizerPageInfoChanged(TextAutosizerPageInfo page_info);
// Asks the browser process to activate the page associated to the main frame.
FocusPage();
// Asks the browser to transfer focus cross-process on behalf of the renderer
// in the focus hierarchy. This may focus an element in the browser ui or a
// cross-process frame, as appropriate.
TakeFocus(bool reverse);
// Notifies the browser that we want to show a destination url for a potential
// action (e.g. when the user is hovering over a link). Implementation of this
// method will reply back to the renderer once the target URL gets received,
// in order to prevent target URLs spamming the browser.
UpdateTargetURL(url.mojom.Url url) => ();
// Request close of the window. This corresponds to a window.close() javascript API call.
// Frame unload handlers should have already been called before this method is called.
RequestClose();
// Causes a window previously opened via content.mojom.FrameHost::CreateNewWindow
// to be shown on the screen. This message contains the opener_frame_token
// which is always set. This is called on the main frame of the window to be shown.
ShowCreatedWindow(blink.mojom.LocalFrameToken opener_frame_token,
ui.mojom.WindowOpenDisposition disposition,
blink.mojom.WindowFeatures window_features,
bool opened_by_user_gesture) => ();
// Request that the browser change the bounds of the window.
// This corresponds to the window.resizeTo() and window.moveTo() APIs, and the browser
// may ignore this message.
SetWindowRect(gfx.mojom.Rect bounds) => ();
// Sent once a paint happens after the first non empty layout. In other words,
// after the frame has painted something.
DidFirstVisuallyNonEmptyPaint();
// Indicates that another page has accessed the DOM of the initial empty
// document of a main frame. After this, it is no longer safe to show a
// pending navigation's URL, because a URL spoof is possible.
DidAccessInitialMainDocument();
// Request browser to maximize window. Link to I2P:
// https://groups.google.com/a/chromium.org/g/blink-dev/c/oCxWg8q_OQY/m/LUTw0T5cCQAJ
Maximize();
// Request browser to minimize window. Link to I2P:
// https://groups.google.com/a/chromium.org/g/blink-dev/c/oCxWg8q_OQY/m/LUTw0T5cCQAJ
Minimize();
// Request browser to restore window. Link to I2P:
// https://groups.google.com/a/chromium.org/g/blink-dev/c/oCxWg8q_OQY/m/LUTw0T5cCQAJ
Restore();
// Set the browser window to resizable or not. Link to I2P:
// https://groups.google.com/a/chromium.org/g/blink-dev/c/oCxWg8q_OQY/m/LUTw0T5cCQAJ
SetResizable(bool resizable);
// Notify the browser that the draggable regions defined by the app-region
// CSS property have been updated.
DraggableRegionsChanged(array<DraggableRegion> regions);
};