• 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 #ifndef NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_
6 #define NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_
7 #pragma once
8 
9 #include "base/memory/scoped_ptr.h"
10 #include "net/base/host_resolver.h"
11 
12 class MessageLoop;
13 
14 namespace net {
15 
16 // Wrapper around HostResolver to give a sync API while running the resolver
17 // in async mode on |host_resolver_loop|.
18 class SyncHostResolverBridge : public HostResolver {
19  public:
20   SyncHostResolverBridge(HostResolver* host_resolver,
21                          MessageLoop* host_resolver_loop);
22 
23   virtual ~SyncHostResolverBridge();
24 
25   // HostResolver methods:
26   virtual int Resolve(const RequestInfo& info,
27                       AddressList* addresses,
28                       CompletionCallback* callback,
29                       RequestHandle* out_req,
30                       const BoundNetLog& net_log);
31   virtual void CancelRequest(RequestHandle req);
32   virtual void AddObserver(Observer* observer);
33   virtual void RemoveObserver(Observer* observer);
34 
35   // The Shutdown() method should be called prior to destruction, from
36   // |host_resolver_loop_|. It aborts any in progress synchronous resolves, to
37   // prevent deadlocks from happening.
38   virtual void Shutdown();
39 
40  private:
41   class Core;
42 
43   MessageLoop* const host_resolver_loop_;
44   scoped_refptr<Core> core_;
45 };
46 
47 }  // namespace net
48 
49 #endif  // NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_
50