OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/proxy/multi_threaded_proxy_resolver.h" | 5 #include "net/proxy/multi_threaded_proxy_resolver.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 MockProxyResolver() | 33 MockProxyResolver() |
34 : ProxyResolver(true /*expects_pac_bytes*/), | 34 : ProxyResolver(true /*expects_pac_bytes*/), |
35 wrong_loop_(base::MessageLoop::current()), | 35 wrong_loop_(base::MessageLoop::current()), |
36 request_count_(0) {} | 36 request_count_(0) {} |
37 | 37 |
38 // ProxyResolver implementation. | 38 // ProxyResolver implementation. |
39 virtual int GetProxyForURL(const GURL& query_url, | 39 virtual int GetProxyForURL(const GURL& query_url, |
40 ProxyInfo* results, | 40 ProxyInfo* results, |
41 const CompletionCallback& callback, | 41 const CompletionCallback& callback, |
42 RequestHandle* request, | 42 RequestHandle* request, |
43 const BoundNetLog& net_log) OVERRIDE { | 43 const BoundNetLog& net_log) override { |
44 if (resolve_latency_ != base::TimeDelta()) | 44 if (resolve_latency_ != base::TimeDelta()) |
45 base::PlatformThread::Sleep(resolve_latency_); | 45 base::PlatformThread::Sleep(resolve_latency_); |
46 | 46 |
47 CheckIsOnWorkerThread(); | 47 CheckIsOnWorkerThread(); |
48 | 48 |
49 EXPECT_TRUE(callback.is_null()); | 49 EXPECT_TRUE(callback.is_null()); |
50 EXPECT_TRUE(request == NULL); | 50 EXPECT_TRUE(request == NULL); |
51 | 51 |
52 // Write something into |net_log| (doesn't really have any meaning.) | 52 // Write something into |net_log| (doesn't really have any meaning.) |
53 net_log.BeginEvent(NetLog::TYPE_PAC_JAVASCRIPT_ALERT); | 53 net_log.BeginEvent(NetLog::TYPE_PAC_JAVASCRIPT_ALERT); |
54 | 54 |
55 results->UseNamedProxy(query_url.host()); | 55 results->UseNamedProxy(query_url.host()); |
56 | 56 |
57 // Return a success code which represents the request's order. | 57 // Return a success code which represents the request's order. |
58 return request_count_++; | 58 return request_count_++; |
59 } | 59 } |
60 | 60 |
61 virtual void CancelRequest(RequestHandle request) OVERRIDE { | 61 virtual void CancelRequest(RequestHandle request) override { |
62 NOTREACHED(); | 62 NOTREACHED(); |
63 } | 63 } |
64 | 64 |
65 virtual LoadState GetLoadState(RequestHandle request) const OVERRIDE { | 65 virtual LoadState GetLoadState(RequestHandle request) const override { |
66 NOTREACHED(); | 66 NOTREACHED(); |
67 return LOAD_STATE_IDLE; | 67 return LOAD_STATE_IDLE; |
68 } | 68 } |
69 | 69 |
70 virtual void CancelSetPacScript() OVERRIDE { | 70 virtual void CancelSetPacScript() override { |
71 NOTREACHED(); | 71 NOTREACHED(); |
72 } | 72 } |
73 | 73 |
74 virtual int SetPacScript( | 74 virtual int SetPacScript( |
75 const scoped_refptr<ProxyResolverScriptData>& script_data, | 75 const scoped_refptr<ProxyResolverScriptData>& script_data, |
76 const CompletionCallback& callback) OVERRIDE { | 76 const CompletionCallback& callback) override { |
77 CheckIsOnWorkerThread(); | 77 CheckIsOnWorkerThread(); |
78 last_script_data_ = script_data; | 78 last_script_data_ = script_data; |
79 return OK; | 79 return OK; |
80 } | 80 } |
81 | 81 |
82 int request_count() const { return request_count_; } | 82 int request_count() const { return request_count_; } |
83 | 83 |
84 const ProxyResolverScriptData* last_script_data() const { | 84 const ProxyResolverScriptData* last_script_data() const { |
85 return last_script_data_.get(); | 85 return last_script_data_.get(); |
86 } | 86 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 } | 130 } |
131 | 131 |
132 void WaitUntilBlocked() { | 132 void WaitUntilBlocked() { |
133 blocked_.Wait(); | 133 blocked_.Wait(); |
134 } | 134 } |
135 | 135 |
136 virtual int GetProxyForURL(const GURL& query_url, | 136 virtual int GetProxyForURL(const GURL& query_url, |
137 ProxyInfo* results, | 137 ProxyInfo* results, |
138 const CompletionCallback& callback, | 138 const CompletionCallback& callback, |
139 RequestHandle* request, | 139 RequestHandle* request, |
140 const BoundNetLog& net_log) OVERRIDE { | 140 const BoundNetLog& net_log) override { |
141 if (should_block_) { | 141 if (should_block_) { |
142 blocked_.Signal(); | 142 blocked_.Signal(); |
143 unblocked_.Wait(); | 143 unblocked_.Wait(); |
144 } | 144 } |
145 | 145 |
146 return MockProxyResolver::GetProxyForURL( | 146 return MockProxyResolver::GetProxyForURL( |
147 query_url, results, callback, request, net_log); | 147 query_url, results, callback, request, net_log); |
148 } | 148 } |
149 | 149 |
150 private: | 150 private: |
151 bool should_block_; | 151 bool should_block_; |
152 base::WaitableEvent unblocked_; | 152 base::WaitableEvent unblocked_; |
153 base::WaitableEvent blocked_; | 153 base::WaitableEvent blocked_; |
154 }; | 154 }; |
155 | 155 |
156 // ForwardingProxyResolver forwards all requests to |impl|. | 156 // ForwardingProxyResolver forwards all requests to |impl|. |
157 class ForwardingProxyResolver : public ProxyResolver { | 157 class ForwardingProxyResolver : public ProxyResolver { |
158 public: | 158 public: |
159 explicit ForwardingProxyResolver(ProxyResolver* impl) | 159 explicit ForwardingProxyResolver(ProxyResolver* impl) |
160 : ProxyResolver(impl->expects_pac_bytes()), | 160 : ProxyResolver(impl->expects_pac_bytes()), |
161 impl_(impl) {} | 161 impl_(impl) {} |
162 | 162 |
163 virtual int GetProxyForURL(const GURL& query_url, | 163 virtual int GetProxyForURL(const GURL& query_url, |
164 ProxyInfo* results, | 164 ProxyInfo* results, |
165 const CompletionCallback& callback, | 165 const CompletionCallback& callback, |
166 RequestHandle* request, | 166 RequestHandle* request, |
167 const BoundNetLog& net_log) OVERRIDE { | 167 const BoundNetLog& net_log) override { |
168 return impl_->GetProxyForURL( | 168 return impl_->GetProxyForURL( |
169 query_url, results, callback, request, net_log); | 169 query_url, results, callback, request, net_log); |
170 } | 170 } |
171 | 171 |
172 virtual void CancelRequest(RequestHandle request) OVERRIDE { | 172 virtual void CancelRequest(RequestHandle request) override { |
173 impl_->CancelRequest(request); | 173 impl_->CancelRequest(request); |
174 } | 174 } |
175 | 175 |
176 virtual LoadState GetLoadState(RequestHandle request) const OVERRIDE { | 176 virtual LoadState GetLoadState(RequestHandle request) const override { |
177 NOTREACHED(); | 177 NOTREACHED(); |
178 return LOAD_STATE_IDLE; | 178 return LOAD_STATE_IDLE; |
179 } | 179 } |
180 | 180 |
181 virtual void CancelSetPacScript() OVERRIDE { | 181 virtual void CancelSetPacScript() override { |
182 impl_->CancelSetPacScript(); | 182 impl_->CancelSetPacScript(); |
183 } | 183 } |
184 | 184 |
185 virtual int SetPacScript( | 185 virtual int SetPacScript( |
186 const scoped_refptr<ProxyResolverScriptData>& script_data, | 186 const scoped_refptr<ProxyResolverScriptData>& script_data, |
187 const CompletionCallback& callback) OVERRIDE { | 187 const CompletionCallback& callback) override { |
188 return impl_->SetPacScript(script_data, callback); | 188 return impl_->SetPacScript(script_data, callback); |
189 } | 189 } |
190 | 190 |
191 private: | 191 private: |
192 ProxyResolver* impl_; | 192 ProxyResolver* impl_; |
193 }; | 193 }; |
194 | 194 |
195 // This factory returns ProxyResolvers that forward all requests to | 195 // This factory returns ProxyResolvers that forward all requests to |
196 // |resolver|. | 196 // |resolver|. |
197 class ForwardingProxyResolverFactory : public ProxyResolverFactory { | 197 class ForwardingProxyResolverFactory : public ProxyResolverFactory { |
198 public: | 198 public: |
199 explicit ForwardingProxyResolverFactory(ProxyResolver* resolver) | 199 explicit ForwardingProxyResolverFactory(ProxyResolver* resolver) |
200 : ProxyResolverFactory(resolver->expects_pac_bytes()), | 200 : ProxyResolverFactory(resolver->expects_pac_bytes()), |
201 resolver_(resolver) {} | 201 resolver_(resolver) {} |
202 | 202 |
203 virtual ProxyResolver* CreateProxyResolver() OVERRIDE { | 203 virtual ProxyResolver* CreateProxyResolver() override { |
204 return new ForwardingProxyResolver(resolver_); | 204 return new ForwardingProxyResolver(resolver_); |
205 } | 205 } |
206 | 206 |
207 private: | 207 private: |
208 ProxyResolver* resolver_; | 208 ProxyResolver* resolver_; |
209 }; | 209 }; |
210 | 210 |
211 // This factory returns new instances of BlockableProxyResolver. | 211 // This factory returns new instances of BlockableProxyResolver. |
212 class BlockableProxyResolverFactory : public ProxyResolverFactory { | 212 class BlockableProxyResolverFactory : public ProxyResolverFactory { |
213 public: | 213 public: |
214 BlockableProxyResolverFactory() : ProxyResolverFactory(true) {} | 214 BlockableProxyResolverFactory() : ProxyResolverFactory(true) {} |
215 | 215 |
216 virtual ~BlockableProxyResolverFactory() { | 216 virtual ~BlockableProxyResolverFactory() { |
217 STLDeleteElements(&resolvers_); | 217 STLDeleteElements(&resolvers_); |
218 } | 218 } |
219 | 219 |
220 virtual ProxyResolver* CreateProxyResolver() OVERRIDE { | 220 virtual ProxyResolver* CreateProxyResolver() override { |
221 BlockableProxyResolver* resolver = new BlockableProxyResolver; | 221 BlockableProxyResolver* resolver = new BlockableProxyResolver; |
222 resolvers_.push_back(resolver); | 222 resolvers_.push_back(resolver); |
223 return new ForwardingProxyResolver(resolver); | 223 return new ForwardingProxyResolver(resolver); |
224 } | 224 } |
225 | 225 |
226 std::vector<BlockableProxyResolver*> resolvers() { | 226 std::vector<BlockableProxyResolver*> resolvers() { |
227 return resolvers_; | 227 return resolvers_; |
228 } | 228 } |
229 | 229 |
230 private: | 230 private: |
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 // All in all, the first thread should have seen just 1 request. And the | 754 // All in all, the first thread should have seen just 1 request. And the |
755 // second thread 3 requests. | 755 // second thread 3 requests. |
756 ASSERT_EQ(2u, factory->resolvers().size()); | 756 ASSERT_EQ(2u, factory->resolvers().size()); |
757 EXPECT_EQ(1, factory->resolvers()[0]->request_count()); | 757 EXPECT_EQ(1, factory->resolvers()[0]->request_count()); |
758 EXPECT_EQ(3, factory->resolvers()[1]->request_count()); | 758 EXPECT_EQ(3, factory->resolvers()[1]->request_count()); |
759 } | 759 } |
760 | 760 |
761 } // namespace | 761 } // namespace |
762 | 762 |
763 } // namespace net | 763 } // namespace net |
OLD | NEW |