Title: [87113] trunk/Source/WebKit2
Revision
87113
Author
jer.no...@apple.com
Date
2011-05-23 18:02:37 -0700 (Mon, 23 May 2011)

Log Message

2011-05-23  Jeremy Noble  <jer.no...@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r86990:86992): World leak when all windows closed
        https://bugs.webkit.org/show_bug.cgi?id=61311

        Three interlocking problems:

        1) Calling [WKView fullScreenController] will create the controller if it doesn't all ready
        exist, so move the closing code into WKView, where we can bail early if there isn't a
        controller.

        2) A retain-cycle exists between WKView and WKFullScreenWindowController.  Make sure to break
        the cycle explicitly by clearing the _fullScreenWindowController ivar when closing the
        controller.

        3) [NSWindowController close] was overridden without calling [super close].  Do that.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView closeFullScreenWindowController]): Moved here from WebFullScreenManagerProxyMac.mm.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController close]): Call [super close].
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (87112 => 87113)


--- trunk/Source/WebKit2/ChangeLog	2011-05-24 00:54:07 UTC (rev 87112)
+++ trunk/Source/WebKit2/ChangeLog	2011-05-24 01:02:37 UTC (rev 87113)
@@ -1,3 +1,30 @@
+2011-05-23  Jeremy Noble  <jer.no...@apple.com>
+
+        Reviewed by Darin Adler.
+
+        REGRESSION (r86990:86992): World leak when all windows closed
+        https://bugs.webkit.org/show_bug.cgi?id=61311
+
+        Three interlocking problems:
+        
+        1) Calling [WKView fullScreenController] will create the controller if it doesn't all ready
+        exist, so move the closing code into WKView, where we can bail early if there isn't a 
+        controller.
+        
+        2) A retain-cycle exists between WKView and WKFullScreenWindowController.  Make sure to break
+        the cycle explicitly by clearing the _fullScreenWindowController ivar when closing the
+        controller.
+        
+        3) [NSWindowController close] was overridden without calling [super close].  Do that.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView closeFullScreenWindowController]): Moved here from WebFullScreenManagerProxyMac.mm.
+        * UIProcess/API/mac/WKViewInternal.h:
+        * UIProcess/mac/WKFullScreenWindowController.mm:
+        (-[WKFullScreenWindowController close]): Call [super close].
+        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
+        (WebKit::WebFullScreenManagerProxy::invalidate):
+
 2011-05-20  Jer Noble  <jer.no...@apple.com>
 
         Reviewed by Darin Adler.

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (87112 => 87113)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2011-05-24 00:54:07 UTC (rev 87112)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2011-05-24 01:02:37 UTC (rev 87113)
@@ -2423,6 +2423,14 @@
     }
     return _data->_fullScreenWindowController.get();
 }
+
+- (void)closeFullScreenWindowController
+{
+    if (!_data->_fullScreenWindowController)
+        return;
+    [_data->_fullScreenWindowController.get() close];
+    _data->_fullScreenWindowController = nullptr;
+}
 #endif
 
 - (bool)_executeSavedCommandBySelector:(SEL)selector

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (87112 => 87113)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h	2011-05-24 00:54:07 UTC (rev 87112)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h	2011-05-24 01:02:37 UTC (rev 87113)
@@ -84,6 +84,7 @@
 
 #if ENABLE(FULLSCREEN_API)
 - (WKFullScreenWindowController*)fullScreenWindowController;
+- (void)closeFullScreenWindowController;
 #endif
 
 - (void)_cacheWindowBottomCornerRect;

Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (87112 => 87113)


--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2011-05-24 00:54:07 UTC (rev 87112)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2011-05-24 01:02:37 UTC (rev 87113)
@@ -435,6 +435,8 @@
     
     if (_isExitingFullScreen)
         [self finishedExitFullScreenAnimation:YES];
+
+    [super close];
 }
 
 #pragma mark -

Modified: trunk/Source/WebKit2/UIProcess/mac/WebFullScreenManagerProxyMac.mm (87112 => 87113)


--- trunk/Source/WebKit2/UIProcess/mac/WebFullScreenManagerProxyMac.mm	2011-05-24 00:54:07 UTC (rev 87112)
+++ trunk/Source/WebKit2/UIProcess/mac/WebFullScreenManagerProxyMac.mm	2011-05-24 01:02:37 UTC (rev 87113)
@@ -40,7 +40,7 @@
     if (!m_webView)
         return;
     
-    [[m_webView fullScreenWindowController] close];
+    [m_webView closeFullScreenWindowController];
     m_webView = 0;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to