chromium/services/network/public/mojom/link_header.mojom

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module network.mojom;

import "services/network/public/mojom/request_priority.mojom";
import "url/mojom/url.mojom";

// Represents subset of possible values for `rel` attribute of the Link header.
enum LinkRelAttribute {
  // https://w3c.github.io/resource-hints/#dns-prefetch
  kDnsPrefetch,
  // https://w3c.github.io/resource-hints/#dfn-preconnect
  kPreconnect,
  // https://w3c.github.io/preload/
  kPreload,
  // https://html.spec.whatwg.org/multipage/links.html#link-type-modulepreload
  kModulePreload,
};

// Represents subset of possible values for `as` attribute of the Link header.
// https://fetch.spec.whatwg.org/#concept-potential-destination
// https://fetch.spec.whatwg.org/#concept-request-destination
enum LinkAsAttribute {
  kUnspecified,
  kFont,
  kImage,
  kScript,
  kStyleSheet,
  kFetch,
};

// Represents subset of possible values for `crossorigin` attribute.
// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes
enum CrossOriginAttribute {
  kUnspecified,
  kAnonymous,
  kUseCredentials,
};

// Holds the parsed representation of the Link header.
// https://tools.ietf.org/html/rfc8288#section-3
struct LinkHeader {
  // The resolved `href` attribute.
  url.mojom.Url href;
  // The parsed value of `rel` attribute.
  // TODO(crbug.com/40170852): Change the type when multiple values are need to
  // be supported. `rel` can contain multiple values but rel=preload is the only
  // supported value for now.
  LinkRelAttribute rel;
  // The parsed value of `as` attribute.
  LinkAsAttribute as = LinkAsAttribute.kUnspecified;
  // The parsed value of `crossorigin` attribute.
  CrossOriginAttribute cross_origin = CrossOriginAttribute.kUnspecified;
  // The parsed value of `fetchpriority` attribute.
  FetchPriorityAttribute fetch_priority = FetchPriorityAttribute.kAuto;
  // The `type` attribute. This is null when `type` attribute is not specified.
  string? mime_type;
};