| Index: net/quic/quic_utils.cc
 | 
| diff --git a/net/quic/quic_utils.cc b/net/quic/quic_utils.cc
 | 
| index f8b31c4002d4de413d4c8e8baa8959729577021c..17e74618708dafcbd6b97ee81bcca731cf1e0d0c 100644
 | 
| --- a/net/quic/quic_utils.cc
 | 
| +++ b/net/quic/quic_utils.cc
 | 
| @@ -42,23 +42,36 @@ uint64 QuicUtils::FNV1a_64_Hash(const char* data, int len) {
 | 
|  
 | 
|  // static
 | 
|  uint128 QuicUtils::FNV1a_128_Hash(const char* data, int len) {
 | 
| -  // The following two constants are defined as part of the hash algorithm.
 | 
| +  return FNV1a_128_Hash_Two(data, len, nullptr, 0);
 | 
| +}
 | 
| +
 | 
| +// static
 | 
| +uint128 QuicUtils::FNV1a_128_Hash_Two(const char* data1,
 | 
| +                                      int len1,
 | 
| +                                      const char* data2,
 | 
| +                                      int len2) {
 | 
| +  // The two constants are defined as part of the hash algorithm.
 | 
|    // see http://www.isthe.com/chongo/tech/comp/fnv/
 | 
| -  // 309485009821345068724781371
 | 
| -  const uint128 kPrime(16777216, 315);
 | 
|    // 144066263297769815596495629667062367629
 | 
|    const uint128 kOffset(GG_UINT64_C(7809847782465536322),
 | 
|                          GG_UINT64_C(7113472399480571277));
 | 
|  
 | 
| -  const uint8* octets = reinterpret_cast<const uint8*>(data);
 | 
| -
 | 
| -  uint128 hash = kOffset;
 | 
| +  uint128 hash = IncrementalHash(kOffset, data1, len1);
 | 
| +  if (data2 == nullptr) {
 | 
| +    return hash;
 | 
| +  }
 | 
| +  return IncrementalHash(hash, data2, len2);
 | 
| +}
 | 
|  
 | 
| -  for (int i = 0; i < len; ++i) {
 | 
| +// static
 | 
| +uint128 QuicUtils::IncrementalHash(uint128 hash, const char* data, size_t len) {
 | 
| +  // 309485009821345068724781371
 | 
| +  const uint128 kPrime(16777216, 315);
 | 
| +  const uint8* octets = reinterpret_cast<const uint8*>(data);
 | 
| +  for (size_t i = 0; i < len; ++i) {
 | 
|      hash  = hash ^ uint128(0, octets[i]);
 | 
|      hash = hash * kPrime;
 | 
|    }
 | 
| -
 | 
|    return hash;
 | 
|  }
 | 
|  
 | 
| @@ -221,6 +234,7 @@ const char* QuicUtils::ErrorToString(QuicErrorCode error) {
 | 
|      RETURN_STRING_LITERAL(QUIC_VERSION_NEGOTIATION_MISMATCH);
 | 
|      RETURN_STRING_LITERAL(QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS);
 | 
|      RETURN_STRING_LITERAL(QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS);
 | 
| +    RETURN_STRING_LITERAL(QUIC_CONNECTION_CANCELLED);
 | 
|      RETURN_STRING_LITERAL(QUIC_LAST_ERROR);
 | 
|      // Intentionally have no default case, so we'll break the build
 | 
|      // if we add errors and don't put them here.
 | 
| 
 |