| 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 {
|
|
|