| Index: net/proxy/sync_host_resolver_bridge.cc
|
| diff --git a/net/proxy/sync_host_resolver_bridge.cc b/net/proxy/sync_host_resolver_bridge.cc
|
| deleted file mode 100644
|
| index 9f5552459541e1f2623766efb964c3ff8095afee..0000000000000000000000000000000000000000
|
| --- a/net/proxy/sync_host_resolver_bridge.cc
|
| +++ /dev/null
|
| @@ -1,177 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "net/proxy/sync_host_resolver_bridge.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/logging.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/synchronization/lock.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/net_log.h"
|
| -
|
| -namespace net {
|
| -
|
| -// SyncHostResolverBridge::Core ----------------------------------------------
|
| -
|
| -class SyncHostResolverBridge::Core
|
| - : public base::RefCountedThreadSafe<SyncHostResolverBridge::Core> {
|
| - public:
|
| - Core(HostResolver* resolver, MessageLoop* host_resolver_loop);
|
| -
|
| - int ResolveSynchronously(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& net_log);
|
| -
|
| - // Returns true if Shutdown() has been called.
|
| - bool HasShutdown() const {
|
| - base::AutoLock l(lock_);
|
| - return HasShutdownLocked();
|
| - }
|
| -
|
| - // Called on |host_resolver_loop_|.
|
| - void Shutdown();
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<SyncHostResolverBridge::Core>;
|
| - ~Core() {}
|
| -
|
| - bool HasShutdownLocked() const {
|
| - return has_shutdown_;
|
| - }
|
| -
|
| - // Called on |host_resolver_loop_|.
|
| - void StartResolve(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& net_log);
|
| -
|
| - // Called on |host_resolver_loop_|.
|
| - void OnResolveCompletion(int result);
|
| -
|
| - // Not called on |host_resolver_loop_|.
|
| - int WaitForResolveCompletion();
|
| -
|
| - HostResolver* const host_resolver_;
|
| - MessageLoop* const host_resolver_loop_;
|
| - // The result from the current request (set on |host_resolver_loop_|).
|
| - int err_;
|
| - // The currently outstanding request to |host_resolver_|, or NULL.
|
| - HostResolver::RequestHandle outstanding_request_;
|
| -
|
| - // Event to notify completion of resolve request. We always Signal() on
|
| - // |host_resolver_loop_| and Wait() on a different thread.
|
| - base::WaitableEvent event_;
|
| -
|
| - // True if Shutdown() has been called. Must hold |lock_| to access it.
|
| - bool has_shutdown_;
|
| -
|
| - // Mutex to guard accesses to |has_shutdown_|.
|
| - mutable base::Lock lock_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Core);
|
| -};
|
| -
|
| -SyncHostResolverBridge::Core::Core(HostResolver* host_resolver,
|
| - MessageLoop* host_resolver_loop)
|
| - : host_resolver_(host_resolver),
|
| - host_resolver_loop_(host_resolver_loop),
|
| - err_(0),
|
| - outstanding_request_(NULL),
|
| - event_(true, false),
|
| - has_shutdown_(false) {}
|
| -
|
| -int SyncHostResolverBridge::Core::ResolveSynchronously(
|
| - const HostResolver::RequestInfo& info,
|
| - net::AddressList* addresses,
|
| - const BoundNetLog& net_log) {
|
| - // Otherwise start an async resolve on the resolver's thread.
|
| - host_resolver_loop_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&Core::StartResolve, this, info, addresses, net_log));
|
| -
|
| - return WaitForResolveCompletion();
|
| -}
|
| -
|
| -void SyncHostResolverBridge::Core::StartResolve(
|
| - const HostResolver::RequestInfo& info,
|
| - net::AddressList* addresses,
|
| - const BoundNetLog& net_log) {
|
| - DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
|
| - DCHECK(!outstanding_request_);
|
| -
|
| - if (HasShutdown())
|
| - return;
|
| -
|
| - int error = host_resolver_->Resolve(
|
| - info, addresses, base::Bind(&Core::OnResolveCompletion, this),
|
| - &outstanding_request_, net_log);
|
| - if (error != ERR_IO_PENDING)
|
| - OnResolveCompletion(error); // Completed synchronously.
|
| -}
|
| -
|
| -void SyncHostResolverBridge::Core::OnResolveCompletion(int result) {
|
| - DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
|
| - err_ = result;
|
| - outstanding_request_ = NULL;
|
| - event_.Signal();
|
| -}
|
| -
|
| -int SyncHostResolverBridge::Core::WaitForResolveCompletion() {
|
| - DCHECK_NE(MessageLoop::current(), host_resolver_loop_);
|
| - event_.Wait();
|
| -
|
| - {
|
| - base::AutoLock l(lock_);
|
| - if (HasShutdownLocked())
|
| - return ERR_ABORTED;
|
| - event_.Reset();
|
| - }
|
| -
|
| - return err_;
|
| -}
|
| -
|
| -void SyncHostResolverBridge::Core::Shutdown() {
|
| - DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
|
| -
|
| - if (outstanding_request_) {
|
| - host_resolver_->CancelRequest(outstanding_request_);
|
| - outstanding_request_ = NULL;
|
| - }
|
| -
|
| - {
|
| - base::AutoLock l(lock_);
|
| - has_shutdown_ = true;
|
| - }
|
| -
|
| - // Wake up the PAC thread in case it was waiting for resolve completion.
|
| - event_.Signal();
|
| -}
|
| -
|
| -// SyncHostResolverBridge -----------------------------------------------------
|
| -
|
| -SyncHostResolverBridge::SyncHostResolverBridge(HostResolver* host_resolver,
|
| - MessageLoop* host_resolver_loop)
|
| - : host_resolver_loop_(host_resolver_loop),
|
| - core_(new Core(host_resolver, host_resolver_loop)) {
|
| - DCHECK(host_resolver_loop_);
|
| -}
|
| -
|
| -SyncHostResolverBridge::~SyncHostResolverBridge() {
|
| - DCHECK(core_->HasShutdown());
|
| -}
|
| -
|
| -int SyncHostResolverBridge::Resolve(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& net_log) {
|
| - return core_->ResolveSynchronously(info, addresses, net_log);
|
| -}
|
| -
|
| -void SyncHostResolverBridge::Shutdown() {
|
| - DCHECK_EQ(MessageLoop::current(), host_resolver_loop_);
|
| - core_->Shutdown();
|
| -}
|
| -
|
| -} // namespace net
|
|
|