Chromium Code Reviews| Index: net/proxy/mock_proxy_resolver.h |
| diff --git a/net/proxy/mock_proxy_resolver.h b/net/proxy/mock_proxy_resolver.h |
| index 024a08370f7ccd1a091c535513959e8c46d7a2ab..5630ad7c2a74222fc25e4d9e077375b9648e2818 100644 |
| --- a/net/proxy/mock_proxy_resolver.h |
| +++ b/net/proxy/mock_proxy_resolver.h |
| @@ -124,18 +124,79 @@ class MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase { |
| : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {} |
| }; |
| -// This factory returns ProxyResolvers that forward all requests to |
| -// |resolver|. |resolver| must remain so long as any value returned from |
| -// CreateProxyResolver remains in use. |
| -class ForwardingProxyResolverFactory : public LegacyProxyResolverFactory { |
| +// Asynchronous mock proxy resolver factory . All requests complete |
| +// asynchronously; the user must call Request::CompleteNow() on a pending |
| +// request to signal it. |
| +class MockAsyncProxyResolverFactory : public ProxyResolverFactory { |
| public: |
| - explicit ForwardingProxyResolverFactory(ProxyResolver* resolver); |
| + class Request : public base::RefCounted<Request> { |
| + public: |
| + Request(MockAsyncProxyResolverFactory* factory, |
| + const scoped_refptr<ProxyResolverScriptData>& script_data, |
| + scoped_ptr<ProxyResolver>* resolver, |
| + const net::CompletionCallback& callback); |
| + |
| + const ProxyResolverScriptData* script_data() const { |
|
eroman
2015/04/22 16:30:38
can you return a "const scoped_refptr<ProxyResolve
Sam McNally
2015/04/23 03:04:43
Done.
|
| + return script_data_.get(); |
| + } |
| + |
| + // Completes this request. A ForwardingProxyResolver that forwards to |
| + // |resolver| will be returned to the requester. |resolver| must not be |
| + // null and must remain as long as the resolver returned by this request |
| + // remains in use. |
| + void CompleteNowWithForwarder(int rv, ProxyResolver* resolver); |
| + |
| + void CompleteNow(int rv, scoped_ptr<ProxyResolver> resolver); |
| + |
| + private: |
| + friend class base::RefCounted<Request>; |
| + |
| + ~Request(); |
| + |
| + MockAsyncProxyResolverFactory* factory_; |
| + const scoped_refptr<ProxyResolverScriptData> script_data_; |
| + scoped_ptr<ProxyResolver>* resolver_; |
| + net::CompletionCallback callback_; |
| + }; |
| + |
| + using RequestsList = std::vector<scoped_refptr<Request>>; |
| + |
| + explicit MockAsyncProxyResolverFactory(bool resolvers_expect_pac_bytes); |
| + ~MockAsyncProxyResolverFactory() override; |
| + |
| + int CreateProxyResolver( |
| + const scoped_refptr<ProxyResolverScriptData>& pac_script, |
| + scoped_ptr<ProxyResolver>* resolver, |
| + const net::CompletionCallback& callback, |
| + scoped_ptr<ProxyResolverFactory::Request>* request) override; |
| + |
| + const RequestsList& pending_requests() const { return pending_requests_; } |
| + |
| + const RequestsList& cancelled_requests() const { return cancelled_requests_; } |
| + |
| + void RemovePendingRequest(Request* request); |
| + |
| + private: |
| + class Job; |
| + RequestsList pending_requests_; |
| + RequestsList cancelled_requests_; |
| +}; |
| + |
| +// This factory forwards all calls to |impl|. |impl| must remain so long as this |
| +// remains in use. |
| +class ForwardingProxyResolverFactory : public ProxyResolverFactory { |
|
eroman
2015/04/22 16:30:38
Let's delete this. I don't think there is much val
Sam McNally
2015/04/23 03:04:43
Done.
|
| + public: |
| + explicit ForwardingProxyResolverFactory(ProxyResolverFactory* impl); |
| - // LegacyProxyResolverFactory override. |
| - scoped_ptr<ProxyResolver> CreateProxyResolver() override; |
| + // ProxyResolverFactory override. |
| + int CreateProxyResolver( |
| + const scoped_refptr<ProxyResolverScriptData>& pac_script, |
| + scoped_ptr<ProxyResolver>* resolver, |
| + const net::CompletionCallback& callback, |
| + scoped_ptr<Request>* request) override; |
| private: |
| - ProxyResolver* resolver_; |
| + ProxyResolverFactory* impl_; |
| DISALLOW_COPY_AND_ASSIGN(ForwardingProxyResolverFactory); |
| }; |