| OLD | NEW |
| (Empty) |
| 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 #include "net/proxy/mock_proxy_resolver.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "base/message_loop/message_loop.h" | |
| 9 | |
| 10 namespace net { | |
| 11 | |
| 12 MockAsyncProxyResolverBase::Request::Request( | |
| 13 MockAsyncProxyResolverBase* resolver, | |
| 14 const GURL& url, | |
| 15 ProxyInfo* results, | |
| 16 const CompletionCallback& callback) | |
| 17 : resolver_(resolver), | |
| 18 url_(url), | |
| 19 results_(results), | |
| 20 callback_(callback), | |
| 21 origin_loop_(base::MessageLoop::current()) {} | |
| 22 | |
| 23 void MockAsyncProxyResolverBase::Request::CompleteNow(int rv) { | |
| 24 CompletionCallback callback = callback_; | |
| 25 | |
| 26 // May delete |this|. | |
| 27 resolver_->RemovePendingRequest(this); | |
| 28 | |
| 29 callback.Run(rv); | |
| 30 } | |
| 31 | |
| 32 MockAsyncProxyResolverBase::Request::~Request() {} | |
| 33 | |
| 34 MockAsyncProxyResolverBase::SetPacScriptRequest::SetPacScriptRequest( | |
| 35 MockAsyncProxyResolverBase* resolver, | |
| 36 const scoped_refptr<ProxyResolverScriptData>& script_data, | |
| 37 const CompletionCallback& callback) | |
| 38 : resolver_(resolver), | |
| 39 script_data_(script_data), | |
| 40 callback_(callback), | |
| 41 origin_loop_(base::MessageLoop::current()) {} | |
| 42 | |
| 43 MockAsyncProxyResolverBase::SetPacScriptRequest::~SetPacScriptRequest() {} | |
| 44 | |
| 45 void MockAsyncProxyResolverBase::SetPacScriptRequest::CompleteNow(int rv) { | |
| 46 CompletionCallback callback = callback_; | |
| 47 | |
| 48 // Will delete |this|. | |
| 49 resolver_->RemovePendingSetPacScriptRequest(this); | |
| 50 | |
| 51 callback.Run(rv); | |
| 52 } | |
| 53 | |
| 54 MockAsyncProxyResolverBase::~MockAsyncProxyResolverBase() {} | |
| 55 | |
| 56 int MockAsyncProxyResolverBase::GetProxyForURL( | |
| 57 const GURL& url, ProxyInfo* results, const CompletionCallback& callback, | |
| 58 RequestHandle* request_handle, const BoundNetLog& /*net_log*/) { | |
| 59 scoped_refptr<Request> request = new Request(this, url, results, callback); | |
| 60 pending_requests_.push_back(request); | |
| 61 | |
| 62 if (request_handle) | |
| 63 *request_handle = reinterpret_cast<RequestHandle>(request.get()); | |
| 64 | |
| 65 // Test code completes the request by calling request->CompleteNow(). | |
| 66 return ERR_IO_PENDING; | |
| 67 } | |
| 68 | |
| 69 void MockAsyncProxyResolverBase::CancelRequest(RequestHandle request_handle) { | |
| 70 scoped_refptr<Request> request = reinterpret_cast<Request*>(request_handle); | |
| 71 cancelled_requests_.push_back(request); | |
| 72 RemovePendingRequest(request.get()); | |
| 73 } | |
| 74 | |
| 75 LoadState MockAsyncProxyResolverBase::GetLoadState( | |
| 76 RequestHandle request_handle) const { | |
| 77 return LOAD_STATE_RESOLVING_PROXY_FOR_URL; | |
| 78 } | |
| 79 | |
| 80 int MockAsyncProxyResolverBase::SetPacScript( | |
| 81 const scoped_refptr<ProxyResolverScriptData>& script_data, | |
| 82 const CompletionCallback& callback) { | |
| 83 DCHECK(!pending_set_pac_script_request_.get()); | |
| 84 pending_set_pac_script_request_.reset( | |
| 85 new SetPacScriptRequest(this, script_data, callback)); | |
| 86 // Finished when user calls SetPacScriptRequest::CompleteNow(). | |
| 87 return ERR_IO_PENDING; | |
| 88 } | |
| 89 | |
| 90 void MockAsyncProxyResolverBase::CancelSetPacScript() { | |
| 91 // Do nothing (caller was responsible for completing the request). | |
| 92 } | |
| 93 | |
| 94 MockAsyncProxyResolverBase::SetPacScriptRequest* | |
| 95 MockAsyncProxyResolverBase::pending_set_pac_script_request() const { | |
| 96 return pending_set_pac_script_request_.get(); | |
| 97 } | |
| 98 | |
| 99 void MockAsyncProxyResolverBase::RemovePendingRequest(Request* request) { | |
| 100 RequestsList::iterator it = std::find( | |
| 101 pending_requests_.begin(), pending_requests_.end(), request); | |
| 102 DCHECK(it != pending_requests_.end()); | |
| 103 pending_requests_.erase(it); | |
| 104 } | |
| 105 | |
| 106 void MockAsyncProxyResolverBase::RemovePendingSetPacScriptRequest( | |
| 107 SetPacScriptRequest* request) { | |
| 108 DCHECK_EQ(request, pending_set_pac_script_request()); | |
| 109 pending_set_pac_script_request_.reset(); | |
| 110 } | |
| 111 | |
| 112 MockAsyncProxyResolverBase::MockAsyncProxyResolverBase(bool expects_pac_bytes) | |
| 113 : ProxyResolver(expects_pac_bytes) {} | |
| 114 | |
| 115 } // namespace net | |
| OLD | NEW |