// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ #define NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_ #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "net/proxy/sync_host_resolver.h" class MessageLoop; namespace net { // Wrapper around HostResolver to give a sync API while running the resolver // in async mode on |host_resolver_loop|. class NET_EXPORT_PRIVATE SyncHostResolverBridge : public SyncHostResolver { public: SyncHostResolverBridge(HostResolver* host_resolver, MessageLoop* host_resolver_loop); virtual ~SyncHostResolverBridge(); // SyncHostResolver methods: virtual int Resolve(const HostResolver::RequestInfo& info, AddressList* addresses, const BoundNetLog& net_log) OVERRIDE; // The Shutdown() method should be called prior to destruction, from // |host_resolver_loop_|. It aborts any in progress synchronous resolves, to // prevent deadlocks from happening. virtual void Shutdown() OVERRIDE; private: class Core; MessageLoop* const host_resolver_loop_; scoped_refptr core_; DISALLOW_COPY_AND_ASSIGN(SyncHostResolverBridge); }; } // namespace net #endif // NET_PROXY_SYNC_HOST_RESOLVER_BRIDGE_H_