1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_PROTOCOL_H_ 6 #define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_PROTOCOL_H_ 7 8 #include "base/macros.h" 9 #include "base/memory/ref_counted.h" 10 11 namespace base { 12 class TimeDelta; 13 } 14 15 namespace net { 16 class HttpResponseHeaders; 17 class ProxyServer; 18 class URLRequest; 19 } 20 21 class GURL; 22 23 namespace data_reduction_proxy { 24 25 class DataReductionProxyParams; 26 27 // Decides whether to mark the data reduction proxy as temporarily bad and 28 // put it on the proxy retry list. Returns true if the request should be 29 // retried. Sets |override_response_headers| to redirect if so. 30 bool MaybeBypassProxyAndPrepareToRetry( 31 const DataReductionProxyParams* params, 32 net::URLRequest* request, 33 const net::HttpResponseHeaders* original_response_headers, 34 scoped_refptr<net::HttpResponseHeaders>* override_response_headers); 35 36 // Returns true if the request method is idempotent. Only idempotent requests 37 // are retried on a bypass. Visible as part of the public API for testing. 38 bool IsRequestIdempotent(const net::URLRequest* request); 39 40 // Sets the override headers to contain a status line that indicates a 41 // redirect (a 302), a "Location:" header that points to the request url, 42 // and sets load flags to bypass proxies. Visible as part of the public API for 43 // testing. 44 void OverrideResponseAsRedirect( 45 net::URLRequest* request, 46 const net::HttpResponseHeaders* original_response_headers, 47 scoped_refptr<net::HttpResponseHeaders>* override_response_headers); 48 49 // Adds non-empty entries in |data_reduction_proxies| to the retry map 50 // maintained by the proxy service of the request. Adds 51 // |data_reduction_proxies.second| to the retry list only if |bypass_all| is 52 // true. Visible as part of the public API for testing. 53 void MarkProxiesAsBadUntil(net::URLRequest* request, 54 base::TimeDelta& bypass_duration, 55 bool bypass_all, 56 const std::pair<GURL, GURL>& data_reduction_proxies); 57 58 } // namespace data_reduction_proxy 59 #endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_PROTOCOL_H_ 60