On Fri, 6 Jul 2018, at 00:49, Chris Pearce wrote:
> On Friday, July 6, 2018 at 3:10:58 AM UTC+12, Mounir Lamouri wrote:
> > On Wed, 4 Jul 2018, at 18:22, Chris Pearce wrote:
> > > Hi Mounir,
> > > 
> > > Replies inline below...
> > > 
> > > 
> > > On Thu, Jul 5, 2018 at 2:56 AM, Mounir Lamouri <mou...@lamouri.fr> wrote:
> > > 
> > > > Hi Chris,
> > > >
> > > > Very excited to see Firefox going forward with autoplay blocking. A 
> > > > couple
> > > > of comments inline.
> > > >
> > > > On Tue, 3 Jul 2018, at 19:38, Chris Pearce wrote:
> > > > > DETAILS:
> > > > >
> > > > > We intend to block autoplay of HTMLMediaElement in tabs which haven't
> > > > > had user interaction. Web authors should assume that they require a 
> > > > > user
> > > > > gesture (mouse click on a "play" button for example) in order to play
> > > > > audible media.
> > > >
> > > > I assume you will not allow autoplay when navigating into the same
> > > > website? What about iframes? Will they be allowed to autoplay if the 
> > > > main
> > > > frame is allowed to? Will the feature policy be used instead?
> > > >
> > > >
> > > A gesture in any document in the document hierarchy gesture activates the
> > > top level document, and a document uses the top level document's gesture
> > > activation status to determine whether it can play (our implementation
> > > actually differs a bit, but this is the effective behaviour). Gesture
> > > activation status isn't preserved across navigation. So if the top level
> > > document navigates, the incoming document hierarchy won't be able to
> > > autoplay. If a non-top-level document navigates, the new document in the
> > > iframe will still use the top-level document's gesture activation status,
> > > and so the iframe's new content document will be able to autoplay.
> > 
> > With autoplay coming from third party content, do you consider using 
> > Feature Policy to block cross origin iframes by default?
> 
> 
> I won't rule out doing something in the spirit providing a way for sites 
> to control whether subframes are allowed to autoplay in future, but we 
> won't be doing it as part of our MVP.

To clarify, your MVP will allow subframes to autoplay if the main frame can, 
right?

> > > > > HTMLMediaElements with a "muted" attribute or "volume=0" are still
> > > > > allowed to play.
> > > >
> > > > Chrome and Safari allows autoplay only when the playback is muted. The
> > > > spec allows side effect for setting `muted = false;`. What will happen 
> > > > for
> > > > a website that changes the volume from 0 to something else?
> > > >
> > > >
> > > 
> > > If an HTMLMediaElement starts playing with muted/volume=0 and then script
> > > sets it to unmuted/volume>0, then we'll pause the media.
> > 
> > The volume=0 behaviour isn't compatible with Blink and WebKit. Would it be 
> > worth only use muted for consistency between browsers?
> 
> This code gives me the impression that WebKit does in fact block volume 
> > 0 media:
> https://github.com/WebKit/webkit/blob/2d78ab563d64545ead630115bcd55047d0400fac/Source/WebCore/html/MediaElementSession.cpp#L303
> 
> So maybe Blink should consider changing to be consistent with other browsers? 
> ;)

That's interesting. We spec'd something in HTML and Safari did not mention 
this. It's not in their documentation nor ours. What's the benefit of allowing 
volume=0 to autoplay?

> > > > Also, will autoplay be allowed when the video has no audio track?
> > > >
> > > >
> > > >
> > > Our autoplay logic ignores whether the media resource has an audio track;
> > > it makes our implementation simpler, and if an author knows a media should
> > > be inaudible, they can set the muted attribute. So a video element playing
> > > a media resource with no audio track and without the muted attribute would
> > > still be blocked.
> > 
> > FWIW, WebKit uses the audio track availability and Blink intends to do this 
> > at some point.
> 
> 
> I actually implemented this, landed it, and then ended up reverting it.
> 
> The main problem here is if HTMLMediaElement.play() is called before the 
> load algorithm has reached readyState>=HAVE_METADATA, you won't know 
> whether the media you're loading has audio tracks.
> 
> If you hit this case, you have two options; decide whether to block 
> immediately based on incomplete information, or return the promise and 
> wait until you reach loadedmetadata before deciding whether to play.
> 
> If you decide based on incomplete information you become racy; the 
> decision you make on incomplete information may contradict the decision 
> you'd make based on more complete information when the load is further 
> along, and network loads are inherently racy. That seems bad.
> 
> If you return the promise and yield control to JS you run into compat 
> issues. As Jean-Yves mentioned, some sites expect that 
> HTMLMediaElement.play() synchronously sets the paused attribute to false 
> and enqueues tasks to fire "play", "playing" etc. Safari appears to have 
> a quirks mode where they pretend to play and then dispatch "playing" and 
> "pause" if they reach readyState HAVE_METADATA and they discover an 
> autoplaying media has an audio track (even if they didn't play, they'll 
> dispatch playing).
> 
> Experimenting with such hacks in Gecko led to compat issues. Even 
> without such hacks I still ran into many subtle problems caused by 
> timing changes due to the play/playing events being dispatched later on 
> in the load, and by the paused attribute changing at a later time than 
> script expects. That was enough to convince me to give up and just rely 
> on the muted and volume attributes to express inaudibility.

Thanks for the feedback. The reason why we did not implement this yet is for 
similar reasons: getting the information may be async and our code make this 
decision fairly early today. This said, I think this would be beneficial for 
web developers. Is this something you think Gecko may implement at some point?

-- Mounir
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to