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_PROXY_MOCK_PROXY_RESOLVER_H_ 6 #define NET_PROXY_MOCK_PROXY_RESOLVER_H_ 7 #pragma once 8 9 #include <vector> 10 11 #include "base/memory/scoped_ptr.h" 12 #include "googleurl/src/gurl.h" 13 #include "net/base/net_errors.h" 14 #include "net/proxy/proxy_resolver.h" 15 16 class MessageLoop; 17 18 namespace net { 19 20 // Asynchronous mock proxy resolver. All requests complete asynchronously, 21 // user must call Request::CompleteNow() on a pending request to signal it. 22 class MockAsyncProxyResolverBase : public ProxyResolver { 23 public: 24 class Request : public base::RefCounted<Request> { 25 public: 26 Request(MockAsyncProxyResolverBase* resolver, 27 const GURL& url, 28 ProxyInfo* results, 29 CompletionCallback* callback); 30 31 const GURL& url() const { return url_; } 32 ProxyInfo* results() const { return results_; } 33 CompletionCallback* callback() const { return callback_; } 34 35 void CompleteNow(int rv); 36 37 private: 38 friend class base::RefCounted<Request>; 39 40 virtual ~Request(); 41 42 MockAsyncProxyResolverBase* resolver_; 43 const GURL url_; 44 ProxyInfo* results_; 45 CompletionCallback* callback_; 46 MessageLoop* origin_loop_; 47 }; 48 49 class SetPacScriptRequest { 50 public: 51 SetPacScriptRequest( 52 MockAsyncProxyResolverBase* resolver, 53 const scoped_refptr<ProxyResolverScriptData>& script_data, 54 CompletionCallback* callback); 55 ~SetPacScriptRequest(); 56 57 const ProxyResolverScriptData* script_data() const { return script_data_; } 58 59 void CompleteNow(int rv); 60 61 private: 62 MockAsyncProxyResolverBase* resolver_; 63 const scoped_refptr<ProxyResolverScriptData> script_data_; 64 CompletionCallback* callback_; 65 MessageLoop* origin_loop_; 66 }; 67 68 typedef std::vector<scoped_refptr<Request> > RequestsList; 69 70 virtual ~MockAsyncProxyResolverBase(); 71 72 // ProxyResolver implementation: 73 virtual int GetProxyForURL(const GURL& url, 74 ProxyInfo* results, 75 CompletionCallback* callback, 76 RequestHandle* request_handle, 77 const BoundNetLog& /*net_log*/); 78 79 virtual void CancelRequest(RequestHandle request_handle); 80 81 virtual int SetPacScript( 82 const scoped_refptr<ProxyResolverScriptData>& script_data, 83 CompletionCallback* callback); 84 85 virtual void CancelSetPacScript(); 86 87 const RequestsList& pending_requests() const { 88 return pending_requests_; 89 } 90 91 const RequestsList& cancelled_requests() const { 92 return cancelled_requests_; 93 } 94 95 SetPacScriptRequest* pending_set_pac_script_request() const; 96 97 void RemovePendingRequest(Request* request); 98 99 void RemovePendingSetPacScriptRequest(SetPacScriptRequest* request); 100 101 protected: 102 explicit MockAsyncProxyResolverBase(bool expects_pac_bytes); 103 104 private: 105 RequestsList pending_requests_; 106 RequestsList cancelled_requests_; 107 scoped_ptr<SetPacScriptRequest> pending_set_pac_script_request_; 108 }; 109 110 class MockAsyncProxyResolver : public MockAsyncProxyResolverBase { 111 public: 112 MockAsyncProxyResolver() 113 : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {} 114 }; 115 116 class MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase { 117 public: 118 MockAsyncProxyResolverExpectsBytes() 119 : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {} 120 }; 121 122 } // namespace net 123 124 #endif // NET_PROXY_MOCK_PROXY_RESOLVER_H_ 125