1 // Copyright (c) 2012 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.
5 #ifndef NET_PROXY_MOCK_PROXY_RESOLVER_H_
6 #define NET_PROXY_MOCK_PROXY_RESOLVER_H_
10 #include "base/memory/scoped_ptr.h"
11 #include "net/base/net_errors.h"
12 #include "net/proxy/proxy_resolver.h"
21 // Asynchronous mock proxy resolver. All requests complete asynchronously,
22 // user must call Request::CompleteNow() on a pending request to signal it.
23 class MockAsyncProxyResolverBase
: public ProxyResolver
{
25 class Request
: public base::RefCounted
<Request
> {
27 Request(MockAsyncProxyResolverBase
* resolver
,
30 const net::CompletionCallback
& callback
);
32 const GURL
& url() const { return url_
; }
33 ProxyInfo
* results() const { return results_
; }
34 const net::CompletionCallback
& callback() const { return callback_
; }
36 void CompleteNow(int rv
);
39 friend class base::RefCounted
<Request
>;
43 MockAsyncProxyResolverBase
* resolver_
;
46 net::CompletionCallback callback_
;
47 base::MessageLoop
* origin_loop_
;
50 class SetPacScriptRequest
{
53 MockAsyncProxyResolverBase
* resolver
,
54 const scoped_refptr
<ProxyResolverScriptData
>& script_data
,
55 const net::CompletionCallback
& callback
);
56 ~SetPacScriptRequest();
58 const ProxyResolverScriptData
* script_data() const {
59 return script_data_
.get();
62 void CompleteNow(int rv
);
65 MockAsyncProxyResolverBase
* resolver_
;
66 const scoped_refptr
<ProxyResolverScriptData
> script_data_
;
67 net::CompletionCallback callback_
;
68 base::MessageLoop
* origin_loop_
;
71 typedef std::vector
<scoped_refptr
<Request
> > RequestsList
;
73 ~MockAsyncProxyResolverBase() override
;
75 // ProxyResolver implementation.
76 int GetProxyForURL(const GURL
& url
,
78 const net::CompletionCallback
& callback
,
79 RequestHandle
* request_handle
,
80 const BoundNetLog
& /*net_log*/) override
;
81 void CancelRequest(RequestHandle request_handle
) override
;
82 LoadState
GetLoadState(RequestHandle request_handle
) const override
;
83 int SetPacScript(const scoped_refptr
<ProxyResolverScriptData
>& script_data
,
84 const net::CompletionCallback
& callback
) override
;
85 void CancelSetPacScript() override
;
87 const RequestsList
& pending_requests() const {
88 return pending_requests_
;
91 const RequestsList
& cancelled_requests() const {
92 return cancelled_requests_
;
95 SetPacScriptRequest
* pending_set_pac_script_request() const;
97 bool has_pending_set_pac_script_request() const {
98 return pending_set_pac_script_request_
.get() != NULL
;
101 void RemovePendingRequest(Request
* request
);
103 void RemovePendingSetPacScriptRequest(SetPacScriptRequest
* request
);
106 explicit MockAsyncProxyResolverBase(bool expects_pac_bytes
);
109 RequestsList pending_requests_
;
110 RequestsList cancelled_requests_
;
111 scoped_ptr
<SetPacScriptRequest
> pending_set_pac_script_request_
;
114 class MockAsyncProxyResolver
: public MockAsyncProxyResolverBase
{
116 MockAsyncProxyResolver()
117 : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {}
120 class MockAsyncProxyResolverExpectsBytes
: public MockAsyncProxyResolverBase
{
122 MockAsyncProxyResolverExpectsBytes()
123 : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {}
128 #endif // NET_PROXY_MOCK_PROXY_RESOLVER_H_