OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived | 5 // This file includes code SSLClientSocketNSS::DoVerifyCertComplete() derived |
6 // from AuthCertificateCallback() in | 6 // from AuthCertificateCallback() in |
7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. | 7 // mozilla/security/manager/ssl/src/nsNSSCallbacks.cpp. |
8 | 8 |
9 /* ***** BEGIN LICENSE BLOCK ***** | 9 /* ***** BEGIN LICENSE BLOCK ***** |
10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 10 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
(...skipping 1671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1682 CertSetCertificateContextProperty( | 1682 CertSetCertificateContextProperty( |
1683 ssl_config_.client_cert->os_cert_handle(), | 1683 ssl_config_.client_cert->os_cert_handle(), |
1684 CERT_KEY_PROV_HANDLE_PROP_ID, 0, NULL); | 1684 CERT_KEY_PROV_HANDLE_PROP_ID, 0, NULL); |
1685 } | 1685 } |
1686 #endif | 1686 #endif |
1687 | 1687 |
1688 return net_error; | 1688 return net_error; |
1689 } | 1689 } |
1690 | 1690 |
1691 int SSLClientSocketNSS::Core::DoHandshakeLoop(int last_io_result) { | 1691 int SSLClientSocketNSS::Core::DoHandshakeLoop(int last_io_result) { |
| 1692 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. |
| 1693 tracked_objects::ScopedProfile tracking_profile( |
| 1694 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1695 "424386 SSLClientSocketNSS::Core::DoHandshakeLoop")); |
| 1696 |
1692 DCHECK(OnNSSTaskRunner()); | 1697 DCHECK(OnNSSTaskRunner()); |
1693 | 1698 |
1694 int rv = last_io_result; | 1699 int rv = last_io_result; |
1695 do { | 1700 do { |
1696 // Default to STATE_NONE for next state. | 1701 // Default to STATE_NONE for next state. |
1697 State state = next_handshake_state_; | 1702 State state = next_handshake_state_; |
1698 GotoState(STATE_NONE); | 1703 GotoState(STATE_NONE); |
1699 | 1704 |
1700 switch (state) { | 1705 switch (state) { |
1701 case STATE_HANDSHAKE: | 1706 case STATE_HANDSHAKE: |
(...skipping 16 matching lines...) Expand all Loading... |
1718 // special case we keep looping even if rv is ERR_IO_PENDING because | 1723 // special case we keep looping even if rv is ERR_IO_PENDING because |
1719 // the transport IO may allow DoHandshake to make progress. | 1724 // the transport IO may allow DoHandshake to make progress. |
1720 DCHECK(rv == OK || rv == ERR_IO_PENDING); | 1725 DCHECK(rv == OK || rv == ERR_IO_PENDING); |
1721 rv = OK; // This causes us to stay in the loop. | 1726 rv = OK; // This causes us to stay in the loop. |
1722 } | 1727 } |
1723 } while (rv != ERR_IO_PENDING && next_handshake_state_ != STATE_NONE); | 1728 } while (rv != ERR_IO_PENDING && next_handshake_state_ != STATE_NONE); |
1724 return rv; | 1729 return rv; |
1725 } | 1730 } |
1726 | 1731 |
1727 int SSLClientSocketNSS::Core::DoReadLoop(int result) { | 1732 int SSLClientSocketNSS::Core::DoReadLoop(int result) { |
| 1733 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. |
| 1734 tracked_objects::ScopedProfile tracking_profile( |
| 1735 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1736 "424386 SSLClientSocketNSS::Core::DoReadLoop")); |
| 1737 |
1728 DCHECK(OnNSSTaskRunner()); | 1738 DCHECK(OnNSSTaskRunner()); |
1729 DCHECK(false_started_ || handshake_callback_called_); | 1739 DCHECK(false_started_ || handshake_callback_called_); |
1730 DCHECK_EQ(STATE_NONE, next_handshake_state_); | 1740 DCHECK_EQ(STATE_NONE, next_handshake_state_); |
1731 | 1741 |
1732 if (result < 0) | 1742 if (result < 0) |
1733 return result; | 1743 return result; |
1734 | 1744 |
1735 if (!nss_bufs_) { | 1745 if (!nss_bufs_) { |
1736 LOG(DFATAL) << "!nss_bufs_"; | 1746 LOG(DFATAL) << "!nss_bufs_"; |
1737 int rv = ERR_UNEXPECTED; | 1747 int rv = ERR_UNEXPECTED; |
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2188 DoWriteCallback(rv_write); | 2198 DoWriteCallback(rv_write); |
2189 } | 2199 } |
2190 | 2200 |
2191 // As part of Connect(), the SSLClientSocketNSS object performs an SSL | 2201 // As part of Connect(), the SSLClientSocketNSS object performs an SSL |
2192 // handshake. This requires network IO, which in turn calls | 2202 // handshake. This requires network IO, which in turn calls |
2193 // BufferRecvComplete() with a non-zero byte count. This byte count eventually | 2203 // BufferRecvComplete() with a non-zero byte count. This byte count eventually |
2194 // winds its way through the state machine and ends up being passed to the | 2204 // winds its way through the state machine and ends up being passed to the |
2195 // callback. For Read() and Write(), that's what we want. But for Connect(), | 2205 // callback. For Read() and Write(), that's what we want. But for Connect(), |
2196 // the caller expects OK (i.e. 0) for success. | 2206 // the caller expects OK (i.e. 0) for success. |
2197 void SSLClientSocketNSS::Core::DoConnectCallback(int rv) { | 2207 void SSLClientSocketNSS::Core::DoConnectCallback(int rv) { |
| 2208 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. |
| 2209 tracked_objects::ScopedProfile tracking_profile( |
| 2210 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 2211 "424386 SSLClientSocketNSS::Core::DoConnectCallback")); |
| 2212 |
2198 DCHECK(OnNSSTaskRunner()); | 2213 DCHECK(OnNSSTaskRunner()); |
2199 DCHECK_NE(rv, ERR_IO_PENDING); | 2214 DCHECK_NE(rv, ERR_IO_PENDING); |
2200 DCHECK(!user_connect_callback_.is_null()); | 2215 DCHECK(!user_connect_callback_.is_null()); |
2201 | 2216 |
2202 base::Closure c = base::Bind( | 2217 base::Closure c = base::Bind( |
2203 base::ResetAndReturn(&user_connect_callback_), | 2218 base::ResetAndReturn(&user_connect_callback_), |
2204 rv > OK ? OK : rv); | 2219 rv > OK ? OK : rv); |
2205 PostOrRunCallback(FROM_HERE, c); | 2220 PostOrRunCallback(FROM_HERE, c); |
2206 } | 2221 } |
2207 | 2222 |
2208 void SSLClientSocketNSS::Core::DoReadCallback(int rv) { | 2223 void SSLClientSocketNSS::Core::DoReadCallback(int rv) { |
| 2224 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. |
| 2225 tracked_objects::ScopedProfile tracking_profile( |
| 2226 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 2227 "424386 SSLClientSocketNSS::Core::DoReadCallback")); |
| 2228 |
2209 DCHECK(OnNSSTaskRunner()); | 2229 DCHECK(OnNSSTaskRunner()); |
2210 DCHECK_NE(ERR_IO_PENDING, rv); | 2230 DCHECK_NE(ERR_IO_PENDING, rv); |
2211 DCHECK(!user_read_callback_.is_null()); | 2231 DCHECK(!user_read_callback_.is_null()); |
2212 | 2232 |
2213 user_read_buf_ = NULL; | 2233 user_read_buf_ = NULL; |
2214 user_read_buf_len_ = 0; | 2234 user_read_buf_len_ = 0; |
2215 int amount_in_read_buffer = memio_GetReadableBufferSize(nss_bufs_); | 2235 int amount_in_read_buffer = memio_GetReadableBufferSize(nss_bufs_); |
2216 // This is used to curry the |amount_int_read_buffer| and |user_cb| back to | 2236 // This is used to curry the |amount_int_read_buffer| and |user_cb| back to |
2217 // the network task runner. | 2237 // the network task runner. |
2218 PostOrRunCallback( | 2238 PostOrRunCallback( |
2219 FROM_HERE, | 2239 FROM_HERE, |
2220 base::Bind(&Core::OnNSSBufferUpdated, this, amount_in_read_buffer)); | 2240 base::Bind(&Core::OnNSSBufferUpdated, this, amount_in_read_buffer)); |
2221 PostOrRunCallback( | 2241 PostOrRunCallback( |
2222 FROM_HERE, | 2242 FROM_HERE, |
2223 base::Bind(&Core::DidNSSRead, this, rv)); | 2243 base::Bind(&Core::DidNSSRead, this, rv)); |
2224 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. | 2244 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. |
2225 tracked_objects::ScopedProfile tracking_profile( | 2245 tracked_objects::ScopedProfile tracking_profile1( |
2226 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 2246 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
2227 "SSLClientSocketNSS::Core::DoReadCallback")); | 2247 "SSLClientSocketNSS::Core::DoReadCallback")); |
2228 PostOrRunCallback( | 2248 PostOrRunCallback( |
2229 FROM_HERE, | 2249 FROM_HERE, |
2230 base::Bind(base::ResetAndReturn(&user_read_callback_), rv)); | 2250 base::Bind(base::ResetAndReturn(&user_read_callback_), rv)); |
2231 } | 2251 } |
2232 | 2252 |
2233 void SSLClientSocketNSS::Core::DoWriteCallback(int rv) { | 2253 void SSLClientSocketNSS::Core::DoWriteCallback(int rv) { |
2234 DCHECK(OnNSSTaskRunner()); | 2254 DCHECK(OnNSSTaskRunner()); |
2235 DCHECK_NE(ERR_IO_PENDING, rv); | 2255 DCHECK_NE(ERR_IO_PENDING, rv); |
(...skipping 1332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3568 scoped_refptr<X509Certificate> | 3588 scoped_refptr<X509Certificate> |
3569 SSLClientSocketNSS::GetUnverifiedServerCertificateChain() const { | 3589 SSLClientSocketNSS::GetUnverifiedServerCertificateChain() const { |
3570 return core_->state().server_cert.get(); | 3590 return core_->state().server_cert.get(); |
3571 } | 3591 } |
3572 | 3592 |
3573 ChannelIDService* SSLClientSocketNSS::GetChannelIDService() const { | 3593 ChannelIDService* SSLClientSocketNSS::GetChannelIDService() const { |
3574 return channel_id_service_; | 3594 return channel_id_service_; |
3575 } | 3595 } |
3576 | 3596 |
3577 } // namespace net | 3597 } // namespace net |
OLD | NEW |