// Copyright 2019 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 network.mojom;

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

// https://mikewest.github.io/corpp/#integration-html
enum CrossOriginEmbedderPolicyValue {
  kNone,
  kRequireCorp,
};

// Reports potential COEP violations. This is mainly used by the CORP check
// in the network service. Implemented in the browser process.
interface CrossOriginEmbedderPolicyReporter {
  // Queues a report of a CORP violation caused by COEP.
  QueueCorpViolationReport(url.mojom.Url blocked_url,
                           network.mojom.RequestDestination destination,
                           bool report_only);

  // Connects a new pipe to this instance.
  Clone(pending_receiver<CrossOriginEmbedderPolicyReporter> receiver);
};

// Corresponding to the "embedder policy" concept in the spec.
// TODO(yhirano): Attach a spec link.
struct CrossOriginEmbedderPolicy {
    // The value of the policy.
    CrossOriginEmbedderPolicyValue value = CrossOriginEmbedderPolicyValue.kNone;
    // The reporting endpoint for the policy.
    string? reporting_endpoint;
    // The value for the "report only" mode.
    CrossOriginEmbedderPolicyValue report_only_value =
        CrossOriginEmbedderPolicyValue.kNone;
    // The reporting endpoint for the "report only" mode.
    string? report_only_reporting_endpoint;
};
