[whatwg] Media load algorithm feedback

On Wed, 25 Feb 2009, Chris Pearce wrote:
> 
> We now have three things called load. The "load() method", the "load 
> algorithm", and the "resource-load algorithm". It might be clearer if 
> they were called the "load() method", the "resource selection 
> algorithm", and the "resource fetch algorithm".

Done and done.


> From the "using source elements" load algorithm sub-step:
> > 
> > /Search loop:/ Run these substeps atomically (so that the DOM cannot change
> > while they are running):
> > 
> >   1.
> > 
> >       If the node after pointer is the end of the list, then jump to
> >       the step below labeled /waiting/.
> > 
> [...]
> > 7. Waiting: Set the error attribute to a new MediaError object whose code
> > attribute is set to MEDIA_ERR_NONE_SUPPORTED.
> > 8. Set the element's networkState attribute to the NETWORK_NO_SOURCE value
> > 9. Queue a task to fire a progress event called error at the media element.
> > 10. Set the element's delaying-the-load-event flag to false. This stops
> > delaying the load event.
> > 11. Wait until the node after pointer is a node other than the end of the
> > list. (This step might wait forever.)
>
> There's no step 12; I think the intention is that we return to the Search
> loop, but it's not documented.

Oops. Fixed.


> Step 1 of the load algorithm:
> > 1. While the media element has neither a src attribute nor any source
> > element children, wait. (This steps might wait forever.) 
>
> And further down it says:
>
> > If a media element
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#media-element>
> > whose |networkState
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-networkstate>|
> > has the value |NETWORK_EMPTY
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-network_empty>|
> > is inserted into a document
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/infrastructure.html#insert-an-element-into-a-document>,
> > the user agent must asynchronously invoke the media element
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#media-element>'s
> > load algorithm
> > <http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#concept-media-load-algorithm>.
>
> I think that should be "invoke the load() method"? If it's "invoke the load()
> method", running load() will cancel any already running instance of the load
> algorithm - e.g. any load which is waiting at step 1 of the load algorithm. As
> it's written, the load /algorithm /will be invoked, which will not cancel any
> waiting loads, and it could in fact it create another instance of the load
> algorithm waiting at step 1 of the load algorithm. So we would create two
> concurrent instances of the load algorithm, both waiting at step 1 of the load
> algorithm by doing the following:
> 
> var v = document.createVideo();
> v.load();
> document.body.appendElement(v);
> 
> Setting v.src or adding a <source> child element to v will awaken two
> instances of the load /algorithm.

Oops. The resource selection algorithm (previously, load algorithm) was 
supposed to immediately set the readyState to something other than 
NETWORK_EMPTY so that this couldn't happen, but I added the spin loop step 
late in the process to handle the case where there was neither src="" nor 
<source> so as to not preclude either being added later, and forgot to 
keep that invariant. I've fixed it now -- if the spin loop is to run, it 
first sets the readyState to NETWORK_NO_SOURCE as if it had run through 
and failed to find a media resource.


> /Other than that, the media load spec seems sensible.

Cool.

Thanks!

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

Received on Thursday, 26 February 2009 01:15:38 UTC