Home | History | Annotate | Download | only in base
      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 NET_BASE_PROXY_DELEGATE_H_
      6 #define NET_BASE_PROXY_DELEGATE_H_
      7 
      8 #include "base/macros.h"
      9 #include "net/base/net_export.h"
     10 
     11 class GURL;
     12 
     13 namespace net {
     14 
     15 class HttpRequestHeaders;
     16 class HttpResponseHeaders;
     17 class HostPortPair;
     18 class ProxyInfo;
     19 class ProxyServer;
     20 class ProxyService;
     21 class URLRequest;
     22 
     23 // Delegate for setting up a connection.
     24 class NET_EXPORT ProxyDelegate {
     25  public:
     26   ProxyDelegate() {
     27   }
     28 
     29   virtual ~ProxyDelegate() {
     30   }
     31 
     32   // Called as the proxy is being resolved for |url|. Allows the delegate to
     33   // override the proxy resolution decision made by ProxyService. The delegate
     34   // may override the decision by modifying the ProxyInfo |result|.
     35   virtual void OnResolveProxy(const GURL& url,
     36                               int load_flags,
     37                               const ProxyService& proxy_service,
     38                               ProxyInfo* result) = 0;
     39 
     40   // Called when use of |bad_proxy| fails due to |net_error|. |net_error| is
     41   // the network error encountered, if any, and OK if the fallback was
     42   // for a reason other than a network error (e.g. the proxy service was
     43   // explicitly directed to skip a proxy).
     44   virtual void OnFallback(const ProxyServer& bad_proxy,
     45                           int net_error) = 0;
     46 
     47   // Called after a proxy connection. Allows the delegate to read/write
     48   // |headers| before they get sent out. |headers| is valid only until
     49   // OnCompleted or OnURLRequestDestroyed is called for this request.
     50   virtual void OnBeforeSendHeaders(URLRequest* request,
     51                                    const ProxyInfo& proxy_info,
     52                                    HttpRequestHeaders* headers) = 0;
     53 
     54   // Called immediately before a proxy tunnel request is sent.
     55   // Provides the embedder an opportunity to add extra request headers.
     56   virtual void OnBeforeTunnelRequest(const HostPortPair& proxy_server,
     57                                      HttpRequestHeaders* extra_headers) = 0;
     58 
     59   // Called after the response headers for the tunnel request are received.
     60   virtual void OnTunnelHeadersReceived(
     61       const HostPortPair& origin,
     62       const HostPortPair& proxy_server,
     63       const HttpResponseHeaders& response_headers) = 0;
     64 
     65  private:
     66   DISALLOW_COPY_AND_ASSIGN(ProxyDelegate);
     67 };
     68 
     69 }
     70 
     71 #endif  // NET_BASE_PROXY_DELEGATE_H_
     72