blob: f1b326d3909dade0f7f12d9bdfe5999107d79fb4 [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/url_response_head.mojom";
import "services/network/public/mojom/url_loader.mojom";
import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
import "third_party/blink/public/mojom/referrer.mojom";
import "url/mojom/origin.mojom";
import "url/mojom/url.mojom";
[Native]
struct InitiatorCSPInfo;
[Native]
enum MixedContentContextType;
[Native]
struct NavigationDownloadPolicy;
[Native]
struct PageState;
[Native]
enum PageTransition;
[Native]
struct SourceLocation;
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 {
// Additional HTTP request headers.
string headers;
// net::URLRequest load flags (net::LOAD_NORMAL) by default).
int32 load_flags;
// True if the ServiceWorker should be skipped.
bool skip_service_worker;
// Indicates the request context type.
blink.mojom.RequestContextType request_context_type;
// The mixed content context type for potential mixed content checks.
MixedContentContextType mixed_content_context_type;
// Whether or not the navigation has been initiated by a form submission.
bool is_form_submission;
// Whether or not the navigation has been initiated by a link click.
bool was_initiated_by_link_click;
// 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;
};
// 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.
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 content/public/common/previews_state.h.
int32 previews_state;
// The navigationStart time exposed through the Navigation Timing API to JS.
// If this is for a browser-initiated navigation, this can override the
// navigation_start value in Blink.
// For renderer initiated navigations, this will be set on the
// renderer side and sent with FrameHost::BeginNavigation.
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 was not caused by Javascript, this should
// not be set.
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;
// 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;
};
// 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 FrameHostMsg_UpdateState).
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;
};