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