| Index: net/quic/quic_framer.cc | 
| diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc | 
| index d60cb7026411dd8be212d638afdfd3636caf2e47..f5ec5e199cd72d12b6842d3d09af47e21d6b9d21 100644 | 
| --- a/net/quic/quic_framer.cc | 
| +++ b/net/quic/quic_framer.cc | 
| @@ -425,8 +425,8 @@ bool QuicFramer::ProcessAckFrame(QuicAckFrame* frame) { | 
| } | 
|  | 
| bool QuicFramer::ProcessReceivedInfo(ReceivedPacketInfo* received_info) { | 
| -  if (!reader_->ReadUInt48(&received_info->largest_received)) { | 
| -     set_detailed_error("Unable to read largest received."); | 
| +  if (!reader_->ReadUInt48(&received_info->largest_observed)) { | 
| +     set_detailed_error("Unable to read largest observed."); | 
| return false; | 
| } | 
|  | 
| @@ -671,7 +671,7 @@ size_t QuicFramer::ComputeFramePayloadLength(const QuicFrame& frame) { | 
| break;  // Need to support this eventually :> | 
| case ACK_FRAME: { | 
| const QuicAckFrame& ack = *frame.ack_frame; | 
| -      len += 6;  // largest received packet sequence number | 
| +      len += 6;  // largest observed packet sequence number | 
| len += 1;  // num missing packets | 
| len += 6 * ack.received_info.missing_packets.size(); | 
| len += 6;  // least packet sequence number awaiting an ack | 
| @@ -753,8 +753,7 @@ bool QuicFramer::AppendStreamFramePayload( | 
| return true; | 
| } | 
|  | 
| -// TODO(alyssar): revisit the complexity here to rch's satisfaction | 
| -QuicPacketSequenceNumber QuicFramer::CalculateLargestReceived( | 
| +QuicPacketSequenceNumber QuicFramer::CalculateLargestObserved( | 
| const SequenceSet& missing_packets, | 
| SequenceSet::const_iterator largest_written) { | 
| SequenceSet::const_iterator it = largest_written; | 
| @@ -767,21 +766,8 @@ QuicPacketSequenceNumber QuicFramer::CalculateLargestReceived( | 
| return *it - 1; | 
| } | 
|  | 
| -  // If we've hit the end of the list, and we're not missing any packets, try | 
| -  // finding a gap between the largest written and the beginning of the set. | 
| -  it = largest_written++; | 
| -  previous_missing = *it; | 
| -  do { | 
| -    --it; | 
| -    if (previous_missing - 1 != *it) { | 
| -      return previous_missing - 1; | 
| -    } | 
| -    previous_missing = *it; | 
| -  } while (it != missing_packets.begin()); | 
| - | 
| -  // The missing packets are entirely contiguous.  Return the value of the first | 
| -  // missing packet - 1, as that must have been seen. | 
| -  return  *missing_packets.begin() - 1; | 
| +  // Otherwise return the largest missing packet, as indirectly observed. | 
| +  return *largest_written; | 
| } | 
|  | 
| // TODO(ianswett): Use varints or another more compact approach for all deltas. | 
| @@ -792,8 +778,8 @@ bool QuicFramer::AppendAckFramePayload( | 
| return false; | 
| } | 
|  | 
| -  size_t largest_received_offset = writer->length(); | 
| -  if (!writer->WriteUInt48(frame.received_info.largest_received)) { | 
| +  size_t largest_observed_offset = writer->length(); | 
| +  if (!writer->WriteUInt48(frame.received_info.largest_observed)) { | 
| return false; | 
| } | 
|  | 
| @@ -809,10 +795,10 @@ bool QuicFramer::AppendAckFramePayload( | 
| int num_missing_packets_written = 0; | 
| for (; it != frame.received_info.missing_packets.end(); ++it) { | 
| if (!writer->WriteUInt48(*it)) { | 
| -      // We are truncating.  Overwrite largest_received. | 
| -      QuicPacketSequenceNumber largest_received = | 
| -          CalculateLargestReceived(frame.received_info.missing_packets, --it); | 
| -      writer->WriteUInt48ToOffset(largest_received, largest_received_offset); | 
| +      // We are truncating.  Overwrite largest_observed. | 
| +      QuicPacketSequenceNumber largest_observed = | 
| +          CalculateLargestObserved(frame.received_info.missing_packets, --it); | 
| +      writer->WriteUInt48ToOffset(largest_observed, largest_observed_offset); | 
| writer->WriteUInt8ToOffset(num_missing_packets_written, | 
| num_missing_packets_offset); | 
| return true; | 
|  |