• 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_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 
url()31     const GURL& url() const { return url_; }
results()32     ProxyInfo* results() const { return results_; }
callback()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 
script_data()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 
pending_requests()87   const RequestsList& pending_requests() const {
88     return pending_requests_;
89   }
90 
cancelled_requests()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:
MockAsyncProxyResolver()112   MockAsyncProxyResolver()
113       : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {}
114 };
115 
116 class MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase {
117  public:
MockAsyncProxyResolverExpectsBytes()118   MockAsyncProxyResolverExpectsBytes()
119       : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {}
120 };
121 
122 }  // namespace net
123 
124 #endif  // NET_PROXY_MOCK_PROXY_RESOLVER_H_
125