chromium/services/network/public/mojom/accept_ch_frame_observer.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/http_request_headers.mojom";
import "services/network/public/mojom/web_client_hints_types.mojom";
import "url/mojom/origin.mojom";

// An observer that checks if an ACCEPT_CH HTTP 2/3 frame will affect the
// request it is associated with. Should only be applied to navigation
// requests.
//
// Implemented in the browser process to be sent messages from the network
// service. Owned by a single URLLoader.
interface AcceptCHFrameObserver {
  // Informs the observer that an ACCEPT_CH frame was received for the given
  // origin. The observer should check if the hints in the frame would be added
  // to a request. If so, the observer should drop the associated URLLoader and
  // issue a new request with the new headers, which should terminate the pipe.
  //
  // The callback expects a net::Error value. For non-error states, including a
  // restarting and non-restarting request, send net::OK.
  OnAcceptCHFrameReceived(
    url.mojom.Origin origin,
    array<WebClientHintsType> accept_ch_frame) => (int32 status);

  // Used to make a copy of the observer when copying a ResourceRequest or
  // passing a network.mojom.URLRequest struct through a mojo pipe.
  Clone(pending_receiver<AcceptCHFrameObserver> listener);
};