| Index: net/quic/quic_protocol.cc
 | 
| diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
 | 
| index a45c4afb8f52c06d54661cdec2af99351c2426e5..69b0205464132fd7598c0267bdb7c76dcee5ca48 100644
 | 
| --- a/net/quic/quic_protocol.cc
 | 
| +++ b/net/quic/quic_protocol.cc
 | 
| @@ -162,7 +162,7 @@ QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) {
 | 
|    }
 | 
|    // Reading from the client so this should not be considered an ERROR.
 | 
|    DVLOG(1) << "Unsupported QuicTag version: "
 | 
| -             << QuicUtils::TagToString(version_tag);
 | 
| +           << QuicUtils::TagToString(version_tag);
 | 
|    return QUIC_VERSION_UNSUPPORTED;
 | 
|  }
 | 
|  
 | 
| @@ -275,6 +275,83 @@ QuicCongestionFeedbackFrame::QuicCongestionFeedbackFrame() {
 | 
|  QuicCongestionFeedbackFrame::~QuicCongestionFeedbackFrame() {
 | 
|  }
 | 
|  
 | 
| +ostream& operator<<(ostream& os, const QuicFrame& frame) {
 | 
| +  switch (frame.type) {
 | 
| +  case PADDING_FRAME: {
 | 
| +      os << "type { PADDING_FRAME } ";
 | 
| +      break;
 | 
| +    }
 | 
| +    case RST_STREAM_FRAME: {
 | 
| +      os << "type { " << RST_STREAM_FRAME << " } " << *(frame.rst_stream_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    case CONNECTION_CLOSE_FRAME: {
 | 
| +      os << "type { CONNECTION_CLOSE_FRAME } "
 | 
| +         << *(frame.connection_close_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    case GOAWAY_FRAME: {
 | 
| +      os << "type { GOAWAY_FRAME } " << *(frame.goaway_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    case STREAM_FRAME: {
 | 
| +      os << "type { STREAM_FRAME } " << *(frame.stream_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    case ACK_FRAME: {
 | 
| +      os << "type { ACK_FRAME } " << *(frame.ack_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    case CONGESTION_FEEDBACK_FRAME: {
 | 
| +      os << "type { CONGESTION_FEEDBACK_FRAME } "
 | 
| +         << *(frame.congestion_feedback_frame);
 | 
| +      break;
 | 
| +    }
 | 
| +    default: {
 | 
| +      LOG(ERROR) << "Unknown frame type: " << frame.type;
 | 
| +      break;
 | 
| +    }
 | 
| +  }
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
| +ostream& operator<<(ostream& os, const QuicRstStreamFrame& rst_frame) {
 | 
| +  os << "stream_id { " << rst_frame.stream_id << " } "
 | 
| +     << "error_code { " << rst_frame.error_code << " } "
 | 
| +     << "error_details { " << rst_frame.error_details << " }\n";
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
| +ostream& operator<<(ostream& os,
 | 
| +                    const QuicConnectionCloseFrame& connection_close_frame) {
 | 
| +  os << "error_code { " << connection_close_frame.error_code << " } "
 | 
| +     << "error_details { " << connection_close_frame.error_details << " }\n";
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
| +ostream& operator<<(ostream& os, const QuicGoAwayFrame& goaway_frame) {
 | 
| +  os << "error_code { " << goaway_frame.error_code << " } "
 | 
| +     << "last_good_stream_id { " << goaway_frame.last_good_stream_id << " } "
 | 
| +     << "reason_phrase { " << goaway_frame.reason_phrase << " }\n";
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
| +ostream& operator<<(ostream& os, const QuicStreamFrame& stream_frame) {
 | 
| +  os << "stream_id { " << stream_frame.stream_id << " } "
 | 
| +     << "fin { " << stream_frame.fin << " } "
 | 
| +     << "offset { " << stream_frame.offset << " } "
 | 
| +     << "data { "
 | 
| +     << QuicUtils::StringToHexASCIIDump(*(stream_frame.GetDataAsString()))
 | 
| +     << " }\n";
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
| +ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
 | 
| +  os << "sent info { " << ack_frame.sent_info << " } "
 | 
| +     << "received info { " << ack_frame.received_info << " }\n";
 | 
| +  return os;
 | 
| +}
 | 
| +
 | 
|  ostream& operator<<(ostream& os,
 | 
|                      const QuicCongestionFeedbackFrame& congestion_frame) {
 | 
|    os << "type: " << congestion_frame.type;
 | 
| @@ -309,12 +386,6 @@ ostream& operator<<(ostream& os,
 | 
|    return os;
 | 
|  }
 | 
|  
 | 
| -ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
 | 
| -  os << "sent info { " << ack_frame.sent_info << " } "
 | 
| -     << "received info { " << ack_frame.received_info << " }\n";
 | 
| -  return os;
 | 
| -}
 | 
| -
 | 
|  CongestionFeedbackMessageFixRate::CongestionFeedbackMessageFixRate()
 | 
|      : bitrate(QuicBandwidth::Zero()) {
 | 
|  }
 | 
| 
 |