Index: net/proxy/mock_proxy_resolver.h |
diff --git a/net/proxy/mock_proxy_resolver.h b/net/proxy/mock_proxy_resolver.h |
index ee24da41cec85c445873ccf874019aea4fab4cdb..efa3620bcd4fca7565bc7b907808415a57ce9933 100644 |
--- a/net/proxy/mock_proxy_resolver.h |
+++ b/net/proxy/mock_proxy_resolver.h |
@@ -124,20 +124,68 @@ 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; |
+ using RequestsList = std::vector<scoped_refptr<Request>>; |
- // LegacyProxyResolverFactory override. |
- scoped_ptr<ProxyResolver> CreateProxyResolver() override; |
+ explicit MockAsyncProxyResolverFactory(bool resolvers_expect_pac_bytes); |
+ ~MockAsyncProxyResolverFactory() override; |
+ |
+ int CreateProxyResolver( |
+ const scoped_refptr<ProxyResolverScriptData>& pac_script, |
+ scoped_ptr<ProxyResolver>* resolver, |
+ const 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_; |
+}; |
+ |
+class MockAsyncProxyResolverFactory::Request |
+ : public base::RefCounted<Request> { |
+ public: |
+ Request(MockAsyncProxyResolverFactory* factory, |
+ const scoped_refptr<ProxyResolverScriptData>& script_data, |
+ scoped_ptr<ProxyResolver>* resolver, |
+ const CompletionCallback& callback); |
+ |
+ const scoped_refptr<ProxyResolverScriptData>& script_data() const { |
+ return script_data_; |
+ } |
+ |
+ // 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: |
- ProxyResolver* resolver_; |
+ friend class base::RefCounted<Request>; |
+ friend class MockAsyncProxyResolverFactory; |
+ friend class MockAsyncProxyResolverFactory::Job; |
+ |
+ ~Request(); |
+ |
+ void FactoryDestroyed(); |
- DISALLOW_COPY_AND_ASSIGN(ForwardingProxyResolverFactory); |
+ MockAsyncProxyResolverFactory* factory_; |
+ const scoped_refptr<ProxyResolverScriptData> script_data_; |
+ scoped_ptr<ProxyResolver>* resolver_; |
+ CompletionCallback callback_; |
}; |
// ForwardingProxyResolver forwards all requests to |impl|. |impl| must remain |