// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_NETWORK_PROXY_AUTO_CONFIG_LIBRARY_H_ #define SERVICES_NETWORK_PROXY_AUTO_CONFIG_LIBRARY_H_ #include <list> #include <set> #include "base/component_export.h" #include "base/containers/queue.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote_set.h" #include "net/base/completion_once_callback.h" #include "net/base/ip_address.h" #include "net/dns/host_resolver_proc.h" #include "net/dns/host_resolver_system_task.h" #include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" namespace net { class ClientSocketFactory; class AddressList; } // namespace net namespace network { // myIpAddress() is a broken API available to PAC scripts. Do not use these // outside of PAC as they are broken APIs. // It has the problematic definition of: // "Returns the IP address of the host machine." // // This has ambiguity on what should happen for multi-homed hosts which may have // multiple IP addresses to choose from. To be unambiguous we would need to // know which hosts is going to be connected to, in order to use the outgoing // IP for that request. // // However at this point that is not known, as the proxy still hasn't been // decided. // // The strategy used here is to prioritize the IP address that would be used // for connecting to the public internet by testing which interface is used for // connecting to 8.8.8.8 and 2001:4860:4860::8888 (public IPs). // // If that fails, we will try resolving the machine's hostname, and also probing // for routes in the private IP space. // // Link-local IP addresses are not generally returned, however may be if no // other IP was found by the probes. // // This class supports being deleted at any time. class COMPONENT_EXPORT(NETWORK_SERVICE) MyIpAddressImpl { … }; } // namespace network #endif // SERVICES_NETWORK_PROXY_AUTO_CONFIG_LIBRARY_H_