#ifndef CONTENT_BROWSER_SECURITY_DIP_DOCUMENT_ISOLATION_POLICY_REPORTER_H_
#define CONTENT_BROWSER_SECURITY_DIP_DOCUMENT_ISOLATION_POLICY_REPORTER_H_
#include <initializer_list>
#include <optional>
#include <string>
#include <string_view>
#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "net/base/network_anonymization_key.h"
#include "services/network/public/mojom/document_isolation_policy.mojom.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "third_party/blink/public/mojom/frame/reporting_observer.mojom.h"
#include "url/gurl.h"
namespace content {
class StoragePartition;
class CONTENT_EXPORT DocumentIsolationPolicyReporter final
: public network::mojom::DocumentIsolationPolicyReporter {
public:
DocumentIsolationPolicyReporter(
base::WeakPtr<StoragePartition> storage_partition,
const GURL& context_url,
const std::optional<std::string>& endpoint,
const std::optional<std::string>& report_only_endpoint,
const base::UnguessableToken& reporting_source,
const net::NetworkAnonymizationKey& network_anonymization_key);
~DocumentIsolationPolicyReporter() override;
DocumentIsolationPolicyReporter(const DocumentIsolationPolicyReporter&) =
delete;
DocumentIsolationPolicyReporter& operator=(
const DocumentIsolationPolicyReporter&) = delete;
void QueueCorpViolationReport(const GURL& blocked_url,
network::mojom::RequestDestination destination,
bool report_only) override;
void Clone(
mojo::PendingReceiver<network::mojom::DocumentIsolationPolicyReporter>
receiver) override;
void BindObserver(
mojo::PendingRemote<blink::mojom::ReportingObserver> observer);
base::WeakPtr<DocumentIsolationPolicyReporter> GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
private:
void QueueAndNotify(
std::initializer_list<std::pair<std::string_view, std::string_view>> body,
bool report_only);
base::WeakPtr<StoragePartition> storage_partition_;
const GURL context_url_;
const std::optional<std::string> endpoint_;
const std::optional<std::string> report_only_endpoint_;
base::UnguessableToken reporting_source_;
const net::NetworkAnonymizationKey network_anonymization_key_;
mojo::ReceiverSet<network::mojom::DocumentIsolationPolicyReporter>
receiver_set_;
mojo::Remote<blink::mojom::ReportingObserver> observer_;
base::WeakPtrFactory<DocumentIsolationPolicyReporter> weak_ptr_factory_{this};
};
}
#endif