diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-23 21:35:19 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-23 21:35:19 +0000 |
commit | 2380f378654e66f58262e3eaa1f9ba0cd1da09e0 (patch) | |
tree | cd9202c3cfd4a88a619604a7d59ee3184b94a29b /net | |
parent | b4ce3c22d957e8c6128e7e1dd7434b5cd0e61008 (diff) | |
download | chromium_src-2380f378654e66f58262e3eaa1f9ba0cd1da09e0.zip chromium_src-2380f378654e66f58262e3eaa1f9ba0cd1da09e0.tar.gz chromium_src-2380f378654e66f58262e3eaa1f9ba0cd1da09e0.tar.bz2 |
Remove the workaround for bug 43461. Use a g_use_system_ssl
boolean flag in DefaultClientSocketFactory::CreateSSLClientSocket.
Based on rch's code in http://codereview.chromium.org/6487012.
R=rch
BUG=43461
TEST=no ChromeFrame test program build failures.
Review URL: http://codereview.chromium.org/6561003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75791 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/run_all_unittests.cc | 7 | ||||
-rw-r--r-- | net/socket/client_socket_factory.cc | 67 | ||||
-rw-r--r-- | net/socket/client_socket_factory.h | 14 |
3 files changed, 35 insertions, 53 deletions
diff --git a/net/base/run_all_unittests.cc b/net/base/run_all_unittests.cc index d0822a0..a60e501 100644 --- a/net/base/run_all_unittests.cc +++ b/net/base/run_all_unittests.cc @@ -6,9 +6,6 @@ #include "base/metrics/histogram.h" #include "base/nss_util.h" #include "net/base/net_test_suite.h" -#if defined(OS_WIN) -#include "net/socket/ssl_client_socket_nss_factory.h" -#endif int main(int argc, char** argv) { // Record histograms, so we can get histograms data in tests. @@ -16,10 +13,6 @@ int main(int argc, char** argv) { NetTestSuite test_suite(argc, argv); #if defined(OS_WIN) - // Use NSS for SSL on Windows. TODO(wtc): this should eventually be hidden - // inside DefaultClientSocketFactory::CreateSSLClientSocket. - net::ClientSocketFactory::SetSSLClientSocketFactory( - net::SSLClientSocketNSSFactory); // We want to be sure to init NSPR on the main thread. base::EnsureNSPRInit(); #endif diff --git a/net/socket/client_socket_factory.cc b/net/socket/client_socket_factory.cc index dd201f9..dfbe1f2 100644 --- a/net/socket/client_socket_factory.cc +++ b/net/socket/client_socket_factory.cc @@ -8,12 +8,14 @@ #include "build/build_config.h" #include "net/socket/client_socket_handle.h" #if defined(OS_WIN) +#include "net/socket/ssl_client_socket_nss.h" #include "net/socket/ssl_client_socket_win.h" #elif defined(USE_OPENSSL) #include "net/socket/ssl_client_socket_openssl.h" #elif defined(USE_NSS) #include "net/socket/ssl_client_socket_nss.h" #elif defined(OS_MACOSX) +#include "net/socket/ssl_client_socket_mac.h" #include "net/socket/ssl_client_socket_nss.h" #endif #include "net/socket/ssl_host_info.h" @@ -21,37 +23,9 @@ namespace net { -class DnsCertProvenanceChecker; - namespace { -SSLClientSocket* DefaultSSLClientSocketFactory( - ClientSocketHandle* transport_socket, - const HostPortPair& host_and_port, - const SSLConfig& ssl_config, - SSLHostInfo* ssl_host_info, - CertVerifier* cert_verifier, - DnsCertProvenanceChecker* dns_cert_checker) { - scoped_ptr<SSLHostInfo> shi(ssl_host_info); -#if defined(OS_WIN) - return new SSLClientSocketWin(transport_socket, host_and_port, ssl_config, - cert_verifier); -#elif defined(USE_OPENSSL) - return new SSLClientSocketOpenSSL(transport_socket, host_and_port, - ssl_config, cert_verifier); -#elif defined(USE_NSS) - return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config, - shi.release(), cert_verifier, dns_cert_checker); -#elif defined(OS_MACOSX) - return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config, - shi.release(), cert_verifier, dns_cert_checker); -#else - NOTIMPLEMENTED(); - return NULL; -#endif -} - -SSLClientSocketFactory g_ssl_factory = DefaultSSLClientSocketFactory; +bool g_use_system_ssl = false; class DefaultClientSocketFactory : public ClientSocketFactory { public: @@ -69,8 +43,34 @@ class DefaultClientSocketFactory : public ClientSocketFactory { SSLHostInfo* ssl_host_info, CertVerifier* cert_verifier, DnsCertProvenanceChecker* dns_cert_checker) { - return g_ssl_factory(transport_socket, host_and_port, ssl_config, - ssl_host_info, cert_verifier, dns_cert_checker); + scoped_ptr<SSLHostInfo> shi(ssl_host_info); +#if defined(OS_WIN) + if (g_use_system_ssl) { + return new SSLClientSocketWin(transport_socket, host_and_port, + ssl_config, cert_verifier); + } + return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config, + shi.release(), cert_verifier, + dns_cert_checker); +#elif defined(USE_OPENSSL) + return new SSLClientSocketOpenSSL(transport_socket, host_and_port, + ssl_config, cert_verifier); +#elif defined(USE_NSS) + return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config, + shi.release(), cert_verifier, + dns_cert_checker); +#elif defined(OS_MACOSX) + if (g_use_system_ssl) { + return new SSLClientSocketMac(transport_socket, host_and_port, + ssl_config, cert_verifier); + } + return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config, + shi.release(), cert_verifier, + dns_cert_checker); +#else + NOTIMPLEMENTED(); + return NULL; +#endif } }; @@ -99,9 +99,8 @@ ClientSocketFactory* ClientSocketFactory::GetDefaultFactory() { } // static -void ClientSocketFactory::SetSSLClientSocketFactory( - SSLClientSocketFactory factory) { - g_ssl_factory = factory; +void ClientSocketFactory::UseSystemSSL() { + g_use_system_ssl = true; } } // namespace net diff --git a/net/socket/client_socket_factory.h b/net/socket/client_socket_factory.h index 2a0cd7c..b750a0d 100644 --- a/net/socket/client_socket_factory.h +++ b/net/socket/client_socket_factory.h @@ -23,15 +23,6 @@ class SSLClientSocket; struct SSLConfig; class SSLHostInfo; -// Callback function to create new SSLClientSocket objects. -typedef SSLClientSocket* (*SSLClientSocketFactory)( - ClientSocketHandle* transport_socket, - const HostPortPair& host_and_port, - const SSLConfig& ssl_config, - SSLHostInfo* ssl_host_info, - CertVerifier* cert_verifier, - DnsCertProvenanceChecker* dns_cert_checker); - // An interface used to instantiate ClientSocket objects. Used to facilitate // testing code with mock socket implementations. class ClientSocketFactory { @@ -64,9 +55,8 @@ class ClientSocketFactory { // Returns the default ClientSocketFactory. static ClientSocketFactory* GetDefaultFactory(); - // Instructs the default ClientSocketFactory to use |factory| to create - // SSLClientSocket objects. - static void SetSSLClientSocketFactory(SSLClientSocketFactory factory); + // Instructs the default ClientSocketFactory to use the system SSL library. + static void UseSystemSSL(); }; } // namespace net |