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