1// Copyright (c) 2012 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 ANDROID_WEBVIEW_BROWSER_NET_AW_NETWORK_DELEGATE_H_
6#define ANDROID_WEBVIEW_BROWSER_NET_AW_NETWORK_DELEGATE_H_
7
8#include "base/basictypes.h"
9#include "net/base/network_delegate.h"
10
11namespace data_reduction_proxy {
12class DataReductionProxyAuthRequestHandler;
13class DataReductionProxyParams;
14}
15
16namespace net {
17class ProxyInfo;
18class URLRequest;
19}
20
21namespace android_webview {
22
23// WebView's implementation of the NetworkDelegate.
24class AwNetworkDelegate : public net::NetworkDelegate {
25 public:
26  AwNetworkDelegate();
27  virtual ~AwNetworkDelegate();
28
29  // Sets the |DataReductionProxySettings| object to use. If not set, the
30  // NetworkDelegate will not perform any operations related to the data
31  // reduction proxy.
32  void set_data_reduction_proxy_params(
33      data_reduction_proxy::DataReductionProxyParams* params) {
34    data_reduction_proxy_params_ = params;
35  }
36
37  void set_data_reduction_proxy_auth_request_handler(
38      data_reduction_proxy::DataReductionProxyAuthRequestHandler* handler) {
39    data_reduction_proxy_auth_request_handler_ = handler;
40  }
41
42 private:
43  // NetworkDelegate implementation.
44  virtual int OnBeforeURLRequest(net::URLRequest* request,
45                                 const net::CompletionCallback& callback,
46                                 GURL* new_url) OVERRIDE;
47  virtual int OnBeforeSendHeaders(net::URLRequest* request,
48                                  const net::CompletionCallback& callback,
49                                  net::HttpRequestHeaders* headers) OVERRIDE;
50  virtual void OnBeforeSendProxyHeaders(
51      net::URLRequest* request,
52      const net::ProxyInfo& proxy_info,
53      net::HttpRequestHeaders* headers) OVERRIDE;
54  virtual void OnSendHeaders(net::URLRequest* request,
55                             const net::HttpRequestHeaders& headers) OVERRIDE;
56  virtual int OnHeadersReceived(
57      net::URLRequest* request,
58      const net::CompletionCallback& callback,
59      const net::HttpResponseHeaders* original_response_headers,
60      scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
61      GURL* allowed_unsafe_redirect_url) OVERRIDE;
62  virtual void OnBeforeRedirect(net::URLRequest* request,
63                                const GURL& new_location) OVERRIDE;
64  virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
65  virtual void OnRawBytesRead(const net::URLRequest& request,
66                              int bytes_read) OVERRIDE;
67  virtual void OnCompleted(net::URLRequest* request, bool started) OVERRIDE;
68  virtual void OnURLRequestDestroyed(net::URLRequest* request) OVERRIDE;
69  virtual void OnPACScriptError(int line_number,
70                                const base::string16& error) OVERRIDE;
71  virtual net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(
72      net::URLRequest* request,
73      const net::AuthChallengeInfo& auth_info,
74      const AuthCallback& callback,
75      net::AuthCredentials* credentials) OVERRIDE;
76  virtual bool OnCanGetCookies(const net::URLRequest& request,
77                               const net::CookieList& cookie_list) OVERRIDE;
78  virtual bool OnCanSetCookie(const net::URLRequest& request,
79                              const std::string& cookie_line,
80                              net::CookieOptions* options) OVERRIDE;
81  virtual bool OnCanAccessFile(const net::URLRequest& request,
82                               const base::FilePath& path) const OVERRIDE;
83  virtual bool OnCanThrottleRequest(
84      const net::URLRequest& request) const OVERRIDE;
85  virtual int OnBeforeSocketStreamConnect(
86      net::SocketStream* stream,
87      const net::CompletionCallback& callback) OVERRIDE;
88
89  // Data reduction proxy parameters object. Must outlive this.
90  data_reduction_proxy::DataReductionProxyParams* data_reduction_proxy_params_;
91  data_reduction_proxy::DataReductionProxyAuthRequestHandler*
92  data_reduction_proxy_auth_request_handler_;
93
94  DISALLOW_COPY_AND_ASSIGN(AwNetworkDelegate);
95};
96
97}  // namespace android_webview
98
99#endif  // ANDROID_WEBVIEW_BROWSER_NET_AW_NETWORK_DELEGATE_H_
100