blob: bdc2ec6888d66909330681bbb2687dbaa64841a4 [file] [log] [blame]
[email protected]b6ce91b2011-02-10 21:30:501// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]550dd1ae2009-08-06 05:42:112// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]c6efbc62009-08-06 12:52:195#ifndef NET_PROXY_MOCK_PROXY_RESOLVER_H_
6#define NET_PROXY_MOCK_PROXY_RESOLVER_H_
[email protected]32b76ef2010-07-26 23:08:247#pragma once
[email protected]c6efbc62009-08-06 12:52:198
[email protected]550dd1ae2009-08-06 05:42:119#include <vector>
10
[email protected]8e1845e12010-09-15 19:22:2411#include "base/scoped_ptr.h"
[email protected]550dd1ae2009-08-06 05:42:1112#include "googleurl/src/gurl.h"
13#include "net/base/net_errors.h"
14#include "net/proxy/proxy_resolver.h"
15
[email protected]b6ce91b2011-02-10 21:30:5016class MessageLoop;
17
[email protected]550dd1ae2009-08-06 05:42:1118namespace net {
19
20// Asynchronous mock proxy resolver. All requests complete asynchronously,
21// user must call Request::CompleteNow() on a pending request to signal it.
22class 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,
[email protected]b6ce91b2011-02-10 21:30:5029 CompletionCallback* callback);
[email protected]550dd1ae2009-08-06 05:42:1130
31 const GURL& url() const { return url_; }
32 ProxyInfo* results() const { return results_; }
33 CompletionCallback* callback() const { return callback_; }
34
[email protected]b6ce91b2011-02-10 21:30:5035 void CompleteNow(int rv);
[email protected]550dd1ae2009-08-06 05:42:1136
37 private:
[email protected]5389bc72009-11-05 23:34:2438 friend class base::RefCounted<Request>;
39
[email protected]b6ce91b2011-02-10 21:30:5040 virtual ~Request();
[email protected]5389bc72009-11-05 23:34:2441
[email protected]550dd1ae2009-08-06 05:42:1142 MockAsyncProxyResolverBase* resolver_;
43 const GURL url_;
44 ProxyInfo* results_;
45 CompletionCallback* callback_;
46 MessageLoop* origin_loop_;
47 };
48
49 class SetPacScriptRequest {
50 public:
[email protected]24476402010-07-20 20:55:1751 SetPacScriptRequest(
52 MockAsyncProxyResolverBase* resolver,
53 const scoped_refptr<ProxyResolverScriptData>& script_data,
[email protected]b6ce91b2011-02-10 21:30:5054 CompletionCallback* callback);
55 ~SetPacScriptRequest();
[email protected]550dd1ae2009-08-06 05:42:1156
[email protected]24476402010-07-20 20:55:1757 const ProxyResolverScriptData* script_data() const { return script_data_; }
[email protected]550dd1ae2009-08-06 05:42:1158
[email protected]b6ce91b2011-02-10 21:30:5059 void CompleteNow(int rv);
[email protected]550dd1ae2009-08-06 05:42:1160
61 private:
62 MockAsyncProxyResolverBase* resolver_;
[email protected]24476402010-07-20 20:55:1763 const scoped_refptr<ProxyResolverScriptData> script_data_;
[email protected]550dd1ae2009-08-06 05:42:1164 CompletionCallback* callback_;
65 MessageLoop* origin_loop_;
66 };
67
68 typedef std::vector<scoped_refptr<Request> > RequestsList;
69
[email protected]b6ce91b2011-02-10 21:30:5070 virtual ~MockAsyncProxyResolverBase();
71
[email protected]550dd1ae2009-08-06 05:42:1172 // ProxyResolver implementation:
73 virtual int GetProxyForURL(const GURL& url,
74 ProxyInfo* results,
75 CompletionCallback* callback,
[email protected]52ae80c2009-09-10 21:27:0076 RequestHandle* request_handle,
[email protected]b6ce91b2011-02-10 21:30:5077 const BoundNetLog& /*net_log*/);
[email protected]550dd1ae2009-08-06 05:42:1178
[email protected]b6ce91b2011-02-10 21:30:5079 virtual void CancelRequest(RequestHandle request_handle);
[email protected]550dd1ae2009-08-06 05:42:1180
[email protected]24476402010-07-20 20:55:1781 virtual int SetPacScript(
82 const scoped_refptr<ProxyResolverScriptData>& script_data,
[email protected]b6ce91b2011-02-10 21:30:5083 CompletionCallback* callback);
[email protected]550dd1ae2009-08-06 05:42:1184
[email protected]b6ce91b2011-02-10 21:30:5085 virtual void CancelSetPacScript();
[email protected]a2e76352010-01-06 19:37:1386
[email protected]550dd1ae2009-08-06 05:42:1187 const RequestsList& pending_requests() const {
88 return pending_requests_;
89 }
90
91 const RequestsList& cancelled_requests() const {
92 return cancelled_requests_;
93 }
94
[email protected]b6ce91b2011-02-10 21:30:5095 SetPacScriptRequest* pending_set_pac_script_request() const;
[email protected]550dd1ae2009-08-06 05:42:1196
[email protected]b6ce91b2011-02-10 21:30:5097 void RemovePendingRequest(Request* request);
[email protected]550dd1ae2009-08-06 05:42:1198
[email protected]b6ce91b2011-02-10 21:30:5099 void RemovePendingSetPacScriptRequest(SetPacScriptRequest* request);
[email protected]550dd1ae2009-08-06 05:42:11100
101 protected:
[email protected]b6ce91b2011-02-10 21:30:50102 explicit MockAsyncProxyResolverBase(bool expects_pac_bytes);
[email protected]550dd1ae2009-08-06 05:42:11103
104 private:
105 RequestsList pending_requests_;
106 RequestsList cancelled_requests_;
107 scoped_ptr<SetPacScriptRequest> pending_set_pac_script_request_;
108};
109
110class MockAsyncProxyResolver : public MockAsyncProxyResolverBase {
111 public:
112 MockAsyncProxyResolver()
113 : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {}
114};
115
116class MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase {
117 public:
118 MockAsyncProxyResolverExpectsBytes()
119 : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {}
120};
121
[email protected]a692c6f2009-08-06 12:11:05122} // namespace net
[email protected]c6efbc62009-08-06 12:52:19123
124#endif // NET_PROXY_MOCK_PROXY_RESOLVER_H_