blob: 09c5ec978be1f26528ef24ee205a43d7cde43a3f [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_WEBID_DELEGATION_DNS_REQUEST_H_
#define CONTENT_BROWSER_WEBID_DELEGATION_DNS_REQUEST_H_
#include "base/functional/callback.h"
#include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/public/cpp/network_context_getter.h"
#include "services/network/public/mojom/host_resolver.mojom.h"
#include "url/origin.h"
namespace content::webid {
// Performs a DNS TXT query for a given origin.
class CONTENT_EXPORT DnsRequest : public network::mojom::ResolveHostClient {
public:
using DnsRequestCallback = base::OnceCallback<void(
const std::optional<std::vector<std::string>>& text_records)>;
explicit DnsRequest(network::NetworkContextGetter network_context_getter);
~DnsRequest() override;
// Sends a DNS TXT request for the given hostname.
virtual void SendRequest(const std::string& hostname,
DnsRequestCallback callback);
private:
// network::mojom::ResolveHostClient:
void OnComplete(int result,
const net::ResolveErrorInfo& resolve_error_info,
const net::AddressList& resolved_addresses,
const std::vector<net::HostResolverEndpointResult>&
alternative_endpoints) override;
void OnTextResults(const std::vector<std::string>& text_results) override;
void OnHostnameResults(const std::vector<net::HostPortPair>& hosts) override;
network::NetworkContextGetter network_context_getter_;
mojo::Remote<network::mojom::HostResolver> host_resolver_;
mojo::Receiver<network::mojom::ResolveHostClient> receiver_{this};
DnsRequestCallback callback_;
};
} // namespace content::webid
#endif // CONTENT_BROWSER_WEBID_DELEGATION_DNS_REQUEST_H_