bool MediaElementSession::playbackPermitted(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return true; if (requiresFullscreenForVideoPlayback(element) && !fullscreenPermitted(element)) { LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of fullscreen restriction"); return false; } if (m_restrictions & OverrideUserGestureRequirementForMainContent && updateIsMainContent()) return true; if (m_restrictions & RequireUserGestureForVideoRateChange && element.isVideo() && !ScriptController::processingUserGestureForMedia()) { LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of video rate change restriction"); return false; } if (m_restrictions & RequireUserGestureForAudioRateChange && (!element.isVideo() || element.hasAudio()) && !element.muted() && !ScriptController::processingUserGestureForMedia()) { LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of audio rate change restriction"); return false; } return true; }
bool MediaElementSession::allowsAutomaticMediaDataLoading(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return true; Settings* settings = element.document().settings(); if (settings && settings->mediaDataLoadsAutomatically()) return true; return false; }
bool MediaElementSession::requiresFullscreenForVideoPlayback(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return false; if (is<HTMLAudioElement>(element)) return false; Settings* settings = element.document().settings(); if (!settings || !settings->allowsInlineMediaPlayback()) return true; return settings->inlineMediaPlaybackRequiresPlaysInlineAttribute() && !element.fastHasAttribute(HTMLNames::webkit_playsinlineAttr); }
MediaPlayer::Preload MediaElementSession::effectivePreloadForElement(const HTMLMediaElement& element) const { MediaPlayer::Preload preload = element.preloadValue(); if (pageExplicitlyAllowsElementToAutoplayInline(element)) return preload; if (m_restrictions & MetadataPreloadingNotPermitted) return MediaPlayer::None; if (m_restrictions & AutoPreloadingNotPermitted) { if (preload > MediaPlayer::MetaData) return MediaPlayer::MetaData; } return preload; }
bool MediaElementSession::playbackPermitted(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return true; if (m_restrictions & RequireUserGestureForRateChange && !ScriptController::processingUserGesture()) { LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE"); return false; } if (m_restrictions & RequireUserGestureForAudioRateChange && element.hasAudio() && !ScriptController::processingUserGesture()) { LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE"); return false; } return true; }
MediaPlayer::Preload MediaElementSession::effectivePreloadForElement(const HTMLMediaElement& element) const { PlatformMediaSessionManager::SessionRestrictions restrictions = PlatformMediaSessionManager::sharedManager().restrictions(mediaType()); MediaPlayer::Preload preload = element.preloadValue(); if (pageExplicitlyAllowsElementToAutoplayInline(element)) return preload; if ((restrictions & PlatformMediaSessionManager::MetadataPreloadingNotPermitted) == PlatformMediaSessionManager::MetadataPreloadingNotPermitted) return MediaPlayer::None; if ((restrictions & PlatformMediaSessionManager::AutoPreloadingNotPermitted) == PlatformMediaSessionManager::AutoPreloadingNotPermitted) { if (preload > MediaPlayer::MetaData) return MediaPlayer::MetaData; } return preload; }
bool MediaElementSession::requiresFullscreenForVideoPlayback(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return false; if (is<HTMLAudioElement>(element)) return false; Settings* settings = element.document().settings(); if (!settings || !settings->allowsInlineMediaPlayback()) return true; if (!settings->inlineMediaPlaybackRequiresPlaysInlineAttribute()) return false; #if PLATFORM(IOS) if (dyld_get_program_sdk_version() < DYLD_IOS_VERSION_10_0) return !element.hasAttributeWithoutSynchronization(HTMLNames::webkit_playsinlineAttr); #endif return !element.hasAttributeWithoutSynchronization(HTMLNames::playsinlineAttr); }
bool MediaElementSession::requiresFullscreenForVideoPlayback(const HTMLMediaElement& element) const { if (pageExplicitlyAllowsElementToAutoplayInline(element)) return false; if (!PlatformMediaSessionManager::sharedManager().sessionRestrictsInlineVideoPlayback(*this)) return false; Settings* settings = element.document().settings(); if (!settings || !settings->allowsInlineMediaPlayback()) return true; if (element.fastHasAttribute(HTMLNames::webkit_playsinlineAttr)) return false; #if PLATFORM(IOS) if (applicationIsDumpRenderTree()) return false; #endif return true; }