blob: 57404a1c19f2f23dca210a2d0689a37d32e6e90d [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NET_PROXY_RESOLUTION_LINUX_LINUX_SYSTEM_PROXY_RESOLVER_H_
#define NET_PROXY_RESOLUTION_LINUX_LINUX_SYSTEM_PROXY_RESOLVER_H_
#include <memory>
#include "base/functional/callback_forward.h"
#include "net/base/net_export.h"
#include "net/proxy_resolution/linux/linux_proxy_resolution_status.h"
class GURL;
namespace net {
class ProxyList;
// This is used to communicate with the browser process, which resolves proxies
// using the org.freedesktop.portal.ProxyResolver XDG desktop portal over
// D-Bus. D-Bus is not accessed from the network service so that it may be
// sandboxed. This interface is intended to be used via the
// LinuxSystemProxyResolutionRequest, which manages individual proxy
// resolutions.
class NET_EXPORT LinuxSystemProxyResolver {
public:
// A handle to a cross-process proxy resolution request. Deleting it will
// cancel the request.
class Request {
public:
virtual ~Request() = default;
};
// Receives the result of a proxy resolution. `proxy_list` is the list of
// proxies returned by the portal translated into Chromium-friendly terms.
// `status` describes the outcome of the request.
using ResultCallback =
base::OnceCallback<void(const ProxyList& proxy_list,
LinuxProxyResolutionStatus status)>;
LinuxSystemProxyResolver() = default;
LinuxSystemProxyResolver(const LinuxSystemProxyResolver&) = delete;
LinuxSystemProxyResolver& operator=(const LinuxSystemProxyResolver&) = delete;
virtual ~LinuxSystemProxyResolver() = default;
// Asynchronously finds a proxy for `url` and runs `callback` with the
// result. Deleting the returned Request cancels the in-flight resolution;
// `callback` must not be run after the returned Request is destroyed.
//
// The returned Request must not outlive `this` (the resolver).
// LinuxSystemProxyResolutionService guarantees this by aborting pending
// requests in its destructor before the resolver is destroyed.
virtual std::unique_ptr<Request> GetProxyForUrl(const GURL& url,
ResultCallback callback) = 0;
};
} // namespace net
#endif // NET_PROXY_RESOLUTION_LINUX_LINUX_SYSTEM_PROXY_RESOLVER_H_