| Index: net/spdy/spdy_session.cc
|
| diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
|
| index 4f2ac3adc54d069094f7338771ba13c81b728f38..5f2cbbb429483c4140c9cdb08b58dd7a4f5a8222 100644
|
| --- a/net/spdy/spdy_session.cc
|
| +++ b/net/spdy/spdy_session.cc
|
| @@ -497,6 +497,7 @@ int SpdySession::GetPushStream(
|
| (url.SchemeIs("https") || url.SchemeIs("wss"))) {
|
| CloseSessionOnError(
|
| static_cast<net::Error>(certificate_error_code_),
|
| + REQUST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION,
|
| true,
|
| "Tried to get SPDY stream for secure content over an unauthenticated "
|
| "session.");
|
| @@ -599,6 +600,7 @@ int SpdySession::CreateStreamImpl(
|
| (url.SchemeIs("https") || url.SchemeIs("wss"))) {
|
| CloseSessionOnError(
|
| static_cast<net::Error>(certificate_error_code_),
|
| + REQUST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION,
|
| true,
|
| "Tried to create SPDY stream for secure content over an "
|
| "unauthenticated session.");
|
| @@ -876,7 +878,8 @@ void SpdySession::OnReadComplete(int bytes_read) {
|
| net::Error error = static_cast<net::Error>(bytes_read);
|
| if (bytes_read == 0)
|
| error = ERR_CONNECTION_CLOSED;
|
| - CloseSessionOnError(error, true, "bytes_read is <= 0.");
|
| + CloseSessionOnError(error, READ_FAILED, true,
|
| + "bytes_read is <= 0.");
|
| return;
|
| }
|
|
|
| @@ -954,7 +957,8 @@ void SpdySession::OnWriteComplete(int result) {
|
|
|
| // The stream is now errored. Close it down.
|
| CloseSessionOnError(
|
| - static_cast<net::Error>(result), true, "The stream has errored.");
|
| + static_cast<net::Error>(result), WRITE_FAILED, true,
|
| + "The stream has errored.");
|
| }
|
| }
|
|
|
| @@ -976,7 +980,8 @@ net::Error SpdySession::ReadSocket() {
|
| switch (bytes_read) {
|
| case 0:
|
| // Socket is closed!
|
| - CloseSessionOnError(ERR_CONNECTION_CLOSED, true, "bytes_read is 0.");
|
| + CloseSessionOnError(ERR_CONNECTION_CLOSED, READ_FAILED, true,
|
| + "bytes_read is 0.");
|
| return ERR_CONNECTION_CLOSED;
|
| case net::ERR_IO_PENDING:
|
| // Waiting for data. Nothing to do now.
|
| @@ -1043,7 +1048,8 @@ void SpdySession::WriteSocket() {
|
| reinterpret_cast<const SpdyControlFrame&>(uncompressed_frame)));
|
| if (!compressed_frame.get()) {
|
| CloseSessionOnError(
|
| - net::ERR_SPDY_PROTOCOL_ERROR, true, "SPDY Compression failure.");
|
| + net::ERR_SPDY_PROTOCOL_ERROR, SPDY_COMPRESSION_FAILURE, true,
|
| + "SPDY Compression failure.");
|
| return;
|
| }
|
|
|
| @@ -1140,8 +1146,15 @@ void SpdySession::QueueFrame(SpdyFrame* frame,
|
| }
|
|
|
| void SpdySession::CloseSessionOnError(net::Error err,
|
| + SpdySessionErrorDetails details,
|
| bool remove_from_pool,
|
| const std::string& description) {
|
| + UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionErrorDetails", details,
|
| + NUM_SPDY_SESSION_ERROR_DETAILS);
|
| + if (EndsWith(host_port_pair().host(), "google.com", false)) {
|
| + UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionErrorDetails_Google", details,
|
| + NUM_SPDY_SESSION_ERROR_DETAILS);
|
| + }
|
| // Closing all streams can have a side-effect of dropping the last reference
|
| // to |this|. Hold a reference through this function.
|
| scoped_refptr<SpdySession> self(this);
|
| @@ -1322,10 +1335,12 @@ SSLClientCertType SpdySession::GetDomainBoundCertType() const {
|
| return GetSSLClientSocket()->domain_bound_cert_type();
|
| }
|
|
|
| -void SpdySession::OnError(int error_code) {
|
| +void SpdySession::OnError(SpdyFramer::SpdyError error_code) {
|
| std::string description = base::StringPrintf(
|
| "SPDY_ERROR error_code: %d.", error_code);
|
| - CloseSessionOnError(net::ERR_SPDY_PROTOCOL_ERROR, true, description);
|
| + CloseSessionOnError(net::ERR_SPDY_PROTOCOL_ERROR,
|
| + static_cast<SpdySessionErrorDetails>(error_code),
|
| + true, description);
|
| }
|
|
|
| void SpdySession::OnStreamError(SpdyStreamId stream_id,
|
| @@ -1621,7 +1636,8 @@ void SpdySession::OnPing(const SpdyPingControlFrame& frame) {
|
| --pings_in_flight_;
|
| if (pings_in_flight_ < 0) {
|
| CloseSessionOnError(
|
| - net::ERR_SPDY_PROTOCOL_ERROR, true, "pings_in_flight_ is < 0.");
|
| + net::ERR_SPDY_PROTOCOL_ERROR, UNEXPECTED_PING, true,
|
| + "pings_in_flight_ is < 0.");
|
| return;
|
| }
|
|
|
| @@ -1861,7 +1877,8 @@ void SpdySession::CheckPingStatus(base::TimeTicks last_check_time) {
|
| base::TimeDelta delay = hung_interval_ - (now - received_data_time_);
|
|
|
| if (delay.InMilliseconds() < 0 || received_data_time_ < last_check_time) {
|
| - CloseSessionOnError(net::ERR_SPDY_PING_FAILED, true, "Failed ping.");
|
| + CloseSessionOnError(net::ERR_SPDY_PING_FAILED, PING_FAILED, true,
|
| + "Failed ping.");
|
| // Track all failed PING messages in a separate bucket.
|
| const base::TimeDelta kFailedPing =
|
| base::TimeDelta::FromInternalValue(INT_MAX);
|
|
|