Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(653)

Side by Side Diff: net/socket/ssl_client_socket_nss.cc

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_session_cache_openssl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 #include <limits> 64 #include <limits>
65 #include <map> 65 #include <map>
66 66
67 #include "base/bind.h" 67 #include "base/bind.h"
68 #include "base/bind_helpers.h" 68 #include "base/bind_helpers.h"
69 #include "base/callback_helpers.h" 69 #include "base/callback_helpers.h"
70 #include "base/compiler_specific.h" 70 #include "base/compiler_specific.h"
71 #include "base/logging.h" 71 #include "base/logging.h"
72 #include "base/memory/singleton.h" 72 #include "base/memory/singleton.h"
73 #include "base/metrics/histogram.h" 73 #include "base/metrics/histogram.h"
74 #include "base/profiler/scoped_profile.h" 74 #include "base/profiler/scoped_tracker.h"
75 #include "base/single_thread_task_runner.h" 75 #include "base/single_thread_task_runner.h"
76 #include "base/stl_util.h" 76 #include "base/stl_util.h"
77 #include "base/strings/string_number_conversions.h" 77 #include "base/strings/string_number_conversions.h"
78 #include "base/strings/string_util.h" 78 #include "base/strings/string_util.h"
79 #include "base/strings/stringprintf.h" 79 #include "base/strings/stringprintf.h"
80 #include "base/thread_task_runner_handle.h" 80 #include "base/thread_task_runner_handle.h"
81 #include "base/threading/thread_restrictions.h" 81 #include "base/threading/thread_restrictions.h"
82 #include "base/values.h" 82 #include "base/values.h"
83 #include "crypto/ec_private_key.h" 83 #include "crypto/ec_private_key.h"
84 #include "crypto/nss_util.h" 84 #include "crypto/nss_util.h"
(...skipping 1597 matching lines...) Expand 10 before | Expand all | Expand 10 after
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. 1692 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
1693 tracked_objects::ScopedProfile tracking_profile( 1693 tracked_objects::ScopedTracker tracking_profile(
1694 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1694 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1695 "424386 SSLClientSocketNSS::Core::DoHandshakeLoop")); 1695 "424386 SSLClientSocketNSS::Core::DoHandshakeLoop"));
1696 1696
1697 DCHECK(OnNSSTaskRunner()); 1697 DCHECK(OnNSSTaskRunner());
1698 1698
1699 int rv = last_io_result; 1699 int rv = last_io_result;
1700 do { 1700 do {
1701 // Default to STATE_NONE for next state. 1701 // Default to STATE_NONE for next state.
1702 State state = next_handshake_state_; 1702 State state = next_handshake_state_;
1703 GotoState(STATE_NONE); 1703 GotoState(STATE_NONE);
(...skipping 19 matching lines...) Expand all
1723 // 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
1724 // the transport IO may allow DoHandshake to make progress. 1724 // the transport IO may allow DoHandshake to make progress.
1725 DCHECK(rv == OK || rv == ERR_IO_PENDING); 1725 DCHECK(rv == OK || rv == ERR_IO_PENDING);
1726 rv = OK; // This causes us to stay in the loop. 1726 rv = OK; // This causes us to stay in the loop.
1727 } 1727 }
1728 } while (rv != ERR_IO_PENDING && next_handshake_state_ != STATE_NONE); 1728 } while (rv != ERR_IO_PENDING && next_handshake_state_ != STATE_NONE);
1729 return rv; 1729 return rv;
1730 } 1730 }
1731 1731
1732 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. 1733 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
1734 tracked_objects::ScopedProfile tracking_profile( 1734 tracked_objects::ScopedTracker tracking_profile(
1735 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1735 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1736 "424386 SSLClientSocketNSS::Core::DoReadLoop")); 1736 "424386 SSLClientSocketNSS::Core::DoReadLoop"));
1737 1737
1738 DCHECK(OnNSSTaskRunner()); 1738 DCHECK(OnNSSTaskRunner());
1739 DCHECK(false_started_ || handshake_callback_called_); 1739 DCHECK(false_started_ || handshake_callback_called_);
1740 DCHECK_EQ(STATE_NONE, next_handshake_state_); 1740 DCHECK_EQ(STATE_NONE, next_handshake_state_);
1741 1741
1742 if (result < 0) 1742 if (result < 0)
1743 return result; 1743 return result;
1744 1744
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 do { 1787 do {
1788 rv = DoPayloadWrite(); 1788 rv = DoPayloadWrite();
1789 network_moved = DoTransportIO(); 1789 network_moved = DoTransportIO();
1790 } while (rv == ERR_IO_PENDING && network_moved); 1790 } while (rv == ERR_IO_PENDING && network_moved);
1791 1791
1792 LeaveFunction(rv); 1792 LeaveFunction(rv);
1793 return rv; 1793 return rv;
1794 } 1794 }
1795 1795
1796 int SSLClientSocketNSS::Core::DoHandshake() { 1796 int SSLClientSocketNSS::Core::DoHandshake() {
1797 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. 1797 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
1798 tracked_objects::ScopedProfile tracking_profile( 1798 tracked_objects::ScopedTracker tracking_profile(
1799 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1799 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1800 "424386 SSLClientSocketNSS::Core::DoHandshake")); 1800 "424386 SSLClientSocketNSS::Core::DoHandshake"));
1801 1801
1802 DCHECK(OnNSSTaskRunner()); 1802 DCHECK(OnNSSTaskRunner());
1803 1803
1804 int net_error = OK; 1804 int net_error = OK;
1805 SECStatus rv = SSL_ForceHandshake(nss_fd_); 1805 SECStatus rv = SSL_ForceHandshake(nss_fd_);
1806 1806
1807 // Note: this function may be called multiple times during the handshake, so 1807 // Note: this function may be called multiple times during the handshake, so
1808 // even though channel id and client auth are separate else cases, they can 1808 // even though channel id and client auth are separate else cases, they can
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1843 base::Bind(&AddLogEventWithCallback, weak_net_log_, 1843 base::Bind(&AddLogEventWithCallback, weak_net_log_,
1844 NetLog::TYPE_SSL_HANDSHAKE_ERROR, 1844 NetLog::TYPE_SSL_HANDSHAKE_ERROR,
1845 CreateNetLogSSLErrorCallback(net_error, prerr))); 1845 CreateNetLogSSLErrorCallback(net_error, prerr)));
1846 } 1846 }
1847 } 1847 }
1848 1848
1849 return net_error; 1849 return net_error;
1850 } 1850 }
1851 1851
1852 int SSLClientSocketNSS::Core::DoGetDBCertComplete(int result) { 1852 int SSLClientSocketNSS::Core::DoGetDBCertComplete(int result) {
1853 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. 1853 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
1854 tracked_objects::ScopedProfile tracking_profile( 1854 tracked_objects::ScopedTracker tracking_profile(
1855 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1855 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1856 "424386 SSLClientSocketNSS::Core::DoGetDBCertComplete")); 1856 "424386 SSLClientSocketNSS::Core::DoGetDBCertComplete"));
1857 1857
1858 SECStatus rv; 1858 SECStatus rv;
1859 PostOrRunCallback( 1859 PostOrRunCallback(
1860 FROM_HERE, 1860 FROM_HERE,
1861 base::Bind(&BoundNetLog::EndEventWithNetErrorCode, weak_net_log_, 1861 base::Bind(&BoundNetLog::EndEventWithNetErrorCode, weak_net_log_,
1862 NetLog::TYPE_SSL_GET_DOMAIN_BOUND_CERT, result)); 1862 NetLog::TYPE_SSL_GET_DOMAIN_BOUND_CERT, result));
1863 1863
1864 channel_id_needed_ = false; 1864 channel_id_needed_ = false;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 base::Bind(&AddLogEventWithCallback, weak_net_log_, 2032 base::Bind(&AddLogEventWithCallback, weak_net_log_,
2033 NetLog::TYPE_SSL_WRITE_ERROR, 2033 NetLog::TYPE_SSL_WRITE_ERROR,
2034 CreateNetLogSSLErrorCallback(rv, prerr))); 2034 CreateNetLogSSLErrorCallback(rv, prerr)));
2035 return rv; 2035 return rv;
2036 } 2036 }
2037 2037
2038 // Do as much network I/O as possible between the buffer and the 2038 // Do as much network I/O as possible between the buffer and the
2039 // transport socket. Return true if some I/O performed, false 2039 // transport socket. Return true if some I/O performed, false
2040 // otherwise (error or ERR_IO_PENDING). 2040 // otherwise (error or ERR_IO_PENDING).
2041 bool SSLClientSocketNSS::Core::DoTransportIO() { 2041 bool SSLClientSocketNSS::Core::DoTransportIO() {
2042 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. 2042 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
2043 tracked_objects::ScopedProfile tracking_profile( 2043 tracked_objects::ScopedTracker tracking_profile(
2044 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2044 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2045 "424386 SSLClientSocketNSS::Core::DoTransportIO")); 2045 "424386 SSLClientSocketNSS::Core::DoTransportIO"));
2046 2046
2047 DCHECK(OnNSSTaskRunner()); 2047 DCHECK(OnNSSTaskRunner());
2048 2048
2049 bool network_moved = false; 2049 bool network_moved = false;
2050 if (nss_bufs_ != NULL) { 2050 if (nss_bufs_ != NULL) {
2051 int rv; 2051 int rv;
2052 // Read and write as much data as we can. The loop is neccessary 2052 // Read and write as much data as we can. The loop is neccessary
2053 // because Write() may return synchronously. 2053 // because Write() may return synchronously.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 DoWriteCallback(rv_write); 2213 DoWriteCallback(rv_write);
2214 } 2214 }
2215 2215
2216 // As part of Connect(), the SSLClientSocketNSS object performs an SSL 2216 // As part of Connect(), the SSLClientSocketNSS object performs an SSL
2217 // handshake. This requires network IO, which in turn calls 2217 // handshake. This requires network IO, which in turn calls
2218 // BufferRecvComplete() with a non-zero byte count. This byte count eventually 2218 // BufferRecvComplete() with a non-zero byte count. This byte count eventually
2219 // winds its way through the state machine and ends up being passed to the 2219 // winds its way through the state machine and ends up being passed to the
2220 // callback. For Read() and Write(), that's what we want. But for Connect(), 2220 // callback. For Read() and Write(), that's what we want. But for Connect(),
2221 // the caller expects OK (i.e. 0) for success. 2221 // the caller expects OK (i.e. 0) for success.
2222 void SSLClientSocketNSS::Core::DoConnectCallback(int rv) { 2222 void SSLClientSocketNSS::Core::DoConnectCallback(int rv) {
2223 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. 2223 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
2224 tracked_objects::ScopedProfile tracking_profile( 2224 tracked_objects::ScopedTracker tracking_profile(
2225 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2225 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2226 "424386 SSLClientSocketNSS::Core::DoConnectCallback")); 2226 "424386 SSLClientSocketNSS::Core::DoConnectCallback"));
2227 2227
2228 DCHECK(OnNSSTaskRunner()); 2228 DCHECK(OnNSSTaskRunner());
2229 DCHECK_NE(rv, ERR_IO_PENDING); 2229 DCHECK_NE(rv, ERR_IO_PENDING);
2230 DCHECK(!user_connect_callback_.is_null()); 2230 DCHECK(!user_connect_callback_.is_null());
2231 2231
2232 base::Closure c = base::Bind( 2232 base::Closure c = base::Bind(
2233 base::ResetAndReturn(&user_connect_callback_), 2233 base::ResetAndReturn(&user_connect_callback_),
2234 rv > OK ? OK : rv); 2234 rv > OK ? OK : rv);
2235 PostOrRunCallback(FROM_HERE, c); 2235 PostOrRunCallback(FROM_HERE, c);
2236 } 2236 }
2237 2237
2238 void SSLClientSocketNSS::Core::DoReadCallback(int rv) { 2238 void SSLClientSocketNSS::Core::DoReadCallback(int rv) {
2239 // TODO(vadimt): Remove ScopedProfile below once crbug.com/424386 is fixed. 2239 // TODO(vadimt): Remove ScopedTracker below once crbug.com/424386 is fixed.
2240 tracked_objects::ScopedProfile tracking_profile( 2240 tracked_objects::ScopedTracker tracking_profile(
2241 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2241 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2242 "424386 SSLClientSocketNSS::Core::DoReadCallback")); 2242 "424386 SSLClientSocketNSS::Core::DoReadCallback"));
2243 2243
2244 DCHECK(OnNSSTaskRunner()); 2244 DCHECK(OnNSSTaskRunner());
2245 DCHECK_NE(ERR_IO_PENDING, rv); 2245 DCHECK_NE(ERR_IO_PENDING, rv);
2246 DCHECK(!user_read_callback_.is_null()); 2246 DCHECK(!user_read_callback_.is_null());
2247 2247
2248 user_read_buf_ = NULL; 2248 user_read_buf_ = NULL;
2249 user_read_buf_len_ = 0; 2249 user_read_buf_len_ = 0;
2250 int amount_in_read_buffer = memio_GetReadableBufferSize(nss_bufs_); 2250 int amount_in_read_buffer = memio_GetReadableBufferSize(nss_bufs_);
2251 // This is used to curry the |amount_int_read_buffer| and |user_cb| back to 2251 // This is used to curry the |amount_int_read_buffer| and |user_cb| back to
2252 // the network task runner. 2252 // the network task runner.
2253 PostOrRunCallback( 2253 PostOrRunCallback(
2254 FROM_HERE, 2254 FROM_HERE,
2255 base::Bind(&Core::OnNSSBufferUpdated, this, amount_in_read_buffer)); 2255 base::Bind(&Core::OnNSSBufferUpdated, this, amount_in_read_buffer));
2256 PostOrRunCallback( 2256 PostOrRunCallback(
2257 FROM_HERE, 2257 FROM_HERE,
2258 base::Bind(&Core::DidNSSRead, this, rv)); 2258 base::Bind(&Core::DidNSSRead, this, rv));
2259 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. 2259 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
2260 tracked_objects::ScopedProfile tracking_profile1( 2260 tracked_objects::ScopedTracker tracking_profile1(
2261 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2261 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2262 "SSLClientSocketNSS::Core::DoReadCallback")); 2262 "SSLClientSocketNSS::Core::DoReadCallback"));
2263 PostOrRunCallback( 2263 PostOrRunCallback(
2264 FROM_HERE, 2264 FROM_HERE,
2265 base::Bind(base::ResetAndReturn(&user_read_callback_), rv)); 2265 base::Bind(base::ResetAndReturn(&user_read_callback_), rv));
2266 } 2266 }
2267 2267
2268 void SSLClientSocketNSS::Core::DoWriteCallback(int rv) { 2268 void SSLClientSocketNSS::Core::DoWriteCallback(int rv) {
2269 DCHECK(OnNSSTaskRunner()); 2269 DCHECK(OnNSSTaskRunner());
2270 DCHECK_NE(ERR_IO_PENDING, rv); 2270 DCHECK_NE(ERR_IO_PENDING, rv);
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
2684 DCHECK(nss_waiting_write_); 2684 DCHECK(nss_waiting_write_);
2685 nss_waiting_write_ = false; 2685 nss_waiting_write_ = false;
2686 if (result < 0) { 2686 if (result < 0) {
2687 nss_is_closed_ = true; 2687 nss_is_closed_ = true;
2688 } else if (result > 0) { 2688 } else if (result > 0) {
2689 was_ever_used_ = true; 2689 was_ever_used_ = true;
2690 } 2690 }
2691 } 2691 }
2692 2692
2693 void SSLClientSocketNSS::Core::BufferSendComplete(int result) { 2693 void SSLClientSocketNSS::Core::BufferSendComplete(int result) {
2694 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. 2694 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
2695 tracked_objects::ScopedProfile tracking_profile( 2695 tracked_objects::ScopedTracker tracking_profile(
2696 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2696 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2697 "418183 DidCompleteReadWrite => Core::BufferSendComplete")); 2697 "418183 DidCompleteReadWrite => Core::BufferSendComplete"));
2698 2698
2699 if (!OnNSSTaskRunner()) { 2699 if (!OnNSSTaskRunner()) {
2700 if (detached_) 2700 if (detached_)
2701 return; 2701 return;
2702 2702
2703 nss_task_runner_->PostTask( 2703 nss_task_runner_->PostTask(
2704 FROM_HERE, base::Bind(&Core::BufferSendComplete, this, result)); 2704 FROM_HERE, base::Bind(&Core::BufferSendComplete, this, result));
2705 return; 2705 return;
(...skipping 26 matching lines...) Expand all
2732 void SSLClientSocketNSS::Core::OnGetChannelIDComplete(int result) { 2732 void SSLClientSocketNSS::Core::OnGetChannelIDComplete(int result) {
2733 DVLOG(1) << __FUNCTION__ << " " << result; 2733 DVLOG(1) << __FUNCTION__ << " " << result;
2734 DCHECK(OnNetworkTaskRunner()); 2734 DCHECK(OnNetworkTaskRunner());
2735 2735
2736 OnHandshakeIOComplete(result); 2736 OnHandshakeIOComplete(result);
2737 } 2737 }
2738 2738
2739 void SSLClientSocketNSS::Core::BufferRecvComplete( 2739 void SSLClientSocketNSS::Core::BufferRecvComplete(
2740 IOBuffer* read_buffer, 2740 IOBuffer* read_buffer,
2741 int result) { 2741 int result) {
2742 // TODO(vadimt): Remove ScopedProfile below once crbug.com/418183 is fixed. 2742 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
2743 tracked_objects::ScopedProfile tracking_profile( 2743 tracked_objects::ScopedTracker tracking_profile(
2744 FROM_HERE_WITH_EXPLICIT_FUNCTION( 2744 FROM_HERE_WITH_EXPLICIT_FUNCTION(
2745 "418183 DidCompleteReadWrite => SSLClientSocketNSS::Core::...")); 2745 "418183 DidCompleteReadWrite => SSLClientSocketNSS::Core::..."));
2746 2746
2747 DCHECK(read_buffer); 2747 DCHECK(read_buffer);
2748 2748
2749 if (!OnNSSTaskRunner()) { 2749 if (!OnNSSTaskRunner()) {
2750 if (detached_) 2750 if (detached_)
2751 return; 2751 return;
2752 2752
2753 nss_task_runner_->PostTask( 2753 nss_task_runner_->PostTask(
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after
3622 scoped_refptr<X509Certificate> 3622 scoped_refptr<X509Certificate>
3623 SSLClientSocketNSS::GetUnverifiedServerCertificateChain() const { 3623 SSLClientSocketNSS::GetUnverifiedServerCertificateChain() const {
3624 return core_->state().server_cert.get(); 3624 return core_->state().server_cert.get();
3625 } 3625 }
3626 3626
3627 ChannelIDService* SSLClientSocketNSS::GetChannelIDService() const { 3627 ChannelIDService* SSLClientSocketNSS::GetChannelIDService() const {
3628 return channel_id_service_; 3628 return channel_id_service_;
3629 } 3629 }
3630 3630
3631 } // namespace net 3631 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_nss.h ('k') | net/socket/ssl_session_cache_openssl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698