| Index: net/proxy/proxy_service_unittest.cc
|
| ===================================================================
|
| --- net/proxy/proxy_service_unittest.cc (revision 22580)
|
| +++ net/proxy/proxy_service_unittest.cc (working copy)
|
| @@ -9,6 +9,7 @@
|
| #include "googleurl/src/gurl.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/test_completion_callback.h"
|
| +#include "net/proxy/mock_proxy_resolver.h"
|
| #include "net/proxy/proxy_config_service.h"
|
| #include "net/proxy/proxy_resolver.h"
|
| #include "net/proxy/proxy_script_fetcher.h"
|
| @@ -36,156 +37,6 @@
|
| ProxyConfig config;
|
| };
|
|
|
| -// Asynchronous mock proxy resolver. All requests complete asynchronously,
|
| -// user must call Request::CompleteNow() on a pending request to signal it.
|
| -class MockAsyncProxyResolverBase : public ProxyResolver {
|
| - public:
|
| - class Request : public base::RefCounted<Request> {
|
| - public:
|
| - Request(MockAsyncProxyResolverBase* resolver,
|
| - const GURL& url,
|
| - ProxyInfo* results,
|
| - CompletionCallback* callback)
|
| - : resolver_(resolver),
|
| - url_(url),
|
| - results_(results),
|
| - callback_(callback),
|
| - origin_loop_(MessageLoop::current()) {
|
| - }
|
| -
|
| - const GURL& url() const { return url_; }
|
| - ProxyInfo* results() const { return results_; }
|
| - CompletionCallback* callback() const { return callback_; }
|
| -
|
| - void CompleteNow(int rv) {
|
| - CompletionCallback* callback = callback_;
|
| -
|
| - // May delete |this|.
|
| - resolver_->RemovePendingRequest(this);
|
| -
|
| - callback->Run(rv);
|
| - }
|
| -
|
| - private:
|
| - MockAsyncProxyResolverBase* resolver_;
|
| - const GURL url_;
|
| - ProxyInfo* results_;
|
| - CompletionCallback* callback_;
|
| - MessageLoop* origin_loop_;
|
| - };
|
| -
|
| - class SetPacScriptRequest {
|
| - public:
|
| - SetPacScriptRequest(MockAsyncProxyResolverBase* resolver,
|
| - const GURL& pac_url,
|
| - const std::string& pac_bytes,
|
| - CompletionCallback* callback)
|
| - : resolver_(resolver),
|
| - pac_url_(pac_url),
|
| - pac_bytes_(pac_bytes),
|
| - callback_(callback),
|
| - origin_loop_(MessageLoop::current()) {
|
| - }
|
| -
|
| - const GURL& pac_url() const { return pac_url_; }
|
| - const std::string& pac_bytes() const { return pac_bytes_; }
|
| -
|
| - void CompleteNow(int rv) {
|
| - CompletionCallback* callback = callback_;
|
| -
|
| - // Will delete |this|.
|
| - resolver_->RemovePendingSetPacScriptRequest(this);
|
| -
|
| - callback->Run(rv);
|
| - }
|
| -
|
| - private:
|
| - MockAsyncProxyResolverBase* resolver_;
|
| - const GURL pac_url_;
|
| - const std::string pac_bytes_;
|
| - CompletionCallback* callback_;
|
| - MessageLoop* origin_loop_;
|
| - };
|
| -
|
| - typedef std::vector<scoped_refptr<Request> > RequestsList;
|
| -
|
| - // ProxyResolver implementation:
|
| - virtual int GetProxyForURL(const GURL& url,
|
| - ProxyInfo* results,
|
| - CompletionCallback* callback,
|
| - RequestHandle* request_handle) {
|
| - scoped_refptr<Request> request = new Request(this, url, results, callback);
|
| - pending_requests_.push_back(request);
|
| -
|
| - if (request_handle)
|
| - *request_handle = reinterpret_cast<RequestHandle>(request.get());
|
| -
|
| - // Test code completes the request by calling request->CompleteNow().
|
| - return ERR_IO_PENDING;
|
| - }
|
| -
|
| - virtual void CancelRequest(RequestHandle request_handle) {
|
| - scoped_refptr<Request> request = reinterpret_cast<Request*>(request_handle);
|
| - cancelled_requests_.push_back(request);
|
| - RemovePendingRequest(request);
|
| - }
|
| -
|
| - virtual int SetPacScript(const GURL& pac_url,
|
| - const std::string& pac_bytes,
|
| - CompletionCallback* callback) {
|
| - EXPECT_EQ(NULL, pending_set_pac_script_request_.get());
|
| - pending_set_pac_script_request_.reset(
|
| - new SetPacScriptRequest(this, pac_url, pac_bytes, callback));
|
| - // Finished when user calls SetPacScriptRequest::CompleteNow().
|
| - return ERR_IO_PENDING;
|
| - }
|
| -
|
| - const RequestsList& pending_requests() const {
|
| - return pending_requests_;
|
| - }
|
| -
|
| - const RequestsList& cancelled_requests() const {
|
| - return cancelled_requests_;
|
| - }
|
| -
|
| - SetPacScriptRequest* pending_set_pac_script_request() const {
|
| - return pending_set_pac_script_request_.get();
|
| - }
|
| -
|
| - void RemovePendingRequest(Request* request) {
|
| - RequestsList::iterator it = std::find(
|
| - pending_requests_.begin(), pending_requests_.end(), request);
|
| - DCHECK(it != pending_requests_.end());
|
| - pending_requests_.erase(it);
|
| - }
|
| -
|
| - void RemovePendingSetPacScriptRequest(SetPacScriptRequest* request) {
|
| - EXPECT_EQ(request, pending_set_pac_script_request());
|
| - pending_set_pac_script_request_.reset();
|
| - }
|
| -
|
| - protected:
|
| - explicit MockAsyncProxyResolverBase(bool expects_pac_bytes)
|
| - : ProxyResolver(expects_pac_bytes) {}
|
| -
|
| - private:
|
| - RequestsList pending_requests_;
|
| - RequestsList cancelled_requests_;
|
| - scoped_ptr<SetPacScriptRequest> pending_set_pac_script_request_;
|
| -};
|
| -
|
| -class MockAsyncProxyResolver : public MockAsyncProxyResolverBase {
|
| - public:
|
| - MockAsyncProxyResolver()
|
| - : MockAsyncProxyResolverBase(false /*expects_pac_bytes*/) {}
|
| -};
|
| -
|
| -class MockAsyncProxyResolverExpectsBytes : public MockAsyncProxyResolverBase {
|
| - public:
|
| - MockAsyncProxyResolverExpectsBytes()
|
| - : MockAsyncProxyResolverBase(true /*expects_pac_bytes*/) {}
|
| -};
|
| -
|
| } // namespace
|
|
|
| // A mock ProxyScriptFetcher. No result will be returned to the fetch client
|
|
|