| // 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/ip_address_space.mojom"; |
| import "services/network/public/mojom/url_loader.mojom"; |
| import "services/network/public/mojom/url_response_head.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; |
| |
| // 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; |
| }; |