Changeset 207159 in webkit
- Timestamp:
- Oct 11, 2016 1:17:58 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r207155 r207159 1 2016-10-11 Daniel Bates <dabates@apple.com> 2 3 [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps 4 https://bugs.webkit.org/show_bug.cgi?id=163244 5 <rdar://problem/27250015> 6 7 Reviewed by Jer Noble. 8 9 Add tests to ensure that Settings::setRequiresUserGestureToLoadVideo() behaves as expected. 10 11 * media/loadedmetadata-fires-without-user-gesture-when-setRequiresUserGestureToLoadVideo-false-expected.txt: Added. 12 * media/loadedmetadata-fires-without-user-gesture-when-setRequiresUserGestureToLoadVideo-false.html: Added. 13 * media/media-controls.js: 14 (clickPlayButton): Added. 15 * media/require-user-gesture-to-load-video-expected.txt: Added. 16 * media/require-user-gesture-to-load-video.html: Added. 17 * media/video-controls-transformed.html: Write in terms of clickPlayButton(). 18 * media/video-controls-visible-audio-only.html: Ditto. 19 * media/video-fullscreeen-only-playback.html: Ditto. 20 * media/video-play-audio-require-user-gesture.html: Ditto. 21 * media/video-play-require-user-gesture.html: Ditto. 22 * media/video-test.js: 23 (passTest): Added. 24 * platform/ios-simulator/TestExpectations: Skip test media/require-user-gesture-to-load-video.html as 25 we need to fix <https://bugs.webkit.org/show_bug.cgi?id=163291> to support tapping the play button on iOS. 26 1 27 2016-10-11 Daniel Bates <dabates@apple.com> 2 28 -
trunk/LayoutTests/media/media-controls.js
r168467 r207159 93 93 return displayElement; 94 94 } 95 96 // FIXME: Make this work for iOS. 97 function clickPlayButton(video) 98 { 99 if (!window.eventSender) 100 return; 101 102 var playButtonCoordinates = mediaControlsButtonCoordinates(video, "play-button"); 103 var x = playButtonCoordinates[0]; 104 var y = playButtonCoordinates[1]; 105 106 eventSender.mouseMoveTo(x, y); 107 eventSender.mouseDown(); 108 eventSender.mouseUp(); 109 } -
trunk/LayoutTests/media/video-controls-transformed.html
r95133 r207159 19 19 testExpected("video.controls", null, '!='); 20 20 waitForEvent('canplaythrough', function () { 21 if (window.eventSender) { 22 // Find the play button and click the middle of its bounding box. 23 var playCoords; 24 try { 25 playCoords = mediaControlsButtonCoordinates(video, "play-button"); 26 } catch (exception) { 27 failTest(exception.description); 28 return; 29 } 30 var clickX = playCoords[0]; 31 var clickY = playCoords[1]; 32 eventSender.mouseMoveTo(clickX, clickY); 33 eventSender.mouseDown(); 34 eventSender.mouseUp(); 21 try { 22 clickPlayButton(video); 23 } catch (exception) { 24 failTest(exception.description); 25 return; 35 26 } 36 27 testExpected("video.paused", false); -
trunk/LayoutTests/media/video-controls-visible-audio-only.html
r120416 r207159 38 38 return; 39 39 40 // start playback41 var playCoords42 40 try { 43 playCoords = mediaControlsButtonCoordinates(video, "play-button");41 clickPlayButton(video); 44 42 } catch (exception) { 45 43 consoleWrite(exception.description); … … 47 45 return; 48 46 } 49 var clickX = playCoords[0];50 var clickY = playCoords[1];51 eventSender.mouseMoveTo(clickX, clickY);52 eventSender.mouseDown();53 eventSender.mouseUp();54 47 testcondition("!video.paused"); 55 48 -
trunk/LayoutTests/media/video-fullscreeen-only-playback.html
r189112 r207159 34 34 consoleWrite("<br>** Clicking \'play\' button..."); 35 35 36 var playCoords;37 36 try { 38 playCoords = mediaControlsButtonCoordinates(video, "play-button");37 clickPlayButton(video); 39 38 } catch (exception) { 40 39 failTest(exception.description); 41 40 return; 42 41 } 43 44 eventSender.mouseMoveTo(playCoords[0], playCoords[1]);45 eventSender.mouseDown();46 eventSender.mouseUp();47 42 } 48 43 -
trunk/LayoutTests/media/video-play-audio-require-user-gesture.html
r201109 r207159 9 9 if (window.internals) 10 10 window.internals.settings.setAudioPlaybackRequiresUserGesture(true); 11 12 function click()13 {14 if (window.eventSender) {15 var playCoords;16 try {17 playCoords = mediaControlsButtonCoordinates(video, "play-button");18 } catch (exception) {19 failTest(exception.description);20 return;21 }22 var x = playCoords[0];23 var y = playCoords[1];24 25 userGestureInitiated = 1;26 eventSender.mouseMoveTo(x, y);27 eventSender.mouseDown();28 eventSender.mouseUp();29 }30 }31 11 32 12 function playing() … … 63 43 64 44 consoleWrite("* User gesture initiated"); 65 click(); 45 userGestureInitiated = 1; 46 try { 47 clickPlayButton(video); 48 } catch (exception) { 49 failTest(exception.description); 50 return; 51 } 66 52 } 67 53 -
trunk/LayoutTests/media/video-play-require-user-gesture.html
r197953 r207159 9 9 if (window.internals) 10 10 window.internals.settings.setVideoPlaybackRequiresUserGesture(true); 11 12 function click()13 {14 if (window.eventSender) {15 var playCoords;16 try {17 playCoords = mediaControlsButtonCoordinates(video, "play-button");18 } catch (exception) {19 failTest(exception.description);20 return;21 }22 var x = playCoords[0];23 var y = playCoords[1];24 25 userGestureInitiated = 1;26 eventSender.mouseMoveTo(x, y);27 eventSender.mouseDown();28 eventSender.mouseUp();29 }30 }31 11 32 12 function playing() … … 63 43 64 44 consoleWrite("* User gesture initiated"); 65 click(); 45 userGestureInitiated = 1; 46 try { 47 clickPlayButton(video); 48 } catch (exception) { 49 failTest(exception.description); 50 return; 51 } 66 52 } 67 53 -
trunk/LayoutTests/media/video-test.js
r201187 r207159 5 5 var printFullTestDetails = true; // This is optionaly switched of by test whose tested values can differ. (see disableFullTestDetailsPrinting()) 6 6 var Failed = false; 7 var Success = true; 7 8 8 9 var track = null; // Current TextTrack being tested. … … 267 268 } 268 269 270 function passTest(text) 271 { 272 logResult(Success, text); 273 endTest(); 274 } 269 275 270 276 function logResult(success, text) -
trunk/LayoutTests/platform/ios-simulator/TestExpectations
r207031 r207159 2546 2546 media/video-controls-show-on-kb-or-ax-event.html 2547 2547 media/video-fullscreen-restriction-removed.html 2548 media/video-play-require-user-gesture.html2549 2548 media/video-playsinline.html 2550 2549 media/video-remote-control-playpause.html … … 2627 2626 media/video-controls-no-scripting.html [ Failure ] 2628 2627 media/video-controls-toggling.html [ Failure ] 2629 media/video-controls-transformed.html [ Failure ]2630 media/video-controls-visible-audio-only.html [ Failure ]2631 2628 media/video-controls-visible-exiting-fullscreen.html [ Failure ] 2632 2629 media/video-controls-zoomed.html [ Failure ] 2633 2630 media/video-frame-accurate-seek.html [ Failure ] 2634 2631 media/video-fullscreeen-only-controls.html [ Failure ] 2635 media/video-fullscreeen-only-playback.html [ Failure ]2636 2632 media/video-initially-hidden-volume-slider-up.html [ Failure ] 2637 media/video-play-audio-require-user-gesture.html [ Failure ]2638 2633 media/video-trackmenu-selection.html [ Failure ] 2639 2634 media/video-volume.html [ Failure ] … … 2686 2681 2687 2682 webkit.org/b/162647 http/tests/xmlhttprequest/onabort-response-getters.html [ Pass Failure ] 2683 2684 # Media tests cannot tap play button on iOS. 2685 webkit.org/b/163291 media/require-user-gesture-to-load-video.html 2686 webkit.org/b/163291 media/video-controls-transformed.html [ Failure ] 2687 webkit.org/b/163291 media/video-controls-visible-audio-only.html [ Failure ] 2688 webkit.org/b/163291 media/video-fullscreeen-only-playback.html [ Failure ] 2689 webkit.org/b/163291 media/video-play-audio-require-user-gesture.html [ Failure ] 2690 webkit.org/b/163291 media/video-play-require-user-gesture.html 2691 -
trunk/Source/WebCore/ChangeLog
r207158 r207159 1 2016-10-11 Daniel Bates <dabates@apple.com> 2 3 [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps 4 https://bugs.webkit.org/show_bug.cgi?id=163244 5 <rdar://problem/27250015> 6 7 Reviewed by Jer Noble. 8 9 Adds a new setting to toggle requiring a user gesture to load a video (enabled by default). 10 Disable this setting for apps built against iOS 9 or earlier. 11 12 Tests: media/loadedmetadata-fires-without-user-gesture-when-setRequiresUserGestureToLoadVideo-false.html 13 media/require-user-gesture-to-load-video.html 14 15 * html/HTMLMediaElement.cpp: 16 (WebCore::HTMLMediaElement::HTMLMediaElement): Only require a user gesture to load a video 17 when Settings::requiresUserGestureToLoadVideo() is true. 18 * page/Settings.cpp: Enable setting requiresUserGestureToLoadVideo by default. 19 * page/Settings.in: Add setting, requiresUserGestureToLoadVideo. 20 1 21 2016-10-11 Sam Weinig <sam@webkit.org> 2 22 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r207005 r207159 505 505 if (settings && settings->videoPlaybackRequiresUserGesture()) { 506 506 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureForVideoRateChange); 507 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureForLoad); 507 if (settings->requiresUserGestureToLoadVideo()) 508 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureForLoad); 508 509 } 509 510 -
trunk/Source/WebCore/page/Settings.cpp
r206119 r207159 168 168 #endif 169 169 170 static const bool defaultRequiresUserGestureToLoadVideo = true; 171 170 172 static const bool defaultAllowsPictureInPictureMediaPlayback = true; 171 173 -
trunk/Source/WebCore/page/Settings.in
r206843 r207159 128 128 allowDisplayOfInsecureContent initial=false 129 129 allowRunningOfInsecureContent initial=false 130 requiresUserGestureToLoadVideo initial=defaultRequiresUserGestureToLoadVideo 130 131 videoPlaybackRequiresUserGesture initial=defaultVideoPlaybackRequiresUserGesture 131 132 audioPlaybackRequiresUserGesture initial=defaultAudioPlaybackRequiresUserGesture -
trunk/Source/WebKit/mac/ChangeLog
r207151 r207159 1 2016-10-11 Daniel Bates <dabates@apple.com> 2 3 [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps 4 https://bugs.webkit.org/show_bug.cgi?id=163244 5 <rdar://problem/27250015> 6 7 Reviewed by Jer Noble. 8 9 Enable or disable the Setting::requiresUserGestureToLoadVideo() in legacy WebKit depending 10 on the version of iOS SDK that the app was linked against. We require a user gesture to 11 begin loading a video as of iOS 10. 12 13 * WebView/WebView.mm: 14 (shouldRequireUserGestureToLoadVideo): 15 (-[WebView _preferencesChanged:]): Modified to pass the WebKit requiresUserGestureToLoadVideo 16 preference to WebCore. 17 1 18 2016-10-11 Alex Christensen <achristensen@webkit.org> 2 19 -
trunk/Source/WebKit/mac/WebView/WebView.mm
r207151 r207159 904 904 } 905 905 906 static bool shouldRequireUserGestureToLoadVideo() 907 { 908 static bool shouldRequireUserGestureToLoadVideo = dyld_get_program_sdk_version() >= DYLD_IOS_VERSION_10_0; 909 return shouldRequireUserGestureToLoadVideo; 910 } 911 906 912 #if ENABLE(GAMEPAD) 907 913 static void WebKitInitializeGamepadProviderIfNecessary() … … 2371 2377 settings.setVideoPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture || [preferences videoPlaybackRequiresUserGesture]); 2372 2378 settings.setAudioPlaybackRequiresUserGesture(mediaPlaybackRequiresUserGesture || [preferences audioPlaybackRequiresUserGesture]); 2379 settings.setRequiresUserGestureToLoadVideo(shouldRequireUserGestureToLoadVideo()); 2373 2380 settings.setMainContentUserGestureOverrideEnabled([preferences overrideUserGestureRequirementForMainContent]); 2374 2381 settings.setAllowsInlineMediaPlayback([preferences mediaPlaybackAllowsInline]); -
trunk/Source/WebKit2/ChangeLog
r207151 r207159 1 2016-10-11 Daniel Bates <dabates@apple.com> 2 3 [iOS] REGRESSION (r197953): User gesture required to load video in iOS 9-built apps 4 https://bugs.webkit.org/show_bug.cgi?id=163244 5 <rdar://problem/27250015> 6 7 Reviewed by Jer Noble. 8 9 Enable or disable the Setting::requiresUserGestureToLoadVideo() in WebKit depending on the 10 version of iOS SDK that the app was linked against. We require a user gesture to begin 11 loading a video as of iOS 10. 12 13 * Shared/WebPreferencesDefinitions.h: 14 * UIProcess/API/Cocoa/WKWebView.mm: 15 (shouldRequireUserGestureToLoadVideo): Added. 16 (-[WKWebView _initializeWithConfiguration:]): Set the requiresUserGestureToLoadVideo preference. 17 * WebProcess/WebPage/WebPage.cpp: 18 (WebKit::WebPage::updatePreferences): Modified to pass the WebKit requiresUserGestureToLoadVideo 19 preference to WebCore. 20 1 21 2016-10-11 Alex Christensen <achristensen@webkit.org> 2 22 -
trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h
r207139 r207159 150 150 macro(RequiresUserGestureForVideoPlayback, requiresUserGestureForVideoPlayback, Bool, bool, false, "", "") \ 151 151 macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_AUDIO_PLAYBACK, "", "") \ 152 macro(RequiresUserGestureToLoadVideo, requiresUserGestureToLoadVideo, Bool, bool, false, "", "") \ 152 153 macro(MainContentUserGestureOverrideEnabled, mainContentUserGestureOverrideEnabled, Bool, bool, false, "", "") \ 153 154 macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK, "", "") \ -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r206986 r207159 327 327 #endif 328 328 329 static bool shouldRequireUserGestureToLoadVideo() 330 { 331 static bool shouldRequireUserGestureToLoadVideo = dyld_get_program_sdk_version() >= DYLD_IOS_VERSION_10_0; 332 return shouldRequireUserGestureToLoadVideo; 333 } 334 329 335 #if ENABLE(DATA_DETECTION) && PLATFORM(IOS) 330 336 static WebCore::DataDetectorTypes fromWKDataDetectorTypes(uint64_t types) … … 456 462 pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForVideoPlaybackKey(), WebKit::WebPreferencesStore::Value((mediaTypesRequiringUserGesture & WKAudiovisualMediaTypeVideo) == WKAudiovisualMediaTypeVideo)); 457 463 pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForAudioPlaybackKey(), WebKit::WebPreferencesStore::Value(((mediaTypesRequiringUserGesture & WKAudiovisualMediaTypeAudio) == WKAudiovisualMediaTypeAudio))); 464 pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureToLoadVideoKey(), WebKit::WebPreferencesStore::Value(shouldRequireUserGestureToLoadVideo())); 458 465 pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::mainContentUserGestureOverrideEnabledKey(), WebKit::WebPreferencesStore::Value(!![_configuration _mainContentUserGestureOverrideEnabled])); 459 466 pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::invisibleAutoplayNotPermittedKey(), WebKit::WebPreferencesStore::Value(!![_configuration _invisibleAutoplayNotPermitted])); -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r206843 r207159 3022 3022 settings.setVideoPlaybackRequiresUserGesture(requiresUserGestureForMedia || store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForVideoPlaybackKey())); 3023 3023 settings.setAudioPlaybackRequiresUserGesture(requiresUserGestureForMedia || store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureForAudioPlaybackKey())); 3024 settings.setRequiresUserGestureToLoadVideo(store.getBoolValueForKey(WebPreferencesKey::requiresUserGestureToLoadVideoKey())); 3024 3025 settings.setMainContentUserGestureOverrideEnabled(store.getBoolValueForKey(WebPreferencesKey::mainContentUserGestureOverrideEnabledKey())); 3025 3026 settings.setAllowsInlineMediaPlayback(store.getBoolValueForKey(WebPreferencesKey::allowsInlineMediaPlaybackKey()));
Note: See TracChangeset
for help on using the changeset viewer.