Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 397df0f71bfd0136ef1a47a57dffe0b04eb1d814
      
https://github.com/WebKit/WebKit/commit/397df0f71bfd0136ef1a47a57dffe0b04eb1d814
  Author: Jer Noble <[email protected]>
  Date:   2026-07-21 (Tue, 21 Jul 2026)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/META.yml
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/WEB_FEATURES.yml
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/css-selector-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/disable-picture-in-picture-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/enter-picture-in-picture-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/exit-picture-in-picture-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/idlharness.window-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture-disable-attribute.optional.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/permissions-policy.https.sub-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/permissions-policy.https.sub.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-element-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-window-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/removed-from-document-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/removed-from-document.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-exits-existing-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-exits-existing.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-twice-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/permissions-policy-helper.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/permissions-policy-nested-helper.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/unload-document-helper.html
    M 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/w3c-import.log
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/shadow-dom-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/shadow-dom.html
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/unload-document-exits-picture-in-picture-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/unload-document-exits-picture-in-picture.html
    M 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/w3c-import.log
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/ios/TestExpectations
    M LayoutTests/resources/testdriver-vendor.js
    M LayoutTests/tests-options.json
    M 
Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp
    M Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.h
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/html/HTMLMediaElement.h
    M Source/WebCore/html/HTMLVideoElement.cpp
    M Source/WebCore/html/HTMLVideoElement.h
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
    M Tools/WebKitTestRunner/TestController.cpp

  Log Message:
  -----------
  [WPT] Enable (most) picture-in-picture tests
rdar://182373790
https://bugs.webkit.org/show_bug.cgi?id=319544

Reviewed by Eric Carlson.

Enable all existing picture-in-picture tests (except mediastream.html,
leave-picture-in-picture-disable-attribute.optional.html, and 
permissions-policy.https.sub.html)
by resolving all issues preventing those tests from passing:

1. Many tests were failing because the <video> element did not have video 
tracks immediately
   after "loadedmetadata" fired. There are two issues here:
   1.a MediaPlayerPrivateAVFoundationObjC does not create video or audio tracks 
until the
       AVPlayerItem is created and AVPlayerItemTracks are available, which is 
long after the
       ready state moves to HAVE_METADATA. Rather than requiring video tracks 
to be non-empty
       just check haveVideo() instead.
   1.b The RemoteMediaPlayerProxy doesn't update haveVideo when ready state 
changes.
2. requestPictureInPicture() was testing whether the current event was a user 
gesture, which
   is a much more stringent requirement than the spec requires. Check instead 
for a transient
   user activation.
3. Flows that don't require a user gesture (such as when another video element 
is already in
   PiP) were blocked by downstream code in 
HTMLVideoElement::setPresentationMode().
4. The promise was resolving before the "enterpictureinpicture" event fired, 
when it should have
   resolved after.
5. WebKitTestRunner did not enable the PiP setting.
6. HTMLVideoElement did not exit PiP upon entering the back-forward cache.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/css-selector-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/disable-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/enter-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/exit-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/idlharness.window-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-element-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-window-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-twice-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/shadow-dom-expected.txt:
 Added.
* LayoutTests/resources/testdriver-vendor.js:
(async if.await.new.Promise): Deleted.
* Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp:
(WebCore::HTMLVideoElementPictureInPicture::requestPictureInPicture):
(WebCore::HTMLVideoElementPictureInPicture::didEnterPictureInPicture):
(WebCore::HTMLVideoElementPictureInPicture::didExitPictureInPicture):
* Source/WebCore/Modules/pictureinpicture/HTMLVideoElementPictureInPicture.h:
* Source/WebCore/html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::setPresentationMode):
(WebCore::HTMLVideoElement::HTMLVideoElement):
(WebCore::HTMLVideoElement::rendererIsNeeded):
(WebCore::HTMLVideoElement::supportsFullscreen const):
(WebCore::HTMLVideoElement::webkitEnterFullscreen):
(WebCore::HTMLVideoElement::suspend):
* Source/WebCore/html/HTMLVideoElement.h:
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::mediaPlayerReadyStateChanged):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerCharacteristicChanged):
(WebKit::RemoteMediaPlayerProxy::updateCachedMediaCharacteristics):
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h:
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetPreferencesToConsistentValues):
* LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/META.yml:
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/WEB_FEATURES.yml:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture-disable-attribute.optional.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture.html:
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/permissions-policy.https.sub-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/permissions-policy.https.sub.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/removed-from-document-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/removed-from-document.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-exits-existing-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-exits-existing.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/permissions-policy-helper.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/permissions-policy-nested-helper.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/unload-document-helper.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/resources/w3c-import.log:
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/shadow-dom.html:
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/unload-document-exits-picture-in-picture-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/unload-document-exits-picture-in-picture.html:
 Added.
* LayoutTests/imported/w3c/web-platform-tests/picture-in-picture/w3c-import.log:
* LayoutTests/tests-options.json:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::willBeRemovedFromFrame):
* Source/WebCore/html/HTMLMediaElement.h:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to