Diff
Modified: branches/safari-602-branch/Source/WebCore/ChangeLog (203874 => 203875)
--- branches/safari-602-branch/Source/WebCore/ChangeLog 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Source/WebCore/ChangeLog 2016-07-29 07:11:56 UTC (rev 203875)
@@ -1,5 +1,26 @@
2016-07-28 Babak Shafiei <bshaf...@apple.com>
+ Merge r203698. rdar://problem/26986673
+
+ 2016-07-25 Wenson Hsieh <wenson_hs...@apple.com>
+
+ Media controls should not be displayed for a video until it starts playing
+ https://bugs.webkit.org/show_bug.cgi?id=160092
+ <rdar://problem/26986673>
+
+ Reviewed by Beth Dakin.
+
+ For videos that have never played back yet, we should not show media controls. To ensure this
+ behavior, we ensure that the playback behavior restriction is set upon creating the media
+ element. This restriction is then removed when the media element begins to play.
+
+ Added two new WebKit API tests.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::HTMLMediaElement):
+
+2016-07-28 Babak Shafiei <bshaf...@apple.com>
+
Merge r203695. rdar://problem/27010112
2016-07-25 Brady Eidson <beid...@apple.com>
Modified: branches/safari-602-branch/Source/WebCore/html/HTMLMediaElement.cpp (203874 => 203875)
--- branches/safari-602-branch/Source/WebCore/html/HTMLMediaElement.cpp 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Source/WebCore/html/HTMLMediaElement.cpp 2016-07-29 07:11:56 UTC (rev 203875)
@@ -443,6 +443,7 @@
m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureToAutoplayToExternalDevice);
#endif
m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureToControlControlsManager);
+ m_mediaSession->addBehaviorRestriction(MediaElementSession::RequirePlaybackToControlControlsManager);
Settings* settings = document.settings();
#if PLATFORM(IOS)
Modified: branches/safari-602-branch/Tools/ChangeLog (203874 => 203875)
--- branches/safari-602-branch/Tools/ChangeLog 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Tools/ChangeLog 2016-07-29 07:11:56 UTC (rev 203875)
@@ -1,5 +1,30 @@
2016-07-28 Babak Shafiei <bshaf...@apple.com>
+ Merge r203698. rdar://problem/26986673
+
+ 2016-07-25 Wenson Hsieh <wenson_hs...@apple.com>
+
+ Media controls should not be displayed for a video until it starts playing
+ https://bugs.webkit.org/show_bug.cgi?id=160092
+ <rdar://problem/26986673>
+
+ Reviewed by Beth Dakin.
+
+ Verify that multiple videos do or don't show the media controller depending on whether videos
+ are playing. Also tweaks an existing API test (VideoControlsManagerSingleLargeVideo) that was
+ passing because we were always showing media controls for large videos with audio, even if they
+ had not played back yet. This change ensures that large videos with audio show media controls
+ only after they begin to play back, and not by virtue of being large enough for main content.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm:
+ (TestWebKitAPI::TEST):
+ * TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html:
+ * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html: Added.
+ * TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html: Added.
+
+2016-07-28 Babak Shafiei <bshaf...@apple.com>
+
Merge r203700. rdar://problem/27010112
2016-07-25 Brady Eidson <beid...@apple.com>
Modified: branches/safari-602-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (203874 => 203875)
--- branches/safari-602-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2016-07-29 07:11:56 UTC (rev 203875)
@@ -56,6 +56,8 @@
2E1B7B001D41ABA7007558B4 /* large-video-seek-after-ending.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E1B7AFF1D41A95F007558B4 /* large-video-seek-after-ending.html */; };
2E1B7B021D41B1B9007558B4 /* large-video-hides-controls-after-seek-to-end.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E1B7B011D41B1B3007558B4 /* large-video-hides-controls-after-seek-to-end.html */; };
2E1DFDF11D42E1E400714A00 /* large-video-seek-to-beginning-and-play-after-ending.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E1DFDF01D42E14400714A00 /* large-video-seek-to-beginning-and-play-after-ending.html */; };
+ 2E1DFDED1D42A51100714A00 /* large-videos-with-audio.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E1DFDEC1D42A41C00714A00 /* large-videos-with-audio.html */; };
+ 2E1DFDEF1D42A6F200714A00 /* large-videos-with-audio-autoplay.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E1DFDEE1D42A6EB00714A00 /* large-videos-with-audio-autoplay.html */; };
2E7765CD16C4D80A00BA2BB1 /* mainIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CC16C4D80A00BA2BB1 /* mainIOS.mm */; };
2E7765CF16C4D81100BA2BB1 /* mainMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CE16C4D81100BA2BB1 /* mainMac.mm */; };
33BE5AF9137B5AAE00705813 /* MouseMoveAfterCrash_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33BE5AF8137B5AAE00705813 /* MouseMoveAfterCrash_Bundle.cpp */; };
@@ -504,6 +506,8 @@
2E1DFDF11D42E1E400714A00 /* large-video-seek-to-beginning-and-play-after-ending.html in Copy Resources */,
2E1B7B021D41B1B9007558B4 /* large-video-hides-controls-after-seek-to-end.html in Copy Resources */,
2E1B7B001D41ABA7007558B4 /* large-video-seek-after-ending.html in Copy Resources */,
+ 2E1DFDEF1D42A6F200714A00 /* large-videos-with-audio-autoplay.html in Copy Resources */,
+ 2E1DFDED1D42A51100714A00 /* large-videos-with-audio.html in Copy Resources */,
5C9E59411D3EB5AC00E3C62E /* ApplicationCache.db in Copy Resources */,
5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */,
5C9E59431D3EB5AC00E3C62E /* ApplicationCache.db-wal in Copy Resources */,
@@ -707,6 +711,8 @@
2E1B7AFF1D41A95F007558B4 /* large-video-seek-after-ending.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "large-video-seek-after-ending.html"; sourceTree = "<group>"; };
2E1B7B011D41B1B3007558B4 /* large-video-hides-controls-after-seek-to-end.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "large-video-hides-controls-after-seek-to-end.html"; sourceTree = "<group>"; };
2E1DFDF01D42E14400714A00 /* large-video-seek-to-beginning-and-play-after-ending.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "large-video-seek-to-beginning-and-play-after-ending.html"; sourceTree = "<group>"; };
+ 2E1DFDEC1D42A41C00714A00 /* large-videos-with-audio.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "large-videos-with-audio.html"; sourceTree = "<group>"; };
+ 2E1DFDEE1D42A6EB00714A00 /* large-videos-with-audio-autoplay.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "large-videos-with-audio-autoplay.html"; sourceTree = "<group>"; };
2E7765CC16C4D80A00BA2BB1 /* mainIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = mainIOS.mm; sourceTree = "<group>"; };
2E7765CE16C4D81100BA2BB1 /* mainMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = mainMac.mm; sourceTree = "<group>"; };
333B9CE11277F23100FEFCE3 /* PreventEmptyUserAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PreventEmptyUserAgent.cpp; sourceTree = "<group>"; };
@@ -1346,6 +1352,7 @@
children = (
2E1DFDF01D42E14400714A00 /* large-video-seek-to-beginning-and-play-after-ending.html */,
2E1B7B011D41B1B3007558B4 /* large-video-hides-controls-after-seek-to-end.html */,
+ 2E1DFDEE1D42A6EB00714A00 /* large-videos-with-audio-autoplay.html */,
5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */,
5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */,
5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */,
@@ -1381,6 +1388,7 @@
51714EB21CF8C761004723C4 /* WebProcessKillIDBCleanup-1.html */,
51714EB31CF8C761004723C4 /* WebProcessKillIDBCleanup-2.html */,
2E1B7AFF1D41A95F007558B4 /* large-video-seek-after-ending.html */,
+ 2E1DFDEC1D42A41C00714A00 /* large-videos-with-audio.html */,
);
name = Resources;
sourceTree = "<group>";
Modified: branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm (203874 => 203875)
--- branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/VideoControlsManager.mm 2016-07-29 07:11:56 UTC (rev 203875)
@@ -171,6 +171,54 @@
TestWebKitAPI::Util::run(&receivedScriptMessage);
}
+TEST(VideoControlsManager, VideoControlsManagerMultipleVideosWithAudio)
+{
+ RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
+ RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) configuration:configuration.get()]);
+
+ __block BOOL didShowMediaControls;
+ __block bool isDoneLoading = false;
+
+ RetainPtr<NSWindow> window = adoptNS([[NSWindow alloc] initWithContentRect:[webView frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]);
+ [[window contentView] addSubview:webView.get()];
+ RetainPtr<OnLoadMessageHandler> _onloadHandler_ = adoptNS([[OnLoadMessageHandler alloc] initWithWKWebView:webView.get() handler:^() {
+ didShowMediaControls = [webView _hasActiveVideoForControlsManager];
+ isDoneLoading = true;
+ }]);
+ [[configuration userContentController] addScriptMessageHandler:onloadHandler.get() name:@"onloadHandler"];
+
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"large-videos-with-audio" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
+ [webView loadRequest:request];
+
+ TestWebKitAPI::Util::run(&isDoneLoading);
+ EXPECT_FALSE(didShowMediaControls);
+}
+
+TEST(VideoControlsManager, VideoControlsManagerMultipleVideosWithAudioAndAutoplay)
+{
+ RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
+ RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) configuration:configuration.get()]);
+
+ __block BOOL didShowMediaControls;
+ __block bool isDoneLoading = false;
+
+ RetainPtr<NSWindow> window = adoptNS([[NSWindow alloc] initWithContentRect:[webView frame] styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]);
+ [[window contentView] addSubview:webView.get()];
+ RetainPtr<OnLoadMessageHandler> _onloadHandler_ = adoptNS([[OnLoadMessageHandler alloc] initWithWKWebView:webView.get() handler:^() {
+ didShowMediaControls = [webView _hasActiveVideoForControlsManager];
+ isDoneLoading = true;
+ }]);
+ [[configuration userContentController] addScriptMessageHandler:onloadHandler.get() name:@"onloadHandler"];
+
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"large-videos-with-audio-autoplay" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
+ [webView loadRequest:request];
+
+ TestWebKitAPI::Util::run(&isDoneLoading);
+ EXPECT_TRUE(didShowMediaControls);
+}
+
TEST(VideoControlsManager, VideoControlsManagerSingleSmallAutoplayingVideo)
{
RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
Modified: branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html (203874 => 203875)
--- branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html 2016-07-29 07:11:52 UTC (rev 203874)
+++ branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-video-with-audio.html 2016-07-29 07:11:56 UTC (rev 203875)
@@ -12,11 +12,13 @@
function playing() {
window.clearTimeout(timeout);
- try {
- window.webkit.messageHandlers.playingHandler.postMessage('playing');
- } catch(e) {
- window.location = 'callback:playing';
- }
+ setTimeout(function() {
+ try {
+ window.webkit.messageHandlers.playingHandler.postMessage('playing');
+ } catch(e) {
+ window.location = 'callback:playing';
+ }
+ }, 0);
}
function notPlaying() {
Added: branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html (0 => 203875)
--- branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html (rev 0)
+++ branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio-autoplay.html 2016-07-29 07:11:56 UTC (rev 203875)
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<script>
+ function handleLoaded() {
+ // The media controls should be updated on the next runloop.
+ setTimeout(function() {
+ try {
+ window.webkit.messageHandlers.onloadHandler.postMessage("loaded");
+ } catch(e) { }
+ }, 0);
+ }
+</script>
+<body _onload_=handleLoaded()>
+ <video id="foo" style="width: 480px; height: 320px;"><source src=""
+ <video autoplay id="bar" style="width: 480px; height: 320px;"><source src=""
+ <video id="baz" style="width: 480px; height: 320px;"><source src=""
+</body>
+<html>
Added: branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html (0 => 203875)
--- branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html (rev 0)
+++ branches/safari-602-branch/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/large-videos-with-audio.html 2016-07-29 07:11:56 UTC (rev 203875)
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<script>
+ function handleLoaded() {
+ // The media controls should be updated on the next runloop.
+ setTimeout(function() {
+ try {
+ window.webkit.messageHandlers.onloadHandler.postMessage("loaded");
+ } catch(e) { }
+ }, 0);
+ }
+</script>
+<body _onload_=handleLoaded()>
+ <video id="foo" style="width: 480px; height: 320px;"><source src=""
+ <video id="bar" style="width: 480px; height: 320px;"><source src=""
+ <video id="baz" style="width: 480px; height: 320px;"><source src=""
+</body>
+<html>