• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_URL_REQUEST_URL_REQUEST_TEST_UTIL_H_
6 #define NET_URL_REQUEST_URL_REQUEST_TEST_UTIL_H_
7 #pragma once
8 
9 #include <stdlib.h>
10 
11 #include <sstream>
12 #include <string>
13 
14 #include "base/path_service.h"
15 #include "base/process_util.h"
16 #include "base/string_util.h"
17 #include "base/string16.h"
18 #include "base/time.h"
19 #include "base/utf_string_conversions.h"
20 #include "net/base/cert_verifier.h"
21 #include "net/base/cookie_monster.h"
22 #include "net/base/cookie_policy.h"
23 #include "net/base/host_resolver.h"
24 #include "net/base/io_buffer.h"
25 #include "net/base/net_errors.h"
26 #include "net/base/network_delegate.h"
27 #include "net/base/ssl_config_service_defaults.h"
28 #include "net/disk_cache/disk_cache.h"
29 #include "net/ftp/ftp_network_layer.h"
30 #include "net/http/http_auth_handler_factory.h"
31 #include "net/http/http_cache.h"
32 #include "net/http/http_network_layer.h"
33 #include "net/test/test_server.h"
34 #include "net/url_request/url_request.h"
35 #include "net/url_request/url_request_context.h"
36 #include "net/url_request/url_request_context_storage.h"
37 #include "net/proxy/proxy_service.h"
38 #include "testing/gtest/include/gtest/gtest.h"
39 #include "googleurl/src/url_util.h"
40 
41 using base::TimeDelta;
42 
43 //-----------------------------------------------------------------------------
44 
45 class TestCookiePolicy : public net::CookiePolicy {
46  public:
47   enum Options {
48     NO_GET_COOKIES = 1 << 0,
49     NO_SET_COOKIE  = 1 << 1,
50     FORCE_SESSION  = 1 << 2,
51   };
52 
53   explicit TestCookiePolicy(int options_bit_mask);
54   virtual ~TestCookiePolicy();
55 
56   // net::CookiePolicy:
57   virtual int CanGetCookies(const GURL& url, const GURL& first_party) const;
58   virtual int CanSetCookie(const GURL& url,
59                            const GURL& first_party,
60                            const std::string& cookie_line) const;
61 
62  private:
63   int options_;
64 };
65 
66 //-----------------------------------------------------------------------------
67 
68 class TestURLRequestContext : public net::URLRequestContext {
69  public:
70   TestURLRequestContext();
71   explicit TestURLRequestContext(const std::string& proxy);
72   TestURLRequestContext(const std::string& proxy,
73                         net::HostResolver* host_resolver);
74 
75  protected:
76   virtual ~TestURLRequestContext();
77 
78  private:
79   void Init();
80 
81   net::URLRequestContextStorage context_storage_;
82 };
83 
84 //-----------------------------------------------------------------------------
85 
86 class TestURLRequest : public net::URLRequest {
87  public:
88   TestURLRequest(const GURL& url, Delegate* delegate);
89   virtual ~TestURLRequest();
90 };
91 
92 //-----------------------------------------------------------------------------
93 
94 class TestDelegate : public net::URLRequest::Delegate {
95  public:
96   TestDelegate();
97   virtual ~TestDelegate();
98 
set_cancel_in_received_redirect(bool val)99   void set_cancel_in_received_redirect(bool val) { cancel_in_rr_ = val; }
set_cancel_in_response_started(bool val)100   void set_cancel_in_response_started(bool val) { cancel_in_rs_ = val; }
set_cancel_in_received_data(bool val)101   void set_cancel_in_received_data(bool val) { cancel_in_rd_ = val; }
set_cancel_in_received_data_pending(bool val)102   void set_cancel_in_received_data_pending(bool val) {
103     cancel_in_rd_pending_ = val;
104   }
set_cancel_in_get_cookies_blocked(bool val)105   void set_cancel_in_get_cookies_blocked(bool val) {
106     cancel_in_getcookiesblocked_ = val;
107   }
set_cancel_in_set_cookie_blocked(bool val)108   void set_cancel_in_set_cookie_blocked(bool val) {
109     cancel_in_setcookieblocked_ = val;
110   }
set_quit_on_complete(bool val)111   void set_quit_on_complete(bool val) { quit_on_complete_ = val; }
set_quit_on_redirect(bool val)112   void set_quit_on_redirect(bool val) { quit_on_redirect_ = val; }
set_allow_certificate_errors(bool val)113   void set_allow_certificate_errors(bool val) {
114     allow_certificate_errors_ = val;
115   }
set_username(const string16 & u)116   void set_username(const string16& u) { username_ = u; }
set_password(const string16 & p)117   void set_password(const string16& p) { password_ = p; }
118 
119   // query state
data_received()120   const std::string& data_received() const { return data_received_; }
bytes_received()121   int bytes_received() const { return static_cast<int>(data_received_.size()); }
response_started_count()122   int response_started_count() const { return response_started_count_; }
received_redirect_count()123   int received_redirect_count() const { return received_redirect_count_; }
blocked_get_cookies_count()124   int blocked_get_cookies_count() const { return blocked_get_cookies_count_; }
blocked_set_cookie_count()125   int blocked_set_cookie_count() const { return blocked_set_cookie_count_; }
set_cookie_count()126   int set_cookie_count() const { return set_cookie_count_; }
received_data_before_response()127   bool received_data_before_response() const {
128     return received_data_before_response_;
129   }
request_failed()130   bool request_failed() const { return request_failed_; }
have_certificate_errors()131   bool have_certificate_errors() const { return have_certificate_errors_; }
132 
133   // net::URLRequest::Delegate:
134   virtual void OnReceivedRedirect(net::URLRequest* request, const GURL& new_url,
135                                   bool* defer_redirect);
136   virtual void OnAuthRequired(net::URLRequest* request,
137                               net::AuthChallengeInfo* auth_info);
138   virtual void OnSSLCertificateError(net::URLRequest* request,
139                                      int cert_error,
140                                      net::X509Certificate* cert);
141   virtual void OnGetCookies(net::URLRequest* request, bool blocked_by_policy);
142   virtual void OnSetCookie(net::URLRequest* request,
143                            const std::string& cookie_line,
144                            const net::CookieOptions& options,
145                            bool blocked_by_policy);
146   virtual void OnResponseStarted(net::URLRequest* request);
147   virtual void OnReadCompleted(net::URLRequest* request, int bytes_read);
148 
149  private:
150   static const int kBufferSize = 4096;
151 
152   virtual void OnResponseCompleted(net::URLRequest* request);
153 
154   // options for controlling behavior
155   bool cancel_in_rr_;
156   bool cancel_in_rs_;
157   bool cancel_in_rd_;
158   bool cancel_in_rd_pending_;
159   bool cancel_in_getcookiesblocked_;
160   bool cancel_in_setcookieblocked_;
161   bool quit_on_complete_;
162   bool quit_on_redirect_;
163   bool allow_certificate_errors_;
164 
165   string16 username_;
166   string16 password_;
167 
168   // tracks status of callbacks
169   int response_started_count_;
170   int received_bytes_count_;
171   int received_redirect_count_;
172   int blocked_get_cookies_count_;
173   int blocked_set_cookie_count_;
174   int set_cookie_count_;
175   bool received_data_before_response_;
176   bool request_failed_;
177   bool have_certificate_errors_;
178   std::string data_received_;
179 
180   // our read buffer
181   scoped_refptr<net::IOBuffer> buf_;
182 };
183 
184 //-----------------------------------------------------------------------------
185 
186 class TestNetworkDelegate : public net::NetworkDelegate {
187  public:
188   TestNetworkDelegate();
189   virtual ~TestNetworkDelegate();
190 
last_os_error()191   int last_os_error() const { return last_os_error_; }
error_count()192   int error_count() const { return error_count_; }
created_requests()193   int created_requests() const { return created_requests_; }
destroyed_requests()194   int destroyed_requests() const { return destroyed_requests_; }
195 
196  protected:
197   // net::NetworkDelegate:
198   virtual int OnBeforeURLRequest(net::URLRequest* request,
199                                  net::CompletionCallback* callback,
200                                  GURL* new_url);
201   virtual int OnBeforeSendHeaders(uint64 request_id,
202                                   net::CompletionCallback* callback,
203                                   net::HttpRequestHeaders* headers);
204   virtual void OnResponseStarted(net::URLRequest* request);
205   virtual void OnReadCompleted(net::URLRequest* request, int bytes_read);
206   virtual void OnURLRequestDestroyed(net::URLRequest* request);
207   virtual net::URLRequestJob* OnMaybeCreateURLRequestJob(
208       net::URLRequest* request);
209 
210   int last_os_error_;
211   int error_count_;
212   int created_requests_;
213   int destroyed_requests_;
214 };
215 
216 #endif  // NET_URL_REQUEST_URL_REQUEST_TEST_UTIL_H_
217