Title: [280500] trunk
Revision
280500
Author
j...@apple.com
Date
2021-07-30 15:38:29 -0700 (Fri, 30 Jul 2021)

Log Message

REGRESSION (r274460?): Infinite recursion on fullscreen/full-screen-remove-ancestor.html in WTR::InjectedBundlePage::closeFullScreen
https://bugs.webkit.org/show_bug.cgi?id=224085
rdar://75576840

Reviewed by Eric Carlson.

Source/WebKit:

WebFullScreenManager::close() is used to cleanup a transient error when exiting or
attempting to exit fullscreen; it then calls InjectedBundleXXX::closeFullScreen().
It is possible for the injected bundle's closeFullScreen() to attempt to exit full
screen mode again.
Rather than making the bundle responsible for doing the right thing, we add a
workaround in the fullscreen manager to ensure no recursion is happening.

Covered by existing test.

* WebProcess/FullScreen/WebFullScreenManager.cpp:
(WebKit::WebFullScreenManager::close):
* WebProcess/FullScreen/WebFullScreenManager.h: Make close() method private

LayoutTests:

* platform/mac-wk2/TestExpectations: re-enable test.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (280499 => 280500)


--- trunk/LayoutTests/ChangeLog	2021-07-30 22:29:52 UTC (rev 280499)
+++ trunk/LayoutTests/ChangeLog	2021-07-30 22:38:29 UTC (rev 280500)
@@ -1,3 +1,13 @@
+2021-07-30  Jean-Yves Avenard  <j...@apple.com>
+
+        REGRESSION (r274460?): Infinite recursion on fullscreen/full-screen-remove-ancestor.html in WTR::InjectedBundlePage::closeFullScreen
+        https://bugs.webkit.org/show_bug.cgi?id=224085
+        rdar://75576840
+
+        Reviewed by Eric Carlson.
+
+        * platform/mac-wk2/TestExpectations: re-enable test.
+
 2021-07-30  Ayumi Kojima  <ayumi_koj...@apple.com>
 
         [ iPad ] fast/canvas/canvas-color-space-display-p3.html is failing.

Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (280499 => 280500)


--- trunk/LayoutTests/platform/mac-wk2/TestExpectations	2021-07-30 22:29:52 UTC (rev 280499)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations	2021-07-30 22:38:29 UTC (rev 280500)
@@ -1500,8 +1500,6 @@
 # rdar://80335452 ([ Monterey wk2 Release ] fast/scrolling/iframe-scrollable-after-back.html is a flaky timeout)
 [ Monterey ] fast/scrolling/iframe-scrollable-after-back.html [ Pass Timeout ]
 
-webkit.org/b/224085 fullscreen/full-screen-remove-ancestor.html [ Skip ]
-
 webkit.org/b/227776 [ BigSur Release arm64 ] scrollbars/corner-resizer-window-inactive.html [ Pass ImageOnlyFailure ]
 
 webkit.org/b/227776 [ Catalina Release ] scrollbars/corner-resizer-window-inactive.html [ Pass ImageOnlyFailure ]

Modified: trunk/Source/WebKit/ChangeLog (280499 => 280500)


--- trunk/Source/WebKit/ChangeLog	2021-07-30 22:29:52 UTC (rev 280499)
+++ trunk/Source/WebKit/ChangeLog	2021-07-30 22:38:29 UTC (rev 280500)
@@ -1,3 +1,24 @@
+2021-07-30  Jean-Yves Avenard  <j...@apple.com>
+
+        REGRESSION (r274460?): Infinite recursion on fullscreen/full-screen-remove-ancestor.html in WTR::InjectedBundlePage::closeFullScreen
+        https://bugs.webkit.org/show_bug.cgi?id=224085
+        rdar://75576840
+
+        Reviewed by Eric Carlson.
+
+        WebFullScreenManager::close() is used to cleanup a transient error when exiting or
+        attempting to exit fullscreen; it then calls InjectedBundleXXX::closeFullScreen().
+        It is possible for the injected bundle's closeFullScreen() to attempt to exit full
+        screen mode again.
+        Rather than making the bundle responsible for doing the right thing, we add a
+        workaround in the fullscreen manager to ensure no recursion is happening.
+
+        Covered by existing test.
+
+        * WebProcess/FullScreen/WebFullScreenManager.cpp:
+        (WebKit::WebFullScreenManager::close):
+        * WebProcess/FullScreen/WebFullScreenManager.h: Make close() method private
+
 2021-07-30  Tim Horton  <timothy_hor...@apple.com>
 
         Accessibility code logs to stderr in many layout test runs

Modified: trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp (280499 => 280500)


--- trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp	2021-07-30 22:29:52 UTC (rev 280499)
+++ trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp	2021-07-30 22:38:29 UTC (rev 280500)
@@ -263,8 +263,12 @@
 
 void WebFullScreenManager::close()
 {
+    if (m_closing)
+        return;
+    m_closing = true;
     LOG(Fullscreen, "WebFullScreenManager %p close()", this);
     m_page->injectedBundleFullScreenClient().closeFullScreen(m_page.get());
+    m_closing = false;
 }
 
 void WebFullScreenManager::saveScrollPosition()

Modified: trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.h (280499 => 280500)


--- trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.h	2021-07-30 22:29:52 UTC (rev 280499)
+++ trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.h	2021-07-30 22:38:29 UTC (rev 280500)
@@ -69,8 +69,6 @@
 
     void videoControlsManagerDidChange();
 
-    void close();
-
 protected:
     WebFullScreenManager(WebPage*);
 
@@ -96,6 +94,10 @@
 #if ENABLE(VIDEO)
     RefPtr<WebCore::HTMLVideoElement> m_pipStandbyElement;
 #endif
+
+private:
+    void close();
+    bool m_closing { false };
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to