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.


Reply via email to