- Revision
- 272425
- Author
- [email protected]
- Date
- 2021-02-05 10:44:54 -0800 (Fri, 05 Feb 2021)
Log Message
ASSERTION FAILED: Completion handler should always be called under WebKit::VideoFullscreenManagerProxy::forEachSession
https://bugs.webkit.org/show_bug.cgi?id=221343
<rdar://problem/73939450>
Reviewed by Youenn Fablet.
If a client tries to exit fullscreen mode when there is no fullscreen
video present, we should call the completion handler immediately and
return.
Rename requestFullscreenModeWithCallback to requestCloseAllMediaPresentations
because the completion handler is only called when all media presentations
are closed. requestFullscreenModeWithCallback makes it seem like we
can use this function with other modes besides VideoFullscreenModeNone.
No new tests, this will fix a crashing iOS test.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView closeAllMediaPresentations:]):
* UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
* UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
(WebKit::VideoFullscreenModelContext::requestCloseAllMediaPresentations):
(WebKit::VideoFullscreenManagerProxy::requestCloseAllMediaPresentations):
(WebKit::VideoFullscreenModelContext::requestFullscreenModeWithCallback): Deleted.
(WebKit::VideoFullscreenManagerProxy::requestFullscreenModeWithCallback): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (272424 => 272425)
--- trunk/Source/WebKit/ChangeLog 2021-02-05 18:40:52 UTC (rev 272424)
+++ trunk/Source/WebKit/ChangeLog 2021-02-05 18:44:54 UTC (rev 272425)
@@ -1,3 +1,31 @@
+2021-02-05 Kate Cheney <[email protected]>
+
+ ASSERTION FAILED: Completion handler should always be called under WebKit::VideoFullscreenManagerProxy::forEachSession
+ https://bugs.webkit.org/show_bug.cgi?id=221343
+ <rdar://problem/73939450>
+
+ Reviewed by Youenn Fablet.
+
+ If a client tries to exit fullscreen mode when there is no fullscreen
+ video present, we should call the completion handler immediately and
+ return.
+
+ Rename requestFullscreenModeWithCallback to requestCloseAllMediaPresentations
+ because the completion handler is only called when all media presentations
+ are closed. requestFullscreenModeWithCallback makes it seem like we
+ can use this function with other modes besides VideoFullscreenModeNone.
+
+ No new tests, this will fix a crashing iOS test.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView closeAllMediaPresentations:]):
+ * UIProcess/Cocoa/VideoFullscreenManagerProxy.h:
+ * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
+ (WebKit::VideoFullscreenModelContext::requestCloseAllMediaPresentations):
+ (WebKit::VideoFullscreenManagerProxy::requestCloseAllMediaPresentations):
+ (WebKit::VideoFullscreenModelContext::requestFullscreenModeWithCallback): Deleted.
+ (WebKit::VideoFullscreenManagerProxy::requestFullscreenModeWithCallback): Deleted.
+
2021-02-05 Youenn Fablet <[email protected]>
Make sure click attribution is processed in case of redirected kept alive loads
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (272424 => 272425)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-02-05 18:40:52 UTC (rev 272424)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2021-02-05 18:44:54 UTC (rev 272425)
@@ -916,7 +916,7 @@
#if ENABLE(FULLSCREEN_API)
if (auto videoFullscreenManager = _page->videoFullscreenManager()) {
videoFullscreenManager->forEachSession([callbackAggregator] (auto& model, auto& interface) mutable {
- model.requestFullscreenModeWithCallback(WebCore::HTMLMediaElementEnums::VideoFullscreenModeNone, false, [callbackAggregator] { });
+ model.requestCloseAllMediaPresentations(false, [callbackAggregator] { });
});
}
Modified: trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h (272424 => 272425)
--- trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h 2021-02-05 18:40:52 UTC (rev 272424)
+++ trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h 2021-02-05 18:44:54 UTC (rev 272425)
@@ -78,7 +78,7 @@
PlatformView *layerHostView() const { return m_layerHostView.get(); }
void setLayerHostView(RetainPtr<PlatformView>&& layerHostView) { m_layerHostView = WTFMove(layerHostView); }
- void requestFullscreenModeWithCallback(WebCore::HTMLMediaElementEnums::VideoFullscreenMode, bool finishedWithMedia, CompletionHandler<void()>&&);
+ void requestCloseAllMediaPresentations(bool finishedWithMedia, CompletionHandler<void()>&&);
private:
VideoFullscreenModelContext(VideoFullscreenManagerProxy&, PlaybackSessionModelContext&, PlaybackSessionContextIdentifier);
@@ -201,7 +201,7 @@
void fullscreenModeChanged(PlaybackSessionContextIdentifier, WebCore::HTMLMediaElementEnums::VideoFullscreenMode);
void fullscreenMayReturnToInline(PlaybackSessionContextIdentifier);
- void requestFullscreenModeWithCallback(PlaybackSessionContextIdentifier, WebCore::HTMLMediaElementEnums::VideoFullscreenMode, bool finishedWithMedia, CompletionHandler<void()>&&);
+ void requestCloseAllMediaPresentations(PlaybackSessionContextIdentifier, bool finishedWithMedia, CompletionHandler<void()>&&);
void callCloseCompletionHandlers();
bool m_mockVideoPresentationModeEnabled { false };
Modified: trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm (272424 => 272425)
--- trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm 2021-02-05 18:40:52 UTC (rev 272424)
+++ trunk/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm 2021-02-05 18:44:54 UTC (rev 272425)
@@ -181,7 +181,7 @@
m_clients.remove(&client);
}
-void VideoFullscreenModelContext::requestFullscreenModeWithCallback(HTMLMediaElementEnums::VideoFullscreenMode mode, bool finishedWithMedia, CompletionHandler<void()>&& completionHandler)
+void VideoFullscreenModelContext::requestCloseAllMediaPresentations(bool finishedWithMedia, CompletionHandler<void()>&& completionHandler)
{
if (!m_manager) {
completionHandler();
@@ -188,7 +188,7 @@
return;
}
- m_manager->requestFullscreenModeWithCallback(m_contextId, mode, finishedWithMedia, WTFMove(completionHandler));
+ m_manager->requestCloseAllMediaPresentations(m_contextId, finishedWithMedia, WTFMove(completionHandler));
}
void VideoFullscreenModelContext::requestFullscreenMode(HTMLMediaElementEnums::VideoFullscreenMode mode, bool finishedWithMedia)
@@ -746,14 +746,16 @@
callback();
}
-void VideoFullscreenManagerProxy::requestFullscreenModeWithCallback(PlaybackSessionContextIdentifier contextId, WebCore::HTMLMediaElementEnums::VideoFullscreenMode mode, bool finishedWithMedia, CompletionHandler<void()>&& completionHandler)
+void VideoFullscreenManagerProxy::requestCloseAllMediaPresentations(PlaybackSessionContextIdentifier contextId, bool finishedWithMedia, CompletionHandler<void()>&& completionHandler)
{
- if (mode == WebCore::HTMLMediaElementEnums::VideoFullscreenModeNone
- && (hasMode(WebCore::HTMLMediaElementEnums::VideoFullscreenModePictureInPicture)
- || hasMode(WebCore::HTMLMediaElementEnums::VideoFullscreenModeStandard)))
- m_closeCompletionHandlers.append(WTFMove(completionHandler));
+ if (!hasMode(WebCore::HTMLMediaElementEnums::VideoFullscreenModePictureInPicture)
+ && !hasMode(WebCore::HTMLMediaElementEnums::VideoFullscreenModeStandard)) {
+ completionHandler();
+ return;
+ }
- requestFullscreenMode(contextId, mode, finishedWithMedia);
+ m_closeCompletionHandlers.append(WTFMove(completionHandler));
+ requestFullscreenMode(contextId, WebCore::HTMLMediaElementEnums::VideoFullscreenModeNone, finishedWithMedia);
}
void VideoFullscreenManagerProxy::requestFullscreenMode(PlaybackSessionContextIdentifier contextId, WebCore::HTMLMediaElementEnums::VideoFullscreenMode mode, bool finishedWithMedia)