blob: ff43930a51d34c272dc328bc4bacf801418eaed2 [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_MAC_MAC_SYSTEM_PROXY_RESOLUTION_SERVICE_H_
#define NET_PROXY_RESOLUTION_MAC_MAC_SYSTEM_PROXY_RESOLUTION_SERVICE_H_
#include <memory>
#include <string>
#include "net/base/net_export.h"
#include "net/proxy_resolution/mac/mac_proxy_resolution_status.h"
#include "net/proxy_resolution/system_proxy_resolution_service.h"
namespace net {
class MacSystemProxyResolutionRequest;
class MacSystemProxyResolver;
// This class decides which proxy server(s) to use for a particular URL request.
// It does NOT support passing in fetched proxy configurations. Instead, it
// relies entirely on macOS SystemConfiguration/CFNetwork APIs to determine the
// proxy that should be used for each network request.
class NET_EXPORT MacSystemProxyResolutionService
: public SystemProxyResolutionService {
public:
// Creates a MacSystemProxyResolutionService. Returns nullptr if
// `mac_system_proxy_resolver` is null, signalling that system proxy
// resolution is unavailable. All production callers are expected to
// supply a valid resolver; the nullptr-in/nullptr-out contract exists
// so that the shared typed test CreateWithNullResolver (and any other
// caller that may not have a resolver on a given platform) can detect
// unsupported configurations rather than crashing.
//
// This mirrors WindowsSystemProxyResolutionService::Create().
static std::unique_ptr<MacSystemProxyResolutionService> Create(
std::unique_ptr<MacSystemProxyResolver> mac_system_proxy_resolver);
MacSystemProxyResolutionService(const MacSystemProxyResolutionService&) =
delete;
MacSystemProxyResolutionService& operator=(
const MacSystemProxyResolutionService&) = delete;
~MacSystemProxyResolutionService() override;
// ProxyResolutionService implementation
int ResolveProxy(const GURL& url,
const std::string& method,
const NetworkAnonymizationKey& network_anonymization_key,
handles::NetworkHandle target_network,
ProxyInfo* results,
CompletionOnceCallback callback,
std::unique_ptr<ProxyResolutionRequest>* request,
const NetLogWithSource& net_log,
RequestPriority priority) override;
private:
friend class MacSystemProxyResolutionRequest;
explicit MacSystemProxyResolutionService(
std::unique_ptr<MacSystemProxyResolver> mac_system_proxy_resolver);
// SystemProxyResolutionService:
base::DictValue GetProxySettingsForNetLog() override;
// Called when proxy resolution has completed (either synchronously or
// asynchronously). Handles logging the result, and cleaning out
// bad entries from the results list.
int DidFinishResolvingProxy(
const GURL& url,
const std::string& method,
const NetworkAnonymizationKey& network_anonymization_key,
ProxyInfo* result,
MacProxyResolutionStatus mac_status,
int os_error,
const NetLogWithSource& net_log);
// Used to launch proxy resolution requests. Individual
// MacSystemProxyResolutionRequest instances use this to initiate proxy
// resolution.
std::unique_ptr<MacSystemProxyResolver> mac_system_proxy_resolver_;
};
} // namespace net
#endif // NET_PROXY_RESOLUTION_MAC_MAC_SYSTEM_PROXY_RESOLUTION_SERVICE_H_