- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Tue, 10 Aug 2010 12:39:04 -0400
On 8/10/10 4:40 AM, Philip J?genstedt wrote: > Because the parser can't create a state which the algorithm doesn't > handle. It always first inserts the video element, then the source > elements in the order they should be evaluated. The algorithm is written > in such a way that the overall result is the same regardless of whether > it is invoked/continued on each inserted source element or after the > video element is closed. Ah, the waiting state, etc? Why does the algorithm not just reevaluate any sources after the newly-inserted source instead? > However, scripts can see the state at any point, which is why it needs to be the same in all browsers. I'm not sure which "the state" you mean here. >> Because changes to the set of <source> elements do not restart the >> resource selection algorithm, right? Why don't they, exactly? That >> seems broken to me, from the POV of how the rest of the DOM generally >> works (except as required by backward compatibility considerations)... > > The resource selection is only started once, typically when the src > attribute is set (by parser or script) or when the first source element > is inserted. If it ends up in step 21 waiting, inserting another source > element may cause it to continue at step 22. Right, ok. > Restarting the algorithm on any modification of source elements would > mean retrying sources that have previously failed due to network errors > or incorrect MIME type again and again, wasting network resources. > Instead, the algorithm just keeps it state and waits for more source > elements to try. Well, the problem is that it introduces hysteresis into the DOM. Why is this a smaller consideration than the other, in the edge case when someone inserts sources in reverse order and "slowly" (off the event loop)? That is, why do we only consider sources inserted after the |pointer| instead of all newly inserted sources? > I'm not sure what you mean by hysteresis http://en.wikipedia.org/wiki/Hysteresis Specifically, that the state of the page depends not only on the current state of the DOM but also on the path in state space that the page took to get there. Or in other words, that inserting two <source> elements does different things depending on whether you do "appendChild(a); appendChild(b)" or "appendChild(b); insertBefore(a, b)", even though the resulting DOM is exactly the same. Or in your case, the fact that the ordering of the setAttribute and insertChild calls matters, say. Such situations, which introduce order-dependency on DOM operations, are wonderful sources of frustration for web developers, especially if libraries that abstract away the DOM manipulation are involved (so the web developer can't even change the operation order). >> I have a really hard time believing that you trigger resource >> selection when the <video> is inserted into the document and don't >> retrigger it afterward, given that... do you? >> >>> 2. Instead of calling the resource fetch algorithm in step 5/9 >> >> There doesn't seem to be such a step... >> >>> 3. In step 21, instead of waiting forever, just return and let inserting >>> a source element cause it to continue at step 22. >> >> Again, the numbering seems to be off. > > These are steps in the resource selection algorithm, not in the resource > fetch algorithm. Yes. Step 5 in the resource selection algorithm I see is: 5. Queue a task to fire a simple event named loadstart at the media element. It has no substeps. > Mozilla is implementing this now. How are you interpreting "await a > stable state" when the resource selection algorithm is triggered by the > parser? At the moment, given that we don't differentiate betwen "pause" and "spin the event loop" internally, it sounds like we plan to treat tis as "wait until the next event runs from the event loop". This means we will treat an alert being up as being in a stable state; same for sync XHR, showModalDialog, etc. From the parser we will basically treat it as "run asynchronously". > Will the result be 100% predictable or depend on "random" things > like how much data the parser already has available from the network? I don't know about "result". When the algorithm runs, exactly, will depend on the amount of data the parser parses before returning to the event loop. Does that affect "result"? -Boris
Received on Tuesday, 10 August 2010 09:39:04 UTC