#ifndef CONTENT_PUBLIC_BROWSER_DIRECT_SOCKETS_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_DIRECT_SOCKETS_DELEGATE_H_
#include <cstdint>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ref.h"
#include "content/common/content_export.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
class BrowserContext;
class RenderFrameHost;
class CONTENT_EXPORT DirectSocketsDelegate {
public:
enum class ProtocolType { kTcp, kConnectedUdp, kBoundUdp, kTcpServer };
struct RequestDetails {
std::string address;
uint16_t port;
ProtocolType protocol;
};
virtual ~DirectSocketsDelegate() = default;
virtual bool ValidateRequest(RenderFrameHost& rfh, const RequestDetails&) = 0;
virtual bool ValidateRequestForSharedWorker(BrowserContext* browser_context,
const GURL& shared_worker_url,
const RequestDetails&) = 0;
virtual bool ValidateRequestForServiceWorker(BrowserContext* browser_context,
const url::Origin& origin,
const RequestDetails&) = 0;
virtual void RequestPrivateNetworkAccess(
RenderFrameHost& rfh,
base::OnceCallback<void(bool)>) = 0;
virtual bool IsPrivateNetworkAccessAllowedForSharedWorker(
BrowserContext* browser_context,
const GURL& shared_worker_url) = 0;
virtual bool IsPrivateNetworkAccessAllowedForServiceWorker(
BrowserContext* browser_context,
const url::Origin& origin) = 0;
};
}
#endif