[whatwg] Race condition in media load algorithm

Philip Jägenstedt philipj at opera.com
Thu Aug 5 02:14:31 PDT 2010


On Wed, 04 Aug 2010 19:19:35 +0200, Boris Zbarsky <bzbarsky at mit.edu> wrote:

> On 8/4/10 6:56 AM, Philip Jägenstedt wrote:
>> On Wed, 04 Aug 2010 11:32:51 +0200, Boris Zbarsky <bzbarsky at mit.edu>  
>> wrote:
>>
>>> On 8/4/10 4:29 AM, Philip Jägenstedt wrote:
>>>> That could be, but is this behavior actually useful for anything? It's
>>>> certainly simpler to implement and more predictable for authors to
>>>> always wait until the current script has finished executing.
>>>
>>> 1) That requires defining "current script".
>>
>> OK, but that's just a spec problem. It's trivial in implementation
>> because when the resource selection algorithm was is triggered by a
>> script, you can just pass along a reference to that very script.
>
> It's not, in fact, trivial in implementation.  You're making assumptions  
> about how implementations work that don't seem warranted (e.g. the  
> concept of "reference to that very script" is not well-defined in some  
> implementations).  In particular, what you're proposing is not at all  
> trivial in Gecko.

 From <https://bugzilla.mozilla.org/show_bug.cgi?id=485288#c7> it sounds  
like Gecko actually has pretty much the same tools to work with as Opera:  
a nsIThreadObserver that allows you to wait until you've "finished the  
task in which some JS called load()". This is exactly what Opera does.

(It's difficult for Opera to rely on the message loop to resume the  
synchronous section, because our script engine can suspend and continue  
executing on a later message. Therefore, waiting for a script to finish  
executing is the best solution.)

>>> 2) Who said it will ever finish executing?
>>
>> If it doesn't, just don't ever continue with the synchronous section.
>
> I don't think that's reasonable.

A script that's stuck in an infinite loop is broken and video then not  
working would be fine as long as all browsers break in the same way. If a  
script is showing a modal dialog, not loading a video in the background  
seems fine. Other than possible implementation difficulties, why would it  
matter?

>> Is there any valid case for a script never finishing?
>
> Yes, it could showModalDialog and the user could spend several hours  
> interacting with it.
>
>> It would block all event handlers from running too
>
> I believe this is false in the case of showModalDialog.

It sounds like we're going to end up with slightly incompatible  
implementations. Is there anything that sites actually use that could make  
the difference in implementation visible? I truly doubt we'll see any  
serious compat issues because of showModalDialog...

A far more important issue is still what to do while the parser is running  
and we should "await a stable state". It can't possibly mean waiting until  
the parser has completely finished running, because that would slow down  
the time to load <video> considerably. If it just means letting the parser  
finish its current batch of input, I can't see how black-box testing could  
tell the difference between this and always ignoring the "await a stable  
state" step, as the parser could just happen to run for exactly that long.  
Always triggering the steps of the resource selection algorithm  
immediately is certainly more predictable, and the spec as written works  
well when doing so.

-- 
Philip Jägenstedt
Core Developer
Opera Software



More information about the whatwg mailing list