[Bug 27033] XHR request termination doesn't terminate queued tasks

https://www.w3.org/Bugs/Public/show_bug.cgi?id=27033

--- Comment #10 from Hallvord R. M. Steen <hsteen@mozilla.com> ---
(In reply to Anne from comment #6)
> The only change I can think of would be to only change the state to unsent
> if the current state is done, if that is what implementations are actually
> doing.

As far as I can tell, all implementations change to 4 due to abort() and 1 due
to open() (even when open() is called during abort processing). This is pretty
consistent. Everything else is .. all over the place. I haven't found two
implementations that fire the same events in the same order with the same
states.

The last iteration of my two tests in
https://github.com/w3c/web-platform-tests/pull/1294 log a number of events and
does a console.log() to better inspect what browsers are actually up to.

* Webkit (as seen in Opera and Chrome, Safari not tested) doesn't fire any
onabort events at all if you call abort() in the OPENED state. Hence these
tests aren't really valid in Webkit-based browsers. If we want to require these
abort events to fire, we can probably just ignore the Webkit family for now.

* Trident (1st below) and Gecko (2nd below) differ in this part of the sequence
of events in open-during-abort-processing (where abort() is called from
onloadstart and open() is called from the readystatechange event that fires due
to abort() being called):

readyState after abort() 1
onloadstart readyState 1

onloadstart readyState 1
client.onabort 1
readyState after abort() 1

so in IE, abort() returns before onloadstart fires again, but in Gecko it's the
other way around and there's an extra abort event firing even though open() was
called. I don't know why it fails to fire upload.onabort here though..
client.onabort fires in spite of open() but upload.onabort doesn't? Weird.

The other test, where open() is called from upload.onabort, has these logs:
IE:
"readyState before abort() 1
upload.onabort - before open() 4
readyState after open() 1
readyState after abort() 1
client.onload 4
client.onloadend 4"

Gecko:
"readyState before abort() 1
client.onabort 4
client.onloadend 4
upload.onabort - before open() 4
readyState after open() 1
readyState after abort() 1
client.onload 4
client.onloadend 4"

Gecko has a known spec violation in failing to fire events on upload before
client. IE consistently terminates abort processing and fires no more abort
events when open() is called.

It may be noteworthy that implementations consistently let open() prevent the
abort processing's onloadend event from firing. AFAIK the spec is out of tune
with implementations here.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Sunday, 19 October 2014 22:21:28 UTC