⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 294835 in webkit


Ignore:
Timestamp:
May 25, 2022, 4:42:36 PM (4 years ago)
Author:
Wenson Hsieh
Message:

Avoid extracting the main video in element fullscreen when fullscreen mode isn't active
​https://bugs.webkit.org/show_bug.cgi?id=240910
rdar://93906888

Reviewed by Eric Carlson.

Add a check that we're actually still in element fullscreen before extracting the main video. Since
WebFullScreenManager and its m_element both persist after exiting fullscreen mode, there's
currently nothing preventing us from re-triggering video extraction when a video is paused once
again outside of fullscreen mode.

Covered by a new API test (more details in the bug).

  • Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp:

(WebKit::WebFullScreenManager::handleEvent):
(WebKit::WebFullScreenManager::mainVideoElementExtractionTimerFired):

Deal with another corner case, wherein the main video element we previously detected may no longer
be in the fullscreen element's subtree by the time that the extraction timer fires. To avoid this,
always update the main video element again when the extraction timer is fired (as long as we're
still in fullscreen mode), before proceeding with extraction.

Canonical link: ​https://commits.webkit.org/250985@main

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp

    r293086 r294835  
    375375#if ENABLE(VIDEO)
    376376    RefPtr targetElement = dynamicDowncast<WebCore::Element>(event.currentTarget());
    377     if (!m_element || &context != &m_element->document() || !targetElement)
     377    if (!m_element || !targetElement)
     378        return;
     379
     380    Ref document = m_element->document();
     381    if (&context != document.ptr() || !document->fullscreenManager().isFullscreen())
    378382        return;
    379383
    … …  
    399403void WebFullScreenManager::mainVideoElementExtractionTimerFired()
    400404{
     405    if (!m_element || !m_element->document().fullscreenManager().isFullscreen())
     406        return;
     407
     408    updateMainVideoElement();
     409
    401410    if (!m_mainVideoElement)
    402411        return;
Note: See TracChangeset for help on using the changeset viewer.