• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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