• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
Request(MockAsyncProxyResolverBase * resolver,const GURL & url,ProxyInfo * results,const CompletionCallback & callback)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 
CompleteNow(int rv)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 
~Request()32 MockAsyncProxyResolverBase::Request::~Request() {}
33 
SetPacScriptRequest(MockAsyncProxyResolverBase * resolver,const scoped_refptr<ProxyResolverScriptData> & script_data,const CompletionCallback & callback)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 
~SetPacScriptRequest()43 MockAsyncProxyResolverBase::SetPacScriptRequest::~SetPacScriptRequest() {}
44 
CompleteNow(int rv)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 
~MockAsyncProxyResolverBase()54 MockAsyncProxyResolverBase::~MockAsyncProxyResolverBase() {}
55 
GetProxyForURL(const GURL & url,ProxyInfo * results,const CompletionCallback & callback,RequestHandle * request_handle,const BoundNetLog &)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 
CancelRequest(RequestHandle request_handle)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 
GetLoadState(RequestHandle request_handle) const75 LoadState MockAsyncProxyResolverBase::GetLoadState(
76     RequestHandle request_handle) const {
77   return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
78 }
79 
SetPacScript(const scoped_refptr<ProxyResolverScriptData> & script_data,const CompletionCallback & callback)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 
CancelSetPacScript()90 void MockAsyncProxyResolverBase::CancelSetPacScript() {
91   // Do nothing (caller was responsible for completing the request).
92 }
93 
94 MockAsyncProxyResolverBase::SetPacScriptRequest*
pending_set_pac_script_request() const95 MockAsyncProxyResolverBase::pending_set_pac_script_request() const {
96   return pending_set_pac_script_request_.get();
97 }
98 
RemovePendingRequest(Request * request)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 
RemovePendingSetPacScriptRequest(SetPacScriptRequest * request)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 
MockAsyncProxyResolverBase(bool expects_pac_bytes)112 MockAsyncProxyResolverBase::MockAsyncProxyResolverBase(bool expects_pac_bytes)
113     : ProxyResolver(expects_pac_bytes) {}
114 
115 }  // namespace net
116