| // 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 { |
| |
| class ProxyServer; |
| |
| // Returns true if a failed request issued through a proxy server should be |
| // re-tried using the next proxy in the fallback list. |
| // |
| // The proxy fallback logic is a compromise between compatibility and |
| // increasing odds of success, and may choose not to retry a request on the |
| // next proxy option, even though that could work. |
| // |
| // - |proxy| is the proxy server that failed the request. |
| // - |error| is the error for the request when it was sent through |proxy|. |
| // - |final_error| is an out parameter that is set with the "final" error to |
| // report to the caller. The error is only re-written in cases where |
| // CanFalloverToNextProxy() returns false. |
| NET_EXPORT bool CanFalloverToNextProxy(const ProxyServer& proxy, |
| int error, |
| int* final_error); |
| |
| } // namespace net |
| |
| #endif // NET_HTTP_PROXY_FALLBACK_H_ |