// 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 "third_party/WebKit/public/platform/modules/fetch/fetch_api_request.mojom";
import "url/mojo/origin.mojom";
import "url/mojo/url.mojom";

[Native]
enum MixedContentContextType;

// Provided by the renderer ----------------------------------------------------
//
// This struct holds parameters sent by the renderer to the browser. It is only
// used in PlzNavigate (since in the current architecture, the renderer does not
// inform the browser of navigations until they commit).

// This struct is not used outside of the PlzNavigate project.
// PlzNavigate: parameters needed to start a navigation on the IO thread,
// following a renderer-initiated navigation request.
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;

  // See WebSearchableFormData for a description of these.
  url.mojom.Url searchable_form_url;
  string searchable_form_encoding;

  // Indicates the initiator of the request. In auxilliary navigations, this is
  // the origin of the document that triggered the navigation. This parameter
  // can be null during browser-initiated navigations.
  // TODO(ahemery): Remove optional when BeginNav is used only for
  // renderer-initiated navigations. For details see comments from dcheng@ in
  // review 763529.
  url.mojom.Origin? initiator_origin;

  // 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;
};

