)]}'
{
  "commit": "edea33340f2457c82cf1711fd7c12c36a880d2c7",
  "tree": "139509c77585ac3a2be5c1d35d0c6866839f7401",
  "parents": [
    "2c25f5166e51ee96350cede820b03801cb0ab403"
  ],
  "author": {
    "name": "bnc",
    "email": "bnc@google.com",
    "time": "Wed Jun 10 11:43:31 2020 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Jun 10 11:44:35 2020 -0700"
  },
  "message": "Fix sending MAX_PUSH_ID frame during 0-RTT.\n\nAssume SetMaxPushId() is called with some initial value.  During 0-RTT,\nSendInitialData() is called, it sends a MAX_PUSH_ID and sets\n|http3_max_push_id_sent_|.  If SetMaxPushId() is called with a different value\nafter this but before 1-RTT keys are available, it does not send the MAX_PUSH_ID\nframe with the updated value because OneRttKeysAvailable() is false.  Then\nSendInitialData() is called when 1-RTT keys are available, but it does not send\nthe updated MAX_PUSH_ID frame either, because |http3_max_push_id_sent_| is true.\n\nThis CL fixes that by gating on IsEncryptionEstablished() instead of\nOneRttKeysAvailable() in SetMaxPushId().  However, it introduces a new bug:\n\nAssume there is no initial SetMaxPushId() call.  During 0-RTT, SendInitialData()\nis called, but it does not send a MAX_PUSH_ID frame because |max_push_id_| is\nnot set.  Then SetMaxPushId() is called before 1-RTT keys are available, and it\nnow sends the MAX_PUSH_ID frame because IsEncryptionEstablished() is true.  Then\nSendInitialData() is called when 1-RTT keys are available.  It should not send\nanother MAX_PUSH_ID frame with the same value.  In order to achieve this,\n|http3_max_push_id_sent_| must be set to true when the MAX_PUSH_ID frame is sent\nby SetMaxPushId().  This is done by setting |http3_max_push_id_sent_| in\nSendMaxPushId() instead of SendInitialData().\n\nClient-only change.\n\nPiperOrigin-RevId: 315734365\nChange-Id: Ib4dc2f96624b1c8c9a27916aa4a6ab98fbb71494\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca9b1d59c2b702601e57791d78a0fb103f9174fd",
      "old_mode": 33188,
      "old_path": "quic/core/http/quic_spdy_client_session_test.cc",
      "new_id": "fc6343e9ba26ad6778bfb3d4b8ae65b19d0abb98",
      "new_mode": 33188,
      "new_path": "quic/core/http/quic_spdy_client_session_test.cc"
    },
    {
      "type": "modify",
      "old_id": "cb6a7f60354fb7cd9211994e3573299783757cb4",
      "old_mode": 33188,
      "old_path": "quic/core/http/quic_spdy_session.cc",
      "new_id": "386fb8a65a38d5b07485b6b269325662c05ed742",
      "new_mode": 33188,
      "new_path": "quic/core/http/quic_spdy_session.cc"
    },
    {
      "type": "modify",
      "old_id": "069cceb44d752d9903a4a4b0252cfc5df2127f4a",
      "old_mode": 33188,
      "old_path": "quic/core/http/quic_spdy_session.h",
      "new_id": "013bfc3247007f07049e4ce5f0735bc0da78b2dc",
      "new_mode": 33188,
      "new_path": "quic/core/http/quic_spdy_session.h"
    }
  ]
}
