Title: [225195] trunk/Source/WebKit
Revision
225195
Author
[email protected]
Date
2017-11-27 14:29:33 -0800 (Mon, 27 Nov 2017)

Log Message

downcast to WebKit::FullscreenClient can sometimes fail.
https://bugs.webkit.org/show_bug.cgi?id=179849

Patch by Jeremy Jones <[email protected]> on 2017-11-27
Reviewed by Darin Adler.

There are cases during teardown where fullscreenClient() has been cleared back to an API::FullscreenClient.
Because those cases, WKWebView should test before downcasting to WebKit::FullscreenClient.

This is causing a crash when fullscreen delegate is cleared after a page is closed.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _setFullscreenDelegate:]):
(-[WKWebView _fullscreenDelegate]):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (225194 => 225195)


--- trunk/Source/WebKit/ChangeLog	2017-11-27 22:18:54 UTC (rev 225194)
+++ trunk/Source/WebKit/ChangeLog	2017-11-27 22:29:33 UTC (rev 225195)
@@ -1,3 +1,19 @@
+2017-11-27  Jeremy Jones  <[email protected]>
+
+        downcast to WebKit::FullscreenClient can sometimes fail.
+        https://bugs.webkit.org/show_bug.cgi?id=179849
+
+        Reviewed by Darin Adler.
+
+        There are cases during teardown where fullscreenClient() has been cleared back to an API::FullscreenClient.
+        Because those cases, WKWebView should test before downcasting to WebKit::FullscreenClient.
+
+        This is causing a crash when fullscreen delegate is cleared after a page is closed.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _setFullscreenDelegate:]):
+        (-[WKWebView _fullscreenDelegate]):
+
 2017-11-27  Chris Dumez  <[email protected]>
 
         Give Document a strongly typed identifier instead of a uint64_t

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (225194 => 225195)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2017-11-27 22:18:54 UTC (rev 225194)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2017-11-27 22:29:33 UTC (rev 225195)
@@ -4764,7 +4764,8 @@
 - (void)_setFullscreenDelegate:(id<_WKFullscreenDelegate>)delegate
 {
 #if ENABLE(FULLSCREEN_API)
-    downcast<WebKit::FullscreenClient>(_page->fullscreenClient()).setDelegate(delegate);
+    if (is<WebKit::FullscreenClient>(_page->fullscreenClient()))
+        downcast<WebKit::FullscreenClient>(_page->fullscreenClient()).setDelegate(delegate);
 #endif
 }
 
@@ -4771,10 +4772,10 @@
 - (id<_WKFullscreenDelegate>)_fullscreenDelegate
 {
 #if ENABLE(FULLSCREEN_API)
-    return downcast<WebKit::FullscreenClient>(_page->fullscreenClient()).delegate().autorelease();
-#else
-    return nullptr;
+    if (is<WebKit::FullscreenClient>(_page->fullscreenClient()))
+        return downcast<WebKit::FullscreenClient>(_page->fullscreenClient()).delegate().autorelease();
 #endif
+    return nil;
 }
 
 - (BOOL)_isInFullscreen
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to