From be4d55fe8d843628223a7b40162007ab734d1402 Mon Sep 17 00:00:00 2001 From: "mnissler@chromium.org" Date: Tue, 1 Jun 2010 13:40:02 +0000 Subject: Move net::HTTPSProber from net_base to net net::HTTPSProber belongs into the net library, where also it's only user net::URLRequest is living. This fixes undefined references in net_base caused by net::HTTPSProber when not linking against net. BUG=45493 TEST=Building hresolv with the plain ld linker in shared library configuration should not generate undefined references. Review URL: http://codereview.chromium.org/2441001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48632 0039d316-1c4b-4281-b951-d872f2087c98 --- net/url_request/https_prober.h | 73 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 net/url_request/https_prober.h (limited to 'net/url_request/https_prober.h') diff --git a/net/url_request/https_prober.h b/net/url_request/https_prober.h new file mode 100644 index 0000000..327fc16 --- /dev/null +++ b/net/url_request/https_prober.h @@ -0,0 +1,73 @@ +// Copyright (c) 2009 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_BASE_HTTPS_PROBER_H_ +#define NET_BASE_HTTPS_PROBER_H_ + +#include +#include +#include + +#include "base/singleton.h" +#include "base/task.h" +#include "net/url_request/url_request.h" + +class URLRequestContext; + +namespace net { + +// This should be scoped inside HTTPSProber, but VC cannot compile +// HTTPProber::Delegate when HTTPSProber also inherits from +// URLRequest::Delegate. +class HTTPSProberDelegate { + public: + virtual void ProbeComplete(bool result) = 0; +}; + +// HTTPSProber is a singleton object that manages HTTPS probes. A HTTPS probe +// determines if we can connect to a given host over HTTPS. It's used when +// transparently upgrading from HTTP to HTTPS (for example, for SPDY). +class HTTPSProber : public URLRequest::Delegate { + public: + HTTPSProber() { } + + // HaveProbed returns true if the given host is known to have been probed + // since the browser was last started. + bool HaveProbed(const std::string& host) const; + + // InFlight returns true iff a probe for the given host is currently active. + bool InFlight(const std::string& host) const; + + // ProbeHost starts a new probe for the given host. If the host is known to + // have been probed since the browser was started, false is returned and no + // other action is taken. If a probe to the given host in currently inflight, + // false will be returned, and no other action is taken. Otherwise, a new + // probe is started, true is returned and the Delegate will be called with the + // results (true means a successful handshake). + bool ProbeHost(const std::string& host, URLRequestContext* ctx, + HTTPSProberDelegate* delegate); + + // Implementation of URLRequest::Delegate + void OnAuthRequired(URLRequest* request, + net::AuthChallengeInfo* auth_info); + void OnSSLCertificateError(URLRequest* request, + int cert_error, + net::X509Certificate* cert); + void OnResponseStarted(URLRequest* request); + void OnReadCompleted(URLRequest* request, int bytes_read); + + private: + void Success(URLRequest* request); + void Failure(URLRequest* request); + void DoCallback(URLRequest* request, bool result); + + std::map inflight_probes_; + std::set probed_; + + friend struct DefaultSingletonTraits; + DISALLOW_EVIL_CONSTRUCTORS(HTTPSProber); +}; + +} // namespace net +#endif -- cgit v1.1