Changeset 201729 in webkit
- Timestamp:
- Jun 6, 2016 2:47:05 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r201728 r201729 1 2016-06-06 Jer Noble <jer.noble@apple.com> 2 3 Media elements should only be allowed to control controls manager during a user gesture. 4 https://bugs.webkit.org/show_bug.cgi?id=158432 5 6 Reviewed by Eric Carlson. 7 8 Add a new MediaElementSession behavior restriction for the controls manager 9 which is cleared on the first user gesture. Since canControlControlsManager() 10 may be called before the first layout, call updatePlaybackControlsManager() 11 since the main content check requires the laid-out size of the media element. 12 13 (WebCore::HTMLMediaElement::HTMLMediaElement): 14 (WebCore::HTMLMediaElement::layoutSizeChanged): 15 (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): 16 * html/HTMLMediaElement.h: 17 * html/MediaElementSession.cpp: 18 (WebCore::MediaElementSession::canControlControlsManager): 19 * html/MediaElementSession.h: 20 1 21 2016-06-06 Adam Bergkvist <adam.bergkvist@ericsson.com> 2 22 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r201588 r201729 410 410 , m_elementIsHidden(document.hidden()) 411 411 , m_creatingControls(false) 412 , m_receivedLayoutSizeChanged(false) 412 413 #if ENABLE(MEDIA_CONTROLS_SCRIPT) 413 414 , m_mediaControlsDependOnPageScaleFactor(false) … … 444 445 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureToAutoplayToExternalDevice); 445 446 #endif 447 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequireUserGestureToControlControlsManager); 446 448 447 449 Settings* settings = document.settings(); … … 4002 4004 m_resizeTaskQueue.enqueueTask(WTFMove(task)); 4003 4005 #endif 4006 4007 if (!m_receivedLayoutSizeChanged) { 4008 m_receivedLayoutSizeChanged = true; 4009 updatePlaybackControlsManager(); 4010 } 4004 4011 } 4005 4012 … … 6405 6412 | MediaElementSession::RequireUserGestureForAudioRateChange 6406 6413 | MediaElementSession::RequireUserGestureForFullscreen 6407 | MediaElementSession::InvisibleAutoplayNotPermitted; 6414 | MediaElementSession::InvisibleAutoplayNotPermitted 6415 | MediaElementSession::RequireUserGestureToControlControlsManager; 6408 6416 m_mediaSession->removeBehaviorRestriction(restrictionsToRemove); 6409 6417 } -
trunk/Source/WebCore/html/HTMLMediaElement.h
r201588 r201729 927 927 bool m_elementIsHidden : 1; 928 928 bool m_creatingControls : 1; 929 bool m_receivedLayoutSizeChanged : 1; 929 930 930 931 #if ENABLE(MEDIA_CONTROLS_SCRIPT) -
trunk/Source/WebCore/html/MediaElementSession.cpp
r201588 r201729 215 215 bool MediaElementSession::canControlControlsManager(const HTMLMediaElement& element) const 216 216 { 217 if (!element.hasAudio()) 218 return false; 219 220 if (element.muted()) 221 return false; 222 223 if (element.ended()) 224 return false; 225 226 if (element.document().activeDOMObjectsAreSuspended()) 227 return false; 228 229 if (!playbackPermitted(element)) 230 return false; 231 232 if (!element.renderer()) 233 return false; 234 235 if (isElementLargeEnoughForMainContent(element)) 236 return true; 237 238 if (ScriptController::processingUserGestureForMedia()) 239 return true; 240 241 return false; 217 if (!element.hasAudio()) { 218 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: No audio"); 219 return false; 220 } 221 222 if (element.muted()) { 223 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: Muted"); 224 return false; 225 } 226 227 if (element.ended()) { 228 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: Ended"); 229 return false; 230 } 231 232 if (element.document().activeDOMObjectsAreSuspended()) { 233 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: activeDOMObjectsAreSuspended()"); 234 return false; 235 } 236 237 if (!playbackPermitted(element)) { 238 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: Playback not permitted"); 239 return false; 240 } 241 242 if (element.isVideo()) { 243 if (!element.renderer()) { 244 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: No renderer"); 245 return false; 246 } 247 248 if (!element.hasVideo()) { 249 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: No video"); 250 return false; 251 } 252 253 if (isElementLargeEnoughForMainContent(element)) { 254 LOG(Media, "MediaElementSession::canControlControlsManager - returning TRUE: Is main content"); 255 return true; 256 } 257 } 258 259 if (m_restrictions & RequireUserGestureToControlControlsManager && !ScriptController::processingUserGestureForMedia()) { 260 LOG(Media, "MediaElementSession::canControlControlsManager - returning FALSE: No user gesture"); 261 return false; 262 } 263 264 LOG(Media, "MediaElementSession::canControlControlsManager - returning TRUE: All criteria met"); 265 return true; 242 266 } 243 267 -
trunk/Source/WebCore/html/MediaElementSession.h
r199286 r201729 95 95 AutoPreloadingNotPermitted = 1 << 10, 96 96 InvisibleAutoplayNotPermitted = 1 << 11, 97 OverrideUserGestureRequirementForMainContent = 1 << 12 97 OverrideUserGestureRequirementForMainContent = 1 << 12, 98 RequireUserGestureToControlControlsManager = 1 << 13, 98 99 }; 99 100 typedef unsigned BehaviorRestrictions;
Note: See TracChangeset
for help on using the changeset viewer.