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 d2c9959c389cf09a5bd8e5acdbff874c934fdf0d..aeb8179b2e5a39723be33faf6af64c911051d0db 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 |
@@ -840,6 +841,7 @@ class SSLClientSocketNSS::Core : public base::RefCountedThreadSafe<Core> { |
bool nss_waiting_read_; |
bool nss_waiting_write_; |
bool nss_is_closed_; |
+ bool was_used_to_convey_data_; |
//////////////////////////////////////////////////////////////////////////// |
// Members that are ONLY accessed on the NSS task runner: |
@@ -936,6 +938,7 @@ SSLClientSocketNSS::Core::Core( |
nss_waiting_read_(false), |
nss_waiting_write_(false), |
nss_is_closed_(false), |
+ was_used_to_convey_data_(false), |
host_and_port_(host_and_port), |
ssl_config_(ssl_config), |
nss_fd_(NULL), |
@@ -1148,8 +1151,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_used_to_convey_data_ = true; |
+ } |
} |
} |
@@ -1202,8 +1208,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 { |
+ was_used_to_convey_data_ = true; |
+ } |
} |
} |
@@ -1225,6 +1234,11 @@ bool SSLClientSocketNSS::Core::HasUnhandledReceivedData() { |
return unhandled_buffer_size_ != 0; |
} |
+bool SSLClientSocketNSS::Core::WasEverUsed() { |
+ DCHECK(OnNetworkTaskRunner()); |
+ return was_used_to_convey_data_; |
+} |
+ |
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 |
@@ -2651,16 +2665,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_used_to_convey_data_ = 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 { |
+ was_used_to_convey_data_ = true; |
+ } |
} |
void SSLClientSocketNSS::Core::BufferSendComplete(int result) { |
@@ -3020,11 +3040,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 { |