haikuwebkit/LayoutTests/media/video-load-require-user-ges...

56 lines
1.7 KiB
HTML
Raw Permalink Normal View History

<html>
<head>
<script src=media-file.js></script>
<script src=video-test.js></script>
<script>
var state = 0;
var userGestureInitiated = 0;
2017-12-19 23:16:09 +00:00
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);
2017-12-19 23:16:09 +00:00
window.internals.settings.setRequiresUserGestureToLoadVideo(true);
}
function finishTest(success)
{
if (success)
endTest();
else
failTest("<b>Data loaded despite restriction.</b>");
}
function checkLoad()
{
consoleWrite("");
if (state == "load")
{
finishTest(true);
return;
}
state = "load";
consoleWrite("* Calling video.load() should not load any data.");
video.load();
setTimeout(checkLoad, 250);
}
function start()
{
findMediaElement();
waitForEvent('loadedmetadata', function() { finishTest(false) } );
state = "src";
consoleWrite("* Setting video.src, no data should load.");
video.src = findMediaFile("video", "content/test");
setTimeout(checkLoad, 250);
}
</script>
</head>
<body onload="start()">
<video controls preload=none></video>
<p>Test that video.load() should not cause media loading when user gesture is required.</p>
</body>
</html>