From what I can see, when a progress event is dispatched, the progress is always updated compared to what was before. It's not just Gecko's implementation
Gecko also doesn't "fully" support synchronous XHR, so I wouldn't read too much into that. As I quoted above, spec doesn't give such guarantees.
But in such scenario above, if I remove the responseText handling, Gecko could potentially return the entire text string, without readyState event being sent yet, nor progress event.
I think that readystate event is guaranteed with ready state check in get_responseText. At the moment of dispatching, progress event would still be precise. It's just between events (including extra sync XHRs) when it could grow.
I don't know, just feels wrong to me; I could potentially split it into a separate patch. Not sure if that's any better? Or do you still want me to remove it completely?
Keeping this MR (especially the large commit) as simple as possible is a good idea. I think that keeping this part (including its design implications) out of this MR would be good. If you still think it's justified, we can revisit it separately.