haikuwebkit/LayoutTests/media/no-autoplay-with-user-gestu...

42 lines
1.3 KiB
HTML
Raw Permalink Normal View History

<html>
<head>
<title>Test that media autoplay should not work if user gesture is required for playback</title>
<script src=media-file.js></script>
<script src=video-test.js></script>
<script>
if (window.internals)
Add separate WK and WK2 preferences for requiring user gestures for video media, distinct from user gestures for media generally https://bugs.webkit.org/show_bug.cgi?id=155141 Reviewed by Beth Dakin. Source/WebCore: Rename RequireUserGestureForRateChange -> RequireUserGestureForVideoRateChange. Rename Settings::requiresUserGestureForMediaPlayback -> Settings::videoPlaybackRequiresUserGesture. Fix longstanding FIXME unifying our behavior restrictions between iOS and Mac. * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::constructCommon): Rename. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): Unify behavior restriction behavior. (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Rename. * html/MediaElementSession.cpp: (WebCore::restrictionName): Rename. (WebCore::MediaElementSession::playbackPermitted): Rename. * html/MediaElementSession.h: * page/Settings.cpp: * page/Settings.in: * testing/Internals.cpp: (WebCore::Internals::setMediaElementRestrictions): Rename. Source/WebKit/mac: Deprecate WebPreferences.mediaPlaybackRequiresUserGesture property in favor of .videoPlaybackRequiresUserGesture. * WebView/WebPreferenceKeysPrivate.h: * WebView/WebPreferences.mm: (+[WebPreferences initialize]): (-[WebPreferences mediaPlaybackRequiresUserGesture]): (-[WebPreferences setMediaPlaybackRequiresUserGesture:]): (-[WebPreferences videoPlaybackRequiresUserGesture]): (-[WebPreferences setVideoPlaybackRequiresUserGesture:]): * WebView/WebPreferencesPrivate.h: * WebView/WebView.mm: (-[WebView _preferencesChanged:]): Source/WebKit/win: * WebView.cpp: (WebView::notifyPreferencesChanged): Source/WebKit2: Add a new preference, videoPlaybackRequiresUserGesture, distinct from mediaPlaybackRequiresUserGesture. Legacy clients of mediaPlaybackRequiresUserGesture will still be able to use it normally, as setting that preference to true will effectively set both audioPlaybackRequiresUserGesture and videoPlaybackRequiresUserGesture to true. Make these preferences all available universally, rather than just on PLATFORM(IOS). This requires adding a definition for -setRequiresUserActionForMediaPlayback: and -requiresUserActionForMediaPlayback on !PLATFORM(IOS). * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetVideoPlaybackRequiresUserGesture): (WKPreferencesGetVideoPlaybackRequiresUserGesture): * UIProcess/API/C/WKPreferencesRefPrivate.h: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _initializeWithConfiguration:]): (-[WKWebView _setObscuredInsets:]): * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: (-[WKWebViewConfiguration init]): (-[WKWebViewConfiguration encodeWithCoder:]): (-[WKWebViewConfiguration initWithCoder:]): (-[WKWebViewConfiguration copyWithZone:]): (-[WKWebViewConfiguration requiresUserActionForMediaPlayback]): (-[WKWebViewConfiguration setRequiresUserActionForMediaPlayback:]): (-[WKWebViewConfiguration allowsInlineMediaPlayback]): (-[WKWebViewConfiguration setAllowsInlineMediaPlayback:]): (-[WKWebViewConfiguration _requiresUserActionForVideoPlayback]): (-[WKWebViewConfiguration _setRequiresUserActionForVideoPlayback:]): * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): Tools: Set the default values for media preferences unconditionally, not just on PLATFORM(IOS). Set "video requires user gesture" to sane defaults in addition to "audio requires user gesture" and (in the case of DumpREnderTree) instead of "media requires user gesture". Add a new test of WK2 user gesture requirement preferences. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html: * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html: * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm: Added. (-[RequiresUserActionForPlaybackNavigationDelegate webView:didFinishNavigation:]): (-[RequiresUserActionForPlaybackMessageHandler userContentController:didReceiveScriptMessage:]): (RequiresUserActionForPlaybackTest::SetUp): (RequiresUserActionForPlaybackTest::createWebView): (RequiresUserActionForPlaybackTest::testVideoWithAudio): (RequiresUserActionForPlaybackTest::testVideoWithoutAudio): (RequiresUserActionForPlaybackTest::testAudioOnly): (TEST_F): * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm: (TEST): LayoutTests: Update layout tests to reflect new restriction name. * media/audio-playback-restriction-play-expected.txt: * media/audio-playback-restriction-play.html: * media/no-autoplay-with-user-gesture-requirement.html: * media/video-load-require-user-gesture.html: * media/video-play-require-user-gesture.html: * media/video-crash-invisible-autoplay-display-none-expected.txt: Added. * media/video-crash-invisible-autoplay-display-none.html: Added. * media/video-main-content-allow-expected.txt: * media/video-main-content-allow-then-deny-expected.txt: * media/video-main-content-allow-then-deny.html: * media/video-main-content-allow.html: * media/video-main-content-deny-display-none-expected.txt: * media/video-main-content-deny-display-none.html: * media/video-main-content-deny-not-in-dom-expected.txt: * media/video-main-content-deny-not-in-dom.html: * media/video-main-content-deny-not-visible-expected.txt: * media/video-main-content-deny-not-visible.html: * media/video-main-content-deny-obscured-expected.txt: * media/video-main-content-deny-obscured.html: * media/video-main-content-deny-too-small-expected.txt: * media/video-main-content-deny-too-small.html: Canonical link: https://commits.webkit.org/173420@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@197953 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-03-10 21:35:10 +00:00
window.internals.settings.setVideoPlaybackRequiresUserGesture(true);
function testPlay()
{
failTest("play event should not fire without user gesture.");
}
function testPaused()
{
testExpected("video.paused", true);
endTest();
}
function canplaythrough()
{
setTimeout(testPaused, 100);
}
function start()
{
findMediaElement();
video.src = findMediaFile("video", "content/test");
testExpected("video.paused", true);
waitForEvent('canplaythrough', canplaythrough);
waitForEvent('play', testPlay);
}
</script>
</head>
<body onload="start()">
<p>Test that media autoplay should not work if user gesture is required for playback.</p>
<video controls autoplay></video>
</body>
</html>