Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: c0a2b3040d2d0424bd082eafba7f3922fe7641f0
      
https://github.com/WebKit/WebKit/commit/c0a2b3040d2d0424bd082eafba7f3922fe7641f0
  Author: Jean-Yves Avenard <j...@apple.com>
  Date:   2024-03-12 (Tue, 12 Mar 2024)

  Changed paths:
    A LayoutTests/http/tests/media/audio-load-loadeddata-expected.txt
    A LayoutTests/http/tests/media/audio-load-loadeddata.html
    M LayoutTests/platform/ios/TestExpectations
    M Source/WebCore/platform/graphics/MediaPlayer.cpp
    M Source/WebCore/platform/graphics/MediaPlayer.h
    M Source/WebCore/platform/graphics/MediaPlayerPrivate.h
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in
    M Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
    M Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h

  Log Message:
  -----------
  <audio> and <video> loadeddata events not fired on page load
https://bugs.webkit.org/show_bug.cgi?id=270837
rdar://124079735

Reviewed by Eric Carlson.

The HTMLMediaElement would call MediaPlayer::prepareToPlay() on the first 
MediaPlayerPrivate
created which may not be the one we end up using.
The code assumed that as soon as a MediaPlayer was created, we could call 
prepareToPlay on
it which in the case of the MediaPlayerPrivateAVFobjC would start loading the 
content.
Since we enabled the WebM player, the assumption no longer applied, multiple 
players could
be used until we find one that can play the content.
If the GPU process was enabled, the behaviour was racy as the GPUP's MediaPlayer
may not have been created yet.

The site would set a HTMLMediaElement's source to a mp3 file, without using an 
explicit
extension nor having the server provide the mime-type. As such, we have to try 
in
succession all MediaPlayerPrivate until we can find one that can load the 
content.
We cache the call to prepareToPlay() and re-issue it on all new 
MediaPlayerPrivate once
created.

Added test.

* LayoutTests/http/tests/media/audio-load-loadeddata-expected.txt: Added.
* LayoutTests/http/tests/media/audio-load-loadeddata.html: Added.
* LayoutTests/platform/ios/TestExpectations: All media tests are disabled on 
iOS, force this one to run.
* Source/WebCore/platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::loadWithNextMediaEngine):
(WebCore::MediaPlayer::prepareToPlay):
* Source/WebCore/platform/graphics/MediaPlayer.h:
* Source/WebCore/platform/graphics/MediaPlayerPrivate.h:
(WebCore::MediaPlayerPrivateInterface::prepareForPlayback):
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::prepareForPlayback):
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h:
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.messages.in:
* Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::prepareForPlayback):
* Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h:

Canonical link: https://commits.webkit.org/275997@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to