// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_HTTP_PROXY_FALLBACK_H_ #define NET_HTTP_PROXY_FALLBACK_H_ // ------------------------------------------------------------ // Proxy Fallback Overview // ------------------------------------------------------------ // // Proxy fallback is a feature that is split between the proxy resolution layer // and the HTTP layers. // // The proxy resolution layer is responsible for: // * Obtaining a list of proxies to use // (ProxyResolutionService::ResolveProxy). Proxy lists are (usually) the // result of having evaluated a PAC script, such as: // return "PROXY foobar1:8080; HTTPS foobar2:8080; DIRECT"; // // * Re-ordering the proxy list such that proxies that have recently failed // are given lower priority (ProxyInfo::DeprioritizeBadProxies) // // * Maintaining the expiring cache of proxies that have recently failed. // // // The HTTP layer is responsible for: // * Attempting to issue the URLRequest through each of the // proxies, in the order specified by the list. // // * Deciding whether this attempt was successful, whether it was a failure // but should keep trying other proxies, or whether it was a failure and // should stop trying other proxies. // // * Upon successful completion of an attempt though a proxy, calling // ProxyResolutionService::ReportSuccess to inform it of all the failed // attempts that were made. (A proxy is only considered to be "bad" // if the request was able to be completed through some other proxy). // // // Exactly how to interpret the proxy lists returned by PAC is not specified by // a standard. The justifications for what errors are considered for fallback // are given beside the implementation. #include "net/base/net_export.h" namespace net { // Returns true if the request should be re-tried using the next proxy in the // fallback list. // // |*error| is the network error that the request failed with. When returning // false it may be replaced with a different error. NET_EXPORT bool CanFalloverToNextProxy(int* error); } // namespace net #endif // NET_HTTP_PROXY_FALLBACK_H_