On Sun, Jul 25, 2010 at 3:31 PM, Maciej Stachowiak <span dir="ltr"><<a href="mailto:mjs@apple.com">mjs@apple.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div style="word-wrap: break-word;"><br><div><div class="im"><div>On Jul 23, 2010, at 7:16 AM, Philip Jägenstedt wrote:</div><br><blockquote type="cite"><div>Silvia made we aware of discrepancy in how browsers implement the resource selection algorithm, see forwarded message. It's my assessment that Opera is the only browser following the spec. I've filed this bug with Mozilla:<br>

<br><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=581355" target="_blank">https://bugzilla.mozilla.org/show_bug.cgi?id=581355</a><br><br>I've also reported bugs in Chrome and Safari, but can't see where they ended up.<br>

<br>The reason I'm writing this email is that apparently everyone but myself has a different interpretation of the spec, so perhaps this is something we need to discuss. Does any other browser ever set the state NETWORK_NO_SOURCE at all? I speculated that perhaps other browsers aren't very strict about which parts of the algorithm are run synchronously and not, but even checking the networkState after a setTimeout it still isn't NETWORK_NO_SOURCE.<br>

<br>Test case: <a href="http://people.opera.com/philipj/2010/07/23/networkState.html" target="_blank">http://people.opera.com/philipj/2010/07/23/networkState.html</a><br><br>Please fix implementation or spec :)<font color="#000000"><font color="#144FAE"><br>

</font></font></div></blockquote><div><br></div></div>1) Which behavior is more useful?</div><div>2) Sylvia's original issue was with play() - should we ensure that any time you call play(), it will cause the media resource to start playing once loaded? That seems like the real spec bug.</div>

</div></blockquote><div><br>The problem there with play in Opera was that the @src was changed, but Opera doesn't run the resource selection algorithm to load it for play(), but instead expects to run load() first. The description of play() however clearly states as a first step:<br>

1. If the <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a>'s <code title="dom-media-networkState"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#dom-media-networkstate">networkState</a></code> attribute has
   the value <code title="dom-media-NETWORK_EMPTY"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#dom-media-network_empty">NETWORK_EMPTY</a></code>, invoke the
   <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a>'s <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#concept-media-load-algorithm" title="concept-media-load-algorithm">resource selection
   algorithm</a>.<br><br>This is why we are discussing whether the networkState needs to be NETWORK_EMPTY or NETWORK_NO_SOURCE after initialisation of a media element.<br><br>Incidentally, that has effects on other elements, too, such as for <source> it is stated:<br>

If a <code><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#the-source-element">source</a></code> element is inserted as a child of a
  <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a> that has no <code title="attr-media-src"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#attr-media-src">src</a></code> attribute and whose <code title="dom-media-networkState"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#dom-media-networkstate">networkState</a></code> has the value
  <code title="dom-media-NETWORK_EMPTY"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#dom-media-network_empty">NETWORK_EMPTY</a></code>, the user
  agent must invoke the <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a>'s <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#concept-media-load-algorithm" title="concept-media-load-algorithm">resource selection
  algorithm</a>.<br><br>And for @src it is said:<br>If a <code title="attr-media-src"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#attr-media-src">src</a></code> attribute of a
  <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a> is set or changed, the user agent must
  invoke the <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element">media element</a>'s <a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#media-element-load-algorithm">media element load
  algorithm</a>. (<em>Removing</em> the <code title="attr-media-src"><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#attr-media-src">src</a></code> attribute does not do this, even
  if there are <code><a href="http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#the-source-element">source</a></code> elements present.)<br><br>That is kinda strange, too, because really when @src is changed, resource selection has to be run first rather than media element load.<br>

<br>The easiest way to get this consistent is to keep the meaning of NETWORK_EMPTY and NETWORK_NO_SOURCE and make sure everything else is made consistent with that, i.e.<br>* change the first state of the resource selection to use NETWORK_EMPTY<br>

* change the first action of @src to run the resource selection algorithm rather than the resource load algorithm<br><br>Any other changes would cause a lot more follow-on changes IMO.<br><br>Cheers,<br>Silvia.<br></div>
</div>