blob: c01b18ae559fd1552fc4e00aef2dd3fbdf8db09c [file] [log] [blame] [edit]
// Copyright 2017 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBBRILLO_BRILLO_HTTP_HTTP_PROXY_H_
#define LIBBRILLO_BRILLO_HTTP_HTTP_PROXY_H_
#include <string>
#include <vector>
#include <base/functional/callback_forward.h>
#include <base/memory/ref_counted.h>
#include <brillo/brillo_export.h>
namespace dbus {
class Bus;
} // namespace dbus
namespace brillo {
namespace http {
// Options to override the default behaviour of the proxy resolution service in
// Chrome regarding system-proxy. System-proxy is a local daemon which does
// proxy authentication to a remote HTTP proxy, on behalf of Chrome OS system
// services. The default behaviour is to return the address of system-proxy as
// the first entry in the PAC-style list of resolved proxy list only if the
// device policy SystemProxySettings is enabled.
enum BRILLO_EXPORT SystemProxyOverride {
// Default behaviour. System-proxy will be prepended to the list of returned
// proxies only if enabled by policy.
kDefault = 0,
// System-proxy will be prepended to the list of returned proxies only if
// enabled by policy or feature flag SystemProxyForSystemServices.
kOptIn = 1,
// System-proxy will not be added to the list of returned proxies, even if
// enabled by policy.
kOptOut = 2,
};
using GetChromeProxyServersCallback = base::OnceCallback<void(
bool success, const std::vector<std::string>& proxies)>;
// Gets the list of proxy servers that are configured in Chrome by sending a
// D-Bus message to Chrome. The list will always be at least one in size, with
// the last element always being the direct option. The target URL should be
// passed in for the |url| parameter. The proxy servers are set in
// |proxies_out|. The format of the strings in |proxies_out| is
// scheme://[[user:pass@]host:port] with the last element being "direct://".
// Valid schemes it will return are socks4, socks5, http, https or direct.
// Even if this function returns false, it will still set |proxies_out| to be
// just the direct proxy. This function will only return false if there is an
// error in the D-Bus communication itself.
BRILLO_EXPORT bool GetChromeProxyServers(scoped_refptr<::dbus::Bus> bus,
const std::string& url,
std::vector<std::string>* proxies_out);
// Async version of GetChromeProxyServers.
BRILLO_EXPORT void GetChromeProxyServersAsync(
scoped_refptr<::dbus::Bus> bus,
const std::string& url,
GetChromeProxyServersCallback callback);
// Async version of `GetChromeProxyServers` which allows the caller to
// explicitly opt-in and -out of using the system-proxy daemon, which
// authenticates the caller to a remote HTTP proxy.
BRILLO_EXPORT void GetChromeProxyServersWithOverrideAsync(
scoped_refptr<::dbus::Bus> bus,
const std::string& url,
const SystemProxyOverride system_proxy_override,
GetChromeProxyServersCallback callback);
} // namespace http
} // namespace brillo
#endif // LIBBRILLO_BRILLO_HTTP_HTTP_PROXY_H_