blob: 072da3bb10bacc603b7d3d60114b6eaa0e1b842e [file] [log] [blame]
// Copyright 2017 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.
module content.mojom;
import "content/common/prefetched_signed_exchange_info.mojom";
import "content/public/common/was_activated_option.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/fetch_api.mojom";
import "services/network/public/mojom/ip_address_space.mojom";
import "services/network/public/mojom/source_location.mojom";
import "services/network/public/mojom/trust_tokens.mojom";
import "services/network/public/mojom/url_loader.mojom";
import "services/network/public/mojom/url_response_head.mojom";
import "services/network/public/mojom/web_client_hints_types.mojom";
import "third_party/blink/public/mojom/feature_policy/feature_policy.mojom";
import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
import "third_party/blink/public/mojom/frame/frame_policy.mojom";
import "third_party/blink/public/mojom/loader/referrer.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";
import "third_party/blink/public/mojom/page/page.mojom";
[Native]
struct Impression;
[Native]
enum MixedContentContextType;
[Native]
struct NavigationDownloadPolicy;
[Native]
struct PageState;
[Native]
enum PageTransition;
// Represents the Content Security Policy of the initator of the navigation.
struct InitiatorCSPInfo {
// Whether or not the CSP of the main world should apply. When the navigation
// is initiated from a content script in an isolated world, the CSP defined
// in the main world should not apply.
// TODO(arthursonzogni): Instead of this boolean, the origin of the isolated
// world which has initiated the navigation should be passed.
// See https://crbug.com/702540
network.mojom.CSPDisposition should_check_main_world_csp =
network.mojom.CSPDisposition.CHECK;
// The relevant CSP policies and the initiator 'self' source to be used.
array<network.mojom.ContentSecurityPolicy> initiator_csp;
network.mojom.CSPSource? initiator_self_source;
};
enum NavigationType {
// Reload the page, validating only cache entry for the main resource.
RELOAD,
// Reload the page, bypassing any cache entries.
RELOAD_BYPASSING_CACHE,
// Reload the page using the original request URL.
RELOAD_ORIGINAL_REQUEST_URL,
// The navigation is the result of session restore and should honor the
// page's cache policy while restoring form state. This is set to true if
// restoring a tab/session from the previous session and the previous
// session did not crash. If this is not set and the page was restored then
// the page's cache policy is ignored and we load from the cache.
RESTORE,
// Like RESTORE, except that the navigation contains POST data.
RESTORE_WITH_POST,
// History navigation inside the same document.
HISTORY_SAME_DOCUMENT,
// History navigation to a different document.
HISTORY_DIFFERENT_DOCUMENT,
// Navigation inside the same document. It occurs when the part of the url
// that is modified is after the '#' part.
SAME_DOCUMENT,
// Navigation to another document.
DIFFERENT_DOCUMENT,
};
// Provided by the renderer ----------------------------------------------------
//
// This struct holds parameters sent by the renderer to the browser, that are
// needed to start a navigation.
struct BeginNavigationParams {
// Routing id of the initiator of the navigation. This routing id may no
// longer be valid by the time the navigation is seen by the browser process,
// if the initiator frame is deleted before the navigation IPC arrives. A
// default value of MSG_ROUTING_NONE indicates this navigation is not
// associated with a frame.
int32 initiator_routing_id = -2; // -2 == MSG_ROUTING_NONE
// Additional HTTP request headers.
string headers;
// net::URLRequest load flags (net::LOAD_NORMAL) by default).
int32 load_flags = 0; // 0 == net::LOAD_NORMAL
// True if the ServiceWorker should be skipped.
bool skip_service_worker = false;
// Indicates the request context type.
blink.mojom.RequestContextType request_context_type =
blink.mojom.RequestContextType.UNSPECIFIED;
// Indicates the request destination.
network.mojom.RequestDestination request_destination =
network.mojom.RequestDestination.kEmpty;
// The mixed content context type for potential mixed content checks.
//
// [Native] enums are by default initialized to 0
// (i.e. blink::WebMixedContentContextType::kNotMixedContent below).
MixedContentContextType mixed_content_context_type;
// Whether or not the navigation has been initiated by a form submission.
bool is_form_submission = false;
// Whether or not the navigation has been initiated by a link click.
bool was_initiated_by_link_click = false;
// See WebSearchableFormData for a description of these.
url.mojom.Url searchable_form_url;
string searchable_form_encoding;
// If the transition type is a client side redirect, then this holds the URL
// of the page that had the client side redirect.
url.mojom.Url client_side_redirect_url;
// If the navigation is renderer-initiated and the renderer is being
// inspected by DevTools, this field is non-null and contains the
// initiator information in DevTools protocol format. See
// https://chromedevtools.github.io/devtools-protocol/tot/Network#type-Initiator
// for details.
mojo_base.mojom.DictionaryValue? devtools_initiator;
// Whether or not this navigation should unconditionally attach SameSite
// cookies, bypassing the usual site_for_cookies checks. Setting this to true
// causes SameSite cookies to be attached for cross-site requests (or requests
// that "look" cross-site). See the field of the same name in
// network::ResourceRequest.
bool force_ignore_site_for_cookies = false;
// Specifies whether, and how, the navigation should execute a Trust Tokens
// operation (https://github.com/wicg/trust-token-api) and attach headers
// conveying the result of the operation. Set on some child frame navigations.
network.mojom.TrustTokenParams? trust_token_params;
// Carries optional information associated with conversion measurement for
// this navigation. Only set on navigations originating from anchors with
// relevant impression attributes set.
Impression? impression;
// Timestamps of the renderer running beforeunload handlers on local frames
// in preparation for navigating. Used for metrics.
mojo_base.mojom.TimeTicks before_unload_start;
mojo_base.mojom.TimeTicks before_unload_end;
};
// Provided by the browser or the renderer -------------------------------------
// Used by all navigation IPCs.
struct CommonNavigationParams {
// The URL to navigate to.
// May be modified when the navigation is ready to commit.
url.mojom.Url url;
// When a frame navigates another frame, this is the origin of the document
// which initiated the navigation. This parameter can be null for
// browser-initiated navigations.
url.mojom.Origin? initiator_origin;
// The URL to send in the "Referer" header field. Can be empty if there is
// no referrer.
blink.mojom.Referrer referrer;
// The type of transition.
//
// [Native] enums are by default initialized to 0 (i.e. PAGE_TRANSITION_LINK).
PageTransition transition;
// Type of navigation.
NavigationType navigation_type = DIFFERENT_DOCUMENT;
// Governs how downloads are handled by this navigation.
NavigationDownloadPolicy download_policy;
// Informs the RenderView the pending navigation should replace the current
// history entry when it commits. This is used by client-side redirects to
// indicate that when the navigation commits, it should commit in the existing
// page.
bool should_replace_current_entry = false;
// Base URL for use in Blink's SubstituteData.
// Is only used with data: URLs.
url.mojom.Url base_url_for_data_url;
// History URL for use in Blink's SubstituteData.
// Is only used with data: URLs.
url.mojom.Url history_url_for_data_url;
// Bitmask that has whether or not to request a Preview version of the
// document for various preview types or let the browser decide.
// Defined in third_party/blink/public/common/loader/previews_state.h.
int32 previews_state = 0; // 0 == PREVIEWS_UNSPECIFIED
// The navigationStart time exposed through the Navigation Timing API to JS.
mojo_base.mojom.TimeTicks navigation_start;
// The request method: GET, POST, etc.
string method = "GET";
// Body of HTTP POST request.
network.mojom.URLRequestBody? post_data;
// Information about the Javascript source for this navigation. Used for
// providing information in console error messages triggered by the
// navigation. If the navigation is not caused by Javascript, the
// SourceLocation's URL is empty.
network.mojom.SourceLocation source_location;
// Whether or not this navigation was started from a context menu.
bool started_from_context_menu = false;
// True if the request was user initiated.
bool has_user_gesture = false;
// True if the navigation should allow the target document to invoke a text
// fragment (i.e. fragments with :~:text=). This is based on user gesture
// presence but separate from the bit above as the semantics for text
// fragments are different. Namely, this bit is always consumed on use and is
// propagated across client redirects.
bool text_fragment_token = false;
// We require a copy of the relevant CSP to perform navigation checks.
InitiatorCSPInfo initiator_csp_info;
// The origin trial features activated in the initiator that should be applied
// in the document being navigated to. The int values are blink
// OriginTrialFeature enum values. OriginTrialFeature enum is not visible
// outside of blink (and doesn't need to be) so these values are casted to int
// as they are passed through content across navigations.
array<int32> initiator_origin_trial_features;
// The value of the hrefTranslate attribute if this navigation was initiated
// from a link that had that attribute set.
string href_translate;
// Whether this is a history navigation in a newly created child frame, in
// which case the browser process is instructing the renderer process to load
// a URL from a session history item. Defaults to false.
// TODO(ahemery): Move this to BeginNavigationParams once we default to
// IsPerNavigationMojoInterface().
bool is_history_navigation_in_new_child_frame = false;
// The time the input event leading to the navigation occurred. This will
// not always be set; it depends on the creator of the CommonNavigationParams
// setting it.
mojo_base.mojom.TimeTicks input_start;
};
// Provided by the browser -----------------------------------------------------
// Timings collected in the browser during navigation for the
// Navigation Timing API. Sent to Blink in CommitNavigationParams when
// the navigation is ready to be committed.
struct NavigationTiming {
mojo_base.mojom.TimeTicks redirect_start;
mojo_base.mojom.TimeTicks redirect_end;
mojo_base.mojom.TimeTicks fetch_start;
};
// Sent with CommitNavigationParams and should only be set for main-frame
// same-site navigations where we did a proactive BrowsingInstance swap and
// we're reusing the old page's process. Needed to ensure that the previous
// page's pagehide and visibilitychange handlers are run before the new page
// runs (which is what happens on other same-site main frame navigations).
struct OldPageInfo {
// |routing_id_for_old_main_frame| contains the routing ID of the old page's
// main RenderFrameHost.
int32 routing_id_for_old_main_frame = -1;
// |new_lifecycle_state_for_old_page| contains the latest PageLifecycleState
// of the old page to ensure the PageVisibilityState gets properly updated,
// the "persisted" property of the pagehide event is set correctly, and
// pagehide and visibilitychange events won't get dispatched again when we
// unload/freeze the page later on.
blink.mojom.PageLifecycleState new_lifecycle_state_for_old_page;
};
// Used by commit IPC messages. Holds the parameters needed by the renderer to
// commit a navigation besides those in CommonNavigationParams.
struct CommitNavigationParams {
// The origin to be used for committing the navigation, if specified.
// This will be an origin that's compatible with the |url| in the
// CommonNavigationParams; if |url| is data: or about:blank, or the frame has
// sandbox attributes, this determines the origin of the resulting document.
// It is specified for session history navigations, for which the origin is
// known and saved in the FrameNavigationEntry.
url.mojom.Origin? origin_to_commit;
// Whether or not the user agent override string should be used.
bool is_overriding_user_agent = false;
// Any redirect URLs that occurred before |url|. Useful for cross-process
// navigations; defaults to empty.
array<url.mojom.Url> redirects;
// The ResourceResponseInfos received during redirects.
array<network.mojom.URLResponseHead> redirect_response;
// The RedirectInfos received during redirects.
array<network.mojom.URLRequestRedirectInfo> redirect_infos;
// The content type from the request headers for POST requests.
string post_content_type;
// The original URL & method for this navigation.
url.mojom.Url original_url;
string original_method;
// Whether or not this url should be allowed to access local file://
// resources.
bool can_load_local_resources = false;
// Opaque history state (received by UpdateState Mojo message).
PageState page_state;
// For browser-initiated navigations, this is the unique id of the
// NavigationEntry being navigated to. (For renderer-initiated navigations it
// is 0.) If the load succeeds, then this nav_entry_id will be reflected in
// the resulting FrameHostMsg_DidCommitProvisionalLoad_Params.
int32 nav_entry_id = 0;
// If this is a history navigation, this contains a map of frame unique names
// to |is_about_blank| for immediate children of the frame being navigated for
// which there are history items. The renderer process only needs to check
// with the browser process for newly created subframes that have these unique
// names (and only when not staying on about:blank).
// TODO(creis): Expand this to a data structure including corresponding
// same-process PageStates for the whole subtree in https://crbug.com/639842.
map<string, bool> subframe_unique_names;
// For browser-initiated navigations, this is true if this is a new entry
// being navigated to. This is false otherwise. TODO(avi): Remove this when
// the pending entry situation is made sane and the browser keeps them around
// long enough to match them via nav_entry_id, above.
bool intended_as_new_entry = false;
// For history navigations, this is the offset in the history list of the
// pending load. For non-history navigations, this will be ignored.
int32 pending_history_list_offset = -1;
// Where its current page contents reside in session history and the total
// size of the session history list.
int32 current_history_list_offset = -1;
int32 current_history_list_length = 0;
// Indicates that the tab was previously discarded.
// wasDiscarded is exposed on Document after discard, see:
// https://github.com/WICG/web-lifecycle
bool was_discarded = false;
// Indicates whether the navigation is to a view-source:// scheme or not.
// It is a separate boolean as the view-source scheme is stripped from the
// URL before it is sent to the renderer process and the RenderFrame needs
// to be put in special view source mode.
bool is_view_source = false;
// Whether session history should be cleared. In that case, the RenderView
// needs to notify the browser that the clearing was successful when the
// navigation commits.
bool should_clear_history_list = false;
// Timing of navigation events.
NavigationTiming navigation_timing;
// The AppCache host id to be used to identify this navigation.
mojo_base.mojom.UnguessableToken? appcache_host_id;
// Set to |kYes| if a navigation is following the rules of user activation
// propagation. This is different from |has_user_gesture|
// (in CommonNavigationParams) as the activation may have happened before
// the navigation was triggered, for example.
// In other words, the distinction isn't regarding user activation and user
// gesture but whether there was an activation prior to the navigation or to
// start it. `was_activated` will answer the former question while
// `user_gesture` will answer the latter.
WasActivatedOption was_activated = kUnknown;
// A token that should be passed to the browser process in
// DidCommitProvisionalLoadParams.
// TODO(clamy): Remove this once NavigationClient has shipped and
// same-document browser-initiated navigations are properly handled as well.
mojo_base.mojom.UnguessableToken navigation_token;
// Prefetched signed exchanges. Used when SignedExchangeSubresourcePrefetch
// feature is enabled.
array<PrefetchedSignedExchangeInfo> prefetched_signed_exchanges;
// The real content of the data: URL. Only used in Android WebView for
// implementing LoadDataWithBaseUrl API method to circumvent the restriction
// on the GURL max length in the IPC layer. Short data: URLs can still be
// passed in the |CommonNavigationParams::url| field.
[EnableIf=is_android]
string data_url_as_string;
// Whether this navigation was browser initiated.
bool is_browser_initiated = false;
// The IP address space into which this document is committing.
// https://wicg.github.io/cors-rfc1918/#address-space
network.mojom.IPAddressSpace ip_address_space =
network.mojom.IPAddressSpace.kUnknown;
// The physical URL of Web Bundle from which the document is loaded.
// Used as an additional identifier for MemoryCache.
url.mojom.Url web_bundle_physical_url;
// The claimed URL inside Web Bundle from which the document is loaded.
url.mojom.Url web_bundle_claimed_url;
// UKM source id to be associated with the Document that will be installed
// in the current frame. This could be an invalid id for empty Document. Only
// Documents that will emit UKM events need valid ids.
int64 document_ukm_source_id;
// A snapshot value of frame policy (both sandbox flags and container policy)
// of the frame that is being navigated. The snapshot value is captured at the
// start of navigation:
// - For local frame navigation, the value is set at NavigationRequest::
// CreateRendererInitiated.
// - For remote frame navigation, the value is set at
// NavigationControllerImpl::CreateNavigationRequestFromLoadParams.
// - For navigation created from
// NavigationControllerImpl::CreateNavigationRequestFromEntry which
// corresponds to history navigation, the value is set to current
// FrameTreeNode::pending_frame_policy in frame_tree_node. This behavior is
// currently undocumented and probably need further discussion. Another
// potential approach is to record frame policy value in NavigationEntry and
// reuse the historical value.
//
// The default FramePolicy is the laxest. It is used for:
// - Top-level browser-initiated navigations.
// - Ctrl+click navigation (opening a link in a new tab).
blink.mojom.FramePolicy frame_policy;
// The names of origin trials to be force enabled for this navigation.
array<string> force_enabled_origin_trials;
// Whether the page is origin isolated.
// https://github.com/WICG/origin-isolation
bool origin_isolated = false;
// Client-hints enabled; this is based on the top-level frame and should be
// further narrowed down by feature policy.
array<network.mojom.WebClientHintsType> enabled_client_hints;
// Whether this is a cross browsing instance navigation.
bool is_cross_browsing_instance = false;
// A list of additional Content Security Policies to be enforced by blink
// on the document. This is being used by Content Security Policy: Embedded
// Enforcement for enforcing on frames Content Security Policies required by
// their embedders.
array<string> forced_content_security_policies;
// Should only be set to a valid value for main-frame same-site navigations
// where we did a proactive BrowsingInstance swap and we're reusing the old
// page's process.
OldPageInfo? old_page_info;
// The HTTP response status code for the navigation. Set to -1 if we never
// received response headers.
int32 http_response_code = -1;
};