Chromium Code Reviews| Index: net/socket/ssl_client_socket_nss.cc |
| diff --git a/net/socket/ssl_client_socket_nss.cc b/net/socket/ssl_client_socket_nss.cc |
| index ca5a6891b89f7efebd7747cf0e67c32e896502d3..58a498e6ae6b7ebb27dbb085886e4797a5cba6e1 100644 |
| --- a/net/socket/ssl_client_socket_nss.cc |
| +++ b/net/socket/ssl_client_socket_nss.cc |
| @@ -639,6 +639,7 @@ class SSLClientSocketNSS::Core : public base::RefCountedThreadSafe<Core> { |
| bool IsConnected(); |
| bool HasPendingAsyncOperation(); |
| bool HasUnhandledReceivedData(); |
| + bool WasEverUsed(); |
| // Called on the network task runner. |
| // Causes the associated SSL/TLS session ID to be added to NSS's session |
| @@ -841,6 +842,10 @@ class SSLClientSocketNSS::Core : public base::RefCountedThreadSafe<Core> { |
| bool nss_waiting_write_; |
| bool nss_is_closed_; |
| + // Set when Read() or Write() successfully reads or writes data to or from the |
| + // network. |
| + bool was_ever_used_; |
| + |
| //////////////////////////////////////////////////////////////////////////// |
| // Members that are ONLY accessed on the NSS task runner: |
| //////////////////////////////////////////////////////////////////////////// |
| @@ -936,6 +941,7 @@ SSLClientSocketNSS::Core::Core( |
| nss_waiting_read_(false), |
| nss_waiting_write_(false), |
| nss_is_closed_(false), |
| + was_ever_used_(false), |
| host_and_port_(host_and_port), |
| ssl_config_(ssl_config), |
| nss_fd_(NULL), |
| @@ -1148,8 +1154,11 @@ int SSLClientSocketNSS::Core::Read(IOBuffer* buf, int buf_len, |
| return ERR_IO_PENDING; |
| } else { |
| DCHECK(!nss_waiting_read_); |
| - if (rv <= 0) |
| + if (rv <= 0) { |
| nss_is_closed_ = true; |
| + } else { |
| + was_ever_used_ = true; |
| + } |
| } |
| } |
| @@ -1202,8 +1211,11 @@ int SSLClientSocketNSS::Core::Write(IOBuffer* buf, int buf_len, |
| return ERR_IO_PENDING; |
| } else { |
| DCHECK(!nss_waiting_write_); |
| - if (rv < 0) |
| + if (rv < 0) { |
| nss_is_closed_ = true; |
| + } else if (rv > 0) { |
| + was_ever_used_ = true; |
| + } |
| } |
| } |
| @@ -1225,6 +1237,11 @@ bool SSLClientSocketNSS::Core::HasUnhandledReceivedData() { |
| return unhandled_buffer_size_ != 0; |
| } |
| +bool SSLClientSocketNSS::Core::WasEverUsed() { |
|
mmenke
2014/03/26 15:18:32
nit: const
mmenke
2014/03/26 15:18:32
Hrm...The above 3 functions can all be const, too.
davidben
2014/03/26 16:58:29
Done.
davidben
2014/03/26 16:58:29
Done.
|
| + DCHECK(OnNetworkTaskRunner()); |
| + return was_ever_used_; |
| +} |
| + |
| void SSLClientSocketNSS::Core::CacheSessionIfNecessary() { |
| // TODO(rsleevi): This should occur on the NSS task runner, due to the use of |
| // nss_fd_. However, it happens on the network task runner in order to match |
| @@ -2656,16 +2673,22 @@ void SSLClientSocketNSS::Core::DidNSSRead(int result) { |
| DCHECK(OnNetworkTaskRunner()); |
| DCHECK(nss_waiting_read_); |
| nss_waiting_read_ = false; |
| - if (result <= 0) |
| + if (result <= 0) { |
| nss_is_closed_ = true; |
| + } else { |
| + was_ever_used_ = true; |
| + } |
| } |
| void SSLClientSocketNSS::Core::DidNSSWrite(int result) { |
| DCHECK(OnNetworkTaskRunner()); |
| DCHECK(nss_waiting_write_); |
| nss_waiting_write_ = false; |
| - if (result < 0) |
| + if (result < 0) { |
| nss_is_closed_ = true; |
| + } else if (result > 0) { |
| + was_ever_used_ = true; |
| + } |
| } |
| void SSLClientSocketNSS::Core::BufferSendComplete(int result) { |
| @@ -3025,11 +3048,9 @@ void SSLClientSocketNSS::SetOmniboxSpeculation() { |
| } |
| bool SSLClientSocketNSS::WasEverUsed() const { |
| - if (transport_.get() && transport_->socket()) { |
| - return transport_->socket()->WasEverUsed(); |
| - } |
| - NOTREACHED(); |
| - return false; |
| + DCHECK(core_.get()); |
| + |
| + return core_->WasEverUsed(); |
| } |
| bool SSLClientSocketNSS::UsingTCPFastOpen() const { |