- From: Chris Pearce <chris@pearce.org.nz>
- Date: Wed, 25 Feb 2009 12:35:22 +1300
I'm updating the new load algorithm for Firefox's <video> implementation, I've got some feedback on the recent changes to the load algorithm. I think the changes are sensible. It wasn't immediately obvious at first, but after thinking through them, I see the logic behind them. 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". 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. 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. /Other than that, the media load spec seems sensible. All the best, Chris Pearce.
Received on Tuesday, 24 February 2009 15:35:22 UTC