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 12class MessageLoop; 13 14namespace net { 15 16// Wrapper around HostResolver to give a sync API while running the resolver 17// in async mode on |host_resolver_loop|. 18class 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