chromium/services/network/public/mojom/trust_token_access_observer.mojom

// Copyright 2022 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 "url/mojom/origin.mojom";

union TrustTokenAccessDetails {
  TrustTokenIssuanceDetails issuance;
  TrustTokenRedemptionDetails redemption;
  TrustTokenSigningDetails signing;
};

struct TrustTokenIssuanceDetails {
  // This is the origin that is triggering a Trust Token access. If the access
  // is triggered from a resource request, `origin` is the origin of the
  // top-level frame of the initial request; if they're being triggered by a
  // script, it's the origin of the window or service worker.
  url.mojom.Origin origin;

  // This is the origin of the issuer being used by this Trust Token operation
  // if applicable.
  url.mojom.Origin? issuer;

  // Whether the Trust Token operation was blocked.
  bool blocked = false;
};

struct TrustTokenRedemptionDetails {
  // This is the origin that is triggering a Trust Token access. If the access
  // is triggered from a resource request, `origin` is the origin of the
  // top-level frame of the initial request; if they're being triggered by a
  // script, it's the origin of the window or service worker.
  url.mojom.Origin origin;

  // This is the origin of the issuer being used by this Trust Token operation
  // if applicable.
  url.mojom.Origin? issuer;

  // Whether the Trust Token operation was blocked.
  bool blocked = false;
};

struct TrustTokenSigningDetails {
  // This is the origin that is triggering a Trust Token access. If the access
  // is triggered from a resource request, `origin` is the origin of the
  // request; if they're being triggered by a script, it's the origin of the
  // window or service worker.
  url.mojom.Origin origin;

  // Whether the Trust Token operation was blocked.
  bool blocked = false;
};

// Cloneable interface to observe trust token operations being performed in
// the NetworkService from other services (primarily the browser process).
// Users of TrustTokenAccessObserver should create a dedicated observer for
// each network request context (URLLoaderFactory) they are interested in
// observing.
interface TrustTokenAccessObserver {
  // Called when an attempt has been made to access trust tokens by the
  // NetworkService with the details about the trust token access.
  OnTrustTokensAccessed(TrustTokenAccessDetails details);

  // Called to create a copy of this observer. (e.g. when cloning observers
  // from ResourceRequest).
  Clone(pending_receiver<TrustTokenAccessObserver> listener);
};