Changeset 251920 in webkit
- Timestamp:
- Nov 1, 2019 8:57:34 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r251913 r251920 1 2019-11-01 Peng Liu <peng.liu6@apple.com> 2 3 Picture-in-Picture layout test cases interfere with each other 4 https://bugs.webkit.org/show_bug.cgi?id=203614 5 6 Reviewed by Eric Carlson. 7 8 Use "internals.setPictureInPictureAPITestEnabled(video, true)" to test 9 the picture-in-picture API implementation without AVKit/CoreMedia stuffs. 10 11 * media/picture-in-picture-api-enter-pip-1-expected.txt: 12 * media/picture-in-picture-api-enter-pip-1.html: 13 * media/picture-in-picture-api-enter-pip-2-expected.txt: 14 * media/picture-in-picture-api-enter-pip-2.html: 15 * media/picture-in-picture-api-enter-pip-3-expected.txt: 16 * media/picture-in-picture-api-enter-pip-3.html: 17 * media/picture-in-picture-api-enter-pip-4-expected.txt: 18 * media/picture-in-picture-api-enter-pip-4.html: 19 * media/picture-in-picture-api-exit-pip-1-expected.txt: 20 * media/picture-in-picture-api-exit-pip-1.html: 21 * media/picture-in-picture-api-exit-pip-2-expected.txt: 22 * media/picture-in-picture-api-exit-pip-2.html: 23 * media/picture-in-picture-api-pip-events-expected.txt: 24 * media/picture-in-picture-api-pip-events.html: 25 * media/picture-in-picture-api-pip-window-expected.txt: 26 * media/picture-in-picture-api-pip-window.html: 27 1 28 2019-11-01 Tim Horton <timothy_horton@apple.com> 2 29 -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-1-expected.txt
r251745 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("video", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-1.html
r251745 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 11 12 run('video.src = findMediaFile("video", "content/test")'); 12 13 await waitFor(video, 'canplaythrough'); -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-2-expected.txt
r251745 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 EXPECTED (error.name == 'InvalidStateError') OK 5 6 END OF TEST -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-2.html
r251745 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 11 12 runWithKeyDown(function() { 12 13 video.requestPictureInPicture() -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-3-expected.txt
r251745 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("audio", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-3.html
r251745 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 11 12 run('video.src = findMediaFile("audio", "content/test")'); 12 13 await waitFor(video, 'canplaythrough'); -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-4-expected.txt
r251745 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("video", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-enter-pip-4.html
r251745 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 12 11 13 run('video.src = findMediaFile("video", "content/test")'); 12 14 await waitFor(video, 'canplaythrough'); … … 14 16 video.requestPictureInPicture() 15 17 .then(() => { 16 endTest(); 18 document.exitPictureInPicture().then(endTest).catch(() => { 19 failTest('Failed to exit the Picture-in-Picture mode.'); 20 }); 17 21 }) 18 22 .catch(() => { -
trunk/LayoutTests/media/picture-in-picture-api-exit-pip-1-expected.txt
r251745 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("video", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-exit-pip-1.html
r251745 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 12 11 13 run('video.src = findMediaFile("video", "content/test")'); 12 14 await waitFor(video, 'canplaythrough'); 15 13 16 runWithKeyDown(function() { video.requestPictureInPicture() }); 14 17 await waitFor(video, 'enterpictureinpicture'); 15 runWithKeyDown(function() { 16 document.exitPictureInPicture() 17 .then(() => { 18 endTest(); 19 }) 20 .catch(() => { 21 failTest('Exit Picture-in-Picture resolves when there is a Picture-in-Picture video.') 22 }); 18 document.exitPictureInPicture().then(endTest).catch(() => { 19 failTest('Failed to exit the Picture-in-Picture mode.'); 23 20 }); 24 21 }); -
trunk/LayoutTests/media/picture-in-picture-api-exit-pip-2-expected.txt
r251745 r251920 1 1 This tests that exit Picture-in-Picture rejects when there is no Picture-in-Picture video. 2 2 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 3 5 EXPECTED (error.name == 'InvalidStateError') OK 4 6 END OF TEST -
trunk/LayoutTests/media/picture-in-picture-api-exit-pip-2.html
r251745 r251920 7 7 window.addEventListener('load', async event => { 8 8 findMediaElement(); 9 runWithKeyDown(function() { 10 document.exitPictureInPicture() 11 .then(() => { 12 failTest('Exit Picture-in-Picture rejects when there is no Picture-in-Picture video.'); 13 }) 14 .catch(error => { 15 window.error = error; 16 testExpected('error.name', 'InvalidStateError'); 17 endTest(); 18 }); 9 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 12 13 document.exitPictureInPicture() 14 .then(() => { 15 failTest('Exit Picture-in-Picture rejects when there is no Picture-in-Picture video.'); 16 }) 17 .catch(error => { 18 window.error = error; 19 testExpected('error.name', 'InvalidStateError'); 20 endTest(); 19 21 }); 20 22 }); -
trunk/LayoutTests/media/picture-in-picture-api-pip-events-expected.txt
r251834 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("video", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-pip-events.html
r251834 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 11 12 12 13 run('video.src = findMediaFile("video", "content/test")'); … … 15 16 runWithKeyDown(function() { video.requestPictureInPicture(); }); 16 17 await waitFor(video, 'enterpictureinpicture'); 17 18 runWithKeyDown(function() { document.exitPictureInPicture(); }); 18 document.exitPictureInPicture(); 19 19 await waitFor(video, 'leavepictureinpicture'); 20 20 -
trunk/LayoutTests/media/picture-in-picture-api-pip-window-expected.txt
r251834 r251920 2 2 3 3 RUN(internals.settings.setAllowsPictureInPictureMediaPlayback(true)) 4 RUN(internals.setPictureInPictureAPITestEnabled(video, true)) 4 5 RUN(video.src = findMediaFile("video", "content/test")) 5 6 EVENT(canplaythrough) -
trunk/LayoutTests/media/picture-in-picture-api-pip-window.html
r251834 r251920 9 9 10 10 run('internals.settings.setAllowsPictureInPictureMediaPlayback(true)'); 11 run('internals.setPictureInPictureAPITestEnabled(video, true)'); 11 12 12 13 run('video.src = findMediaFile("video", "content/test")'); … … 19 20 testExpected('pipWindow.width', 0, '>'); 20 21 testExpected('pipWindow.height', 0, '>'); 21 endTest(); 22 23 document.exitPictureInPicture().then(endTest).catch(() => { 24 failTest('Failed to exit the Picture-in-Picture mode.'); 25 }); 22 26 }) 23 27 .catch(error => { … … 25 29 }); 26 30 }); 31 27 32 }); 28 33 </script> -
trunk/Source/WebCore/ChangeLog
r251917 r251920 1 2019-11-01 Peng Liu <peng.liu6@apple.com> 2 3 Picture-in-Picture layout test cases interfere with each other 4 https://bugs.webkit.org/show_bug.cgi?id=203614 5 6 Reviewed by Eric Carlson. 7 8 Fix test running issues, no new test is needed. 9 10 Add a member variable m_pictureInPictureAPITestEnabled to the HTMLVideoElement class. 11 When this variable is true, HTMLVideoElement::setFullscreenMode() will mock the 12 behavior of the Picture-in-Picture mode changing without the AVKit/CoreMedia involvement. 13 So we can run multiple layout test cases for Picture-in-Picture API simultaneously. 14 Note: this solution only tests the code for the Picture-in-Picture API implementation! 15 We still need to use the API tests to test the Picture-in-Picture implementation end-to-end. 16 17 * html/HTMLVideoElement.cpp: 18 (WebCore::HTMLVideoElement::setFullscreenMode): 19 (WebCore::HTMLVideoElement::setPictureInPictureAPITestEnabled): 20 * html/HTMLVideoElement.h: 21 * html/HTMLVideoElement.idl: 22 * testing/Internals.cpp: 23 (WebCore::Internals::setPictureInPictureAPITestEnabled): 24 * testing/Internals.h: 25 * testing/Internals.idl: 26 1 27 2019-11-01 Zalan Bujtas <zalan@apple.com> 2 28 -
trunk/Source/WebCore/html/HTMLVideoElement.cpp
r251834 r251920 450 450 void HTMLVideoElement::setFullscreenMode(HTMLMediaElementEnums::VideoFullscreenMode mode) 451 451 { 452 #if ENABLE(PICTURE_IN_PICTURE_API) 453 if (m_pictureInPictureAPITestEnabled) { 454 if (mode == VideoFullscreenModePictureInPicture) { 455 fullscreenModeChanged(mode); 456 didBecomeFullscreenElement(); 457 setVideoFullscreenFrame({0, 0, 100, 100}); 458 return; 459 } 460 461 if (mode == VideoFullscreenModeNone) { 462 fullscreenModeChanged(mode); 463 return; 464 } 465 } 466 #endif 467 452 468 if (mode == VideoFullscreenModeNone && isFullscreen()) { 453 469 exitFullscreen(); … … 518 534 m_pictureInPictureObserver = observer; 519 535 } 536 537 void HTMLVideoElement::setPictureInPictureAPITestEnabled(bool enabled) 538 { 539 m_pictureInPictureAPITestEnabled = enabled; 540 } 520 541 #endif 521 542 -
trunk/Source/WebCore/html/HTMLVideoElement.h
r251745 r251920 93 93 WEBCORE_EXPORT void didBecomeFullscreenElement() final; 94 94 void setPictureInPictureObserver(PictureInPictureObserver*); 95 WEBCORE_EXPORT void setPictureInPictureAPITestEnabled(bool); 95 96 #endif 96 97 #endif … … 140 141 bool m_isFullscreen { false }; 141 142 PictureInPictureObserver* m_pictureInPictureObserver { nullptr }; 143 144 bool m_pictureInPictureAPITestEnabled { false }; 142 145 #endif 143 146 }; -
trunk/Source/WebCore/html/HTMLVideoElement.idl
r238748 r251920 26 26 [ 27 27 Conditional=VIDEO, 28 ExportMacro=WEBCORE_EXPORT, 28 29 JSGenerateToNativeObject, 29 30 ] interface HTMLVideoElement : HTMLMediaElement { -
trunk/Source/WebCore/testing/Internals.cpp
r251737 r251920 5274 5274 #endif 5275 5275 5276 #if ENABLE(PICTURE_IN_PICTURE_API) 5277 void Internals::setPictureInPictureAPITestEnabled(HTMLVideoElement& videoElement, bool enabled) 5278 { 5279 videoElement.setPictureInPictureAPITestEnabled(enabled); 5280 } 5281 #endif 5282 5276 5283 void Internals::setMaxCanvasPixelMemory(unsigned size) 5277 5284 { -
trunk/Source/WebCore/testing/Internals.h
r251737 r251920 73 73 class HTMLPictureElement; 74 74 class HTMLSelectElement; 75 class HTMLVideoElement; 75 76 class ImageData; 76 77 class InspectorStubFrontend; … … 899 900 #endif 900 901 902 #if ENABLE(PICTURE_IN_PICTURE_API) 903 void setPictureInPictureAPITestEnabled(HTMLVideoElement&, bool); 904 #endif 905 901 906 int processIdentifier() const; 902 907 -
trunk/Source/WebCore/testing/Internals.idl
r251737 r251920 814 814 815 815 [Conditional=WEB_AUTHN] void setMockWebAuthenticationConfiguration(MockWebAuthenticationConfiguration configuration); 816 }; 816 817 [Conditional=PICTURE_IN_PICTURE_API] void setPictureInPictureAPITestEnabled(HTMLVideoElement videoElement, boolean enabled); 818 };
Note: See TracChangeset
for help on using the changeset viewer.