172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_PROXY_MOCK_PROXY_RESOLVER_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_PROXY_MOCK_PROXY_RESOLVER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <vector> 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/gurl.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/net_errors.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/proxy/proxy_resolver.h" 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass MessageLoop; 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Asynchronous mock proxy resolver. All requests complete asynchronously, 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// user must call Request::CompleteNow() on a pending request to signal it. 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MockAsyncProxyResolverBase : public ProxyResolver { 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott class Request : public base::RefCounted<Request> { 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Request(MockAsyncProxyResolverBase* resolver, 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const GURL& url, 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ProxyInfo* results, 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen CompletionCallback* callback); 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const GURL& url() const { return url_; } 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ProxyInfo* results() const { return results_; } 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CompletionCallback* callback() const { return callback_; } 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void CompleteNow(int rv); 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class base::RefCounted<Request>; 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~Request(); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MockAsyncProxyResolverBase* resolver_; 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const GURL url_; 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ProxyInfo* results_; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CompletionCallback* callback_; 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MessageLoop* origin_loop_; 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott class SetPacScriptRequest { 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetPacScriptRequest( 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockAsyncProxyResolverBase* resolver, 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const scoped_refptr<ProxyResolverScriptData>& script_data, 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen CompletionCallback* callback); 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ~SetPacScriptRequest(); 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ProxyResolverScriptData* script_data() const { return script_data_; } 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void CompleteNow(int rv); 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MockAsyncProxyResolverBase* resolver_; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const scoped_refptr<ProxyResolverScriptData> script_data_; 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CompletionCallback* callback_; 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MessageLoop* origin_loop_; 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }; 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott typedef std::vector<scoped_refptr<Request> > RequestsList; 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~MockAsyncProxyResolverBase(); 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ProxyResolver implementation: 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int GetProxyForURL(const GURL& url, 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ProxyInfo* results, 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CompletionCallback* callback, 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RequestHandle* request_handle, 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const BoundNetLog& /*net_log*/); 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void CancelRequest(RequestHandle request_handle); 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual int SetPacScript( 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const scoped_refptr<ProxyResolverScriptData>& script_data, 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen CompletionCallback* callback); 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void CancelSetPacScript(); 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const RequestsList& pending_requests() const { 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return pending_requests_; 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const RequestsList& cancelled_requests() const { 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return cancelled_requests_; 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetPacScriptRequest* pending_set_pac_script_request() const; 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RemovePendingRequest(Request* request); 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RemovePendingSetPacScriptRequest(SetPacScriptRequest* request); 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected: 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen explicit MockAsyncProxyResolverBase(bool expects_pac_bytes); 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RequestsList pending_requests_; 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RequestsList cancelled_requests_; 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott scoped_ptr<SetPacScriptRequest> pending_set_pac_script_request_; 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MockAsyncProxyResolver : public MockAsyncProxyResolverBase { 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MockAsyncProxyResolver() 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {} 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase { 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MockAsyncProxyResolverExpectsBytes() 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {} 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_PROXY_MOCK_PROXY_RESOLVER_H_ 125