OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ | 5 #ifndef NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ |
6 #define NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ | 6 #define NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ |
7 | 7 |
8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
9 #include "net/base/host_resolver.h" | 9 #include "net/base/host_resolver.h" |
10 #include "net/proxy/single_threaded_proxy_resolver.h" | |
11 | 10 |
12 class MessageLoop; | 11 class MessageLoop; |
13 | 12 |
14 namespace net { | 13 namespace net { |
15 | 14 |
16 // Wrapper around HostResolver to give a sync API while running the resolver | 15 // Wrapper around HostResolver to give a sync API while running the resolver |
17 // in async mode on |host_resolver_loop|. | 16 // in async mode on |host_resolver_loop|. |
18 class SyncHostResolverBridge : public HostResolver { | 17 class SyncHostResolverBridge : public HostResolver { |
19 public: | 18 public: |
20 SyncHostResolverBridge(HostResolver* host_resolver, | 19 SyncHostResolverBridge(HostResolver* host_resolver, |
21 MessageLoop* host_resolver_loop); | 20 MessageLoop* host_resolver_loop); |
22 | 21 |
23 virtual ~SyncHostResolverBridge(); | 22 virtual ~SyncHostResolverBridge(); |
24 | 23 |
25 // HostResolver methods: | 24 // HostResolver methods: |
26 virtual int Resolve(const RequestInfo& info, | 25 virtual int Resolve(const RequestInfo& info, |
27 AddressList* addresses, | 26 AddressList* addresses, |
28 CompletionCallback* callback, | 27 CompletionCallback* callback, |
29 RequestHandle* out_req, | 28 RequestHandle* out_req, |
30 const BoundNetLog& net_log); | 29 const BoundNetLog& net_log); |
31 virtual void CancelRequest(RequestHandle req); | 30 virtual void CancelRequest(RequestHandle req); |
32 virtual void AddObserver(Observer* observer); | 31 virtual void AddObserver(Observer* observer); |
33 virtual void RemoveObserver(Observer* observer); | 32 virtual void RemoveObserver(Observer* observer); |
34 | 33 |
35 // The Shutdown() method should be called prior to destruction, from | 34 // The Shutdown() method should be called prior to destruction, from |
36 // |host_resolver_loop_|. It aborts any in progress synchronous resolves, to | 35 // |host_resolver_loop_|. It aborts any in progress synchronous resolves, to |
37 // prevent deadlocks from happening. | 36 // prevent deadlocks from happening. |
38 void Shutdown(); | 37 virtual void Shutdown(); |
39 | 38 |
40 private: | 39 private: |
41 class Core; | 40 class Core; |
42 | 41 |
43 MessageLoop* const host_resolver_loop_; | 42 MessageLoop* const host_resolver_loop_; |
44 scoped_refptr<Core> core_; | 43 scoped_refptr<Core> core_; |
45 }; | 44 }; |
46 | 45 |
47 // Subclass of SingleThreadedProxyResolver that additionally calls | |
48 // |bridged_host_resolver_->Shutdown()| during its destructor. | |
49 class SingleThreadedProxyResolverUsingBridgedHostResolver | |
50 : public SingleThreadedProxyResolver { | |
51 public: | |
52 SingleThreadedProxyResolverUsingBridgedHostResolver( | |
53 ProxyResolver* proxy_resolver, | |
54 SyncHostResolverBridge* bridged_host_resolver); | |
55 | |
56 virtual ~SingleThreadedProxyResolverUsingBridgedHostResolver(); | |
57 | |
58 private: | |
59 scoped_refptr<SyncHostResolverBridge> bridged_host_resolver_; | |
60 }; | |
61 | |
62 | |
63 } // namespace net | 46 } // namespace net |
64 | 47 |
65 #endif // NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ | 48 #endif // NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ |
OLD | NEW |