It does help a lot, but I'm still a bit unsure as to why flow control updates aren't being sent by Chrome:
1) When the available flow control is low.
2) When the BLOCKED frame is received.
One observation on the BLOCKED frame is that according to Wireshark, the server is sending a "Stream Data Limit" of 0, but IETF QUIC draft29 appears to be the negotiated version, indicating that a non-0 value should be sent.
Are you seeing a similar flow control issue with downloading larger files(ie: the Google drive attachment you sent above) from Google servers? I didn't observe any pauses or BLOCKED frames when downloading that file you shared with me, which makes me believe there may be an issue that's difficult to reproduce? ie: maybe a test with no packet loss?
Frame 5426: 68 bytes on wire (544 bits), 68 bytes captured (544 bits) on interface unknown, id 0
Ethernet II, Src: HewlettP_40:94:e5 (ec:b1:d7:40:94:e5), Dst: D-Link_f1:9f:58 (00:15:e9:f1:9f:58)
Internet Protocol Version 4, Src: 192.168.2.253, Dst: 192.168.2.86
User Datagram Protocol, Src Port: 6121, Dst Port: 54393
QUIC IETF
QUIC Connection information
[Packet Length: 26]
QUIC Short Header PKN=4755
0... .... = Header Form: Short Header (0)
.1.. .... = Fixed Bit: True
..0. .... = Spin Bit: False
...0 0... = Reserved: 0
.... .0.. = Key Phase Bit: False
.... ..01 = Packet Number Length: 2 bytes (1)
Packet Number: 4755
Protected Payload: b13235ce4a263acad2e41886d214d863bd77bdf8d2297f
STREAM_DATA_BLOCKED id=0
Frame Type: STREAM_DATA_BLOCKED (0x0000000000000015)
Stream ID: 0
Stream Data Limit: 0
PADDING Length: 4
Frame Type: PADDING (0x0000000000000000)
[Padding Length: 4]e
The netlog does not include the offset of the blocked frame, so I can't tell if it is actually 0, but if it is, that sounds like a server bug.
One possibility for why no flow control updates are sent is that Chrome is not reading from the buffer very often? But over 5 seconds is quite a long time, so that sounds odd.
t= 1774 [st= 1771] QUIC_SESSION_PACKET_RECEIVED
--> peer_address = "192.168.2.253:6121"
--> self_address = "192.168.2.86:54393"
--> size = 26
t= 1774 [st= 1771] QUIC_SESSION_UNAUTHENTICATED_PACKET_HEADER_RECEIVED
--> connection_id = "319eaa09be62d55c"
--> header_format = "IETF_QUIC_SHORT_HEADER_PACKET"
--> packet_number = 4756
t= 1774 [st= 1771] QUIC_SESSION_PACKET_AUTHENTICATED
t= 1774 [st= 1771] QUIC_SESSION_ACK_FRAME_RECEIVED
--> delta_time_largest_observed_us = 456
--> largest_observed = 630
--> missing_packets = []
--> received_packet_times = []
--> smallest_observed = 609
t= 1774 [st= 1771] QUIC_SESSION_PADDING_FRAME_RECEIVED
--> num_padding_bytes = 1
t= 8466 [st= 8463] QUIC_SESSION_WINDOW_UPDATE_FRAME_SENT
--> byte_offset = 9437205
--> stream_id = 0